Mercurial > hg > soundsoftware-site
changeset 787:a36cce722860 feature_14
Merge from branch "cannam"
author | luisf <luis.figueira@eecs.qmul.ac.uk> |
---|---|
date | Fri, 18 Nov 2011 16:53:34 +0000 |
parents | ae82810661da (current diff) 32d853e2e7ed (diff) |
children | 6300012e354e dc15818e132e b5e8049ded56 |
files | |
diffstat | 20 files changed, 208 insertions(+), 66 deletions(-) [+] |
line wrap: on
line diff
--- a/app/controllers/application_controller.rb Fri Nov 18 16:53:19 2011 +0000 +++ b/app/controllers/application_controller.rb Fri Nov 18 16:53:34 2011 +0000 @@ -177,14 +177,14 @@ def find_project @project = Project.find(params[:id]) rescue ActiveRecord::RecordNotFound - render_404 + User.current.logged? ? render_404 : require_login end # Find project of id params[:project_id] def find_project_by_project_id @project = Project.find(params[:project_id]) rescue ActiveRecord::RecordNotFound - render_404 + User.current.logged? ? render_404 : require_login end # Find a project based on params[:project_id]
--- a/app/helpers/repositories_helper.rb Fri Nov 18 16:53:19 2011 +0000 +++ b/app/helpers/repositories_helper.rb Fri Nov 18 16:53:34 2011 +0000 @@ -281,4 +281,24 @@ ) + '<br />' + l(:text_scm_path_encoding_note)) end + + # Generates a link to a downloadable archive for a revision + # Options: + # * :text - Link text (default to the formatted revision) + def link_to_revision_archive(repository, revision, project, options={}) + method = repository.class.name.demodulize.underscore + "_link_to_revision_archive" + if repository.is_a?(Repository) && + respond_to?(method) && method != 'link_to_revision_archive' + send(method, repository, revision, project, options) + end + end + + def mercurial_link_to_revision_archive(repository, revision, project, options={}) + text = options.delete(:text) || format_revision(revision) + rev = revision.respond_to?(:identifier) ? revision.identifier : revision + if rev.blank? then rev = 'tip' end + content_tag('a', h(text), + { :href => "/hg/#{project.identifier}/archive/#{rev}.zip" }.merge(options)); + end + end
--- a/app/views/account/register.rhtml Fri Nov 18 16:53:19 2011 +0000 +++ b/app/views/account/register.rhtml Fri Nov 18 16:53:34 2011 +0000 @@ -29,9 +29,10 @@ <p><label for="user_mail"><%=l(:field_mail)%> <span class="required">*</span></label> <%= text_field 'user', 'mail' %></p> +<!-- We only support English in this site <p><label for="user_language"><%=l(:field_language)%></label> <%= select("user", "language", lang_options_for_select) %></p> - +--> <h3><%=l(:label_ssamr_details)%></h3>
--- a/app/views/repositories/_navigation.rhtml Fri Nov 18 16:53:19 2011 +0000 +++ b/app/views/repositories/_navigation.rhtml Fri Nov 18 16:53:34 2011 +0000 @@ -2,7 +2,7 @@ <%= javascript_include_tag 'repository_navigation' %> <% end %> -<%= link_to l(:label_statistics), {:action => 'stats', :id => @project}, :class => 'icon icon-stats' %> +<%= link_to_revision_archive(@repository, @changeset, @project, { :text => l(:label_download_revision), :class => 'icon icon-package' }) %> <% form_tag({:action => controller.action_name, :id => @project, :path => to_path_param(@path), :rev => ''}, {:method => :get, :id => 'revision_selector'}) do -%> <!-- Branches Dropdown --> @@ -19,3 +19,5 @@ | <%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %> <% end -%> + +
--- a/app/views/repositories/revision.rhtml Fri Nov 18 16:53:19 2011 +0000 +++ b/app/views/repositories/revision.rhtml Fri Nov 18 16:53:34 2011 +0000 @@ -1,11 +1,15 @@ <div class="contextual"> + + <%= link_to_revision_archive(@repository, @changeset, @project, { :text => l(:label_download_revision), :class => 'icon icon-package' }) %> + + « <% unless @changeset.previous.nil? -%> <%= link_to_revision(@changeset.previous, @project, :text => l(:label_previous)) %> <% else -%> <%= l(:label_previous) %> <% end -%> -| + <% unless @changeset.next.nil? -%> <%= link_to_revision(@changeset.next, @project, :text => l(:label_next)) %> <% else -%> @@ -21,6 +25,7 @@ <%= text_field_tag 'rev', @rev, :size => 8 %> <%= submit_tag 'OK', :name => nil %> <% end %> + </div> <h2><%= l(:label_revision) %> <%= format_revision(@changeset) %></h2>
--- a/app/views/repositories/show.rhtml Fri Nov 18 16:53:19 2011 +0000 +++ b/app/views/repositories/show.rhtml Fri Nov 18 16:53:34 2011 +0000 @@ -51,9 +51,14 @@ :id => @project, :page => nil, :key => User.current.rss_key})) %> <% end %> +<p class="statistics"> +<%= link_to l(:label_statistics), {:action => 'stats', :id => @project}, :class => 'icon icon-stats' %> +</p> + <% other_formats_links do |f| %> <%= f.link_to 'Atom', :url => {:action => 'revisions', :id => @project, :key => User.current.rss_key} %> <% end %> + <% end %> <% end %>
--- a/config/locales/en.yml Fri Nov 18 16:53:19 2011 +0000 +++ b/config/locales/en.yml Fri Nov 18 16:53:34 2011 +0000 @@ -169,7 +169,7 @@ notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." notice_failed_to_save_members: "Failed to save member(s): %{errors}." notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit." - notice_account_pending: "Your account was created and is now pending administrator approval." + notice_account_pending: "Your account is now awaiting administrator approval. You will receive a notification email when your account has been activated." notice_default_data_loaded: Default configuration successfully loaded. notice_unable_delete_version: Unable to delete version. notice_unable_delete_time_entry: Unable to delete time log entry. @@ -698,6 +698,7 @@ label_latest_revision_plural: Latest revisions label_view_revisions: View revisions label_view_all_revisions: View all revisions + label_download_revision: Download as Zip label_max_size: Maximum size label_sort_highest: Move to top label_sort_higher: Move up
--- a/extra/soundsoftware/SoundSoftware.pm Fri Nov 18 16:53:19 2011 +0000 +++ b/extra/soundsoftware/SoundSoftware.pm Fri Nov 18 16:53:34 2011 +0000 @@ -110,6 +110,11 @@ req_override => OR_AUTHCFG, args_how => TAKE1, }, + { + name => 'SoundSoftwareSslRequired', + req_override => OR_AUTHCFG, + args_how => TAKE1, + }, ); sub SoundSoftwareDSN { @@ -143,6 +148,8 @@ } } +sub SoundSoftwareSslRequired { set_val('SoundSoftwareSslRequired', @_); } + sub trim { my $string = shift; $string =~ s/\s{2,}/ /g; @@ -184,33 +191,80 @@ my $project_id = get_project_identifier($dbh, $r); - if (!defined $read_only_methods{$method}) { - print STDERR "SoundSoftware.pm:$$: Method is not read-only\n"; - if (project_repo_is_readonly($dbh, $project_id, $r)) { - print STDERR "SoundSoftware.pm:$$: Project repo is read-only, refusing access\n"; - return FORBIDDEN; - } else { - print STDERR "SoundSoftware.pm:$$: Project repo is read-write, authentication handler required\n"; - return OK; - } - } + # We want to delegate most of the work to the authentication + # handler (to ensure that user is asked to login even for + # nonexistent projects -- so they can't tell whether a private + # project exists or not without authenticating). So + # + # * if the project is public + # - if the method is read-only + # + set handler to OK, no auth needed + # - if the method is not read-only + # + if the repo is read-only, return forbidden + # + else require auth + # * if the project is not public or does not exist + # + require auth + # + # If we are requiring auth and are not currently https, and + # https is required, then we must return a redirect to https + # instead of an OK. my $status = get_project_status($dbh, $project_id, $r); + my $readonly = project_repo_is_readonly($dbh, $project_id, $r); $dbh->disconnect(); undef $dbh; - if ($status == 0) { # nonexistent - print STDERR "SoundSoftware.pm:$$: Project does not exist, refusing access\n"; - return FORBIDDEN; - } elsif ($status == 1) { # public - print STDERR "SoundSoftware.pm:$$: Project is public, no restriction here\n"; - $r->set_handlers(PerlAuthenHandler => [\&OK]) - } else { # private - print STDERR "SoundSoftware.pm:$$: Project is private, authentication handler required\n"; + my $auth_ssl_reqd = will_require_ssl_auth($r); + + if ($status == 1) { # public + + print STDERR "SoundSoftware.pm:$$: Project is public\n"; + + if (!defined $read_only_methods{$method}) { + + print STDERR "SoundSoftware.pm:$$: Method is not read-only\n"; + + if ($readonly) { + print STDERR "SoundSoftware.pm:$$: Project repo is read-only, refusing access\n"; + return FORBIDDEN; + } else { + print STDERR "SoundSoftware.pm:$$: Project repo is read-write, auth required\n"; + # fall through, this is the normal case + } + + } elsif ($auth_ssl_reqd and $r->unparsed_uri =~ m/cmd=branchmap/) { + + # A hac^H^H^Hspecial case. We want to ensure we switch to + # https (if it will be necessarily for authentication) + # before the first POST request, and this is what I think + # will give us suitable warning for Mercurial. + + print STDERR "SoundSoftware.pm:$$: Switching to HTTPS in preparation\n"; + # fall through, this is the normal case + + } else { + # Public project, read-only method -- this is the only + # case we can decide for certain to accept in this function + print STDERR "SoundSoftware.pm:$$: Method is read-only, no restriction here\n"; + $r->set_handlers(PerlAuthenHandler => [\&OK]); + return OK; + } + + } else { # status != 1, i.e. nonexistent or private -- equivalent here + + print STDERR "SoundSoftware.pm:$$: Project is private or nonexistent, auth required\n"; + # fall through } - return OK + if ($auth_ssl_reqd) { + my $redir_to = "https://" . $r->hostname() . $r->unparsed_uri(); + print STDERR "SoundSoftware.pm:$$: Need to switch to HTTPS, redirecting to $redir_to\n"; + $r->headers_out->add('Location' => $redir_to); + return REDIRECT; + } else { + return OK; + } } sub authen_handler { @@ -237,6 +291,16 @@ print STDERR "SoundSoftware.pm:$$: User is " . $r->user . ", got password\n"; + my $status = get_project_status($dbh, $project_id, $r); + if ($status == 0) { + # nonexistent, behave like private project you aren't a member of + print STDERR "SoundSoftware.pm:$$: Project doesn't exist, not permitted\n"; + $dbh->disconnect(); + undef $dbh; + $r->note_auth_failure(); + return AUTH_REQUIRED; + } + my $permitted = is_permitted($dbh, $project_id, $r->user, $redmine_pass, $r); $dbh->disconnect(); @@ -279,6 +343,30 @@ $ret; } +sub will_require_ssl_auth { + my $r = shift; + + my $cfg = Apache2::Module::get_config + (__PACKAGE__, $r->server, $r->per_dir_config); + + if ($cfg->{SoundSoftwareSslRequired} eq "on") { + if ($r->dir_config('HTTPS') eq "on") { + # already have ssl + return 0; + } else { + # require ssl for auth, don't have it yet + return 1; + } + } elsif ($cfg->{SoundSoftwareSslRequired} eq "off") { + # don't require ssl for auth + return 0; + } else { + print STDERR "WARNING: SoundSoftware.pm:$$: SoundSoftwareSslRequired should be either 'on' or 'off'\n"; + # this is safer + return 1; + } +} + sub project_repo_is_readonly { my $dbh = shift; my $project_id = shift; @@ -368,6 +456,7 @@ } $sthldap->finish(); undef $sthldap; + last if ($ret); } } else { print STDERR "SoundSoftware.pm:$$: User $redmine_user lacks required role for this project\n"; @@ -383,14 +472,13 @@ sub get_project_identifier { my $dbh = shift; my $r = shift; - my $location = $r->location; - my ($repo) = $r->uri =~ m{$location/*([^/]+)}; + my ($repo) = $r->uri =~ m{$location/*([^/]*)}; return $repo if (!$repo); $repo =~ s/[^a-zA-Z0-9\._-]//g; - + # The original Redmine.pm returns the string just calculated as # the project identifier. That won't do for us -- we may have # (and in fact already do have, in our test instance) projects @@ -410,7 +498,6 @@ my $prefix = $cfg->{SoundSoftwareRepoPrefix}; if (!defined $prefix) { $prefix = '%/'; } - my $identifier = ''; $sth->execute($prefix . $repo); @@ -449,6 +536,18 @@ # to project identifier if any are found if ($name =~ m/[^\w\d\s\._-]/) { $name = $project_id; + } elsif ($name =~ m/^\s*$/) { + # empty or whitespace + $name = $project_id; + } + + if ($name =~ m/^\s*$/) { + # nothing even in $project_id -- probably a nonexistent project. + # use repo name instead (don't want to admit to user that project + # doesn't exist) + my $location = $r->location; + my ($repo) = $r->uri =~ m{$location/*([^/]*)}; + $name = $repo; } my $realm = '"Mercurial repository for ' . "'$name'" . '"';
--- a/public/themes/soundsoftware/stylesheets/application.css Fri Nov 18 16:53:19 2011 +0000 +++ b/public/themes/soundsoftware/stylesheets/application.css Fri Nov 18 16:53:34 2011 +0000 @@ -134,6 +134,8 @@ #footer { background-color: #fdfbf5; border: 0; border-top: 2px solid #a9b680; color: #3e442c; text-align: right; } #footer a { color: #be5700; font-weight: bold; } +p.statistics { text-align: right; font-size:0.9em; color: #666; } + #main { margin-top: 135px; font:95%; background: #fdfaf0; } #main a { font-weight: medium; color: #be5700;} #main a:hover { color: #be5700; text-decoration: underline; }
--- a/vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb Fri Nov 18 16:53:34 2011 +0000 @@ -12,8 +12,12 @@ def projects_check_box_tags(name, projects) s = '' projects.sort.each do |project| - s << "<label>#{ check_box_tag name, project.id, false } #{link_to_project project}</label>\n" + if User.current.allowed_to?(:edit_publication, project) + s << "<label>#{ check_box_tag name, project.id, false } #{link_to_project project}</label>\n" + s << '<br />' + end end + s end @@ -43,12 +47,12 @@ f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", :class => 'icon icon-del') end - def link_to_add_fields(name, f, association) + def link_to_add_author_fields(name, f, association, action) new_object = f.object.class.reflect_on_association(association).klass.new fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| render(association.to_s.singularize + "_fields", :f => builder) end - link_to_function(name, h("add_fields(this, '#{association}', '#{escape_javascript(fields)}')"), { :class => 'icon icon-add', :id => "add_another_author" }) + link_to_function(name, h("add_author_fields(this, '#{association}', '#{escape_javascript(fields)}', '#{action}')"), { :class => 'icon icon-add', :id => "add_another_author" }) end def sanitized_object_name(object_name)
--- a/vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb Fri Nov 18 16:53:34 2011 +0000 @@ -7,18 +7,16 @@ <dl> <% @project.publications.each do |publication| %> <dt> - <%= link_to publication.title, :controller => 'publications', :action => 'show', :id => publication, :project_id => @project %> - </dt> - <dd> <span class="authors"> - <%= publication.authorships.map { |a| h a.name_on_paper }.join(', ') %> + <%= publication.authorships.map { |a| h a.name_on_paper }.join(', ') %><% if !publication.authorships.empty? %>.<% end %> </span> + <span class="title"><%= link_to publication.title, :controller => 'publications', :action => 'show', :id => publication, :project_id => @project %></span> <% if publication.bibtex_entry.year.to_s != "" %> <span class="year"> - <%= publication.bibtex_entry.year %> + (<%= publication.bibtex_entry.year %>) </span> <% end %> - </dd> + </dt><dd></dd> <% end -%> </dl> </div>
--- a/vendor/plugins/redmine_bibliography/app/views/publications/_authorship_fields.rhtml Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_bibliography/app/views/publications/_authorship_fields.rhtml Fri Nov 18 16:53:34 2011 +0000 @@ -19,11 +19,11 @@ <p style="margin-bottom: -2.5em; padding-bottom; 0"><label><%= l(:identify_author_question) %></label></p> <p class="author_identify"> - <label class='inline'><%= radio_button_tag(:identify_author, "yes", false, :name => form_tag_name(f.object_name,:identify_author ), :id => form_tag_id( f.object_name, :identify_author_yes ), :onclick => "identify_author_status($(this).value, #{form_object_id(f.object_name) });") %> <%= l(:identify_author_yes) %> </label><br /> + <label class='inline'><%= radio_button_tag(:identify_author, "yes", false, :name => form_tag_name(f.object_name,:identify_author ), :id => form_tag_id( f.object_name, :identify_author_yes ), :onchange => "identify_author_status($(this).value, #{form_object_id(f.object_name) });") %> <%= l(:identify_author_yes) %> </label><br /> - <label class='inline'><%= radio_button_tag(:identify_author, "correct", false, :name => form_tag_name(f.object_name,:identify_author ), :id => form_tag_id( f.object_name, :identify_author_corrections ), :onclick => "identify_author_status($(this).value, #{form_object_id(f.object_name) });") %> <%= l(:identify_author_correct) %> </label><br /> + <label class='inline'><%= radio_button_tag(:identify_author, "correct", false, :name => form_tag_name(f.object_name,:identify_author ), :id => form_tag_id( f.object_name, :identify_author_corrections ), :onchange => "identify_author_status($(this).value, #{form_object_id(f.object_name) });") %> <%= l(:identify_author_correct) %> </label><br /> - <label class='inline'><%= radio_button_tag(:identify_author, "no", true, :name => form_tag_name(f.object_name,:identify_author ), :id => form_tag_id( f.object_name, :identify_author_no ), :onclick => "identify_author_status($(this).value, #{form_object_id(f.object_name) });") %> <%= l(:identify_author_no) %> </label><br /> + <label class='inline'><%= radio_button_tag(:identify_author, "no", true, :name => form_tag_name(f.object_name,:identify_author ), :id => form_tag_id( f.object_name, :identify_author_no ), :onchange => "identify_author_status($(this).value, #{form_object_id(f.object_name) });") %> <%= l(:identify_author_no) %> </label><br /> </p> </div> @@ -45,12 +45,11 @@ <p> - <% if params[:action] == 'new' %> - <%= button_to_function l(:label_save_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %> - <% else %> -<%= button_to_function l(:label_edit_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %> - - <% end %> + <%- if params[:action] == 'new' -%> + <%= button_to_function l(:label_save_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %> + <%- else -%> + <%= button_to_function l(:label_edit_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %> + <%- end -%> <%= link_to_remove_fields l("remove_author"), f %>
--- a/vendor/plugins/redmine_bibliography/app/views/publications/_form.html.erb Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_bibliography/app/views/publications/_form.html.erb Fri Nov 18 16:53:34 2011 +0000 @@ -24,7 +24,7 @@ <% f.fields_for :authorships do |builder| -%> <%= render "authorship_fields", :f => builder %> <%- end -%> - <%= link_to_add_fields l(:label_add_an_author), f, :authorships %> + <%= link_to_add_author_fields l(:label_add_an_author), f, :authorships, params[:action] %> </div> </div>
--- a/vendor/plugins/redmine_bibliography/app/views/users/show.rhtml Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_bibliography/app/views/users/show.rhtml Fri Nov 18 16:53:34 2011 +0000 @@ -51,18 +51,17 @@ <% @publications.each do |publication|%> <dt> - <%= link_to publication.title, :controller => 'publications', :action => 'show', :id => publication %> - </dt> - - <dd> <span class="authors"> - <%= publication.authorships.map { |a| h a.name_on_paper }.join(', ') %> + <%= publication.authorships.map { |a| h a.name_on_paper }.join(', ') %><% if !publication.authorships.empty? %>.<% end %> </span> + <span class="title"><%= link_to publication.title, :controller => 'publications', :action => 'show', :id => publication %></span> <% if publication.bibtex_entry.year.to_s != "" %> <span class="year"> - <%= publication.bibtex_entry.year %> + (<%= publication.bibtex_entry.year %>) </span> <% end %> + </dt> + <dd> </dd> <% end %> </div>
--- a/vendor/plugins/redmine_bibliography/assets/javascripts/authors.js Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_bibliography/assets/javascripts/authors.js Fri Nov 18 16:53:34 2011 +0000 @@ -3,12 +3,15 @@ $(link).up(".fields").hide(); } -function add_fields(link, association, content) { - var new_id = new Date().getTime(); - var regexp = new RegExp("new_" + association, "g") - $(link).insert({ - before: content.replace(regexp, new_id) - }); +function add_author_fields(link, association, content, action) { + var new_id = new Date().getTime(); + var regexp = new RegExp("new_" + association, "g"); + $(link).insert({ + before: content.replace(regexp, new_id) + }); + if(action != "new"){ + toggle_save_author(new_id, $(link)); + }; } function identify_author_status(status, object_id) {
--- a/vendor/plugins/redmine_bibliography/assets/stylesheets/bibliography.css Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_bibliography/assets/stylesheets/bibliography.css Fri Nov 18 16:53:34 2011 +0000 @@ -39,6 +39,7 @@ div#bibliography dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; } div#bibliography .box dd { margin-bottom: 0.6em; padding-left: 0; } div#bibliography dd .authors { font-style: italic; } +div#bibliography dt .title { font-style: italic; } div#bibliography dd span.authors { color: #808080; } div#bibliography dd span.year { padding-left: 0.6em; }
--- a/vendor/plugins/redmine_tags/app/views/projects/_filter_search_tags.html.erb Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_tags/app/views/projects/_filter_search_tags.html.erb Fri Nov 18 16:53:34 2011 +0000 @@ -2,7 +2,7 @@ <% fields_for @project, :builder => TabularFormBuilder do |f| -%> <div> <p id="project_tags"> - <%= f.text_field :tag_list, :label => :tags, :size => 60, :class => 'hol' %> + <%= f.text_field :tag_list, :label => :label_tags_search, :size => 60, :class => 'hol' %> </p> <div id="project_tag_candidates" class="autocomplete"></div> <%= javascript_include_tag 'tags_input', :plugin => 'redmine_tags' %>
--- a/vendor/plugins/redmine_tags/app/views/projects/index.rhtml Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_tags/app/views/projects/index.rhtml Fri Nov 18 16:53:34 2011 +0000 @@ -17,6 +17,11 @@ <% end %> <div style="clear:both;"></div> +<h2> + <%= l("label_project_all") %> +</h2> + +<div style="clear:both;"></div> <% form_remote_tag(:controller => :projects, :action => :index, :method => :get, :html => {:id => :project_filtering_form}) do %> <% if @filter_status=="true" %> @@ -44,11 +49,6 @@ </fieldset> <% end %> -<div style="clear:both;"></div> -<h2> - <%= l("label_project_all") %> -</h2> - <div id="projects"> <%= render :partial => 'filtered_projects' %> </div>
--- a/vendor/plugins/redmine_tags/assets/stylesheets/redmine_tags.css Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_tags/assets/stylesheets/redmine_tags.css Fri Nov 18 16:53:34 2011 +0000 @@ -33,3 +33,5 @@ div.tags .tag-nube-8 { font-size: 1.5em; } .tag-count { font-size: .75em; margin-left: .5em; } + +#project_tags label { padding-right: .5em; }
--- a/vendor/plugins/redmine_tags/config/locales/en.yml Fri Nov 18 16:53:19 2011 +0000 +++ b/vendor/plugins/redmine_tags/config/locales/en.yml Fri Nov 18 16:53:34 2011 +0000 @@ -23,6 +23,7 @@ tags: Tags field_tags: Tags field_tag_list: Tags + label_tags_search: "Tags: " setting_issue_tags: Issues Tags issues_sidebar: Display tags on sidebar as issues_show_count: Display amount of issues