<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>public/javascripts/tracks_873.js</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/README</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/Rakefile</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/about.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/init.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/lib/yaml_db.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/spec/base.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/spec/yaml_dump_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/spec/yaml_load_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/spec/yaml_utils_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/yaml_db/tasks/yaml_db_tasks.rake</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -7,10 +7,12 @@
 * Mailing list: http://lists.rousette.org.uk/mailman/listinfo/tracks-discuss
 * Original developer: bsag (http://www.rousette.org.uk/)
 * Contributors: http://dev.rousette.org.uk/wiki/Tracks/Contributing/Contributors
-* Version: 1.5
-* Copyright: (cc) 2004-2006 rousette.org.uk.
+* Version: 1.6
+* Copyright: (cc) 2004-2008 rousette.org.uk.
 * License:  GNU GPL
 
+**An important note for version 1.6: OpenID support is broken in this release. The fix isn't trivial because of changes to the `ruby-openid` gem, so we wanted to get this version out now and fix OpenID for the next release. If you depend on OpenID integration, we recommend waiting until the next release.**
+
 All the documentation for Tracks can be found within the /doc directory. It contains a manual in HTML (manual.html) or PDF format (manual.pdf), and this includes full instructions for both new installations and upgrades from older installations of Tracks. The instructions might appear long and intimidatingly complex, but that is mostly because of the number of different platforms supported, and the different configurations which can be used (e.g. running Tracks on your local computer or on a remote server). If you choose the appropriate section for your situation (installation vs. upgrade), and use the easiest (recommended) method, you should find the instructions easy to follow. If you encounter problems, try searching the wiki, forum or mailing list (URLs above), and ask a question if you cannot find a solution to your problem.
 
 For those upgrading, change notes are available in /doc/CHANGELOG. If you are thinking about contributing towards the development of Tracks, please read /doc/README_DEVELOPERS for general information, or /doc/tracks_api_wrapper.rb for information on Tracks' API.</diff>
      <filename>README_FIRST</filename>
    </modified>
    <modified>
      <diff>@@ -481,8 +481,10 @@ class StatsController &lt; ApplicationController
       
       @chart_name = &quot;actions_visible_running_time_data&quot;
       @page_title = &quot;Actions selected from week &quot;
+      @further = false
       if params['id'] == 'avrt_end'
         @page_title += week_from.to_s + &quot; and further&quot;
+        @further = true
       else
         @page_title += week_from.to_s + &quot; - &quot; + week_to.to_s + &quot;&quot;
       end
@@ -512,8 +514,10 @@ class StatsController &lt; ApplicationController
       
       @chart_name = &quot;actions_running_time_data&quot;
       @page_title = &quot;Actions selected from week &quot;
+      @further = false
       if params['id'] == 'art_end'
         @page_title += week_from.to_s + &quot; and further&quot;
+        @further = true
       else
         @page_title += week_from.to_s + &quot; - &quot; + week_to.to_s + &quot;&quot;
       end</diff>
      <filename>app/controllers/stats_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -154,6 +154,7 @@ class TodosController &lt; ApplicationController
   end
 
   def update
+    @source_view = params['_source_view'] || 'todo'
     init_data_for_sidebar unless mobile?
     @todo.tag_with(params[:tag_list], current_user) if params[:tag_list]
     @original_item_context_id = @todo.context_id
@@ -461,7 +462,11 @@ class TodosController &lt; ApplicationController
             @todos = Todo.find(:all, :conditions =&gt; ['todos.user_id = ?', current_user.id], :include =&gt; [ :project, :context, :tags ])
 
             # Exclude hidden projects from the home page
-            @not_done_todos = Todo.find(:all, :conditions =&gt; ['todos.user_id = ? AND contexts.hide = ? AND (projects.state = ? OR todos.project_id IS NULL)', current_user.id, false, 'active'], :order =&gt; &quot;todos.due IS NULL, todos.due ASC, todos.created_at ASC&quot;, :include =&gt; [ :project, :context, :tags ])
+            @not_done_todos = Todo.find(:all, 
+              :conditions =&gt; ['todos.user_id = ? AND contexts.hide = ? AND (projects.state = ? OR todos.project_id IS NULL)', 
+                current_user.id, false, 'active'], 
+              :order =&gt; &quot;todos.due IS NULL, todos.due ASC, todos.created_at ASC&quot;, 
+              :include =&gt; [ :project, :context, :tags ])
           end
 
         end
@@ -475,8 +480,8 @@ class TodosController &lt; ApplicationController
     
     # Exclude hidden projects from the home page
     @not_done_todos = Todo.find(:all, 
-      :conditions =&gt; ['todos.user_id = ? AND todos.state = ? AND contexts.hide = ?', 
-        current_user.id, 'active', false], 
+      :conditions =&gt; ['todos.user_id = ? AND todos.state = ? AND contexts.hide = ? AND (projects.state = ? OR todos.project_id IS NULL)', 
+        current_user.id, 'active', false, 'active'], 
       :order =&gt; &quot;todos.due IS NULL, todos.due ASC, todos.created_at ASC&quot;, 
       :include =&gt; [ :project, :context ])
   end</diff>
      <filename>app/controllers/todos_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -116,7 +116,7 @@ class UsersController &lt; ApplicationController
   # DELETE /users/somelogin
   # DELETE /users/somelogin.xml
   def destroy
-    @deleted_user = User.find_by_id(params[:id])
+    @deleted_user = User.find_by_login(params[:id])
     @saved = @deleted_user.destroy
     @total_users = User.find(:all).size
     </diff>
      <filename>app/controllers/users_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,55 +22,71 @@ module TodosHelper
       :prevent_default =&gt; true
   end
   
-  def remote_delete_icon
+  def set_behavior_for_delete_icon
     parameters = &quot;_source_view=#{@source_view}&quot;
     parameters += &quot;&amp;_tag_name=#{@tag_name}&quot; if @source_view == 'tag'
-    str = link_to( image_tag_for_delete,
-      todo_path(@todo), :id =&gt; &quot;delete_icon_&quot;+@todo.id.to_s,
-      :class =&gt; &quot;icon delete_icon&quot;, :title =&gt; &quot;delete the action '#{@todo.description}'&quot;)
     apply_behavior '.item-container a.delete_icon:click', :prevent_default =&gt; true do |page|
       page.confirming &quot;'Are you sure that you want to ' + this.title + '?'&quot; do
         page &lt;&lt; &quot;itemContainer = this.up('.item-container'); itemContainer.startWaiting();&quot;
         page &lt;&lt; remote_to_href(:method =&gt; 'delete', :with =&gt; &quot;'#{parameters}'&quot;, :complete =&gt; &quot;itemContainer.stopWaiting();&quot;)
-      end
+      end    
     end
+  end
+  
+  def remote_delete_icon
+    str = link_to( image_tag_for_delete,
+      todo_path(@todo), :id =&gt; &quot;delete_icon_&quot;+@todo.id.to_s,
+      :class =&gt; &quot;icon delete_icon&quot;, :title =&gt; &quot;delete the action '#{@todo.description}'&quot;)
+    set_behavior_for_delete_icon
     str
   end
   
+  def set_behavior_for_star_icon
+    apply_behavior '.item-container a.star_item:click', 
+      remote_to_href(:method =&gt; 'put', :with =&gt; &quot;{ _source_view : '#{@source_view}' }&quot;),
+      :prevent_default =&gt; true
+  end    
+
   def remote_star_icon
     str = link_to( image_tag_for_star(@todo),
       toggle_star_todo_path(@todo),
       :class =&gt; &quot;icon star_item&quot;, :title =&gt; &quot;star the action '#{@todo.description}'&quot;)
-    apply_behavior '.item-container a.star_item:click', 
-      remote_to_href(:method =&gt; 'put', :with =&gt; &quot;{ _source_view : '#{@source_view}' }&quot;),
-      :prevent_default =&gt; true
+    set_behavior_for_star_icon
     str
   end
   
-  def remote_edit_icon
+  def set_behavior_for_edit_icon
     parameters = &quot;_source_view=#{@source_view}&quot;
     parameters += &quot;&amp;_tag_name=#{@tag_name}&quot; if @source_view == 'tag'
+    apply_behavior '.item-container a.edit_icon:click', :prevent_default =&gt; true do |page|
+      page &lt;&lt; &quot;Effect.Pulsate(this);&quot;
+      page &lt;&lt; remote_to_href(:method =&gt; 'get', :with =&gt; &quot;'#{parameters}'&quot;)
+    end
+  end
+  
+  def remote_edit_icon
     if !@todo.completed?
       str = link_to( image_tag_for_edit,
         edit_todo_path(@todo),
         :class =&gt; &quot;icon edit_icon&quot;)
-      apply_behavior '.item-container a.edit_icon:click', :prevent_default =&gt; true do |page|
-        page &lt;&lt; &quot;Effect.Pulsate(this);&quot;
-        page &lt;&lt; remote_to_href(:method =&gt; 'get', :with =&gt; &quot;'#{parameters}'&quot;)
-      end
+      set_behavior_for_edit_icon
     else
       str = '&lt;a class=&quot;icon&quot;&gt;' + image_tag(&quot;blank.png&quot;) + &quot;&lt;/a&gt; &quot;
     end
     str
   end
   
-  def remote_toggle_checkbox
-    str = check_box_tag('item_id', toggle_check_todo_path(@todo), @todo.completed?, :class =&gt; 'item-checkbox')
+  def set_behavior_for_toggle_checkbox
     parameters = &quot;_source_view=#{@source_view}&quot;
     parameters += &quot;&amp;_tag_name=#{@tag_name}&quot; if @source_view == 'tag'
     apply_behavior '.item-container input.item-checkbox:click',
       remote_function(:url =&gt; javascript_variable('this.value'), :method =&gt; 'put',
-      :with =&gt; &quot;'#{parameters}'&quot;)
+      :with =&gt; &quot;'#{parameters}'&quot;)    
+  end
+  
+  def remote_toggle_checkbox
+    str = check_box_tag('item_id', toggle_check_todo_path(@todo), @todo.completed?, :class =&gt; 'item-checkbox')
+    set_behavior_for_toggle_checkbox
     str
   end
   </diff>
      <filename>app/helpers/todos_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,18 +4,21 @@
 &lt;% if collapsible -%&gt;
     &lt;a href=&quot;#&quot; class=&quot;container_toggle&quot; id=&quot;toggle_c&lt;%= context.id %&gt;&quot;&gt;&lt;%= image_tag(&quot;collapse.png&quot;) %&gt;&lt;/a&gt;
     &lt;% apply_behavior '.container_toggle:click', :prevent_default =&gt; true do |page|
-         page &lt;&lt; &quot;containerElem = this.up('.container')
-         toggleTarget = containerElem.down('.toggle_target')
-         if (Element.visible(toggleTarget))
-         {
-           todoItems.collapseNextActionListing(this, toggleTarget);
-           todoItems.contextCollapseCookieManager.setCookie(todoItems.buildCookieName(containerElem), true)
-         }
-         else
-         {
-           todoItems.expandNextActionListing(this, toggleTarget);
-           todoItems.contextCollapseCookieManager.clearCookie(todoItems.buildCookieName(containerElem))
-         }
+         page &lt;&lt; &quot; /* only handle the click if a previous click had finished its animation */
+         if (todoItems.lastEffect == null  || todoItems.lastEffect.state=='finished') {  
+           containerElem = this.up('.container')
+           toggleTarget = containerElem.down('.toggle_target')
+           if (Element.visible(toggleTarget))
+           {
+             todoItems.collapseNextActionListing(this, toggleTarget);
+             todoItems.contextCollapseCookieManager.setCookie(todoItems.buildCookieName(containerElem), true)
+           }
+           else
+           {
+             todoItems.expandNextActionListing(this, toggleTarget);
+             todoItems.contextCollapseCookieManager.clearCookie(todoItems.buildCookieName(containerElem))
+           }
+         } 
         &quot;
        end
     %&gt;
@@ -31,6 +34,14 @@
     &lt;div id=&quot;c&lt;%= context.id %&gt;empty-nd&quot; style=&quot;display:&lt;%= @not_done.empty? ? 'block' : 'none'%&gt;;&quot;&gt;
       &lt;div class=&quot;message&quot;&gt;&lt;p&gt;Currently there are no incomplete actions in this context&lt;/p&gt;&lt;/div&gt;
     &lt;/div&gt;
-&lt;%= render :partial =&gt; &quot;todos/todo&quot;, :collection =&gt; @not_done, :locals =&gt; { :parent_container_type =&gt; &quot;context&quot; } %&gt;
+    &lt;%= render :partial =&gt; &quot;todos/todo&quot;, :collection =&gt; @not_done, :locals =&gt; { :parent_container_type =&gt; &quot;context&quot; } %&gt;
+    &lt;% if @not_done.empty? 
+      # fix (hack) for #713
+      set_behavior_for_delete_icon
+      set_behavior_for_star_icon
+      set_behavior_for_edit_icon
+      set_behavior_for_toggle_checkbox
+    end
+    -%&gt;
   &lt;/div&gt;&lt;!-- [end:items] --&gt;
 &lt;/div&gt;&lt;!-- [end:c&lt;%= context.id %&gt;] --&gt;</diff>
      <filename>app/views/contexts/_context.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -4,11 +4,11 @@
 
 if not @not_done.empty? 
   # only show a context when there are actions in it
-  %&gt;
-  &lt;h2&gt;&lt;%=mobile_context.name%&gt;&lt;/h2&gt;
-  &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
-    &lt;%= render :partial =&gt; &quot;todos/mobile_todo&quot;, 
-      :collection =&gt; @not_done, 
-      :locals =&gt; { :parent_container_type =&gt; &quot;context&quot; }%&gt;
-  &lt;/table&gt;
+  -%&gt;
+&lt;h2&gt;&lt;%=mobile_context.name%&gt;&lt;/h2&gt;
+&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
+&lt;%= render :partial =&gt; &quot;todos/mobile_todo&quot;, 
+           :collection =&gt; @not_done, 
+           :locals =&gt; { :parent_container_type =&gt; &quot;context&quot; }-%&gt;
+&lt;/table&gt;
 &lt;% end -%&gt;
\ No newline at end of file</diff>
      <filename>app/views/contexts/_mobile_context.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,2 @@
-&lt;%  context = mobile_context_listing %&gt;
-&lt;div id=&quot;ctx&quot;&gt;&lt;%= link_to context.name, formatted_context_path(context, :m) %&gt;&lt;%= &quot; (&quot; + count_undone_todos_phrase(context,&quot;actions&quot;) + &quot;)&quot; %&gt;&lt;/div&gt;
+&lt;% context = mobile_context_listing -%&gt;
+&lt;div id=&quot;ctx&quot;&gt;&lt;%= link_to context.name, formatted_context_path(context, :m) %&gt;&lt;%= &quot; (&quot; + count_undone_todos_phrase(context,&quot;actions&quot;) + &quot;)&quot; %&gt;&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/contexts/_mobile_context_listing.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,2 @@
-&lt;h2&gt;Visible Contexts&lt;/h2&gt;
-&lt;%= render :partial =&gt; 'mobile_context_listing', :collection =&gt; @active_contexts%&gt;
-
-&lt;h2&gt;Hidden Contexts&lt;/h2&gt;
-&lt;%= render :partial =&gt; 'mobile_context_listing', :collection =&gt; @hidden_contexts %&gt;
-
+&lt;h2&gt;Visible Contexts&lt;/h2&gt;&lt;%= render :partial =&gt; 'mobile_context_listing', :collection =&gt; @active_contexts %&gt;
+&lt;h2&gt;Hidden Contexts&lt;/h2&gt;&lt;%= render :partial =&gt; 'mobile_context_listing', :collection =&gt; @hidden_contexts %&gt;
\ No newline at end of file</diff>
      <filename>app/views/contexts/index_mobile.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -3,10 +3,10 @@
 		&lt;h3&gt;Exporting data&lt;/h3&gt;
 	  &lt;p&gt;You can choose between the following formats:&lt;/p&gt;
 	  &lt;ul&gt;
-	    &lt;li&gt;&lt;strong&gt;YAML: &lt;/strong&gt;Best for porting data between Tracks installations&lt;/li&gt;
+            &lt;li&gt;&lt;strong&gt;YAML: &lt;/strong&gt;Best for exporting data. &lt;br/&gt;&lt;i&gt;Please note that Tracks currently does not support importing YAML files. Do not use this (yet) to backup your Tracks database.&lt;/i&gt;&lt;/li&gt;
 	    &lt;li&gt;&lt;strong&gt;CSV: &lt;/strong&gt;Best for importing into spreadsheet or data analysis software&lt;/li&gt;
 	    &lt;li&gt;&lt;strong&gt;XML: &lt;/strong&gt;Best for importing or repurposing the data&lt;/li&gt;
-	  &lt;/ul
+          &lt;/ul&gt;
 	&lt;/div&gt;
 
 &lt;p&gt;</diff>
      <filename>app/views/data/index.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,50 +1,32 @@
 &lt;ul&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :limit =&gt; 15 }) %&gt;
