From 77cf667e75bff689308026213d025ab4e1dba570 Mon Sep 17 00:00:00 2001 From: Dmitry Babenko Date: Tue, 8 Jan 2013 21:31:24 +0200 Subject: [PATCH] ChiliProject 3.4 compatibility --- .../_progressive_projects_list.html.erb | 2 + init.rb | 14 ++++-- lib/progressive/application_helper_patch.rb | 44 +++++++++++++++++++ lib/progressive_projects_list.rb | 4 ++ 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 lib/progressive/application_helper_patch.rb diff --git a/app/views/settings/_progressive_projects_list.html.erb b/app/views/settings/_progressive_projects_list.html.erb index bdc339a..5ddc56c 100644 --- a/app/views/settings/_progressive_projects_list.html.erb +++ b/app/views/settings/_progressive_projects_list.html.erb @@ -1,8 +1,10 @@
+<% if Rails::VERSION::MAJOR >= 3 %>

<%= setting_label(:show_project_menu) %> <%= check_box_tag('settings[show_project_menu]', true, @settings['show_project_menu']) %>

+<% end %>

<%= setting_label(:show_project_description) %> <%= check_box_tag('settings[show_project_description]', true, @settings['show_project_description']) %> diff --git a/init.rb b/init.rb index 344d926..a46ea8b 100644 --- a/init.rb +++ b/init.rb @@ -13,6 +13,14 @@ }, :partial => 'settings/progressive_projects_list' end -require 'progressive_projects_list_listener' -require 'progressive_projects_list' -ProjectsHelper.send(:include, ProgressiveProjectsList) +if Rails::VERSION::MAJOR >= 3 + require 'progressive_projects_list_listener' + require 'progressive_projects_list' +else + # Rails 2.x (ChiliProject) compatibility + require 'dispatcher' + Dispatcher.to_prepare :progressive_projects_list do + require_dependency 'progressive_projects_list' + require_dependency 'progressive/application_helper_patch' + end +end diff --git a/lib/progressive/application_helper_patch.rb b/lib/progressive/application_helper_patch.rb new file mode 100644 index 0000000..da3288f --- /dev/null +++ b/lib/progressive/application_helper_patch.rb @@ -0,0 +1,44 @@ +module Progressive::ApplicationHelperPatch + def self.included(base) # :nodoc: + base.send(:include, InstanceMethods) + end + + module InstanceMethods + # Renders a tree of projects as a nested set of unordered lists + # The given collection may be a subset of the whole project tree + # (eg. some intermediate nodes are private and can not be seen) + def render_project_nested_lists(projects) + s = '' + if projects.any? + ancestors = [] + original_project = @project + projects.sort_by(&:lft).each do |project| + # set the project environment to please macros. + @project = project + if (ancestors.empty? || project.is_descendant_of?(ancestors.last)) + s << "

\n" + end + end + classes = (ancestors.empty? ? 'root' : 'child') + s << "
  • " + s << h(block_given? ? yield(project) : project.name) + s << "
    \n" + ancestors << project + end + s << ("
  • \n" * ancestors.size) + @project = original_project + end + s.html_safe + end + end +end + +unless ApplicationHelper.included_modules.include? Progressive::ApplicationHelperPatch + ApplicationHelper.send(:include, Progressive::ApplicationHelperPatch) +end diff --git a/lib/progressive_projects_list.rb b/lib/progressive_projects_list.rb index f74b978..c200680 100644 --- a/lib/progressive_projects_list.rb +++ b/lib/progressive_projects_list.rb @@ -60,3 +60,7 @@ def render_project_menu(project) end end end + +unless ProjectsHelper.included_modules.include? ProgressiveProjectsList + ProjectsHelper.send(:include, ProgressiveProjectsList) +end