-    &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :limit =&gt; 15 }) %&gt;
-    &lt;%= ical_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :limit =&gt; 15 }) %&gt;
-    Last 15 actions
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link( { :controller =&gt; 'todos', :action =&gt; 'index' } ) %&gt;
-    &lt;%= text_formatted_link( { :controller =&gt; 'todos', :action =&gt; 'index' } ) %&gt;
-    &lt;%= ical_formatted_link( { :controller =&gt; 'todos', :action =&gt; 'index' } ) %&gt;
-    All actions
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 0 }) %&gt;
-    &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 0 }) %&gt;
-    &lt;%= ical_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 0 }) %&gt;
-    Actions due today or earlier
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 6 }) %&gt;
-    &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 6 }) %&gt;
-    &lt;%= ical_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 6 }) %&gt;
-    Actions due in 7 days or earlier
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :done =&gt; 7 }) %&gt;
-    &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :done =&gt; 7 }) %&gt;
-    Actions completed in the last 7 days
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link({:controller =&gt; 'contexts', :action =&gt; 'index'}) %&gt;
-    &lt;%= text_formatted_link({:controller =&gt; 'contexts', :action =&gt; 'index'}) %&gt;
-    All Contexts
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index'}) %&gt;
-    &lt;%= text_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index'}) %&gt;
-    All Projects
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= rss_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index', :only_active_with_no_next_actions =&gt; true}) %&gt;
-    &lt;%= text_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index', :only_active_with_no_next_actions =&gt; true}) %&gt;
-    Active projects with no next actions
-  &lt;/li&gt;
-  &lt;li&gt;
-    &lt;%= text_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index', :projects_and_actions =&gt; true}) %&gt;
-    Active projects with their actions                    
-  &lt;/li&gt;
-&lt;/ul&gt;
+&lt;li&gt;&lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :limit =&gt; 15 }) -%&gt;
+ &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :limit =&gt; 15 }) -%&gt;
+ &lt;%= ical_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :limit =&gt; 15 }) -%&gt;
+ Last 15 actions&lt;/li&gt;
+&lt;li&gt;&lt;%= rss_formatted_link( { :controller =&gt; 'todos', :action =&gt; 'index' } ) -%&gt;
+ &lt;%= text_formatted_link( { :controller =&gt; 'todos', :action =&gt; 'index' } ) -%&gt;
+ &lt;%= ical_formatted_link( { :controller =&gt; 'todos', :action =&gt; 'index' } ) -%&gt;
+ All actions&lt;/li&gt;
+&lt;li&gt;&lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 0 }) -%&gt;
+ &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 0 }) -%&gt;
+ &lt;%= ical_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 0 }) -%&gt;
+ Actions due today or earlier&lt;/li&gt;
+&lt;li&gt;&lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 6 }) -%&gt;
+ &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 6 }) -%&gt;
+ &lt;%= ical_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :due =&gt; 6 }) -%&gt;
+ Actions due in 7 days or earlier&lt;/li&gt;
+&lt;li&gt;&lt;%= rss_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :done =&gt; 7 }) -%&gt;
+ &lt;%= text_formatted_link({ :controller =&gt; 'todos', :action =&gt; 'index', :done =&gt; 7 }) -%&gt;
+ Actions completed in the last 7 days&lt;/li&gt;
+&lt;li&gt;&lt;%= rss_formatted_link({:controller =&gt; 'contexts', :action =&gt; 'index'}) -%&gt;
+ &lt;%= text_formatted_link({:controller =&gt; 'contexts', :action =&gt; 'index'}) -%&gt;
+ All Contexts&lt;/li&gt;
+&lt;li&gt;&lt;%= rss_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index'}) -%&gt;
+ &lt;%= text_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index'}) -%&gt;
+ All Projects&lt;/li&gt;
+&lt;li&gt;&lt;%= rss_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index', :only_active_with_no_next_actions =&gt; true}) %&gt;
+ &lt;%= text_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index', :only_active_with_no_next_actions =&gt; true}) %&gt;
+ Active projects with no next actions&lt;/li&gt;
+&lt;li&gt;&lt;%= text_formatted_link({:controller =&gt; 'projects', :action =&gt; 'index', :projects_and_actions =&gt; true}) %&gt;
+ Active projects with their actions                    
+&lt;/li&gt;&lt;/ul&gt;
\ No newline at end of file</diff>
      <filename>app/views/feedlist/mobile_index.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,37 +1,32 @@
 &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
 &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
-  &lt;head&gt;
-    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
-    &lt;meta name=&quot;viewport&quot; content=&quot;initial-scale = 1.0&quot; /&gt;
-    &lt;%= stylesheet_link_tag &quot;mobile&quot; %&gt;
-    &lt;title&gt;&lt;%= @page_title %&gt;&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;% if !(@new_mobile || @edit_mobile)
-      if !@prefs.nil? %&gt;
-        &lt;h1&gt;&lt;span class=&quot;count&quot;&gt;&lt;%= @down_count %&gt;&lt;/span&gt; &lt;%= 
-        user_time.strftime(@prefs.title_date_format) %&gt;&lt;/h1&gt;
-        &lt;%= (link_to(&quot;Add new action&quot;, formatted_new_todo_path(:m))+&quot; | &quot;) unless @new_mobile -%&gt;
-        &lt;%= (link_to(&quot;Home&quot;, formatted_todos_path(:m))+&quot; | &quot;) unless @home -%&gt;
-        &lt;%= (link_to(&quot;Contexts&quot;, formatted_contexts_path(:m))+&quot; | &quot;) %&gt;
-        &lt;%= (link_to(&quot;Projects&quot;, formatted_projects_path(:m))+&quot; | &quot;) %&gt;
-        &lt;%= (link_to(&quot;Starred&quot;, {:action =&gt; &quot;tag&quot;, :controller =&gt; &quot;todos&quot;, :id =&gt; &quot;starred.m&quot;})) -%&gt;
-    &lt;% end
-  end %&gt;
-  &lt;%= render_flash -%&gt;
-    &lt;hr/&gt;    
-    &lt;%= yield %&gt;
-    &lt;hr/&gt;
-    &lt;% if !@prefs.nil? %&gt;
-        &lt;%= link_to &quot;Logout&quot;, formatted_logout_path(:format =&gt; 'm') %&gt; |
-        &lt;%= (link_to(&quot;Add new action&quot;, formatted_new_todo_path(:m))+&quot; | &quot;) unless @new_mobile -%&gt;
-        &lt;%= (link_to(&quot;Home&quot;, formatted_todos_path(:m))+&quot; | &quot;) unless @home -%&gt;
-        &lt;%= (link_to(&quot;Contexts&quot;, formatted_contexts_path(:m))+&quot; | &quot;) %&gt;
-        &lt;%= (link_to(&quot;Projects&quot;, formatted_projects_path(:m))+&quot; | &quot;) %&gt;
-        &lt;%= (link_to(&quot;Starred&quot;, {:action =&gt; &quot;tag&quot;, :controller =&gt; &quot;todos&quot;, :id =&gt; &quot;starred.m&quot;})+&quot; | &quot;) -%&gt;
-        &lt;%= (link_to(&quot;Tickler&quot;, {:action =&gt; &quot;index&quot;, :controller =&gt; &quot;tickler.m&quot;})+&quot; | &quot;) -%&gt;
-        &lt;%= (link_to(&quot;Feeds&quot;, {:action =&gt; &quot;index&quot;, :controller =&gt; &quot;feeds.m&quot;})) %&gt;
-    &lt;% end %&gt;
-    &lt;%= render :partial =&gt; &quot;shared/mobile_footer&quot; %&gt;  
-  &lt;/body&gt;
-&lt;/html&gt;
+&lt;head&gt;
+&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
+&lt;meta name=&quot;viewport&quot; content=&quot;initial-scale = 1.0&quot; /&gt;
+&lt;%= stylesheet_link_tag &quot;mobile&quot;%&gt;
+&lt;title&gt;&lt;%= @page_title %&gt;&lt;/title&gt;
+&lt;/head&gt;&lt;body&gt;
+&lt;% if !(@new_mobile || @edit_mobile)
+      if !@prefs.nil? -%&gt;
+&lt;h1&gt;&lt;span class=&quot;count&quot;&gt;&lt;%= @down_count %&gt;&lt;/span&gt; &lt;%= 
+        user_time.strftime(@prefs.title_date_format) -%&gt;&lt;/h1&gt;
+&lt;%=     (link_to(&quot;Add new action&quot;, formatted_new_todo_path(:m))+&quot; | &quot;) unless @new_mobile -%&gt;
+&lt;%=     (link_to(&quot;Home&quot;, formatted_todos_path(:m))+&quot; | &quot;) unless @home -%&gt;
+&lt;%=     (link_to(&quot;Contexts&quot;, formatted_contexts_path(:m))+&quot; | &quot;) -%&gt;
+&lt;%=     (link_to(&quot;Projects&quot;, formatted_projects_path(:m))+&quot; | &quot;) -%&gt;
+&lt;%=     (link_to(&quot;Starred&quot;, {:action =&gt; &quot;tag&quot;, :controller =&gt; &quot;todos&quot;, :id =&gt; &quot;starred.m&quot;})) -%&gt;
+&lt;%    end
+  end -%&gt;&lt;%= render_flash -%&gt;
+&lt;hr/&gt;&lt;%=  yield -%&gt;
+&lt;hr/&gt;&lt;% if !@prefs.nil? -%&gt;
+&lt;%= (link_to(&quot;Logout&quot;, formatted_logout_path(:format =&gt; 'm')) +&quot; | &quot;) -%&gt;
+&lt;%= (link_to(&quot;Add new action&quot;, formatted_new_todo_path(:m))+&quot; | &quot;) unless @new_mobile -%&gt;
+&lt;%= (link_to(&quot;Home&quot;, formatted_todos_path(:m))+&quot; | &quot;) unless @home -%&gt;
+&lt;%= (link_to(&quot;Contexts&quot;, formatted_contexts_path(:m))+&quot; | &quot;) -%&gt;
+&lt;%= (link_to(&quot;Projects&quot;, formatted_projects_path(:m))+&quot; | &quot;) -%&gt;
+&lt;%= (link_to(&quot;Starred&quot;, {:action =&gt; &quot;tag&quot;, :controller =&gt; &quot;todos&quot;, :id =&gt; &quot;starred.m&quot;})+&quot; | &quot;) -%&gt;
+&lt;%= (link_to(&quot;Tickler&quot;, {:action =&gt; &quot;index&quot;, :controller =&gt; &quot;tickler.m&quot;})+&quot; | &quot;) -%&gt;
+&lt;%= (link_to(&quot;Feeds&quot;, {:action =&gt; &quot;index&quot;, :controller =&gt; &quot;feeds.m&quot;})) -%&gt;
+&lt;% end -%&gt;
+&lt;%= render :partial =&gt; &quot;shared/mobile_footer&quot; -%&gt;  
+&lt;/body&gt;&lt;/html&gt;
\ No newline at end of file</diff>
      <filename>app/views/layouts/mobile.m.erb</filename>
    </modified>
    <modified>
      <diff>@@ -35,13 +35,12 @@ window.onload=function(){
   &lt;%= user_time.strftime(@prefs.title_date_format) %&gt;
   &lt;/h1&gt;
 &lt;/div&gt;
-&lt;div id=&quot;minilinks&quot;&gt;	
+&lt;div id=&quot;minilinks&quot;&gt;   
   &lt;%= link_to_function(&quot;Toggle notes&quot;, nil, {:accesskey =&gt; &quot;S&quot;, :title =&gt; &quot;Toggle all notes&quot;, :id =&gt; &quot;toggle-notes-nav&quot;}) do |page|
-		  page.select('body .todo_notes').each { |e| e.toggle }
-		end
-	-%&gt;&amp;nbsp;|&amp;nbsp;
-    &lt;%= link_to &quot;Logout (#{current_user.display_name}) &#187;&quot;, logout_path %&gt; 
-    &lt;% end %&gt;
+    page.select('body .todo_notes').each { |e| e.toggle }
+  end
+      -%&gt;&amp;nbsp;|&amp;nbsp;
+&lt;%= link_to &quot;Logout (#{current_user.display_name}) &#187;&quot;, logout_path %&gt;
 &lt;/div&gt;
 
 &lt;div id=&quot;navcontainer&quot;&gt;</diff>
      <filename>app/views/layouts/standard.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,39 +1,39 @@
 &lt;% note = notes -%&gt;
 &lt;div id=&quot;&lt;%= dom_id(note, 'container') %&gt;&quot;&gt;
-     &lt;h2&gt;&lt;%= link_to(&quot;Note #{note.id}&quot;, note_path(note), :title =&gt; &quot;Show note #{note.id}&quot; ) %&gt;&lt;/h2&gt;
+  &lt;h2&gt;&lt;%= link_to(&quot;Note #{note.id}&quot;, note_path(note), :title =&gt; &quot;Show note #{note.id}&quot; ) %&gt;&lt;/h2&gt;
   &lt;div id=&quot;&lt;%= dom_id(note) %&gt;&quot;&gt;
-       &lt;%= sanitize(textilize(note.body)) %&gt;
-   
-       &lt;div class=&quot;note_footer&quot;&gt;
-    &lt;%= link_to_remote( 
+    &lt;%= sanitize(textilize(note.body.gsub(/((https?:\/\/[^ \n\t]*))/, '&quot;\1&quot;:\2'))) %&gt;
+       
+    &lt;div class=&quot;note_footer&quot;&gt;
+      &lt;%= link_to_remote( 
         image_tag(&quot;blank.png&quot;, 
-            :title =&gt;&quot;Delete this note&quot;, 
-            :class=&gt;&quot;delete_item&quot;,
-            :id =&gt; &quot;delete_note_&quot;+note.id.to_s), 
+          :title =&gt;&quot;Delete this note&quot;, 
+          :class=&gt;&quot;delete_item&quot;,
+          :id =&gt; &quot;delete_note_&quot;+note.id.to_s), 
         :update =&gt; dom_id(note),
         :loading =&gt; visual_effect(:fade, dom_id(note, 'container')),
         :complete =&gt; &quot;Element.remove('#{dom_id(note, 'container')}');&quot;,
         :url =&gt; note_path(note),
         :method =&gt; :delete,
         :confirm =&gt; &quot;Are you sure that you want to delete the note \'#{note.id.to_s}\'?&quot; ) + &quot;&amp;nbsp;&quot; -%&gt;
-&lt;%= link_to_function(image_tag( &quot;blank.png&quot;, :title =&gt; &quot;Edit item&quot;, :class=&gt;&quot;edit_item&quot;),
-                     &quot;Element.toggle('#{dom_id(note)}'); Element.toggle('#{dom_id(note, 'edit')}'); Effect.Appear('#{dom_id(note, 'edit')}'); Form.focusFirstElement('#{dom_id(note, 'edit_form')}');&quot; ) + &quot; | &quot; %&gt;
-    &lt;%= link_to(&quot;In: &quot; + note.project.name, project_path(note.project), :class=&gt;&quot;footer_link&quot; ) %&gt;&amp;nbsp;|&amp;nbsp;
-    Created: &lt;%= format_date(note.created_at) %&gt;
-    &lt;% if note.updated_at? -%&gt;
-      &amp;nbsp;|&amp;nbsp;Modified: &lt;%= format_date(note.updated_at) %&gt;
+      &lt;%= link_to_function(image_tag( &quot;blank.png&quot;, :title =&gt; &quot;Edit item&quot;, :class=&gt;&quot;edit_item&quot;),
+        &quot;Element.toggle('#{dom_id(note)}'); Element.toggle('#{dom_id(note, 'edit')}'); Effect.Appear('#{dom_id(note, 'edit')}'); Form.focusFirstElement('#{dom_id(note, 'edit_form')}');&quot; ) + &quot; | &quot; %&gt;
+      &lt;%= link_to(&quot;In: &quot; + note.project.name, project_path(note.project), :class=&gt;&quot;footer_link&quot; ) %&gt;&amp;nbsp;|&amp;nbsp;
+      Created: &lt;%= format_date(note.created_at) %&gt;
+      &lt;% if note.updated_at? -%&gt;
+        &amp;nbsp;|&amp;nbsp;Modified: &lt;%= format_date(note.updated_at) %&gt;
+      &lt;% end -%&gt;
+    &lt;/div&gt;
+  &lt;/div&gt;
+  
+  &lt;div id=&quot;&lt;%= dom_id(note, 'edit') %&gt;&quot; class=&quot;edit-form&quot; style=&quot;display:none;&quot;&gt;
+    &lt;% form_remote_tag  :url =&gt; note_path(note),
+      :method =&gt; :put,
+      :html =&gt; { :id =&gt; dom_id(note, 'edit_form'), :class =&gt; &quot;inline-form&quot; },
+      :update =&gt; dom_id(note, 'container'),
+      :complete =&gt; visual_effect(:appear, dom_id(note, 'container')) do -%&gt;
+      &lt;%= render :partial =&gt; &quot;notes/note_edit_form&quot;, :object =&gt; note %&gt;
     &lt;% end -%&gt;
   &lt;/div&gt;
 &lt;/div&gt;
-
-&lt;div id=&quot;&lt;%= dom_id(note, 'edit') %&gt;&quot; class=&quot;edit-form&quot; style=&quot;display:none;&quot;&gt;
-     &lt;% form_remote_tag  :url =&gt; note_path(note),
-                         :method =&gt; :put,
-                    :html =&gt; { :id =&gt; dom_id(note, 'edit_form'), :class =&gt; &quot;inline-form&quot; },
-                    :update =&gt; dom_id(note, 'container'),
-                    :complete =&gt; visual_effect(:appear, dom_id(note, 'container')) do -%&gt;
-         &lt;%= render :partial =&gt; &quot;notes/note_edit_form&quot;, :object =&gt; note %&gt;
-     &lt;% end -%&gt;
-     &lt;/div&gt;
-&lt;/div&gt;
 &lt;% note = nil -%&gt;</diff>
      <filename>app/views/notes/_notes.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,4 @@
-&lt;%  project = mobile_project_listing %&gt;
-&lt;div id=&quot;pjr&quot;&gt;&lt;%= link_to project.name, formatted_project_path(project) %&gt;&lt;%= &quot; (&quot; + count_undone_todos_and_notes_phrase(project,&quot;actions&quot;) + &quot;)&quot; %&gt;&lt;/div&gt;
+&lt;% project = mobile_project_listing -%&gt;
+&lt;div id=&quot;pjr&quot;&gt;&lt;%= 
+    link_to(project.name, formatted_project_path(project)) +
+    &quot; (&quot; + count_undone_todos_and_notes_phrase(project,&quot;actions&quot;) + &quot;)&quot; %&gt;&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/projects/_mobile_project_listing.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -22,5 +22,13 @@
       &lt;div class=&quot;message&quot;&gt;&lt;p&gt;Currently there are no incomplete actions in this project&lt;/p&gt;&lt;/div&gt;
     &lt;/div&gt;
     &lt;%= render :partial =&gt; &quot;todos/todo&quot;, :collection =&gt; @not_done, :locals =&gt; { :parent_container_type =&gt; &quot;project&quot; } %&gt;
+    &lt;% if @not_done.empty? 
+      # fix (hack) for #713
+      set_behavior_for_delete_icon
+      set_behavior_for_star_icon
+      set_behavior_for_edit_icon
+      set_behavior_for_toggle_checkbox
+    end
+    -%&gt;
   &lt;/div&gt;&lt;!-- [end:items] --&gt;
 &lt;/div&gt;&lt;!-- [end:p&lt;%= project.id %&gt;] --&gt;
\ No newline at end of file</diff>
      <filename>app/views/projects/_project.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,6 @@
-&lt;h2&gt;Active projects&lt;/h2&gt;
-&lt;%= render :partial =&gt; 'mobile_project_listing', :collection =&gt; @active_projects%&gt;
-
-&lt;h2&gt;Hidden projects&lt;/h2&gt;
-&lt;%= render :partial =&gt; 'mobile_project_listing', :collection =&gt; @hidden_projects %&gt;
-
-&lt;h2&gt;Completed projects&lt;/h2&gt;
-&lt;%= render :partial =&gt; 'mobile_project_listing', :collection =&gt; @completed_projects %&gt;
+&lt;h2&gt;Active projects&lt;/h2&gt;&lt;%= 
+  render :partial =&gt; 'mobile_project_listing', :collection =&gt; @active_projects%&gt;
+&lt;h2&gt;Hidden projects&lt;/h2&gt;&lt;%= 
+  render :partial =&gt; 'mobile_project_listing', :collection =&gt; @hidden_projects %&gt;
+&lt;h2&gt;Completed projects&lt;/h2&gt;&lt;%= 
+  render :partial =&gt; 'mobile_project_listing', :collection =&gt; @completed_projects %&gt;
\ No newline at end of file</diff>
      <filename>app/views/projects/index_mobile.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,9 @@
 &lt;div id=&quot;message_holder&quot;&gt;
-&lt;% if flash.empty? %&gt;
+&lt;% if flash.empty? -%&gt;
   &lt;h4 id=&quot;flash&quot; class=&quot;alert&quot; style=&quot;display:none&quot;&gt;&lt;/h4&gt;
-&lt;% else %&gt;
+&lt;% else -%&gt;
   &lt;% flash.each do |key,value| -%&gt;
-    &lt;h4 id=&quot;flash&quot; class='alert &lt;%= key %&gt;'&gt;
-      &lt;%= value %&gt;
-    &lt;/h4&gt;
+    &lt;h4 id=&quot;flash&quot; class='alert &lt;%= key %&gt;'&gt;&lt;%= value %&gt;&lt;/h4&gt;
   &lt;% end -%&gt;
-&lt;% end %&gt;
+&lt;% end -%&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/shared/_flash.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1 @@
-&lt;div class=&quot;footer&quot;&gt;
-  &lt;p&gt;Mobile Tracks &lt;%= TRACKS_VERSION %&gt;: &lt;a href=&quot;mailto:butshesagirl@rousette.org.uk?subject=Tracks feedback&quot;&gt;Email&lt;/a&gt; | &lt;a href=&quot;http://www.rousette.org.uk/projects/&quot;&gt;Website&lt;/a&gt; | &lt;a href=&quot;http://www.rousette.org.uk/projects/tracks/contribute&quot;&gt;Contribute&lt;/a&gt;&lt;/p&gt;
-&lt;/div&gt;
+&lt;div class=&quot;footer&quot;&gt;&lt;p&gt;Mobile Tracks &lt;%= TRACKS_VERSION %&gt;: &lt;a href=&quot;mailto:butshesagirl@rousette.org.uk?subject=Tracks feedback&quot;&gt;Email&lt;/a&gt; | &lt;a href=&quot;http://www.rousette.org.uk/projects/&quot;&gt;Website&lt;/a&gt; | &lt;a href=&quot;http://www.rousette.org.uk/projects/tracks/contribute&quot;&gt;Contribute&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/shared/_mobile_footer.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,18 @@
 &lt;%= render :partial =&gt; 'chart', :locals =&gt; {:width =&gt; @chart_width, :height =&gt; @chart_height, :data =&gt; url_for(:action =&gt; @chart_name)} -%&gt;
 &lt;br/&gt;
-&lt;p&gt;Click on a bar in the chart to update the actions below. Click &lt;%=link_to &quot;here&quot;, {:controller =&gt; &quot;stats&quot;, :action =&gt; &quot;index&quot;} %&gt; to return to the statistics page&lt;/p&gt;
+&lt;p&gt;Click on a bar in the chart to update the actions below. Click &lt;%=link_to &quot;here&quot;, {:controller =&gt; &quot;stats&quot;, :action =&gt; &quot;index&quot;} %&gt; to return to the statistics page. &lt;%
+    unless @further -%&gt; &lt;%= 
+      &quot;Click &quot; + 
+        link_to(&quot;here&quot;, {:controller =&gt; &quot;stats&quot;, :action =&gt; &quot;show_selected_actions_from_chart&quot;, :id=&gt;&quot;#{params[:id]}_end&quot;, :index =&gt; params[:index]})+
+        &quot; to show the actions from week &quot; + params[:index] + &quot; and further.&quot; -%&gt;
+    &lt;% end %&gt;&lt;/p&gt;
 &lt;br/&gt;
 &lt;div class=&quot;container tickler&quot; id=&quot;tickler_container&quot;&gt;
-  &lt;h2&gt;
-    &lt;%= @page_title -%&gt;
-  &lt;/h2&gt;
-  
+  &lt;h2&gt;&lt;%= @page_title -%&gt;&lt;/h2&gt;
   &lt;div id=&quot;tickler&quot; class=&quot;items toggle_target&quot;&gt;
     &lt;div id=&quot;tickler-empty-nd&quot; style=&quot;display:&lt;%= @selected_actions.empty? ? 'block' : 'none'%&gt;;&quot;&gt;
       &lt;div class=&quot;message&quot;&gt;&lt;p&gt;There are no actions selected&lt;/p&gt;&lt;/div&gt;
     &lt;/div&gt;
-    
         &lt;%= render :partial =&gt; &quot;todos/todo&quot;, :collection =&gt; @selected_actions, :locals =&gt; { :parent_container_type =&gt; 'stats' } %&gt;
-    
   &lt;/div&gt;
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/stats/show_selection_from_chart.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -11,7 +11,7 @@
 
 &lt;div class=&quot;project_input&quot;&gt;
 &lt;label for=&quot;&lt;%= dom_id(@todo, 'project_name') %&gt;&quot;&gt;Project&lt;/label&gt;
-&lt;input id=&quot;&lt;%= dom_id(@todo, 'project_name') %&gt;&quot; name=&quot;project_name&quot; autocomplete=&quot;off&quot; tabindex=&quot;10&quot; size=&quot;30&quot; type=&quot;text&quot; value=&quot;&lt;%= @todo.project.nil? ? 'None' : @todo.project.name %&gt;&quot; /&gt;
+&lt;input id=&quot;&lt;%= dom_id(@todo, 'project_name') %&gt;&quot; name=&quot;project_name&quot; autocomplete=&quot;off&quot; tabindex=&quot;10&quot; size=&quot;30&quot; type=&quot;text&quot; value=&quot;&lt;%= @todo.project.nil? ? 'None' : @todo.project.name.gsub(/&quot;/,&quot;&amp;quot;&quot;) %&gt;&quot; /&gt;
 &lt;div class=&quot;page_name_auto_complete&quot; id=&quot;&lt;%= dom_id(@todo, 'project_list') %&gt;&quot; style=&quot;display:none&quot;&gt;&lt;/div&gt;
 
 &lt;script type=&quot;text/javascript&quot;&gt;</diff>
      <filename>app/views/todos/_edit_form.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 &lt;% if @not_done_todos.empty? -%&gt;
-  &lt;p&gt;There are no incomplete actions&lt;/p&gt;
+&lt;p&gt;There are no incomplete actions&lt;/p&gt;
 &lt;% else -%&gt;
-  &lt;%= render :partial =&gt; &quot;contexts/mobile_context&quot;, :collection =&gt; @contexts_to_show %&gt;
-&lt;% end -%&gt;
+&lt;%= render :partial =&gt; &quot;contexts/mobile_context&quot;, :collection =&gt; @contexts_to_show -%&gt;
+&lt;% end -%&gt;
\ No newline at end of file</diff>
      <filename>app/views/todos/_mobile_actions.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -5,24 +5,22 @@ else
   bullet = &quot;&lt;span class=r&gt;&amp;raquo;&amp;nbsp;&lt;/span&gt;&quot;
 end -%&gt;
 &lt;div class=&quot;t&quot; id=&quot;&lt;%= dom_id(mobile_todo) %&gt;&quot;&gt;
-  &lt;tr valign=&quot;top&quot;&gt;&lt;td&gt;&lt;%= bullet %&gt;&lt;/td&gt;&lt;td&gt;
-      &lt;% if mobile_todo.completed? -%&gt; 
-      &lt;span class=&quot;m_t_d&quot;&gt;
-    &lt;% else -%&gt;
-      &lt;span class=&quot;m_t&quot;&gt;
-      &lt;% end -%&gt;
-      &lt;%= date_span -%&gt;
-      &lt;%= link_to mobile_todo.description, formatted_todo_path(mobile_todo, :m) %&gt;
-      &lt;% if parent_container_type == 'context' or parent_container_type == 'tag' -%&gt;
-      &lt;%= &quot;&lt;span class=prj&gt;(&quot; + 
-          link_to(mobile_todo.project.name, formatted_project_path(mobile_todo.project, :m)) + 
-        &quot;)&lt;/span&gt;&quot; unless mobile_todo.project.nil? %&gt;
-    &lt;% end
+&lt;tr valign=&quot;top&quot;&gt;&lt;td&gt;&lt;%= bullet %&gt;&lt;/td&gt;&lt;td&gt;&lt;% 
+    if mobile_todo.completed?  
+-%&gt;&lt;span class=&quot;m_t_d&quot;&gt;
+&lt;%  else 
+-%&gt;&lt;span class=&quot;m_t&quot;&gt;
+&lt;%  end -%&gt;
+&lt;%= date_span -%&gt; &lt;%= link_to mobile_todo.description, formatted_todo_path(mobile_todo, :m) -%&gt;
+&lt;%  if parent_container_type == 'context' or parent_container_type == 'tag' -%&gt;
+&lt;%=    &quot;&lt;span class=prj&gt; (&quot; + 
+       link_to(mobile_todo.project.name, formatted_project_path(mobile_todo.project, :m)) + 
+       &quot;)&lt;/span&gt;&quot; unless mobile_todo.project.nil? -%&gt;
+&lt;%  end
     if parent_container_type == 'project' or parent_container_type == 'tag' -%&gt;
-      &lt;%= &quot;&lt;span class=ctx&gt;(&quot; + 
-          link_to(mobile_todo.context.name, formatted_context_path(mobile_todo.context, :m)) + 
-        &quot;)&lt;/span&gt;&quot; %&gt;
-    &lt;% end -%&gt;
-    &lt;%= tag_list_mobile %&gt;
-      &lt;/span&gt;
-&lt;/td&gt;&lt;/tr&gt;&lt;/div&gt;
+&lt;%=    &quot;&lt;span class=ctx&gt; (&quot; + 
+       link_to(mobile_todo.context.name, formatted_context_path(mobile_todo.context, :m)) + 
+       &quot;)&lt;/span&gt;&quot; -%&gt;
+&lt;%  end -%&gt;
+ &lt;%= tag_list_mobile -%&gt;
+&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/todos/_mobile_todo.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,7 @@
 &lt;%= link_to(image_tag( 'blank.png', :width=&gt;'16', :height=&gt;'16', :border=&gt;'0' ), &quot;#&quot;, {:class =&gt; 'show_notes', :title =&gt; 'Show notes'}) %&gt;
 &lt;% apply_behavior 'a.show_notes:click', :prevent_default =&gt; true do |page, element|
-     element.next('.todo_notes').toggle
-   end
--%&gt;
-      &lt;div class=&quot;todo_notes&quot; id=&quot;&lt;%= dom_id(item, 'notes') %&gt;&quot; style=&quot;display:none&quot;&gt;
-        &lt;%= markdown( item.notes ) %&gt;
-      &lt;/div&gt;
\ No newline at end of file
+  element.next('.todo_notes').toggle
+end -%&gt;
+&lt;div class=&quot;todo_notes&quot; id=&quot;&lt;%= dom_id(item, 'notes') %&gt;&quot; style=&quot;display:none&quot;&gt;
+  &lt;%= markdown( item.notes.gsub(/((https?:\/\/[^ \n\t]*))/, '&quot;\1&quot;:\2') ) %&gt;
+&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/todos/_toggle_notes.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-&lt;%= render :partial =&gt; 'mobile_actions' %&gt;
+&lt;%= render :partial =&gt; 'mobile_actions' -%&gt;
\ No newline at end of file</diff>
      <filename>app/views/todos/index.m.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,5 @@
 &lt;% if @count == 0 -%&gt;
 &lt;div class=&quot;message&quot;&gt;&lt;p&gt;Currently there are no deferred actions.&lt;/p&gt;&lt;/div&gt;
 &lt;% end -%&gt;
-
 &lt;%= render :partial =&gt; &quot;contexts/mobile_context&quot;, :collection =&gt; @contexts, 
-            :locals =&gt; { :collapsible =&gt; true } %&gt;
+            :locals =&gt; { :collapsible =&gt; true } -%&gt;
\ No newline at end of file</diff>
      <filename>app/views/todos/mobile_list_deferred.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -1,28 +1,25 @@
 &lt;div id=&quot;display_box&quot;&gt;
-  &lt;div class=&quot;container context&quot; &lt;%= &quot;style=\&quot;display:none\&quot;&quot; unless @not_done_todos.empty? %&gt;&gt;
-       &lt;h2&gt;
-      No actions found
-    &lt;/h2&gt;
-    &lt;div class=&quot;message&quot;&gt;&lt;p&gt;Currently there are no incomplete actions with the tag '&lt;%= @tag_name %&gt;'&lt;/p&gt;&lt;/div&gt;
-  &lt;/div&gt;
-  
-  &lt;%= render :partial =&gt; &quot;contexts/mobile_context&quot;, :collection =&gt; @contexts_to_show %&gt;
-  
-  &lt;h2&gt;Deferred actions with the tag &lt;%= @tag_name %&gt;&lt;/h2&gt;
-  &lt;% unless (@deferred.nil? or @deferred.size == 0)  -%&gt;
-  &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
-    &lt;%= render :partial =&gt; &quot;todos/mobile_todo&quot;, :collection =&gt; @deferred, :locals =&gt; { :parent_container_type =&gt; &quot;tag&quot; } %&gt;
-  &lt;/table&gt;  
-&lt;% else %&gt;
-  No deferred actions with the tag &lt;%= @tag_name %&gt;
+&lt;% if @not_done_todos.empty? -%&gt;
+&lt;div class=&quot;container context&quot;&gt;
+&lt;h2&gt;No actions found&lt;/h2&gt;
+&lt;div class=&quot;message&quot;&gt;Currently there are no incomplete actions with the tag '&lt;%= @tag_name %&gt;'&lt;/div&gt;
+&lt;/div&gt;
 &lt;% end -%&gt;
-  
-  &lt;h2&gt;Completed actions with the tag &lt;%= @tag_name %&gt;&lt;/h2&gt;
+&lt;%= render :partial =&gt; &quot;contexts/mobile_context&quot;, :collection =&gt; @contexts_to_show -%&gt;
+&lt;h2&gt;Deferred actions with the tag &lt;%= @tag_name %&gt;&lt;/h2&gt;
+&lt;% unless (@deferred.nil? or @deferred.size == 0)  -%&gt;
+&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
+&lt;%= render :partial =&gt; &quot;todos/mobile_todo&quot;, :collection =&gt; @deferred, :locals =&gt; { :parent_container_type =&gt; &quot;tag&quot; } -%&gt;
+&lt;/table&gt;  
+&lt;% else -%&gt;
+No deferred actions with the tag &lt;%= @tag_name %&gt;
+&lt;% end -%&gt;
+&lt;h2&gt;Completed actions with the tag &lt;%= @tag_name %&gt;&lt;/h2&gt;
 &lt;% unless (@done.nil? or @done.size == 0) -%&gt;
-  &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
-    &lt;%= render :partial =&gt; &quot;todos/mobile_todo&quot;, :collection =&gt; @done, :locals =&gt; { :parent_container_type =&gt; &quot;tag&quot; } %&gt;
-  &lt;/table&gt;
-&lt;% else %&gt;
-  No completed actions with the tag &lt;%= @tag_name %&gt;
+&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;
+&lt;%= render :partial =&gt; &quot;todos/mobile_todo&quot;, :collection =&gt; @done, :locals =&gt; { :parent_container_type =&gt; &quot;tag&quot; } %&gt;
+&lt;/table&gt;
+&lt;% else -%&gt;
+No completed actions with the tag &lt;%= @tag_name %&gt;
 &lt;% end -%&gt;
-&lt;/div&gt;&lt;!-- End of display_box --&gt;
+&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/todos/mobile_tag.rhtml</filename>
    </modified>
    <modified>
      <diff>@@ -98,10 +98,4 @@ end
 MOBILE_CONTENT_TYPE = 'tracks/mobile'
 Mime::Type.register(MOBILE_CONTENT_TYPE, :m)
 
-tracks_version = '1.6-trunk'
-info = `svn info #{RAILS_ROOT} --config-dir /etc/subversion`[/Last Changed Rev: (.*?)\n/]
-if info
-  tracks_version += '-rev'+info[/(\d+)/]
-end
-
-TRACKS_VERSION=tracks_version
+TRACKS_VERSION='1.6'</diff>
      <filename>config/environment.rb.tmpl</filename>
    </modified>
    <modified>
      <diff>@@ -12,16 +12,16 @@
 ActiveRecord::Schema.define(:version =&gt; 38) do
 
   create_table &quot;contexts&quot;, :force =&gt; true do |t|
-    t.string   &quot;name&quot;,       :default =&gt; &quot;&quot;,    :null =&gt; false
-    t.integer  &quot;position&quot;
-    t.boolean  &quot;hide&quot;,       :default =&gt; false
-    t.integer  &quot;user_id&quot;,    :default =&gt; 1
+    t.string   &quot;name&quot;,                                         :null =&gt; false
+    t.integer  &quot;position&quot;,   :limit =&gt; 255, :default =&gt; 0
+    t.boolean  &quot;hide&quot;,                      :default =&gt; false
+    t.integer  &quot;user_id&quot;,                   :default =&gt; 1
     t.datetime &quot;created_at&quot;
     t.datetime &quot;updated_at&quot;
   end
 
-  add_index &quot;contexts&quot;, [&quot;user_id&quot;], :name =&gt; &quot;index_contexts_on_user_id&quot;
   add_index &quot;contexts&quot;, [&quot;user_id&quot;, &quot;name&quot;], :name =&gt; &quot;index_contexts_on_user_id_and_name&quot;
+  add_index &quot;contexts&quot;, [&quot;user_id&quot;], :name =&gt; &quot;index_contexts_on_user_id&quot;
 
   create_table &quot;notes&quot;, :force =&gt; true do |t|
     t.integer  &quot;user_id&quot;,    :null =&gt; false
@@ -31,8 +31,8 @@ ActiveRecord::Schema.define(:version =&gt; 38) do
     t.datetime &quot;updated_at&quot;
   end
 
-  add_index &quot;notes&quot;, [&quot;project_id&quot;], :name =&gt; &quot;index_notes_on_project_id&quot;
   add_index &quot;notes&quot;, [&quot;user_id&quot;], :name =&gt; &quot;index_notes_on_user_id&quot;
+  add_index &quot;notes&quot;, [&quot;project_id&quot;], :name =&gt; &quot;index_notes_on_project_id&quot;
 
   create_table &quot;open_id_associations&quot;, :force =&gt; true do |t|
     t.binary  &quot;server_url&quot;
@@ -75,19 +75,19 @@ ActiveRecord::Schema.define(:version =&gt; 38) do
   add_index &quot;preferences&quot;, [&quot;user_id&quot;], :name =&gt; &quot;index_preferences_on_user_id&quot;
 
   create_table &quot;projects&quot;, :force =&gt; true do |t|
-    t.string   &quot;name&quot;,                             :default =&gt; &quot;&quot;,       :null =&gt; false
-    t.integer  &quot;position&quot;
-    t.integer  &quot;user_id&quot;,                          :default =&gt; 1
+    t.string   &quot;name&quot;,                                                    :null =&gt; false
+    t.integer  &quot;position&quot;,           :limit =&gt; 255, :default =&gt; 0
+    t.integer  &quot;user_id&quot;,                           :default =&gt; 1
     t.text     &quot;description&quot;
-    t.string   &quot;state&quot;,              :limit =&gt; 20, :default =&gt; &quot;active&quot;, :null =&gt; false
+    t.string   &quot;state&quot;,              :limit =&gt; 20,  :default =&gt; &quot;active&quot;, :null =&gt; false
     t.datetime &quot;created_at&quot;
     t.datetime &quot;updated_at&quot;
     t.integer  &quot;default_context_id&quot;
     t.datetime &quot;completed_at&quot;
   end
 
-  add_index &quot;projects&quot;, [&quot;user_id&quot;], :name =&gt; &quot;index_projects_on_user_id&quot;
   add_index &quot;projects&quot;, [&quot;user_id&quot;, &quot;name&quot;], :name =&gt; &quot;index_projects_on_user_id_and_name&quot;
+  add_index &quot;projects&quot;, [&quot;user_id&quot;], :name =&gt; &quot;index_projects_on_user_id&quot;
 
   create_table &quot;sessions&quot;, :force =&gt; true do |t|
     t.string   &quot;session_id&quot;
@@ -95,7 +95,7 @@ ActiveRecord::Schema.define(:version =&gt; 38) do
     t.datetime &quot;updated_at&quot;
   end
 
-  add_index &quot;sessions&quot;, [&quot;session_id&quot;], :name =&gt; &quot;index_sessions_on_session_id&quot;
+  add_index &quot;sessions&quot;, [&quot;session_id&quot;], :name =&gt; &quot;sessions_session_id_index&quot;
 
   create_table &quot;taggings&quot;, :force =&gt; true do |t|
     t.integer &quot;taggable_id&quot;
@@ -117,7 +117,7 @@ ActiveRecord::Schema.define(:version =&gt; 38) do
   create_table &quot;todos&quot;, :force =&gt; true do |t|
     t.integer  &quot;context_id&quot;,                                          :null =&gt; false
     t.integer  &quot;project_id&quot;
-    t.string   &quot;description&quot;,                :default =&gt; &quot;&quot;,          :null =&gt; false
+    t.string   &quot;description&quot;,                                         :null =&gt; false
     t.text     &quot;notes&quot;
     t.datetime &quot;created_at&quot;
     t.date     &quot;due&quot;
@@ -127,15 +127,15 @@ ActiveRecord::Schema.define(:version =&gt; 38) do
     t.string   &quot;state&quot;,        :limit =&gt; 20, :default =&gt; &quot;immediate&quot;, :null =&gt; false
   end
 
-  add_index &quot;todos&quot;, [&quot;user_id&quot;, &quot;state&quot;], :name =&gt; &quot;index_todos_on_user_id_and_state&quot;
-  add_index &quot;todos&quot;, [&quot;user_id&quot;, &quot;project_id&quot;], :name =&gt; &quot;index_todos_on_user_id_and_project_id&quot;
-  add_index &quot;todos&quot;, [&quot;project_id&quot;], :name =&gt; &quot;index_todos_on_project_id&quot;
-  add_index &quot;todos&quot;, [&quot;context_id&quot;], :name =&gt; &quot;index_todos_on_context_id&quot;
   add_index &quot;todos&quot;, [&quot;user_id&quot;, &quot;context_id&quot;], :name =&gt; &quot;index_todos_on_user_id_and_context_id&quot;
+  add_index &quot;todos&quot;, [&quot;context_id&quot;], :name =&gt; &quot;index_todos_on_context_id&quot;
+  add_index &quot;todos&quot;, [&quot;project_id&quot;], :name =&gt; &quot;index_todos_on_project_id&quot;
+  add_index &quot;todos&quot;, [&quot;user_id&quot;, &quot;project_id&quot;], :name =&gt; &quot;index_todos_on_user_id_and_project_id&quot;
+  add_index &quot;todos&quot;, [&quot;user_id&quot;, &quot;state&quot;], :name =&gt; &quot;index_todos_on_user_id_and_state&quot;
 
   create_table &quot;users&quot;, :force =&gt; true do |t|
-    t.string   &quot;login&quot;,                     :limit =&gt; 80, :default =&gt; &quot;&quot;,         :null =&gt; false
-    t.string   &quot;crypted_password&quot;,          :limit =&gt; 40
+    t.string   &quot;login&quot;,                     :limit =&gt; 80,                         :null =&gt; false
+    t.string   &quot;crypted_password&quot;,          :limit =&gt; 40,                         :null =&gt; false
     t.string   &quot;token&quot;
     t.boolean  &quot;is_admin&quot;,                                :default =&gt; false,      :null =&gt; false
     t.string   &quot;first_name&quot;</diff>
      <filename>db/schema.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,8 +2,8 @@
 
 * Homepage: http://www.rousette.org.uk/projects/
 * Author: bsag (http://www.rousette.org.uk/)
-* Contributors: Nicholas Lee, Lolindrath, Jim Ray, Arnaud Limbourg, Timothy Martens, Luke Melia, John Leonard, Jim Strupp, Eric Lesh, Damien Cirotteau, Janet Riley, Reinier Balt, Jacqui Maher, James Kebinger
-* Version: 1.5rc1
+* Contributors: Nicholas Lee, Lolindrath, Jim Ray, Arnaud Limbourg, Timothy Martens, Luke Melia, John Leonard, Jim Strupp, Eric Lesh, Damien Cirotteau, Janet Riley, Reinier Balt, Jacqui Maher, James Kebinger, Jeffrey Gipson
+* Version: 1.6
 * Copyright: (cc) 2004-2008 rousette.org.uk
 * License: GNU GPL
 
@@ -13,7 +13,13 @@ Trac (for bug reports and feature requests): http://dev.rousette.org.uk/report/6
 
 Wiki (deprecated - please use Trac): http://www.rousette.org.uk/projects/wiki/
 
-== Version 1.5rc1
+== Version 1.6
+1. upgrade to rails 2.0.2
+2. new mobile interface (with some iPhone compatibility fixes)
+3. new search functionality to search on todos, projects, contexts and notes 
+4. Bugfixes
+
+== Version 1.5
 1. Show from date allows you to postpone the appearance of actions in the list until you can do something about them (like a 'tickler')
 2. Tagging of actions
 3. Simple management of users (deleting users through the web interface)</diff>
      <filename>doc/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,8 @@
-1. SQLITE3 FOR TESTING
+1. Wiki
+
+There are some pointers for setting up your Tracks copy for testing at http://dev.rousette.org.uk/wiki/Tracks/Testing
+
+2. SQLITE3 FOR TESTING
 
 By default, tests are configured to run using sqlite3 in memory mode to increase speed. You will need the sqlite3-ruby gem for this.
 
@@ -8,7 +12,7 @@ To avoid showing the migrations as tests are run, add the following to your data
 
 If you want to run tests using another database, that's fine, too. Just change your database.yml accordingly.
 
-2. SELENIUM TESTS
+3. SELENIUM TESTS
 
 To run selenium tests, start Tracks in test mode using
 </diff>
      <filename>doc/README_DEVELOPERS</filename>
    </modified>
    <modified>
      <diff>@@ -14,22 +14,24 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 		&lt;meta name=&quot;Date&quot; content=&quot;2008-04-07&quot; /&gt;
 		&lt;meta name=&quot;Format&quot; content=&quot;complete&quot; /&gt;
 		&lt;meta name=&quot;LaTeXXSLT&quot; content=&quot;memoir-twosided-manual.xslt&quot; /&gt;
-		&lt;meta name=&quot;Revision&quot; content=&quot;$Id: manual.markdown 811 2008-04-07 20:21:00Z bsag $&quot; /&gt;
-		&lt;title&gt;Tracks 1.5 Manual&lt;/title&gt;
-		&lt;meta name=&quot;Version&quot; content=&quot;1.5&quot; /&gt;
+		&lt;meta name=&quot;Revision&quot; content=&quot;$Id: manual.markdown 864 2008-06-03 17:01:00Z bsag $&quot; /&gt;
+		&lt;title&gt;Tracks 1.6 Manual&lt;/title&gt;
+		&lt;meta name=&quot;Version&quot; content=&quot;1.6&quot; /&gt;
 		&lt;meta name=&quot;XMP&quot; content=&quot;CCAttributionShareAlike&quot; /&gt;
 	&lt;/head&gt;
 &lt;body&gt;
 
 &lt;!-- The HTML file manual.html is generated from manual.markdown, so make edits to the *.markdown file --&gt;
 
-&lt;h2 id=&quot;installingtracks1.5&quot;&gt;Installing Tracks 1.5&lt;/h2&gt;
+&lt;h2 id=&quot;installingtracks1.6&quot;&gt;Installing Tracks 1.6&lt;/h2&gt;
 
 &lt;h3 id=&quot;introduction&quot;&gt;Introduction&lt;/h3&gt;
 
-&lt;p&gt;Tracks 1.5 has been thoroughly beta tested by a large number of people, and should be fully stable for everyday use. However, once set up, Tracks will contain the majority of your plans for your work and personal life, so it&amp;#8217;s only sensible to make sure that you have frequent, reliable backups of your data. Full changenotes on the release can be found in &lt;code&gt;doc/CHANGELOG&lt;/code&gt;. Full API documentation can be found at &lt;code&gt;doc/app/index.html&lt;/code&gt;, once you have run &lt;code&gt;rake appdoc&lt;/code&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;An important note for version 1.6: OpenID support is broken in this release. The fix isn&amp;#8217;t trivial because of changes to the &lt;code&gt;ruby-openid&lt;/code&gt; gem, so we wanted to get this version out now and fix OpenID for the next release. If you depend on OpenID integration, we recommend waiting until the next release.&lt;/strong&gt;&lt;/p&gt;
 
-&lt;p&gt;There are two methods of downloading Tracks 1.5 &lt;strong&gt;(N.B. These links will not work until Tracks 1.5 final is released)&lt;/strong&gt;):&lt;/p&gt;
+&lt;p&gt;Tracks 1.6 has been thoroughly beta tested by a large number of people, and should be fully stable for everyday use. However, once set up, Tracks will contain the majority of your plans for your work and personal life, so it&amp;#8217;s only sensible to make sure that you have frequent, reliable backups of your data. Full changenotes on the release can be found in &lt;code&gt;doc/CHANGELOG&lt;/code&gt;. Full API documentation can be found at &lt;code&gt;doc/app/index.html&lt;/code&gt;, once you have run &lt;code&gt;rake appdoc&lt;/code&gt;&lt;/p&gt;
+
+&lt;p&gt;There are two methods of downloading Tracks 1.6:&lt;/p&gt;
 
 &lt;ol&gt;
 &lt;li&gt;(Recommended for most people) Download the &lt;a href=&quot;http://www.rousette.org.uk/projects/files/tracks-current.zip&quot;&gt;zipped package&lt;/a&gt;, and unzip in your preferred location (e.g. &lt;code&gt;~/Sites&lt;/code&gt; for Mac OS X users).&lt;/li&gt;
@@ -59,7 +61,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;ol&gt;
 &lt;li&gt;Tracks itself&lt;/li&gt;
-&lt;li&gt;Rails 1.2.5 (installed in the &lt;code&gt;/vendor/rails&lt;/code&gt; directory, so you do not need to install Rails yourself)&lt;/li&gt;
+&lt;li&gt;Rails 2.0.2 (installed in the &lt;code&gt;/vendor/rails&lt;/code&gt; directory, so you do not need to install Rails yourself)&lt;/li&gt;
 &lt;li&gt;An empty SQLite3 database, set up with the correct database schema&lt;/li&gt;
 &lt;/ol&gt;
 
@@ -73,11 +75,11 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 &lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;. The easiest option is to use SQLite3, as the database is included in the package. All you need then is the &lt;code&gt;sqlite3-ruby&lt;/code&gt; gem, as described in step 2, and the SQLite3 libraries and binary (see &lt;a href=&quot;http://sqlite.org/download.html&quot;&gt;sqlite.org&lt;/a&gt; for downloads and installation instructions). If you want to use MySQL, download and install a package for your platform from &lt;a href=&quot;http://dev.mysql.com/downloads/mysql/5.0.html&quot;&gt;MySQL.com&lt;/a&gt;. The basic steps for Postgresql should be similar to those for MySQL, but they will not be discussed further here.&lt;/li&gt;
 &lt;/ol&gt;
 
-&lt;p&gt;If you are using Unix, you might find &lt;a href=&quot;http://www.cooldown.com.ar/2006/12/16/install-tracks-on-ubuntu-or-debian/&quot;&gt;this guide&lt;/a&gt; by c00i90wn helpful. It was written for Tracks 1.043, but it should work for Tracks 1.5.&lt;/p&gt;
+&lt;p&gt;If you are using Unix, you might find &lt;a href=&quot;http://www.cooldown.com.ar/2006/12/16/install-tracks-on-ubuntu-or-debian/&quot;&gt;this guide&lt;/a&gt; by c00i90wn helpful. It was written for Tracks 1.043, but it should work for Tracks 1.6.&lt;/p&gt;
 
 &lt;h3 id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;
 
-&lt;p&gt;This description is intended for people installing Tracks from scratch. If you would like to upgrade an existing installation, please see &lt;a href=&quot;#upgrading&quot; title=&quot;Upgrading to Tracks 1.5&quot;&gt;Upgrading to Tracks 1.5&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;This description is intended for people installing Tracks from scratch. If you would like to upgrade an existing installation, please see &lt;a href=&quot;#upgrading&quot; title=&quot;Upgrading to Tracks 1.6&quot;&gt;Upgrading to Tracks 1.6&lt;/a&gt;.&lt;/p&gt;
 
 &lt;ol&gt;
 &lt;li&gt;&lt;a href=&quot;#unzip_install&quot; title=&quot;Unzip Tracks and install&quot;&gt;Unzip tracks&lt;/a&gt; and install in a directory&lt;/li&gt;
@@ -85,7 +87,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 &lt;ol&gt;&lt;li&gt;SQLite3 - change database.yml to point to SQLite3 database&lt;/li&gt;
 &lt;li&gt;MySQL - create new MySQL db and grant all privileges &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;#config_install&quot; title=&quot;Configure variables&quot;&gt;Configure some variables&lt;/a&gt;&lt;/li&gt;
-&lt;li&gt;Populate the database with the &lt;a href=&quot;#rake_install&quot; title=&quot;Populate your database with the Tracks 1.5 schema&quot;&gt;Tracks 1.5 schema&lt;/a&gt;&lt;/li&gt;
+&lt;li&gt;Populate the database with the &lt;a href=&quot;#rake_install&quot; title=&quot;Populate your database with the Tracks 1.6 schema&quot;&gt;Tracks 1.6 schema&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;#startserver_install&quot; title=&quot;Start the server&quot;&gt;Start the server&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;#signup_install&quot; title=&quot;Visit Tracks in a browser&quot;&gt;Visit Tracks in a browser&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;#customise_install&quot; title=&quot;Customise Tracks&quot;&gt;Customise Tracks&lt;/a&gt;&lt;/li&gt;
@@ -101,7 +103,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;ol&gt;
 &lt;li&gt;&lt;strong&gt;SQLite3&lt;/strong&gt;. All you need to do is make sure that you point Tracks to the included SQLite3 database in &lt;code&gt;/db&lt;/code&gt; in the next step, &lt;a href=&quot;#config_install&quot; title=&quot;Configure variables&quot;&gt;Configure variables&lt;/a&gt;.&lt;/li&gt;
-&lt;li&gt;&lt;strong&gt;MySQL&lt;/strong&gt;. Once you have MySQL installed, you need to create a database to use with Tracks 1.5. Go into a terminal and issue the following commands:&lt;/li&gt;
+&lt;li&gt;&lt;strong&gt;MySQL&lt;/strong&gt;. Once you have MySQL installed, you need to create a database to use with Tracks 1.6. Go into a terminal and issue the following commands:&lt;/li&gt;
 &lt;/ol&gt;
 
 &lt;pre&gt;
@@ -116,23 +118,23 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 &lt;h4 id=&quot;config_install&quot;&gt;Configure variables&lt;/h4&gt;
 
 &lt;ol&gt;
-&lt;li&gt;If you downloaded Tracks 1.5 via Subversion, you need to duplicate the files &lt;code&gt;database.yml.tmpl&lt;/code&gt; and &lt;code&gt;environment.yml.tmpl&lt;/code&gt; and remove the &lt;code&gt;*.tmpl&lt;/code&gt; extension from the duplicates. Similarly, duplicate &lt;code&gt;/log.tmpl&lt;/code&gt; and remove the &lt;code&gt;*.tmpl&lt;/code&gt; extension, then edit the files as described in steps 2 and 3.&lt;/li&gt;
+&lt;li&gt;If you downloaded Tracks 1.6 via Subversion, you need to duplicate the files &lt;code&gt;database.yml.tmpl&lt;/code&gt; and &lt;code&gt;environment.yml.tmpl&lt;/code&gt; and remove the &lt;code&gt;*.tmpl&lt;/code&gt; extension from the duplicates. Similarly, duplicate &lt;code&gt;/log.tmpl&lt;/code&gt; and remove the &lt;code&gt;*.tmpl&lt;/code&gt; extension, then edit the files as described in steps 2 and 3.&lt;/li&gt;
 &lt;li&gt;Open the file &lt;code&gt;/config/database.yml&lt;/code&gt; and edit the &lt;code&gt;production:&lt;/code&gt; section with the details of your database. If you are using MySQL the &lt;code&gt;adapter:&lt;/code&gt; line should read &lt;code&gt;adapter: mysql&lt;/code&gt;, &lt;code&gt;host: localhost&lt;/code&gt; (in the majority of cases), and your username and password should match those you assigned when you created the database. If you are using SQLite3, you should have only two lines under the production section: &lt;code&gt;adapter: sqlite3&lt;/code&gt; and &lt;code&gt;database: db/tracks-15-blank.db&lt;/code&gt;. If you downloaded the zipped file, the database.yml file is already configured to use the provided SQLite3 file.&lt;/li&gt;
 &lt;li&gt;Open the file &lt;code&gt;/config/environment.rb&lt;/code&gt;, and read through the settings to make sure that they suit your setup. In most cases, all you need to change is the &lt;code&gt;SALT = &quot;change-me&quot;&lt;/code&gt; line (change the string &amp;#8220;change-me&amp;#8221; to some other string of your choice), and the time zone setting.&lt;/li&gt;
 &lt;li&gt;If you are using Windows, you may need to check the &amp;#8216;shebang&amp;#8217; lines (&lt;code&gt;#!/usr/bin/env ruby&lt;/code&gt;) of the &lt;code&gt;/public/dispatch.*&lt;/code&gt; files and all the files in the &lt;code&gt;/script&lt;/code&gt; directory. They are set to &lt;code&gt;#!/usr/bin/env ruby&lt;/code&gt; by default. This should work for all *nix based setups (Linux or Mac OS X), but Windows users will probably have to change it to something like &lt;code&gt;#c:/ruby/bin/ruby&lt;/code&gt; to point to the Ruby binary on your system.&lt;/li&gt;
 &lt;/ol&gt;
 
-&lt;h4 id=&quot;rake_install&quot;&gt;Populate your database with the Tracks 1.5 schema&lt;/h4&gt;
+&lt;h4 id=&quot;rake_install&quot;&gt;Populate your database with the Tracks 1.6 schema&lt;/h4&gt;
 
-&lt;p&gt;Open a terminal and change into the root of your Tracks 1.5 directory. Enter the following command:&lt;/p&gt;
+&lt;p&gt;Open a terminal and change into the root of your Tracks 1.6 directory. Enter the following command:&lt;/p&gt;
 
 &lt;p&gt;&lt;code&gt;rake db:migrate RAILS_ENV=production&lt;/code&gt;&lt;/p&gt;
 
-&lt;p&gt;This will update your database with the required schema for Tracks 1.5. If you are using SQLite3, it is not strictly necessary, because the SQLite3 database included with Tracks already has the schema included in it, but it should not do any harm to run the command (nothing will happen if it is up to date).&lt;/p&gt;
+&lt;p&gt;This will update your database with the required schema for Tracks 1.6. If you are using SQLite3, it is not strictly necessary, because the SQLite3 database included with Tracks already has the schema included in it, but it should not do any harm to run the command (nothing will happen if it is up to date).&lt;/p&gt;
 
 &lt;h4 id=&quot;startserver_install&quot;&gt;Start the server&lt;/h4&gt;
 
-&lt;p&gt;While still in the Terminal inside the Tracks 1.5 root directory, issue the following command:&lt;/p&gt;
+&lt;p&gt;While still in the Terminal inside the Tracks 1.6 root directory, issue the following command:&lt;/p&gt;
 
 &lt;p&gt;&lt;code&gt;script/server -e production&lt;/code&gt;&lt;/p&gt;
 
@@ -146,7 +148,19 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;p&gt;Once logged in, add some Contexts and Projects, and then go ahead and add your actions. You might also want to visit the Preferences page to edit various settings to your liking. Have fun!&lt;/p&gt;
 
-&lt;h2 id=&quot;upgrading&quot;&gt;Upgrading to Tracks 1.5&lt;/h2&gt;
+&lt;h2 id=&quot;upgrading&quot;&gt;Upgrading to Tracks 1.6&lt;/h2&gt;
+
+&lt;h3 id=&quot;upgrading_1.5&quot;&gt;Upgrading from Tracks 1.5&lt;/h3&gt;
+
+&lt;p&gt;There are no changes to the database between 1.5 and 1.6, but you will need to upgrade your &lt;code&gt;config/environment.rb&lt;/code&gt; with the new content from &lt;code&gt;config/environment.rb.tmpl&lt;/code&gt; included in 1.6, as the format of this file has changed a great deal between 1.5 and 1.6.&lt;/p&gt;
+
+&lt;ol&gt;
+&lt;li&gt;&lt;a href=&quot;#backup_upgrade&quot; title=&quot;Backing up&quot;&gt;Back up&lt;/a&gt; your existing database and installation of Tracks&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;#install_upgrade&quot; title=&quot;Install Tracks 1.6&quot;&gt;Install Tracks 1.6&lt;/a&gt; in a new directory&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;#config_upgrade&quot; title=&quot;Copy over old configuration files&quot;&gt;Copy over&lt;/a&gt; a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.6 directory&lt;/li&gt;
+&lt;li&gt;Run &lt;code&gt;script/server&lt;/code&gt; inside your Tracks 1.6 directory to &lt;a href=&quot;#startserver_upgrade&quot; title=&quot;Start the server&quot;&gt;start up Tracks 1.6&lt;/a&gt;.&lt;/li&gt;
+&lt;li&gt;Once you are happy that everything is working well, &lt;a href=&quot;#cleanup_upgrade&quot; title=&quot;Clean up your old installation&quot;&gt;delete your old Tracks directory&lt;/a&gt;.&lt;/li&gt;
+&lt;/ol&gt;
 
 &lt;h3 id=&quot;upgrading_1043&quot;&gt;Upgrading from Tracks 1.043&lt;/h3&gt;
 
@@ -154,10 +168,10 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;ol&gt;
 &lt;li&gt;&lt;a href=&quot;#backup_upgrade&quot; title=&quot;Backing up&quot;&gt;Back up&lt;/a&gt; your existing database and installation of Tracks&lt;/li&gt;
-&lt;li&gt;&lt;a href=&quot;#install_upgrade&quot; title=&quot;Install Tracks 1.5&quot;&gt;Install Tracks 1.5&lt;/a&gt; in a new directory&lt;/li&gt;
-&lt;li&gt;&lt;a href=&quot;#config_upgrade&quot; title=&quot;Copy over old configuration files&quot;&gt;Copy over&lt;/a&gt; a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.5 directory&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;#install_upgrade&quot; title=&quot;Install Tracks 1.6&quot;&gt;Install Tracks 1.6&lt;/a&gt; in a new directory&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;#config_upgrade&quot; title=&quot;Copy over old configuration files&quot;&gt;Copy over&lt;/a&gt; a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.6 directory&lt;/li&gt;
 &lt;li&gt;Run &lt;code&gt;rake db:migrate RAILS_ENV=production&lt;/code&gt; to &lt;a href=&quot;#rake_upgrade&quot; title=&quot;Update your old database to the new format&quot;&gt;update your old database&lt;/a&gt; to the new schema &amp;#8211; you did back up your database didn&amp;#8217;t you?&lt;/li&gt;
-&lt;li&gt;Run &lt;code&gt;script/server&lt;/code&gt; inside your Tracks 1.5 directory to &lt;a href=&quot;#startserver_upgrade&quot; title=&quot;Start the server&quot;&gt;start up Tracks 1.5&lt;/a&gt;.&lt;/li&gt;
+&lt;li&gt;Run &lt;code&gt;script/server&lt;/code&gt; inside your Tracks 1.6 directory to &lt;a href=&quot;#startserver_upgrade&quot; title=&quot;Start the server&quot;&gt;start up Tracks 1.6&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;Once you are happy that everything is working well, &lt;a href=&quot;#cleanup_upgrade&quot; title=&quot;Clean up your old installation&quot;&gt;delete your old Tracks directory&lt;/a&gt;.&lt;/li&gt;
 &lt;/ol&gt;
 
@@ -167,11 +181,11 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;p&gt;&lt;code&gt;mysqldump &#8211;-user [user name] &#8211;-password=[password] [database name] &amp;gt; [dump file]&lt;/code&gt;&lt;/p&gt;
 
-&lt;p&gt;Rename your old Tracks installation (e.g. to &amp;#8216;tracks-old&amp;#8217;) so that you can install Tracks 1.5 along side it.&lt;/p&gt;
+&lt;p&gt;Rename your old Tracks installation (e.g. to &amp;#8216;tracks-old&amp;#8217;) so that you can install Tracks 1.6 along side it.&lt;/p&gt;
 
-&lt;h4 id=&quot;install_upgrade&quot;&gt;Install Tracks 1.5&lt;/h4&gt;
+&lt;h4 id=&quot;install_upgrade&quot;&gt;Install Tracks 1.6&lt;/h4&gt;
 
-&lt;p&gt;There are two methods of downloading Tracks 1.5:&lt;/p&gt;
+&lt;p&gt;There are two methods of downloading Tracks 1.6:&lt;/p&gt;
 
 &lt;ol&gt;
 &lt;li&gt;(Recommended for most people) Download the &lt;a href=&quot;http://www.rousette.org.uk/projects/files/tracks-current.zip&quot;&gt;zipped package&lt;/a&gt;, and unzip in your preferred location (e.g. &lt;code&gt;~/Sites&lt;/code&gt; for Mac OS X users).&lt;/li&gt;
@@ -191,7 +205,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;ol&gt;
 &lt;li&gt;Copy &lt;code&gt;/config/database.yml&lt;/code&gt; from your old Tracks directory to the same location in the new one. Double check that the information there is still correct.&lt;/li&gt;
-&lt;li&gt;Duplicate &lt;code&gt;/config/environment.rb.tmpl&lt;/code&gt; in the Tracks 1.5 directory, and rename the file to &lt;code&gt;environment.rb&lt;/code&gt;. Open the file and alter the line &lt;code&gt;SALT = &quot;change-me&quot;&lt;/code&gt; so that it matches what you had in this file in your old installation. You may also want to change the time zone setting as appropriate for your location (&lt;code&gt;ENV['TZ'] = 'US/Eastern'&lt;/code&gt;). If you have made any other customisations to &lt;code&gt;environment.rb&lt;/code&gt; in the past, copy those over, but the contents of the file have changed quite a lot since 1.043, so check it carefully.&lt;/li&gt;
+&lt;li&gt;Duplicate &lt;code&gt;/config/environment.rb.tmpl&lt;/code&gt; in the Tracks 1.6 directory, and rename the file to &lt;code&gt;environment.rb&lt;/code&gt;. Open the file and alter the line &lt;code&gt;SALT = &quot;change-me&quot;&lt;/code&gt; so that it matches what you had in this file in your old installation. You may also want to change the time zone setting as appropriate for your location (&lt;code&gt;ENV['TZ'] = 'US/Eastern'&lt;/code&gt;). If you have made any other customisations to &lt;code&gt;environment.rb&lt;/code&gt; in the past, copy those over, but the contents of the file have changed quite a lot since 1.043, so check it carefully.&lt;/li&gt;
 &lt;li&gt;Copy your &lt;code&gt;/log&lt;/code&gt; directory over from your old installation to the root of the new one, or just rename &lt;code&gt;/log.tmpl&lt;/code&gt; to &lt;code&gt;log&lt;/code&gt; to start afresh.&lt;/li&gt;
 &lt;li&gt;If you are using SQLite3, copy your database from &lt;code&gt;/db&lt;/code&gt; in your old Tracks directory to the same location in the new one.&lt;/li&gt;
 &lt;li&gt;If you are using Windows, you may need to check the &amp;#8216;shebang&amp;#8217; lines (&lt;code&gt;#!/usr/bin/env ruby&lt;/code&gt;)&lt;a href=&quot;#fn:env&quot; id=&quot;fnref:env&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt; of the &lt;code&gt;/public/dispatch.*&lt;/code&gt; files and all the files in the &lt;code&gt;/script&lt;/code&gt; directory. They are set to &lt;code&gt;#!/usr/bin/env ruby&lt;/code&gt; by default. Check the format of those lines in your old installation, and change the new ones as necessary.&lt;/li&gt;
@@ -199,7 +213,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;h4 id=&quot;rake_upgrade&quot;&gt;Update your old database to the new format&lt;/h4&gt;
 
-&lt;p&gt;In a terminal, change directories so that you are inside the Tracks 1.5 directory. Then issue the command to update your Tracks 1.043 database to the format required for Tracks 1.5:&lt;/p&gt;
+&lt;p&gt;In a terminal, change directories so that you are inside the Tracks 1.6 directory. Then issue the command to update your Tracks 1.043 database to the format required for Tracks 1.6:&lt;/p&gt;
 
 &lt;p&gt;&lt;code&gt;rake db:migrate RAILS_ENV=production&lt;/code&gt;&lt;/p&gt;
 
@@ -207,7 +221,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;h4 id=&quot;startserver_upgrade&quot;&gt;Start the server&lt;/h4&gt;
 
-&lt;p&gt;If you&amp;#8217;re still in the Tracks 1.5 root directory in a terminal, enter the following command to start up Tracks in production mode:&lt;/p&gt;
+&lt;p&gt;If you&amp;#8217;re still in the Tracks 1.6 root directory in a terminal, enter the following command to start up Tracks in production mode:&lt;/p&gt;
 
 &lt;p&gt;&lt;code&gt;script/server -e production&lt;/code&gt;&lt;/p&gt;
 
@@ -216,7 +230,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 
 &lt;h4 id=&quot;cleanup_upgrade&quot;&gt;Clean up your old installation&lt;/h4&gt;
 
-&lt;p&gt;Once you&amp;#8217;re certain that your new Tracks 1.5 installation is working perfectly, you can delete your old Tracks directory.&lt;/p&gt;
+&lt;p&gt;Once you&amp;#8217;re certain that your new Tracks 1.6 installation is working perfectly, you can delete your old Tracks directory.&lt;/p&gt;
 
 &lt;h3 id=&quot;upgradingfromversionspriorto1.043&quot;&gt;Upgrading from versions prior to 1.043&lt;/h3&gt;
 
@@ -234,7 +248,7 @@ http://creativecommons.org/licenses/by-nc-sa/3.0/&quot; /&gt;
 &lt;li&gt;Run the command &lt;code&gt;rake db_schema_import&lt;/code&gt; inside the Tracks directory. This should import the upgraded schema for 1.043 into your new database.&lt;/li&gt;
 &lt;li&gt;Run the command &lt;code&gt;rake load_exported_fixtures&lt;/code&gt; which will import the contents of your old database from the fixtures files in &lt;code&gt;db/exported_fixtures&lt;/code&gt;.&lt;/li&gt;
 &lt;li&gt;If you are using Windows, you may need to check the &amp;#8216;shebang&amp;#8217; lines (&lt;code&gt;#!/usr/bin/env ruby&lt;/code&gt;)&lt;a href=&quot;#fn:env&quot; id=&quot;fnref:env&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt; of the &lt;code&gt;/public/dispatch.*&lt;/code&gt; files and all the files in the &lt;code&gt;/script&lt;/code&gt; directory. They are set to &lt;code&gt;#!/usr/bin/env ruby&lt;/code&gt; by default. Check the format of those lines in your old installation, and change the new ones as necessary.&lt;/li&gt;
-&lt;li&gt;Try starting up the server with &lt;code&gt;script/server&lt;/code&gt; to make sure that all your data has migrated successfully. If all is well, follow the instructions above to &lt;a href=&quot;#upgrading_1043&quot; title=&quot;Upgrading from Tracks 1.043&quot;&gt;upgrade from version 1.043&lt;/a&gt; to Tracks 1.5. If you need to access Tracks from a mobile/cellular phone browser, visit &lt;code&gt;http://yourdomain.com/mobile/&lt;/code&gt;. This mobile version is a special, lightweight version of Tracks, designed to use on a mobile browser.&lt;/li&gt;
+&lt;li&gt;Try starting up the server with &lt;code&gt;script/server&lt;/code&gt; to make sure that all your data has migrated successfully. If all is well, follow the instructions above to &lt;a href=&quot;#upgrading_1043&quot; title=&quot;Upgrading from Tracks 1.043&quot;&gt;upgrade from version 1.043&lt;/a&gt; to Tracks 1.6. If you need to access Tracks from a mobile/cellular phone browser, visit &lt;code&gt;http://yourdomain.com/mobile/&lt;/code&gt;. This mobile version is a special, lightweight version of Tracks, designed to use on a mobile browser.&lt;/li&gt;
 &lt;/ol&gt;
 
 &lt;div class=&quot;footnotes&quot;&gt;</diff>
      <filename>doc/manual.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
-Title:              Tracks 1.5 Manual
+Title:              Tracks 1.6 Manual
 Author:             Tracks Development Team
 Date:               2008-04-07
-Revision:           $Id: manual.markdown 811 2008-04-07 20:21:00Z bsag $
-Version:            1.5
+Revision:           $Id: manual.markdown 864 2008-06-03 17:01:00Z bsag $
+Version:            1.6
 Copyright:			    2008 rousette.org.uk  
 					This work is licensed under a Creative Commons License.  
 					http://creativecommons.org/licenses/by-nc-sa/3.0/
@@ -14,13 +14,15 @@ CSS:                manual.css
 
 &lt;!-- The HTML file manual.html is generated from manual.markdown, so make edits to the *.markdown file --&gt;
 
-# Installing Tracks 1.5 #
+# Installing Tracks 1.6 #
 
 ## Introduction ##
 
-Tracks 1.5 has been thoroughly beta tested by a large number of people, and should be fully stable for everyday use. However, once set up, Tracks will contain the majority of your plans for your work and personal life, so it's only sensible to make sure that you have frequent, reliable backups of your data. Full changenotes on the release can be found in `doc/CHANGELOG`. Full API documentation can be found at `doc/app/index.html`, once you have run `rake appdoc`
+**An important note for version 1.6: OpenID support is broken in this release. The fix isn't trivial because of changes to the `ruby-openid` gem, so we wanted to get this version out now and fix OpenID for the next release. If you depend on OpenID integration, we recommend waiting until the next release.**
 
-There are two methods of downloading Tracks 1.5 **(N.B. These links will not work until Tracks 1.5 final is released)**):
+Tracks 1.6 has been thoroughly beta tested by a large number of people, and should be fully stable for everyday use. However, once set up, Tracks will contain the majority of your plans for your work and personal life, so it's only sensible to make sure that you have frequent, reliable backups of your data. Full changenotes on the release can be found in `doc/CHANGELOG`. Full API documentation can be found at `doc/app/index.html`, once you have run `rake appdoc`
+
+There are two methods of downloading Tracks 1.6:
 
 1. (Recommended for most people) Download the [zipped package](http://www.rousette.org.uk/projects/files/tracks-current.zip), and unzip in your preferred location (e.g. `~/Sites` for Mac OS X users).
 2. Download using Subversion:
@@ -46,7 +48,7 @@ If you'd like an easy way to access Tracks from any internet-connected computer,
 ### What is included with the Tracks package ###
 
 1. Tracks itself
-2. Rails 1.2.5 (installed in the `/vendor/rails` directory, so you do not need to install Rails yourself)
+2. Rails 2.0.2 (installed in the `/vendor/rails` directory, so you do not need to install Rails yourself)
 3. An empty SQLite3 database, set up with the correct database schema
 
 ### What you need to install [whatyouneed] ###
@@ -57,18 +59,18 @@ If you don't want to (or can't) use one of the all in one installations, you'll
 2. **RubyGems**. The gems needed by Rails to interact with the database have to be compiled on the platform on which they will be run, so we cannot include them with the Tracks package, unlike some other gems. So you will need to [download](http://rubyforge.org/frs/?group_id=126) and install RubyGems (run `ruby setup.rb` after extracting the package). Note that once again, Mac OS X Leopard users get an easy life, because RubyGems and the SQLite3 gem is already installed. Once installed you can use RubyGems to install the gems you need for your database. If you are using SQLite3, run `sudo gem install sqlite3-ruby`, then select the appropriate package for your platform (version 1.2.1 recommended). You can use MySQL without installing a gem, but installing the gem can speed things up a bit: `sudo install gem mysql`. If you're using Leopard, there are a few work-arounds necessary, which are explained on [Mac OS Forge](http://trac.macosforge.org/projects/ruby/wiki/Troubleshooting#IcannotbuildrubymysqlonLeopardwithmysql.combinaries). The ruby-mysql bindings can sometimes be a bit troublesome to install, so to be honest, it's probably not worth the bother unless you are trying to wring maximum speed out of your system. If you are using PostgreSQL, then you can install a postgres gem: `gem install postgres`.
 3. **Database**. The easiest option is to use SQLite3, as the database is included in the package. All you need then is the `sqlite3-ruby` gem, as described in step 2, and the SQLite3 libraries and binary (see [sqlite.org](http://sqlite.org/download.html) for downloads and installation instructions). If you want to use MySQL, download and install a package for your platform from [MySQL.com](http://dev.mysql.com/downloads/mysql/5.0.html). The basic steps for Postgresql should be similar to those for MySQL, but they will not be discussed further here.
 
-If you are using Unix, you might find [this guide](http://www.cooldown.com.ar/2006/12/16/install-tracks-on-ubuntu-or-debian/) by c00i90wn helpful. It was written for Tracks 1.043, but it should work for Tracks 1.5.
+If you are using Unix, you might find [this guide](http://www.cooldown.com.ar/2006/12/16/install-tracks-on-ubuntu-or-debian/) by c00i90wn helpful. It was written for Tracks 1.043, but it should work for Tracks 1.6.
 
 ## Installation ##
 
-This description is intended for people installing Tracks from scratch. If you would like to upgrade an existing installation, please see [Upgrading to Tracks 1.5][upgrading].
+This description is intended for people installing Tracks from scratch. If you would like to upgrade an existing installation, please see [Upgrading to Tracks 1.6][upgrading].
 
 1. [Unzip tracks][unzip_install] and install in a directory
 2. Decide on a [database][database_install] to use
   1.  SQLite3 - change database.yml to point to SQLite3 database
   2.  MySQL - create new MySQL db and grant all privileges 
 3. [Configure some variables][config_install]
-4. Populate the database with the [Tracks 1.5 schema][rake_install]
+4. Populate the database with the [Tracks 1.6 schema][rake_install]
 5. [Start the server][startserver_install]
 6. [Visit Tracks in a browser][signup_install]
 7. [Customise Tracks][customise_install]
@@ -82,7 +84,7 @@ Unzip the package and move Tracks into the directory you want to run it from. Fo
 Before you go any further, you need to decide which database you will use. See the [What you need to install][whatyouneed] section for details on installing the required components for you choice of database.
 
 1. **SQLite3**. All you need to do is make sure that you point Tracks to the included SQLite3 database in `/db` in the next step, [Configure variables][config_install].
-2. **MySQL**. Once you have MySQL installed, you need to create a database to use with Tracks 1.5. Go into a terminal and issue the following commands:
+2. **MySQL**. Once you have MySQL installed, you need to create a database to use with Tracks 1.6. Go into a terminal and issue the following commands:
 &lt;pre&gt;
 &lt;code&gt;
     mysql -uroot -p
@@ -94,22 +96,22 @@ Before you go any further, you need to decide which database you will use. See t
 
 ### Configure variables [config_install] ###
 
-1. If you downloaded Tracks 1.5 via Subversion, you need to duplicate the files `database.yml.tmpl` and `environment.yml.tmpl` and remove the `*.tmpl` extension from the duplicates. Similarly, duplicate `/log.tmpl` and remove the `*.tmpl` extension, then edit the files as described in steps 2 and 3.
+1. If you downloaded Tracks 1.6 via Subversion, you need to duplicate the files `database.yml.tmpl` and `environment.yml.tmpl` and remove the `*.tmpl` extension from the duplicates. Similarly, duplicate `/log.tmpl` and remove the `*.tmpl` extension, then edit the files as described in steps 2 and 3.
 2. Open the file `/config/database.yml` and edit the `production:` section with the details of your database. If you are using MySQL the `adapter:` line should read `adapter: mysql`, `host: localhost` (in the majority of cases), and your username and password should match those you assigned when you created the database. If you are using SQLite3, you should have only two lines under the production section: `adapter: sqlite3` and `database: db/tracks-15-blank.db`. If you downloaded the zipped file, the database.yml file is already configured to use the provided SQLite3 file.
 3. Open the file `/config/environment.rb`, and read through the settings to make sure that they suit your setup. In most cases, all you need to change is the `SALT = &quot;change-me&quot;` line (change the string &quot;change-me&quot; to some other string of your choice), and the time zone setting.
 4. If you are using Windows, you may need to check the 'shebang' lines (`#!/usr/bin/env ruby`) of the `/public/dispatch.*` files and all the files in the `/script` directory. They are set to `#!/usr/bin/env ruby` by default. This should work for all *nix based setups (Linux or Mac OS X), but Windows users will probably have to change it to something like `#c:/ruby/bin/ruby` to point to the Ruby binary on your system.
 
-### Populate your database with the Tracks 1.5 schema [rake_install] ###
+### Populate your database with the Tracks 1.6 schema [rake_install] ###
 
-Open a terminal and change into the root of your Tracks 1.5 directory. Enter the following command:
+Open a terminal and change into the root of your Tracks 1.6 directory. Enter the following command:
 
 `rake db:migrate RAILS_ENV=production`
 
-This will update your database with the required schema for Tracks 1.5. If you are using SQLite3, it is not strictly necessary, because the SQLite3 database included with Tracks already has the schema included in it, but it should not do any harm to run the command (nothing will happen if it is up to date).
+This will update your database with the required schema for Tracks 1.6. If you are using SQLite3, it is not strictly necessary, because the SQLite3 database included with Tracks already has the schema included in it, but it should not do any harm to run the command (nothing will happen if it is up to date).
 
 ### Start the server [startserver_install] ###
 
-While still in the Terminal inside the Tracks 1.5 root directory, issue the following command:
+While still in the Terminal inside the Tracks 1.6 root directory, issue the following command:
 
 `script/server -e production`
 
@@ -123,17 +125,28 @@ Visit `http://0.0.0.0:3000/signup` in a browser (or whatever URL and port was re
 
 Once logged in, add some Contexts and Projects, and then go ahead and add your actions. You might also want to visit the Preferences page to edit various settings to your liking. Have fun!
 
-# Upgrading to Tracks 1.5 [upgrading] #
+# Upgrading to Tracks 1.6 [upgrading] #
+
+## Upgrading from Tracks 1.5 [upgrading_1.5] ##
+
+There are no changes to the database between 1.5 and 1.6, but you will need to upgrade your `config/environment.rb` with the new content from `config/environment.rb.tmpl` included in 1.6, as the format of this file has changed a great deal between 1.5 and 1.6.
+
+1. [Back up][backup_upgrade] your existing database and installation of Tracks
+2. [Install Tracks 1.6][install_upgrade] in a new directory
+3. [Copy over][config_upgrade] a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.6 directory
+4. Run `script/server` inside your Tracks 1.6 directory to [start up Tracks 1.6][startserver_upgrade].
+5. Once you are happy that everything is working well, [delete your old Tracks directory][cleanup_upgrade].
+
 
 ## Upgrading from Tracks 1.043 [upgrading_1043] ##
 
 This should be a relatively straightforward, and involves the following main steps:
 
 1. [Back up][backup_upgrade] your existing database and installation of Tracks
-2. [Install Tracks 1.5][install_upgrade] in a new directory
-3. [Copy over][config_upgrade] a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.5 directory
+2. [Install Tracks 1.6][install_upgrade] in a new directory
+3. [Copy over][config_upgrade] a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.6 directory
 5. Run `rake db:migrate RAILS_ENV=production` to [update your old database][rake_upgrade] to the new schema -- you did back up your database didn't you?
-6. Run `script/server` inside your Tracks 1.5 directory to [start up Tracks 1.5][startserver_upgrade].
+6. Run `script/server` inside your Tracks 1.6 directory to [start up Tracks 1.6][startserver_upgrade].
 7. Once you are happy that everything is working well, [delete your old Tracks directory][cleanup_upgrade].
 
 ### Backing up [backup_upgrade] ###
@@ -142,11 +155,11 @@ It's very important that you **back up your database** before you start the upgr
 
 `mysqldump &#8211;-user [user name] &#8211;-password=[password] [database name] &gt; [dump file]`
 
-Rename your old Tracks installation (e.g. to 'tracks-old') so that you can install Tracks 1.5 along side it.
+Rename your old Tracks installation (e.g. to 'tracks-old') so that you can install Tracks 1.6 along side it.
 
-### Install Tracks 1.5 [install_upgrade] ###
+### Install Tracks 1.6 [install_upgrade] ###
 
-There are two methods of downloading Tracks 1.5:
+There are two methods of downloading Tracks 1.6:
 
 1. (Recommended for most people) Download the [zipped package](http://www.rousette.org.uk/projects/files/tracks-current.zip), and unzip in your preferred location (e.g. `~/Sites` for Mac OS X users).
 2. Download using Subversion:
@@ -162,14 +175,14 @@ There are two methods of downloading Tracks 1.5:
 There are a few files you need to copy over from your old installation. If you copy them over rather than moving them, you can still run your old version of Tracks if anything goes awry with the installation process.
 
 1. Copy `/config/database.yml` from your old Tracks directory to the same location in the new one. Double check that the information there is still correct.
-2. Duplicate `/config/environment.rb.tmpl` in the Tracks 1.5 directory, and rename the file to `environment.rb`. Open the file and alter the line `SALT = &quot;change-me&quot;` so that it matches what you had in this file in your old installation. You may also want to change the time zone setting as appropriate for your location (`ENV['TZ'] = 'US/Eastern'`). If you have made any other customisations to `environment.rb` in the past, copy those over, but the contents of the file have changed quite a lot since 1.043, so check it carefully.
+2. Duplicate `/config/environment.rb.tmpl` in the Tracks 1.6 directory, and rename the file to `environment.rb`. Open the file and alter the line `SALT = &quot;change-me&quot;` so that it matches what you had in this file in your old installation. You may also want to change the time zone setting as appropriate for your location (`ENV['TZ'] = 'US/Eastern'`). If you have made any other customisations to `environment.rb` in the past, copy those over, but the contents of the file have changed quite a lot since 1.043, so check it carefully.
 3. Copy your `/log` directory over from your old installation to the root of the new one, or just rename `/log.tmpl` to `log` to start afresh.
 4. If you are using SQLite3, copy your database from `/db` in your old Tracks directory to the same location in the new one.
 5. If you are using Windows, you may need to check the 'shebang' lines (`#!/usr/bin/env ruby`)[^env] of the `/public/dispatch.*` files and all the files in the `/script` directory. They are set to `#!/usr/bin/env ruby` by default. Check the format of those lines in your old installation, and change the new ones as necessary.
 
 ### Update your old database to the new format [rake_upgrade] ###
 
-In a terminal, change directories so that you are inside the Tracks 1.5 directory. Then issue the command to update your Tracks 1.043 database to the format required for Tracks 1.5:
+In a terminal, change directories so that you are inside the Tracks 1.6 directory. Then issue the command to update your Tracks 1.043 database to the format required for Tracks 1.6:
 
 `rake db:migrate RAILS_ENV=production`
 
@@ -177,7 +190,7 @@ Watch the output carefully for errors, but it should report at the end of the pr
 
 ### Start the server [startserver_upgrade] ###
 
-If you're still in the Tracks 1.5 root directory in a terminal, enter the following command to start up Tracks in production mode:
+If you're still in the Tracks 1.6 root directory in a terminal, enter the following command to start up Tracks in production mode:
 
 `script/server -e production`
 
@@ -186,7 +199,7 @@ Visit the URL indicated by the output (e.g. `** Mongrel available at 0.0.0.0:300
 
 ### Clean up your old installation [cleanup_upgrade] ###
 
-Once you're certain that your new Tracks 1.5 installation is working perfectly, you can delete your old Tracks directory.
+Once you're certain that your new Tracks 1.6 installation is working perfectly, you can delete your old Tracks directory.
 
 [^env]: The `env` binary helps to locate other binaries, regardless of their location. If you don't have `env` installed, you'll need to change this line to point to the location of your Ruby binary.
 
@@ -205,4 +218,4 @@ The best option for versions prior to 1.043 is to follow the instructions below
 9. Run the command `rake db_schema_import` inside the Tracks directory. This should import the upgraded schema for 1.043 into your new database.
 10. Run the command `rake load_exported_fixtures` which will import the contents of your old database from the fixtures files in `db/exported_fixtures`.
 11. If you are using Windows, you may need to check the 'shebang' lines (`#!/usr/bin/env ruby`)[^env] of the `/public/dispatch.*` files and all the files in the `/script` directory. They are set to `#!/usr/bin/env ruby` by default. Check the format of those lines in your old installation, and change the new ones as necessary.
-12. Try starting up the server with `script/server` to make sure that all your data has migrated successfully. If all is well, follow the instructions above to [upgrade from version 1.043][upgrading_1043] to Tracks 1.5. If you need to access Tracks from a mobile/cellular phone browser, visit `http://yourdomain.com/mobile/`. This mobile version is a special, lightweight version of Tracks, designed to use on a mobile browser.
\ No newline at end of file
+12. Try starting up the server with `script/server` to make sure that all your data has migrated successfully. If all is well, follow the instructions above to [upgrade from version 1.043][upgrading_1043] to Tracks 1.6. If you need to access Tracks from a mobile/cellular phone browser, visit `http://yourdomain.com/mobile/`. This mobile version is a special, lightweight version of Tracks, designed to use on a mobile browser.
\ No newline at end of file</diff>
      <filename>doc/manual.markdown</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>doc/manual.pdf</filename>
    </modified>
    <modified>
      <diff>@@ -112,11 +112,11 @@
 \usepackage{booktabs}			% Better tables
 \usepackage{tabulary}			% Support longer table cells
 \usepackage[utf8]{inputenc}		% For UTF-8 support
-% \usepackage{xcolor}				% Allow for color (annotations)
+%\usepackage{xcolor}				% Allow for color (annotations)
 
 %\geometry{landscape}			% Activate for rotated page geometry
 
-% \usepackage[parfill]{parskip}	% Activate to begin paragraphs with an empty
+%\usepackage[parfill]{parskip}	% Activate to begin paragraphs with an empty
 								% line rather than an indent
 
 
@@ -133,11 +133,11 @@
 \date{2008-04-07}
 \def\format{complete}
 \def\latexxslt{memoir-twosided-manual.xslt}
-\def\revision{Revision: \$Id: manual.markdown 811 2008-04-07 20:21:00Z bsag \$}
-\def\mytitle{Tracks 1.5 Manual}
-\def\version{1.5}
-\usepackage{xmpincl}
-\includexmp{CCAttributionShareAlike}
+\def\revision{Revision: \$Id: manual.markdown 864 2008-06-03 17:01:00Z bsag \$}
+\def\mytitle{Tracks 1.6 Manual}
+\def\version{1.6}
+%%\usepackage{xmpincl}
+%%\includexmp{CCAttributionShareAlike}
 
 
 %
@@ -254,16 +254,19 @@
 \setlength{\parskip}{\baselineskip/2}
 
 \mainmatter
-\chapter{Installing Tracks 1.5}
-\label{installingtracks1.5}
+\chapter{Installing Tracks 1.6}
+\label{installingtracks1.6}
 
 \section{Introduction}
 \label{introduction}
 
-Tracks 1.5 has been thoroughly beta tested by a large number of people, and should be fully stable for everyday use. However, once set up, Tracks will contain the majority of your plans for your work and personal life, so it's only sensible to make sure that you have frequent, reliable backups of your data. Full changenotes on the release can be found in \texttt{doc/CHANGELOG}. Full API documentation can be found at \texttt{doc/app/index.html}, once you have run \texttt{rake appdoc}
+\textbf{An important note for version 1.6: OpenID support is broken in this release. The fix isn't trivial because of changes to the \texttt{ruby-openid} gem, so we wanted to get this version out now and fix OpenID for the next release. If you depend on OpenID integration, we recommend waiting until the next release.}
 
 
-There are two methods of downloading Tracks 1.5 \textbf{(N.B. These links will not work until Tracks 1.5 final is released)}):
+Tracks 1.6 has been thoroughly beta tested by a large number of people, and should be fully stable for everyday use. However, once set up, Tracks will contain the majority of your plans for your work and personal life, so it's only sensible to make sure that you have frequent, reliable backups of your data. Full changenotes on the release can be found in \texttt{doc/CHANGELOG}. Full API documentation can be found at \texttt{doc/app/index.html}, once you have run \texttt{rake appdoc}
+
+
+There are two methods of downloading Tracks 1.6:
 
 
 \begin{enumerate}
@@ -311,7 +314,7 @@ If you'd like an easy way to access Tracks from any internet-connected computer,
 
 \item Tracks itself
 
-\item Rails 1.2.5 (installed in the \texttt{/vendor/rails} directory, so you do not need to install Rails yourself)
+\item Rails 2.0.2 (installed in the \texttt{/vendor/rails} directory, so you do not need to install Rails yourself)
 
 \item An empty SQLite3 database, set up with the correct database schema
 \end{enumerate}
@@ -332,13 +335,13 @@ If you don't want to (or can't) use one of the all in one installations, you'll
 \item \textbf{Database}. The easiest option is to use SQLite3, as the database is included in the package. All you need then is the \texttt{sqlite3-ruby} gem, as described in step 2, and the SQLite3 libraries and binary (see \href{http://sqlite.org/download.html}{sqlite.org} for downloads and installation instructions). If you want to use MySQL, download and install a package for your platform from \href{http://dev.mysql.com/downloads/mysql/5.0.html}{MySQL.com}. The basic steps for Postgresql should be similar to those for MySQL, but they will not be discussed further here.
 \end{enumerate}
 
-If you are using Unix, you might find \href{http://www.cooldown.com.ar/2006/12/16/install-tracks-on-ubuntu-or-debian/}{this guide} by c00i90wn helpful. It was written for Tracks 1.043, but it should work for Tracks 1.5.
+If you are using Unix, you might find \href{http://www.cooldown.com.ar/2006/12/16/install-tracks-on-ubuntu-or-debian/}{this guide} by c00i90wn helpful. It was written for Tracks 1.043, but it should work for Tracks 1.6.
 
 
 \section{Installation}
 \label{installation}
 
-This description is intended for people installing Tracks from scratch. If you would like to upgrade an existing installation, please see Upgrading to Tracks 1.5 (\autoref{upgrading}).
+This description is intended for people installing Tracks from scratch. If you would like to upgrade an existing installation, please see Upgrading to Tracks 1.6 (\autoref{upgrading}).
 
 
 \begin{enumerate}
@@ -359,7 +362,7 @@ This description is intended for people installing Tracks from scratch. If you w
 
 \item Configure some variables (\autoref{config_install})
 
-\item Populate the database with the Tracks 1.5 schema (\autoref{rake_install})
+\item Populate the database with the Tracks 1.6 schema (\autoref{rake_install})
 
 \item Start the server (\autoref{startserver_install})
 
@@ -385,7 +388,7 @@ Before you go any further, you need to decide which database you will use. See t
 
 \item \textbf{SQLite3}. All you need to do is make sure that you point Tracks to the included SQLite3 database in \texttt{/db} in the next step, Configure variables (\autoref{config_install}).
 
-\item \textbf{MySQL}. Once you have MySQL installed, you need to create a database to use with Tracks 1.5. Go into a terminal and issue the following commands:
+\item \textbf{MySQL}. Once you have MySQL installed, you need to create a database to use with Tracks 1.6. Go into a terminal and issue the following commands:
 \end{enumerate}
 
 \begin{adjustwidth}{2.5em}{2.5em}
@@ -407,7 +410,7 @@ Before you go any further, you need to decide which database you will use. See t
 \begin{enumerate}
 
 
-\item If you downloaded Tracks 1.5 via Subversion, you need to duplicate the files \texttt{database.yml.tmpl} and \texttt{environment.yml.tmpl} and remove the \texttt{*.tmpl} extension from the duplicates. Similarly, duplicate \texttt{/log.tmpl} and remove the \texttt{*.tmpl} extension, then edit the files as described in steps 2 and 3.
+\item If you downloaded Tracks 1.6 via Subversion, you need to duplicate the files \texttt{database.yml.tmpl} and \texttt{environment.yml.tmpl} and remove the \texttt{*.tmpl} extension from the duplicates. Similarly, duplicate \texttt{/log.tmpl} and remove the \texttt{*.tmpl} extension, then edit the files as described in steps 2 and 3.
 
 \item Open the file \texttt{/config/database.yml} and edit the \texttt{production:} section with the details of your database. If you are using MySQL the \texttt{adapter:} line should read \texttt{adapter: mysql}, \texttt{host: localhost} (in the majority of cases), and your username and password should match those you assigned when you created the database. If you are using SQLite3, you should have only two lines under the production section: \texttt{adapter: sqlite3} and \texttt{database: db/tracks-15-blank.db}. If you downloaded the zipped file, the database.yml file is already configured to use the provided SQLite3 file.
 
@@ -416,22 +419,22 @@ Before you go any further, you need to decide which database you will use. See t
 \item If you are using Windows, you may need to check the `shebang' lines (\texttt{\#!/usr/bin/env ruby}) of the \texttt{/public/dispatch.*} files and all the files in the \texttt{/script} directory. They are set to \texttt{\#!/usr/bin/env ruby} by default. This should work for all *nix based setups (Linux or Mac OS X), but Windows users will probably have to change it to something like \texttt{\#c:/ruby/bin/ruby} to point to the Ruby binary on your system.
 \end{enumerate}
 
-\subsection{Populate your database with the Tracks 1.5 schema}
+\subsection{Populate your database with the Tracks 1.6 schema}
 \label{rake_install}
 
-Open a terminal and change into the root of your Tracks 1.5 directory. Enter the following command:
+Open a terminal and change into the root of your Tracks 1.6 directory. Enter the following command:
 
 
 \texttt{rake db:migrate RAILS\_ENV=production}
 
 
-This will update your database with the required schema for Tracks 1.5. If you are using SQLite3, it is not strictly necessary, because the SQLite3 database included with Tracks already has the schema included in it, but it should not do any harm to run the command (nothing will happen if it is up to date).
+This will update your database with the required schema for Tracks 1.6. If you are using SQLite3, it is not strictly necessary, because the SQLite3 database included with Tracks already has the schema included in it, but it should not do any harm to run the command (nothing will happen if it is up to date).
 
 
 \subsection{Start the server}
 \label{startserver_install}
 
-While still in the Terminal inside the Tracks 1.5 root directory, issue the following command:
+While still in the Terminal inside the Tracks 1.6 root directory, issue the following command:
 
 
 \texttt{script/server -e production}
@@ -452,9 +455,29 @@ Visit \texttt{http://0.0.0.0:3000/signup} in a browser (or whatever URL and port
 Once logged in, add some Contexts and Projects, and then go ahead and add your actions. You might also want to visit the Preferences page to edit various settings to your liking. Have fun!
 
 
-\chapter{Upgrading to Tracks 1.5}
+\chapter{Upgrading to Tracks 1.6}
 \label{upgrading}
 
+\section{Upgrading from Tracks 1.5}
+\label{upgrading_1.5}
+
+There are no changes to the database between 1.5 and 1.6, but you will need to upgrade your \texttt{config/environment.rb} with the new content from \texttt{config/environment.rb.tmpl} included in 1.6, as the format of this file has changed a great deal between 1.5 and 1.6.
+
+
+\begin{enumerate}
+
+
+\item Back up (\autoref{backup_upgrade}) your existing database and installation of Tracks
+
+\item Install Tracks 1.6 (\autoref{install_upgrade}) in a new directory
+
+\item Copy over (\autoref{config_upgrade}) a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.6 directory
+
+\item Run \texttt{script/server} inside your Tracks 1.6 directory to start up Tracks 1.6 (\autoref{startserver_upgrade}).
+
+\item Once you are happy that everything is working well, delete your old Tracks directory (\autoref{cleanup_upgrade}).
+\end{enumerate}
+
 \section{Upgrading from Tracks 1.043}
 \label{upgrading_1043}
 
@@ -466,13 +489,13 @@ This should be a relatively straightforward, and involves the following main ste
 
 \item Back up (\autoref{backup_upgrade}) your existing database and installation of Tracks
 
-\item Install Tracks 1.5 (\autoref{install_upgrade}) in a new directory
+\item Install Tracks 1.6 (\autoref{install_upgrade}) in a new directory
 
-\item Copy over (\autoref{config_upgrade}) a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.5 directory
+\item Copy over (\autoref{config_upgrade}) a few configuration files from your Tracks 1.043 directory. If using SQLite3, copy the old database into the new Tracks 1.6 directory
 
 \item Run \texttt{rake db:migrate RAILS\_ENV=production} to update your old database (\autoref{rake_upgrade}) to the new schema -- you did back up your database didn't you?
 
-\item Run \texttt{script/server} inside your Tracks 1.5 directory to start up Tracks 1.5 (\autoref{startserver_upgrade}).
+\item Run \texttt{script/server} inside your Tracks 1.6 directory to start up Tracks 1.6 (\autoref{startserver_upgrade}).
 
 \item Once you are happy that everything is working well, delete your old Tracks directory (\autoref{cleanup_upgrade}).
 \end{enumerate}
@@ -486,13 +509,13 @@ It's very important that you \textbf{back up your database} before you start the
 \texttt{mysqldump ---user [user name] ---password=[password] [database name] $&gt;$ [dump file]}
 
 
-Rename your old Tracks installation (e.g.\ to `tracks-old') so that you can install Tracks 1.5 along side it.
+Rename your old Tracks installation (e.g.\ to `tracks-old') so that you can install Tracks 1.6 along side it.
 
 
-\subsection{Install Tracks 1.5}
+\subsection{Install Tracks 1.6}
 \label{install_upgrade}
 
-There are two methods of downloading Tracks 1.5:
+There are two methods of downloading Tracks 1.6:
 
 
 \begin{enumerate}
@@ -525,7 +548,7 @@ There are a few files you need to copy over from your old installation. If you c
 
 \item Copy \texttt{/config/database.yml} from your old Tracks directory to the same location in the new one. Double check that the information there is still correct.
 
-\item Duplicate \texttt{/config/environment.rb.tmpl} in the Tracks 1.5 directory, and rename the file to \texttt{environment.rb}. Open the file and alter the line \texttt{SALT = &quot;change-me&quot;} so that it matches what you had in this file in your old installation. You may also want to change the time zone setting as appropriate for your location (\texttt{ENV['TZ'] = 'US/Eastern'}). If you have made any other customisations to \texttt{environment.rb} in the past, copy those over, but the contents of the file have changed quite a lot since 1.043, so check it carefully.
+\item Duplicate \texttt{/config/environment.rb.tmpl} in the Tracks 1.6 directory, and rename the file to \texttt{environment.rb}. Open the file and alter the line \texttt{SALT = &quot;change-me&quot;} so that it matches what you had in this file in your old installation. You may also want to change the time zone setting as appropriate for your location (\texttt{ENV['TZ'] = 'US/Eastern'}). If you have made any other customisations to \texttt{environment.rb} in the past, copy those over, but the contents of the file have changed quite a lot since 1.043, so check it carefully.
 
 \item Copy your \texttt{/log} directory over from your old installation to the root of the new one, or just rename \texttt{/log.tmpl} to \texttt{log} to start afresh.
 
@@ -537,7 +560,7 @@ There are a few files you need to copy over from your old installation. If you c
 \subsection{Update your old database to the new format}
 \label{rake_upgrade}
 
-In a terminal, change directories so that you are inside the Tracks 1.5 directory. Then issue the command to update your Tracks 1.043 database to the format required for Tracks 1.5:
+In a terminal, change directories so that you are inside the Tracks 1.6 directory. Then issue the command to update your Tracks 1.043 database to the format required for Tracks 1.6:
 
 
 \texttt{rake db:migrate RAILS\_ENV=production}
@@ -549,7 +572,7 @@ Watch the output carefully for errors, but it should report at the end of the pr
 \subsection{Start the server}
 \label{startserver_upgrade}
 
-If you're still in the Tracks 1.5 root directory in a terminal, enter the following command to start up Tracks in production mode:
+If you're still in the Tracks 1.6 root directory in a terminal, enter the following command to start up Tracks in production mode:
 
 
 \texttt{script/server -e production}
@@ -562,7 +585,7 @@ Visit the URL indicated by the output (e.g.\ \texttt{** Mongrel available at 0.0
 \subsection{Clean up your old installation}
 \label{cleanup_upgrade}
 
-Once you're certain that your new Tracks 1.5 installation is working perfectly, you can delete your old Tracks directory.
+Once you're certain that your new Tracks 1.6 installation is working perfectly, you can delete your old Tracks directory.
 
 
 \section{Upgrading from versions prior to 1.043}
@@ -596,7 +619,7 @@ The best option for versions prior to 1.043 is to follow the instructions below
 
 \item If you are using Windows, you may need to check the `shebang' lines (\texttt{\#!/usr/bin/env ruby})\footnote{The \texttt{env} binary helps to locate other binaries, regardless of their location. If you don't have \texttt{env} installed, you'll need to change this line to point to the location of your Ruby binary.The \texttt{env} binary helps to locate other binaries, regardless of their location. If you don't have \texttt{env} installed, you'll need to change this line to point to the location of your Ruby binary.} of the \texttt{/public/dispatch.*} files and all the files in the \texttt{/script} directory. They are set to \texttt{\#!/usr/bin/env ruby} by default. Check the format of those lines in your old installation, and change the new ones as necessary.
 
-\item Try starting up the server with \texttt{script/server} to make sure that all your data has migrated successfully. If all is well, follow the instructions above to upgrade from version 1.043 (\autoref{upgrading_1043}) to Tracks 1.5. If you need to access Tracks from a mobile/cellular phone browser, visit \texttt{http://yourdomain.com/mobile/}. This mobile version is a special, lightweight version of Tracks, designed to use on a mobile browser.
+\item Try starting up the server with \texttt{script/server} to make sure that all your data has migrated successfully. If all is well, follow the instructions above to upgrade from version 1.043 (\autoref{upgrading_1043}) to Tracks 1.6. If you need to access Tracks from a mobile/cellular phone browser, visit \texttt{http://yourdomain.com/mobile/}. This mobile version is a special, lightweight version of Tracks, designed to use on a mobile browser.
 \end{enumerate}
 
 %</diff>
      <filename>doc/manual.tex</filename>
    </modified>
    <modified>
      <diff>@@ -10,159 +10,161 @@
 ToDoItems = Class.create();
 
 ToDoItems.prototype = {
-  initialize: function()
-  {
-    this.initialized = true;
-    this.contextCollapseCookieManager = new CookieManager();
-    this.toggleItemsMap = {};
-    this.toggleContainerMap = {};
-    this.containerItemsMap = {};
-  },
-  addNextActionListingToggles: function()
-  {
-    this.containerToggles = $$('.container_toggle');
-    containerTogglesClick = this.toggleNextActionListing.bindAsEventListener(this);
-    for(i=0; i &lt; this.containerToggles.length; i++)
+    initialize: function()
     {
-      toggleElem = this.containerToggles[i];
-      containerElem = toggleElem.parentNode.parentNode
-      itemsElem = document.getElementsByClassName('toggle_target',containerElem)[0];
-      this.toggleContainerMap[toggleElem.id] = containerElem;
-      this.toggleItemsMap[toggleElem.id] = itemsElem;
-      this.containerItemsMap[containerElem.id] = itemsElem;
-    }
+        /* keep track of last effect so you can check if the animation has finised */
+        this.lastEffect= null;
+        this.initialized = true;
+        this.contextCollapseCookieManager = new CookieManager();
+        this.toggleItemsMap = {};
+        this.toggleContainerMap = {};
+        this.containerItemsMap = {};
+    },
+    addNextActionListingToggles: function()
+    {
+        this.containerToggles = $$('.container_toggle');
+        containerTogglesClick = this.toggleNextActionListing.bindAsEventListener(this);
+        for(i=0; i &lt; this.containerToggles.length; i++)
+        {
+            toggleElem = this.containerToggles[i];
+            containerElem = toggleElem.parentNode.parentNode
+            itemsElem = $(containerElem.id).select(&quot;div#&quot;+containerElem.id+&quot;items&quot;)[0];
+            this.toggleContainerMap[toggleElem.id] = containerElem;
+            this.toggleItemsMap[toggleElem.id] = itemsElem;
+            this.containerItemsMap[containerElem.id] = itemsElem;
+        }
 	this.setNextActionListingTogglesToCookiedState();
-  },
-  setNextActionListingTogglesToCookiedState: function()
-  {
-    for(i=0; i &lt; this.containerToggles.length; i++)
+    },
+    setNextActionListingTogglesToCookiedState: function()
     {
-      toggleElem = this.containerToggles[i];
-      containerElem = this.toggleContainerMap[toggleElem.id];
-      collapsedCookie = this.contextCollapseCookieManager.getCookie(this.buildCookieName(containerElem));
-      itemsElem = this.toggleItemsMap[toggleElem.id];
-      isExpanded = Element.visible(itemsElem);
-      if (collapsedCookie &amp;&amp; isExpanded)
-      {
-        this.collapseNextActionListing(toggleElem, itemsElem);
-      }
-      else if (!collapsedCookie &amp;&amp; !isExpanded)
-      {
-        this.expandNextActionListing(toggleElem, itemsElem);
-      }
-		}
-  },
-  collapseAllNextActionListing: function(except)
-  {
-    for(i=0; i &lt; this.containerToggles.length; i++)
+        for(i=0; i &lt; this.containerToggles.length; i++)
+        {
+            toggleElem = this.containerToggles[i];
+            containerElem = this.toggleContainerMap[toggleElem.id];
+            collapsedCookie = this.contextCollapseCookieManager.getCookie(this.buildCookieName(containerElem));
+            itemsElem = this.toggleItemsMap[toggleElem.id];
+            isExpanded = Element.visible(itemsElem);
+            if (collapsedCookie &amp;&amp; isExpanded)
+            {
+                this.collapseNextActionListing(toggleElem, itemsElem);
+            }
+            else if (!collapsedCookie &amp;&amp; !isExpanded)
+            {
+                this.expandNextActionListing(toggleElem, itemsElem);
+            }
+        }
+    },
+    collapseAllNextActionListing: function(except)
     {
-      toggleElem = this.containerToggles[i];
-      if (toggleElem != except)
-      {
-        itemsElem = this.toggleItemsMap[toggleElem.id];
-        isExpanded = Element.visible(itemsElem);
-        if (isExpanded)
+        for(i=0; i &lt; this.containerToggles.length; i++)
         {
-          this.collapseNextActionListing(toggleElem, itemsElem);
+            toggleElem = this.containerToggles[i];
+            if (toggleElem != except)
+            {
+                itemsElem = this.toggleItemsMap[toggleElem.id];
+                isExpanded = Element.visible(itemsElem);
+                if (isExpanded)
+                {
+                    this.collapseNextActionListing(toggleElem, itemsElem);
+                }
+            }
         }
-      }
-    }
-  },
-  ensureVisibleWithEffectAppear: function(elemId)
-  {
+    },
+    ensureVisibleWithEffectAppear: function(elemId)
+    {
   	if ($(elemId).style.display == 'none')
   	{
-  		new Effect.Appear(elemId,{duration:0.4});
+            new Effect.Appear(elemId,{duration:0.4});
   	}
-  },
-  fadeAndRemoveItem: function(itemContainerElemId)
-  {
+    },
+    fadeAndRemoveItem: function(itemContainerElemId)
+    {
   	var fadingElemId = itemContainerElemId + '-fading';
   	$(itemContainerElemId).setAttribute('id',fadingElemId);
   	Element.removeClassName($(fadingElemId),'item-container');
   	new Effect.Fade(fadingElemId,{afterFinish:function(effect) { Element.remove(fadingElemId); }, duration:0.4});
-  },
-  toggleNextActionListing: function(event)
-  {
-    Event.stop(event);
-    toggleElem = Event.element(event).parentNode;
-    itemsElem = this.toggleItemsMap[toggleElem.id];
-   	containerElem = this.toggleContainerMap[toggleElem.id];
-    if (Element.visible(itemsElem))
+    },
+    toggleNextActionListing: function(event)
     {
-      this.collapseNextActionListing(toggleElem, itemsElem);
-	   	this.contextCollapseCookieManager.setCookie(this.buildCookieName(containerElem), true)
-    }
-    else
+        Event.stop(event);
+        toggleElem = Event.element(event).parentNode;
+        itemsElem = this.toggleItemsMap[toggleElem.id];
+   	containerElem = this.toggleContainerMap[toggleElem.id];
+        if (Element.visible(itemsElem))
+        {
+            this.collapseNextActionListing(toggleElem, itemsElem);
+            this.contextCollapseCookieManager.setCookie(this.buildCookieName(containerElem), true)
+        }
+        else
+        {
+            this.expandNextActionListing(toggleElem, itemsElem);
+            this.contextCollapseCookieManager.clearCookie(this.buildCookieName(containerElem))
+        }
+    },
+    findToggleElemForContext : function(contextElem)
     {
-      this.expandNextActionListing(toggleElem, itemsElem);
-	   	this.contextCollapseCookieManager.clearCookie(this.buildCookieName(containerElem))
-    }
-  },
-  findToggleElemForContext : function(contextElem)
-  {
-    childElems = $A($(contextElem).getElementsByTagName('a'));
-    return childElems.detect(function(childElem) { return childElem.className == 'container_toggle' });
-  },
-  expandNextActionListing: function(toggleElem, itemsElem, skipAnimation)
-  {
-    itemsElem = $(itemsElem)
-    if (skipAnimation == true) {
-      itemsElem.style.display = 'block';
-    }
-    else
+        childElems = $A($(contextElem).getElementsByTagName('a'));
+        return childElems.detect(function(childElem) { return childElem.className == 'container_toggle' });
+    },
+    expandNextActionListing: function(toggleElem, itemsElem, skipAnimation)
     {
-      Effect.BlindDown(itemsElem, { duration: 0.4 });
-    }
-    toggleElem.setAttribute('title', 'Collapse');
-    imgElem = this.findToggleImgElem(toggleElem);
+        itemsElem = $(itemsElem)
+        if (skipAnimation == true) {
+            itemsElem.style.display = 'block';
+        }
+        else
+        {
+            this.lastEffect = Effect.BlindDown(itemsElem, { duration: 0.4 });
+        }
+        toggleElem.setAttribute('title', 'Collapse');
+        imgElem = this.findToggleImgElem(toggleElem);
   	imgElem.src = imgElem.src.replace('expand','collapse');
-    imgElem.setAttribute('title','Collapse');
-  },
-  ensureContainerHeight: function(itemsElem)
-  {
-    itemsElem = $(itemsElem);
-    Element.setStyle(itemsElem, {height : ''});
-    Element.setStyle(itemsElem, {overflow : ''});
-  },
-  expandNextActionListingByContext: function(itemsElem, skipAnimation)
-  {
-    contextElem = this.findNearestParentByClassName($(itemsElem), &quot;context&quot;);
-    toggleElem = this.findToggleElemForContext(contextElem);
-    this.expandNextActionListing(toggleElem, itemsElem, skipAnimation);
-  },
-  collapseNextActionListing: function(toggleElem, itemsElem)
-  {
-    Effect.BlindUp(itemsElem, { duration: 0.4});
-    toggleElem.setAttribute('title', 'Expand');
-    imgElem = this.findToggleImgElem(toggleElem);
-   	imgElem.src = imgElem.src.replace('collapse','expand');
+        imgElem.setAttribute('title','Collapse');
+    },
+    ensureContainerHeight: function(itemsElem)
+    {
+        itemsElem = $(itemsElem);
+        Element.setStyle(itemsElem, {height : ''});
+        Element.setStyle(itemsElem, {overflow : ''});
+    },
+    expandNextActionListingByContext: function(itemsElem, skipAnimation)
+    {
+        contextElem = this.findNearestParentByClassName($(itemsElem), &quot;context&quot;);
+        toggleElem = this.findToggleElemForContext(contextElem);
+        this.expandNextActionListing(toggleElem, itemsElem, skipAnimation);
+    },
+    collapseNextActionListing: function(toggleElem, itemsElem)
+    {
+        this.lastEffect = Effect.BlindUp(itemsElem, { duration: 0.4});
+        toggleElem.setAttribute('title', 'Expand');
+        imgElem = this.findToggleImgElem(toggleElem);
+        imgElem.src = imgElem.src.replace('collapse','expand');
    	imgElem.setAttribute('title','Expand');
-  },
-  findToggleImgElem: function(toggleElem)
-  {
-    childImgElems = $A(toggleElem.getElementsByTagName('img'));
-    return childImgElems[0];
-  },
-  buildCookieName: function(containerElem)
-  {
+    },
+    findToggleImgElem: function(toggleElem)
+    {
+        childImgElems = $A(toggleElem.getElementsByTagName('img'));
+        return childImgElems[0];
+    },
+    buildCookieName: function(containerElem)
+    {
    	tracks_login = this.contextCollapseCookieManager.getCookie('tracks_login');
-    return 'tracks_'+tracks_login+'_context_' + containerElem.id + '_collapsed';
-  },
+        return 'tracks_'+tracks_login+'_context_' + containerElem.id + '_collapsed';
+    },
 
-  findNearestParentByClassName: function(elem, parentClassName)
-  {
+    findNearestParentByClassName: function(elem, parentClassName)
+    {
   	var parentElem = elem.parentNode;
   	while(parentElem)
   	{
-  		if (Element.hasClassName(parentElem, parentClassName))
-  		{
-  			return parentElem;
-  		}
-  		parentElem = parentElem.parentNode;
+            if (Element.hasClassName(parentElem, parentClassName))
+            {
+                return parentElem;
+            }
+            parentElem = parentElem.parentNode;
   	}
   	return null;
-  }
+    }
 }
 
 todoItems = new ToDoItems();</diff>
      <filename>public/javascripts/todo-items.js</filename>
    </modified>
    <modified>
      <filename>script/plugin</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>public/javascripts/tracks_837.js</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>73c16270917c94448ebd0d91ba0da612687856db</id>
    </parent>
    <parent>
      <id>0380d1b15ae88a71c90ea94c58afc2dfbb374153</id>
    </parent>
  </parents>
  <author>
    <name>bsag</name>
    <email>butshesagirl@rousette.org.uk</email>
  </author>
  <url>http://github.com/bsag/tracks/commit/c1109b3fb33a9c013fb97d2d04ecee4003d23554</url>
  <id>c1109b3fb33a9c013fb97d2d04ecee4003d23554</id>
  <committed-date>2008-06-15T01:59:22-07:00</committed-date>
  <authored-date>2008-06-15T01:59:22-07:00</authored-date>
  <message>Merge branch 'svn-tracking'
Up to r881 of svn repository
* svn-tracking: (22 commits)
  Added .gitconfig
  Added yaml_db plugin: http://opensource.heroku.com/
  applied patch from Eric from #732
  fixes #730 restores ability to delete user from user management page
  fixes #724 where editing todos truncates the project name of the todo when the project name contains quotes (&quot;)
  Applied patch from Eric Pallen whcih automatically converts url's to links. Thanks Eric!
  explain that yaml cannot yet be used for backup as importing is not implemented yet. from mailinglist.
  hopefully fixes #727.Changes the check on running animation to finished animation
  regenerate compressed js and cleanup whitespace
  turns out that getElementsByClassName is removed from prototype and it therfore falls back to the function of the browser which has different semantics. Found here http://www.prototypejs.org/api/utility/getElementsByClassName
  forgot to create a new compressed js from the previous js changes
  in the stats page you can downdrill to see the active todos in a certain week from the running time charts. This patch adds the option to see all active todos from the selected week and older.
  fix #727. Adds a check to prevent expand/collapse while a previous expand/collaps is still animating
  fixed small problem where updating a todo from mobile resulted in an error becase source_view was nil
  fixes #726. Thanks Eric Pallen for the fix. The mobile view showed active todos from completed projects while the home page does not.
  merges changes from tracks1.6 to trunk
  prepares trunk for 1.6 release
  fixes #713. Adds behavior for edit/star/delete/check buttons of todo even if there is no todo to show. This makes sure that the behaviors are present when you add a new todo through AJAX.
  fixes #718. The link included the number of actions which resulted from last commit
  removed some more whitespace to reduce the download of the mobile view.
  ...</message>
  <tree>be978cb6af736182780dd2a01a406b80cdbfc35d</tree>
  <committer>
    <name>bsag</name>
    <email>butshesagirl@rousette.org.uk</email>
  </committer>
</commit>
