From aca166271b207e819dab641ccbcece6b06739a55 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Thu, 5 Apr 2012 16:18:32 +0200 Subject: [PATCH 01/55] Update German translation --- config/locales/de.yml | 72 +++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/config/locales/de.yml b/config/locales/de.yml index 89c39317..f2be49b6 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -963,28 +963,28 @@ de: notice_gantt_chart_truncated: Die Grafik ist unvollständig, da das Maximum der anzeigbaren Aufgaben überschritten wurde (%{max}) setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden. text_powered_by: Powered by %{link} - label_cvs_module: Module - label_filesystem_path: Root directory - label_darcs_path: Root directory - label_bazaar_path: Root directory + label_cvs_module: Modul + label_filesystem_path: Wurzelverzeichnis + label_darcs_path: Wurzelverzeichnis + label_bazaar_path: Wurzelverzeichnis label_cvs_path: CVSROOT - label_git_path: Path to .git directory - label_mercurial_path: Root directory - label_my_queries: My custom queries - label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee - text_journal_changed_no_detail: "%{label} updated" - button_expand_all: Expand all - button_collapse_all: Collapse all - label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author - field_effective_date: Due date - label_news_comment_added: Comment added to a news - field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text - text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page. - text_default_encoding: "Default: UTF-8" - text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo) - label_notify_member_plural: Email issue updates - label_path_encoding: Path encoding - text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) + label_git_path: Pfad zum .git Verzeichnis + label_mercurial_path: Wurzelverzeichnis + label_my_queries: Meine benutzerdefinierten Abfragen + label_additional_workflow_transitions_for_assignee: Zusätzliche Workflow-Übergänge wenn das Ticket an den Benutzer zugewiesen ist + text_journal_changed_no_detail: "%{label} aktualisiert" + button_expand_all: Alles ausklappen + button_collapse_all: Alles einklappen + label_additional_workflow_transitions_for_author: Zusätzliche Workflow-Übergänge wenn der Benutzer der Autor ist + field_effective_date: Abshlussdatum + label_news_comment_added: "Kommentar erfolgreich hinzugefügt" + field_warn_on_leaving_unsaved: "Warnen wenn eine Seite mit ungespeichertem Text verlassen wird" + text_warn_on_leaving_unsaved: "Die aktuelle Seite enthält ungespeicherten Text er verloren geht wenn Sie diese Seite verlassen." + text_default_encoding: "Standard: UTF-8" + text_git_repo_example: Ein lokales "bare Repository" (z.B. /gitrepo, c:\gitrepo) + label_notify_member_plural: Benachrichtigungen verschicken + label_path_encoding: Pfadkodierung + text_mercurial_repo_example: Lokales Projektarchiv (z.B. /hgrepo, c:\hgrepo) label_diff: diff description_filter: Filter description_search: Suchfeld @@ -1003,19 +1003,19 @@ de: description_date_range_interval: Zeitraum durch Start- und Enddatum festlegen description_date_from: Startdatum eintragen description_date_to: Enddatum eintragen - field_custom_filter: Custom LDAP filter + field_custom_filter: Benutzerdefinierter LDAP-Filter label_toc: "Inhaltsverzeichnis" - text_display_subprojects: Display subprojects - text_current_project: Current project - setting_mail_handler_confirmation_on_success: Send confirmation email on successful incoming email - label_mail_handler_confirmation: "Confirmation of email submission: %{subject}" - label_mail_handler_errors_with_submission: "There were errors with your email submission:" - label_document_watchers: Watchers - setting_mail_handler_confirmation_on_failure: Send confirmation email on failed incoming email - label_between: between - label_mail_handler_failure: "Failed email submission: %{subject}" - notice_not_authorized_action: You are not authorized to perform this action. - text_mail_handler_confirmation_successful: Your email has been successful added at the following url - field_issue_summary: Issue summary - field_new_saved_query: New saved query - field_issue_view_all_open: View all open issues + text_display_subprojects: Unterprojekte anzeigen + text_current_project: Aktuelles Project + setting_mail_handler_confirmation_on_success: Bestätigungs-E-Mail bei erfolgreich eingegangenen E-Mails versenden + label_mail_handler_confirmation: "Bestätigung der E-Mail-Verarbeitung: %{subject}" + label_mail_handler_errors_with_submission: "Es traten Fehler bei der E-Mail verarbeitung auf:" + label_document_watchers: Beobachter + setting_mail_handler_confirmation_on_failure: Bestätigungs-E-Mail bei fehlgeschlagenen eingehenden E-Mails versenden + label_between: zwischen + label_mail_handler_failure: "E-Mail-Versand fehlgeschlagen: %{subject}" + notice_not_authorized_action: Sie sind für diese Aktion nicht autorisiert. + text_mail_handler_confirmation_successful: Ihre E-Mil wurde erfolgreich zu folgender URL hinzugefügt + field_issue_summary: Ticketübersicht + field_new_saved_query: Neue gespeicherte Abfrage + field_issue_view_all_open: Alle offen Tickets From b8a29c288b569d97ee4ba0ec41a9f6da4bbca7d5 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Thu, 5 Apr 2012 20:49:47 +0200 Subject: [PATCH 02/55] Add the project_id to board URLs in the menu to generate valid URLs --- lib/redmine.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/redmine.rb b/lib/redmine.rb index 64ffbb30..194c1dfc 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -345,7 +345,7 @@ Redmine::MenuManager.map :project_menu do |menu| project.boards.collect do |board| Redmine::MenuManager::MenuItem.new( "board-#{board.id}".to_sym, - { :controller => 'boards', :action => 'show', :id => board }, + { :controller => 'boards', :action => 'show', :project_id => project, :id => board }, { :caption => board.name # is h() in menu_helper.rb }) From 8f06b77ccbdadf8969d54245cd17e2e59c33634a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 7 Apr 2012 15:59:51 +0200 Subject: [PATCH 03/55] correct 'edit own issue notes' permission #966 --- app/models/issue.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index a57e3199..0ec8fcd6 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -712,7 +712,7 @@ class Issue < ActiveRecord::Base # The default assumption is that journals have the same permissions # as the journaled object, issue notes have separate permissions though def journal_editable_by?(journal, user) - return true if journal.author == user && user.allowed_to?(:edit_own_issue_notes, project) + return true if journal.user == user && user.allowed_to?(:edit_own_issue_notes, project) user.allowed_to? :edit_issue_notes, project end From 1f4baaa27b20810847dd5eedeccd132e718bd519 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Mon, 9 Apr 2012 15:43:51 +0200 Subject: [PATCH 04/55] Take the password salt into account when checking for admin account change --- app/controllers/admin_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 66a0294b..019cc290 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -77,7 +77,7 @@ class AdminController < ApplicationController def info @db_adapter_name = ActiveRecord::Base.connection.adapter_name @checklist = [ - [:text_default_administrator_account_changed, User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?], + [:text_default_administrator_account_changed, !User.find_by_login("admin").try(:check_password?, "admin"), [:text_file_repository_writable, File.writable?(Attachment.storage_path)], [:text_plugin_assets_writable, File.writable?(Engines.public_directory)], [:text_rmagick_available, Object.const_defined?(:Magick)] From b169f02377b8eb490dd662a4612b70791983d699 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Mon, 9 Apr 2012 15:46:06 +0200 Subject: [PATCH 05/55] REMEMBER: ALWAYS RUN THE TESTS! --- app/controllers/admin_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 019cc290..1293ca84 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -77,7 +77,7 @@ class AdminController < ApplicationController def info @db_adapter_name = ActiveRecord::Base.connection.adapter_name @checklist = [ - [:text_default_administrator_account_changed, !User.find_by_login("admin").try(:check_password?, "admin"), + [:text_default_administrator_account_changed, !User.find_by_login("admin").try(:check_password?, "admin")], [:text_file_repository_writable, File.writable?(Attachment.storage_path)], [:text_plugin_assets_writable, File.writable?(Engines.public_directory)], [:text_rmagick_available, Object.const_defined?(:Magick)] From c3fc106355ba3cf53fabed188144bcfb5e7296e8 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Tue, 10 Apr 2012 23:35:12 +0200 Subject: [PATCH 06/55] [#974] Force the issue new link in the sidebar to the new action --- lib/redmine.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/redmine.rb b/lib/redmine.rb index 194c1dfc..71ec08a7 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -259,7 +259,7 @@ Redmine::MenuManager.map :project_menu do |menu| :caption => :label_issue_plural, :children => issue_query_proc }) - menu.push(:new_issue, { :controller => 'issues', :action => 'new' }, { + menu.push(:new_issue, { :controller => 'issues', :action => 'new', :copy_from => nil }, { :param => :project_id, :caption => :label_issue_new, :parent => :issues, From e6c79ddef44aa8a38e6b98030983bc3aa15b6219 Mon Sep 17 00:00:00 2001 From: Spenser Jones Date: Tue, 10 Apr 2012 21:51:18 +0000 Subject: [PATCH 07/55] [#975] Validate and enable editing of Version start date --- app/models/version.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/version.rb b/app/models/version.rb index 62833446..dc3f84f1 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -27,7 +27,7 @@ class Version < ActiveRecord::Base validates_presence_of :name validates_uniqueness_of :name, :scope => [:project_id] validates_length_of :name, :maximum => 60 - validates_format_of :effective_date, :with => /^\d{4}-\d{2}-\d{2}$/, :message => :not_a_date, :allow_nil => true + validates_format_of :start_date, :effective_date, :with => /^\d{4}-\d{2}-\d{2}$/, :message => :not_a_date, :allow_nil => true validates_inclusion_of :status, :in => VERSION_STATUSES validates_inclusion_of :sharing, :in => VERSION_SHARINGS @@ -37,6 +37,7 @@ class Version < ActiveRecord::Base safe_attributes 'name', 'description', + 'start_date', 'effective_date', 'due_date', 'wiki_page_title', From a6071c75ecbea48ecb2f2bcbfecb247d906acec5 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 11 Apr 2012 00:06:31 +0200 Subject: [PATCH 08/55] [#975] Add test for editing version start date --- test/functional/versions_controller_test.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/functional/versions_controller_test.rb b/test/functional/versions_controller_test.rb index a5b3b6bb..1d1eb551 100644 --- a/test/functional/versions_controller_test.rb +++ b/test/functional/versions_controller_test.rb @@ -112,13 +112,18 @@ class VersionsControllerTest < ActionController::TestCase def test_post_update @request.session[:user_id] = 2 + + today = Date.today put :update, :id => 2, :version => { :name => 'New version name', - :effective_date => Date.today.strftime("%Y-%m-%d")} + :start_date => today.yesterday.strftime("%Y-%m-%d"), + :effective_date => today.strftime("%Y-%m-%d"), + } assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook' version = Version.find(2) assert_equal 'New version name', version.name - assert_equal Date.today, version.effective_date + assert_equal today.yesterday, version.start_date + assert_equal today, version.effective_date end def test_post_update_with_validation_failure From 01c386b3c6c7d987a41e128f9cc511618e121b35 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 11 Apr 2012 20:48:30 +0200 Subject: [PATCH 09/55] [#970] Cap too long menu entries with an ellipsis --- public/stylesheets/application.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 369457eb..d6947d6c 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -42,6 +42,12 @@ h5, .wiki h4 {font-size: 11px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord background: none; margin: 0; padding: 0 0 0 24px; + + /* Cap long menu entries with an ellipsis. TODO: http://www.bramstein.com/projects/text-overflow/ */ + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; } #main-menu li a:hover {color:#555; text-decoration: none;} From 277815ec963d3bf0f8d8f962e5bcb806e01ee938 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 11 Apr 2012 20:50:42 +0200 Subject: [PATCH 10/55] Don't render cusom queries in the sidebar anymore The queries are now part of the issues menu and are thus redundant in the sidebar. --- app/views/issues/_sidebar.rhtml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/issues/_sidebar.rhtml b/app/views/issues/_sidebar.rhtml index 1bb4ee68..b43fa19f 100644 --- a/app/views/issues/_sidebar.rhtml +++ b/app/views/issues/_sidebar.rhtml @@ -3,5 +3,4 @@ <%= call_hook(:view_issues_sidebar_planning_bottom) %> -<%= render_sidebar_queries %> <%= call_hook(:view_issues_sidebar_queries_bottom) %> From 33260d885d409fec47661fb4be0eccc8c77d0c4a Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 11 Apr 2012 23:15:33 +0200 Subject: [PATCH 11/55] Ensure array order for repeatable success of tests --- test/unit/project_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index a85ad19b..da55a25f 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -82,7 +82,7 @@ class ProjectTest < ActiveSupport::TestCase end assert_equal Tracker.all, Project.new.trackers - assert_equal Tracker.find(1, 3), Project.new(:tracker_ids => [1, 3]).trackers + assert_equal Tracker.find(1, 3).sort_by(&:id), Project.new(:tracker_ids => [1, 3]).trackers.sort_by(&:id) end def test_update From 859a9cb9d29ad40cf5111979c7e42703f9f5c780 Mon Sep 17 00:00:00 2001 From: Gabriel Mazetto Date: Thu, 5 Apr 2012 05:36:17 -0300 Subject: [PATCH 12/55] Some translation fixes and more missing translations for pt-BR --- config/locales/pt-BR.yml | 48 ++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 5fb0885e..ef44dab5 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -154,7 +154,7 @@ pt-BR: general_text_Yes: 'Sim' general_text_no: 'não' general_text_yes: 'sim' - general_lang_name: 'Português(Brasil)' + general_lang_name: 'Português (Brasil)' general_csv_separator: ';' general_csv_decimal_separator: ',' general_csv_encoding: ISO-8859-1 @@ -245,7 +245,7 @@ pt-BR: field_role: Cargo field_homepage: Página do projeto field_is_public: Público - field_parent: Sub-projeto de + field_parent: Subprojeto de field_is_in_roadmap: Exibir no planejamento field_login: Usuário field_mail_notification: Notificações por e-mail @@ -273,7 +273,7 @@ pt-BR: field_comments: Comentário field_url: URL field_start_page: Página inicial - field_subproject: Sub-projeto + field_subproject: Subprojeto field_hours: Horas field_activity: Atividade field_spent_on: Data @@ -411,8 +411,8 @@ pt-BR: label_auth_source: Modo de autenticação label_auth_source_new: Novo modo de autenticação label_auth_source_plural: Modos de autenticação - label_subproject_plural: Sub-projetos - label_and_its_subprojects: "%{value} e seus sub-projetos" + label_subproject_plural: Subprojetos + label_and_its_subprojects: "%{value} e seus subprojetos" label_min_max_length: Tamanho mín-máx label_list: Lista label_date: Data @@ -879,7 +879,7 @@ pt-BR: field_sharing: Compartilhamento label_version_sharing_hierarchy: Com a hierarquia do projeto label_version_sharing_system: Com todos os projetos - label_version_sharing_descendants: Com sub-projetos + label_version_sharing_descendants: Com subprojetos label_version_sharing_tree: Com a árvore do projeto label_version_sharing_none: Sem compartilhamento error_can_not_archive_project: Este projeto não pode ser arquivado @@ -989,7 +989,7 @@ pt-BR: label_mercurial_path: Diretório raiz label_diff: diff - description_search: Searchfield + description_search: Campo de pesquisa description_user_mail_notification: Configuração de notificações por e-mail description_date_range_list: Escolha um período a partira da lista description_date_to: Digite a data final @@ -1008,21 +1008,21 @@ pt-BR: description_date_from: Digita a data inicial label_deleted_custom_field: (campo personalizado excluído) field_custom_filter: Custom LDAP filter - text_display_subprojects: Display subprojects - text_current_project: Current project - label_toc: Contents - search_input_placeholder: search ... - setting_mail_handler_confirmation_on_success: Send confirmation email on successful incoming email - label_mail_handler_confirmation: "Confirmation of email submission: %{subject}" - label_mail_handler_errors_with_submission: "There were errors with your email submission:" - label_document_watchers: Watchers - setting_mail_handler_confirmation_on_failure: Send confirmation email on failed incoming email + text_display_subprojects: Exibir subprojetos + text_current_project: Projeto atual + label_toc: Conteúdo + search_input_placeholder: pesquisar ... + setting_mail_handler_confirmation_on_success: Enviar confirmação ao receber um e-mail + label_mail_handler_confirmation: "Confirmação de envio de e-mail: %{subject}" + label_mail_handler_errors_with_submission: "Seu envio de email falhou:" + label_document_watchers: Observadores + setting_mail_handler_confirmation_on_failure: Enviar confirmação ao falhar o recebimento de um e-mail label_between: between - label_mail_handler_failure: "Failed email submission: %{subject}" - notice_not_authorized_action: You are not authorized to perform this action. - text_mail_handler_confirmation_successful: Your email has been successful added at the following url - field_issue_summary: Issue summary - field_new_saved_query: New saved query - field_issue_view_all_open: View all open issues - label_subtask_add: Add a subtask - label_issue_hierarchy: Issue hierarchy + label_mail_handler_failure: "Envio de e-mail falhou: %{subject}" + notice_not_authorized_action: Você não tem permissão para fazer isto. + text_mail_handler_confirmation_successful: Seu e-mail foi adicionado com sucesso a URL a seguir + field_issue_summary: Relatório + field_new_saved_query: Nova consulta + field_issue_view_all_open: Ver tarefas abertas + label_subtask_add: Adicionar + label_issue_hierarchy: Subtarefas From 6a4559e6af80eb2e9c44c11117ddaa2a9d102138 Mon Sep 17 00:00:00 2001 From: jwalkerbg Date: Fri, 13 Apr 2012 04:13:05 +0300 Subject: [PATCH 13/55] [#983] Translated several keys to Bulgarian language. --- config/locales/bg.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 51b24492..d50175a6 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -983,22 +983,22 @@ bg: description_choose_project: Проекти description_date_from: Въведете начална дата label_deleted_custom_field: (изтрито потребителско поле) - field_custom_filter: Custom LDAP filter - text_display_subprojects: Display subprojects - text_current_project: Current project - label_toc: Contents - search_input_placeholder: search ... - setting_mail_handler_confirmation_on_success: Send confirmation email on successful incoming email - label_mail_handler_confirmation: "Confirmation of email submission: %{subject}" - label_mail_handler_errors_with_submission: "There were errors with your email submission:" - label_document_watchers: Watchers - setting_mail_handler_confirmation_on_failure: Send confirmation email on failed incoming email + field_custom_filter: Потребителски LDAP филтър + text_display_subprojects: Показване на подпроекти + text_current_project: Текущ проект + label_toc: Съдържание + search_input_placeholder: търсене ... + setting_mail_handler_confirmation_on_success: Изпращане на е-мейл за потвърждение при успешен входен е-мейл + label_mail_handler_confirmation: "Потвърждение на изпратено с е-мейл: %{subject}" + label_mail_handler_errors_with_submission: "Има грешки във вашия е-мейл:" + label_document_watchers: Наблюдатели + setting_mail_handler_confirmation_on_failure: Изпращане на е-мейл за потвърждение при неуспешен входен е-мейл label_between: between - label_mail_handler_failure: "Failed email submission: %{subject}" - notice_not_authorized_action: You are not authorized to perform this action. - text_mail_handler_confirmation_successful: Your email has been successful added at the following url - field_issue_summary: Issue summary - field_new_saved_query: New saved query - field_issue_view_all_open: View all open issues - label_subtask_add: Add a subtask - label_issue_hierarchy: Issue hierarchy + label_mail_handler_failure: "Пропаднал е-мейл: %{subject}" + notice_not_authorized_action: Вие нямате разрешение да изпълните това действие. + text_mail_handler_confirmation_successful: Вашият е-мейл беше успешно добавен на следващия адрес + field_issue_summary: Заглавие на задачата + field_new_saved_query: Нова записана заявка + field_issue_view_all_open: Разглеждане на всички отворени задачи + label_subtask_add: Добавяне на подзадача + label_issue_hierarchy: Йерархия на задачите From 2bcd8787d37f41a31311e5ba7e69df91c519b741 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Fri, 13 Apr 2012 13:44:16 +0200 Subject: [PATCH 14/55] Remove cookie cleaning method as it is not required anymore --- app/controllers/application_controller.rb | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index de47f042..a87ccc4e 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -31,18 +31,6 @@ class ApplicationController < ActionController::Base cookies.delete(:autologin) end - # Remove broken cookie after upgrade from 0.8.x (#4292) - # See https://rails.lighthouseapp.com/projects/8994/tickets/3360 - # TODO: remove it when Rails is fixed - before_filter :delete_broken_cookies - def delete_broken_cookies - if cookies['_chiliproject_session'] && cookies['_chiliproject_session'] !~ /--/ - cookies.delete '_chiliproject_session' - redirect_to home_path - return false - end - end - # FIXME: Remove this when all of Rack and Rails have learned how to # properly use encodings before_filter :params_filter From e7d96825b28a6887e62ed8306a099bbda45b8753 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 13 Apr 2012 15:55:02 +0200 Subject: [PATCH 15/55] [#988] Improving Swedish translation --- config/locales/sv.yml | 326 ++++++++++++++++++++---------------------- 1 file changed, 158 insertions(+), 168 deletions(-) diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 2d735d4e..ece40f13 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1,65 +1,42 @@ -# Swedish translation for Ruby on Rails +# Swedish translation for Ruby on Rails and ChiliProject # by Johan Lundström (johanlunds@gmail.com), # with parts taken from http://github.com/daniel/swe_rails +# +# contributor: Björn Blissing sv: - number: - # Used in number_with_delimiter() - # These are also the defaults for 'currency', 'percentage', 'precision', and 'human' - format: - # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) - separator: "," - # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three) - delimiter: "." - # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00) - precision: 2 + # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) + direction: ltr + date: + formats: + # Use the strftime parameters for formats. + # When no format has been given, it uses default. + # You can provide other formats here if you like! + default: "%Y-%m-%d" + short: "%e %b" + long: "%e %B, %Y" - # Used in number_to_currency() - currency: - format: - # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) - format: "%n %u" - unit: "kr" - # These three are to override number.format and are optional - # separator: "." - # delimiter: "," - # precision: 2 + day_names: [söndag, måndag, tisdag, onsdag, torsdag, fredag, lördag] + abbr_day_names: [sön, mån, tis, ons, tor, fre, lör] - # Used in number_to_percentage() - percentage: - format: - # These three are to override number.format and are optional - # separator: - delimiter: "" - # precision: + # Don't forget the nil at the beginning; there's no such thing as a 0th month + month_names: [~, januari, februari, mars, april, maj, juni, juli, augusti, september, oktober, november, december] + abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec] + # Used in date_select and datime_select. + order: + - :day + - :month + - :year - # Used in number_to_precision() - precision: - format: - # These three are to override number.format and are optional - # separator: - delimiter: "" - # precision: + time: + formats: + default: "%Y-%m-%d %H:%M" + time: "%H:%M" + short: "%d %b %H:%M" + long: "%d %B, %Y %H:%M" + am: "" + pm: "" - # Used in number_to_human_size() - human: - format: - # These three are to override number.format and are optional - # separator: - delimiter: "" - # precision: 1 - storage_units: - format: "%n %u" - units: - byte: - one: "Byte" - other: "Bytes" - kb: "kB" - mb: "MB" - gb: "GB" - tb: "TB" - - # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() datetime: distance_in_words: half_a_minute: "en halv minut" @@ -97,16 +74,67 @@ sv: one: "nästan 1 år" other: "nästan %{count} år" + number: + format: + separator: "," + delimiter: "." + precision: 2 + + # Used in number_to_currency() + currency: + format: + # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) + format: "%n %u" + unit: "SEK" + # These three are to override number.format and are optional + # separator: "." + # delimiter: "," + # precision: 2 + + # Used in number_to_percentage() + percentage: + format: + # These three are to override number.format and are optional + # separator: + delimiter: "" + # precision: + + # Used in number_to_precision() + precision: + format: + # These three are to override number.format and are optional + # separator: + delimiter: "" + # precision: + + human: + format: + delimiter: "" + precision: 1 + storage_units: + format: "%n %u" + units: + byte: + one: "Byte" + other: "Bytes" + kb: "kB" + mb: "MB" + gb: "GB" + tb: "TB" + + +# Used in array.to_sentence. + support: + array: + sentence_connector: "och" + skip_last_comma: true + activerecord: errors: template: header: one: "Ett fel förhindrade denna %{model} från att sparas" other: "%{count} fel förhindrade denna %{model} från att sparas" - # The variable :count is also available - body: "Det var problem med följande fält:" - # The values :model, :attribute and :value are always available for interpolation - # The value :count is available when applicable. Can be used for pluralization. messages: inclusion: "finns inte i listan" exclusion: "är reserverat" @@ -120,6 +148,7 @@ sv: wrong_length: "har fel längd (ska vara %{count} tecken)" taken: "har redan tagits" not_a_number: "är inte ett nummer" + not_a_date: "är inte ett giltigt datum" greater_than: "måste vara större än %{count}" greater_than_or_equal_to: "måste vara större än eller lika med %{count}" equal_to: "måste vara samma som" @@ -132,43 +161,6 @@ sv: circular_dependency: "Denna relation skulle skapa ett cirkulärt beroende" cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" - direction: ltr - date: - formats: - # Use the strftime parameters for formats. - # When no format has been given, it uses default. - # You can provide other formats here if you like! - default: "%Y-%m-%d" - short: "%e %b" - long: "%e %B, %Y" - - day_names: [söndag, måndag, tisdag, onsdag, torsdag, fredag, lördag] - abbr_day_names: [sön, mån, tis, ons, tor, fre, lör] - - # Don't forget the nil at the beginning; there's no such thing as a 0th month - month_names: [~, januari, februari, mars, april, maj, juni, juli, augusti, september, oktober, november, december] - abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec] - # Used in date_select and datime_select. - order: - - :day - - :month - - :year - - time: - formats: - default: "%Y-%m-%d %H:%M" - time: "%H:%M" - short: "%d %b %H:%M" - long: "%d %B, %Y %H:%M" - am: "" - pm: "" - -# Used in array.to_sentence. - support: - array: - sentence_connector: "och" - skip_last_comma: true - actionview_instancetag_blank_option: Var god välj general_text_No: 'Nej' @@ -198,6 +190,7 @@ sv: notice_file_not_found: Sidan du försökte komma åt existerar inte eller är borttagen. notice_locking_conflict: Data har uppdaterats av en annan användare. notice_not_authorized: Du saknar behörighet att komma åt den här sidan. + notice_not_authorized_action: Du saknar behörighet att utföra denna handling. notice_not_authorized_archived_project: Projektet du försöker komma åt har arkiverats. notice_email_sent: "Ett mail skickades till %{value}" notice_email_error: "Ett fel inträffade när mail skickades (%{value})" @@ -230,7 +223,6 @@ sv: error_workflow_copy_target: 'Vänligen välj ärendetyp(er) och roll(er) för mål' error_unable_delete_issue_status: 'Ärendestatus kunde inte tas bort' error_unable_to_connect: "Kan inte ansluta (%{value})" - warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas." mail_subject_lost_password: "Ditt %{value} lösenord" @@ -243,8 +235,8 @@ sv: mail_body_account_activation_request: "En ny användare (%{value}) har registrerat sig och avvaktar ditt godkännande:" mail_subject_reminder: "%{count} ärende(n) har deadline under de kommande %{days} dagarna" mail_body_reminder: "%{count} ärende(n) som är tilldelat dig har deadline under de %{days} dagarna:" - mail_subject_wiki_content_added: "'%{id}' wikisida has lagts till" - mail_body_wiki_content_added: "The '%{id}' wikisida has lagts till av %{author}." + mail_subject_wiki_content_added: "'%{id}' wikisida har lagts till" + mail_body_wiki_content_added: "The '%{id}' wikisida har lagts till av %{author}." mail_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats" mail_body_wiki_content_updated: "The '%{id}' wikisida har uppdaterats av %{author}." @@ -286,7 +278,7 @@ sv: field_priority: Prioritet field_fixed_version: Versionsmål field_user: Användare - field_principal: Principal + field_principal: Huvudsaklig field_role: Roll field_homepage: Hemsida field_is_public: Publik @@ -297,6 +289,7 @@ sv: field_admin: Administratör field_last_login_on: Senaste inloggning field_language: Språk + field_effective_date: Förfallodag field_password: Lösenord field_new_password: Nytt lösenord field_password_confirmation: Bekräfta lösenord @@ -348,6 +341,10 @@ sv: field_text: Textfält field_visible: Synlig field_warn_on_leaving_unsaved: Varna om jag lämnar en sida med osparad text + field_custom_filter: Anpassat LDAP filter + field_issue_summary: Sammanfattning av ärendet + field_new_saved_query: Skapa ny förfrågan + field_issue_view_all_open: Visa alla öppna ärenden setting_app_title: Applikationsrubrik setting_app_subtitle: Applikationsunderrubrik @@ -407,6 +404,9 @@ sv: setting_commit_logtime_enabled: Aktivera tidloggning setting_commit_logtime_activity_id: Aktivitet för loggad tid setting_gantt_items_limit: Maximalt antal aktiviteter som visas i gantt-schemat + setting_issue_startdate_is_adddate: Använd nuvarande datum som startdatum för nya ärenden + setting_mail_handler_confirmation_on_success: "Skicka e-postbekräftelse på framgångsrika inkommande e-post" + setting_mail_handler_confirmation_on_failure: "Skicka e-postbekräftelse vid misslyckade inkommande e-post" permission_add_project: Skapa projekt permission_add_subprojects: Skapa underprojekt @@ -416,9 +416,9 @@ sv: permission_manage_project_activities: Hantera projektaktiviteter permission_manage_versions: Hantera versioner permission_manage_categories: Hantera ärendekategorier + permission_view_issues: Visa ärenden permission_add_issues: Lägga till ärenden permission_edit_issues: Ändra ärenden - permission_view_issues: Visa ärenden permission_manage_issue_relations: Hantera ärenderelationer permission_add_issue_notes: Lägga till ärendenotering permission_edit_issue_notes: Ändra ärendenoteringar @@ -581,6 +581,7 @@ sv: label_news_latest: Senaste nyheterna label_news_view_all: Visa alla nyheter label_news_added: Nyhet tillagd + label_news_comment_added: Kommentar tillagd till en nyhet label_settings: Inställningar label_overview: Översikt label_version: Version @@ -648,6 +649,7 @@ sv: label_in_more_than: om mer än label_greater_or_equal: '>=' label_less_or_equal: '<=' + label_between: "mellan" label_in: om label_today: idag label_all_time: närsom @@ -670,8 +672,8 @@ sv: label_browse: Bläddra label_modification: "%{count} ändring" label_modification_plural: "%{count} ändringar" - label_branch: Branch - label_tag: Tag + label_branch: Gren + label_tag: Tagg label_revision: Revision label_revision_plural: Revisioner label_revision_id: "Revision %{value}" @@ -695,6 +697,7 @@ sv: label_roadmap_overdue: "%{value} sen" label_roadmap_no_issues: Inga ärenden för denna version label_search: Sök + search_input_placeholder: sök ... label_result_plural: Resultat label_all_words: Alla ord label_wiki: Wiki @@ -706,7 +709,7 @@ sv: label_index_by_date: Innehåll efter datum label_current_version: Nuvarande version label_preview: Förhandsgranska - label_feed_plural: Feeds + label_feed_plural: Flöde label_changes_details: Detaljer om alla ändringar label_issue_tracking: Ärendeuppföljning label_spent_time: Spenderad tid @@ -718,6 +721,7 @@ sv: label_statistics: Statistik label_commits_per_month: Commits per månad label_commits_per_author: Commits per författare + label_diff: Skillnad label_view_diff: Visa skillnader label_diff_inline: i texten label_diff_side_by_side: sida vid sida @@ -749,7 +753,7 @@ sv: label_board_new: Nytt forum label_board_plural: Forum label_board_locked: Låst - label_board_sticky: Sticky + label_board_sticky: Viktigt label_topic_plural: Ämnen label_message_plural: Meddelanden label_message_last: Senaste meddelande @@ -796,7 +800,7 @@ sv: label_change_properties: Ändra inställningar label_general: Allmänt label_more: Mer - label_scm: SCM + label_scm: Versionshantering label_plugins: Tillägg label_ldap_authentication: LDAP-autentisering label_downloads_abbr: Nerl. @@ -809,6 +813,7 @@ sv: label_incoming_emails: Inkommande mail label_generate_key: Generera en nyckel label_issue_watchers: Bevakare + label_document_watchers: Bevakare label_example: Exempel label_display: Visa label_sort: Sortera @@ -836,15 +841,35 @@ sv: label_api_access_key_created_on: "API-nyckel skapad för %{value} sedan" label_profile: Profil label_subtask_plural: Underaktiviteter + label_subtask_add: Lägg till en underaktivitet + label_issue_hierarchy: Ärendehierarki label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras label_principal_search: "Sök efter användare eller grupp:" label_user_search: "Sök efter användare:" + label_git_path: Sökväg till .git katalog + label_darcs_path: Rotkatalog + label_mercurial_path: Rotkatalog + label_cvs_path: CVSROOT + label_cvs_module: Modul + label_bazaar_path: Rotkatalog + label_filesystem_path: Rotkatalog + label_additional_workflow_transitions_for_assignee: Ytterligare övergångar tillåtna för tilldelad användare + label_additional_workflow_transitions_for_author: Ytterligare övergångar tillåtna när användaren är författaren + label_notify_member_plural: E-posta uppdateringar för ärende + label_path_encoding: Kodning av sökväg + label_deleted_custom_field: '(tog bort anpassat fält)' + label_toc: "Innehåll" + label_mail_handler_confirmation: "Bekräftelse inskickning via e-post: %{subject}" + label_mail_handler_failure: "Inskickning via e-post misslyckades: %{subject}" + label_mail_handler_errors_with_submission: "Det fanns fel med din inskickning via e-post:" button_login: Logga in button_submit: Skicka button_save: Spara button_check_all: Markera alla button_uncheck_all: Avmarkera alla + button_collapse_all: Minimera alla + button_expand_all: Maximera alla button_delete: Ta bort button_create: Skapa button_create_and_continue: Skapa och fortsätt @@ -953,20 +978,27 @@ sv: text_wiki_page_destroy_children: "Ta bort alla underliggande sidor" text_wiki_page_reassign_children: "Flytta undersidor till denna föräldersida" text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?" - text_zoom_out: Zooma ut text_zoom_in: Zooma in + text_zoom_out: Zooma ut + text_powered_by: "Powered by %{link}" text_warn_on_leaving_unsaved: Nuvarande sida innehåller osparad text som kommer försvinna om du lämnar sidan. - + text_default_encoding: "Standard: UTF-8" + text_mercurial_repo_example: "Lokalt arkiv (t.ex. /hgrepo, c:\\hgrepo)" + text_git_repo_example: "Ett lokalt bare git arkiv (t.ex. /gitrepo, c:\\gitrepo)" + text_display_subprojects: Visa underprojekt + text_current_project: Nuvarande project + text_mail_handler_confirmation_successful: "Din e-post har framgångsrikt lagts till på följande webbadress" + default_role_manager: Projektledare default_role_developer: Utvecklare default_role_reporter: Rapportör - default_role_non_member: Non member - default_role_anonymous: Anonymous + default_role_non_member: Icke-medlem + default_role_anonymous: Anonym default_tracker_bug: Bugg default_tracker_feature: Funktionalitet default_tracker_support: Support default_issue_status_new: Ny - default_issue_status_in_progress: Pågår + default_issue_status_in_progress: Pågående default_issue_status_resolved: Löst default_issue_status_feedback: Återkoppling default_issue_status_closed: Stängd @@ -985,62 +1017,20 @@ sv: enumeration_doc_categories: Dokumentkategorier enumeration_activities: Aktiviteter (tidsuppföljning) enumeration_system_activity: Systemaktivitet - text_powered_by: Powered by %{link} - label_cvs_module: Module - label_filesystem_path: Root directory - label_darcs_path: Root directory - label_bazaar_path: Root directory - label_cvs_path: CVSROOT - label_git_path: Path to .git directory - label_mercurial_path: Root directory - - label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee - button_expand_all: Expand all - button_collapse_all: Collapse all - label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author - field_effective_date: Due date - label_news_comment_added: Comment added to a news - text_default_encoding: "Default: UTF-8" - text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo) - label_notify_member_plural: Email issue updates - label_path_encoding: Path encoding - text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) - label_diff: diff - setting_issue_startdate_is_adddate: Use current date as start date for new issues - description_search: Searchfield - description_user_mail_notification: Mail notification settings - description_date_range_list: Choose range from list - description_date_to: Enter end date - description_query_sort_criteria_attribute: Sort attribute - description_message_content: Message content - description_wiki_subpages_reassign: Choose new parent page - description_available_columns: Available Columns - description_selected_columns: Selected Columns - description_date_range_interval: Choose range by selecting start and end date - description_project_scope: Search scope - description_issue_category_reassign: Choose issue category - description_query_sort_criteria_direction: Sort direction - description_notes: Notes description_filter: Filter - description_choose_project: Projects - description_date_from: Enter start date - label_deleted_custom_field: (deleted custom field) - field_custom_filter: Custom LDAP filter - text_display_subprojects: Display subprojects - text_current_project: Current project - label_toc: Contents - search_input_placeholder: search ... - setting_mail_handler_confirmation_on_success: Send confirmation email on successful incoming email - label_mail_handler_confirmation: "Confirmation of email submission: %{subject}" - label_mail_handler_errors_with_submission: "There were errors with your email submission:" - label_document_watchers: Watchers - setting_mail_handler_confirmation_on_failure: Send confirmation email on failed incoming email - label_between: between - label_mail_handler_failure: "Failed email submission: %{subject}" - notice_not_authorized_action: You are not authorized to perform this action. - text_mail_handler_confirmation_successful: Your email has been successful added at the following url - field_issue_summary: Issue summary - field_new_saved_query: New saved query - field_issue_view_all_open: View all open issues - label_subtask_add: Add a subtask - label_issue_hierarchy: Issue hierarchy + description_search: Sökfält + description_choose_project: Projekt + description_project_scope: Sökomfång + description_notes: Noteringar + description_message_content: Meddelandeinnehåll + description_query_sort_criteria_attribute: Sorteringsattribut + description_query_sort_criteria_direction: Sorteringsordning + description_user_mail_notification: E-post notifieringsinställningar + description_available_columns: Tillängliga kolumner + description_selected_columns: Valda kolumner + description_issue_category_reassign: Välj ärendekategori + description_wiki_subpages_reassign: Välj ny huvudsida + description_date_range_list: Välj omfång ifrån lista + description_date_range_interval: Välj omfång genom att ange start- och slutdatum + description_date_from: Ange startdatum + description_date_to: Ange slutdatum From 16947dc0161fb8341084722b240edfd13d930371 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 14 Apr 2012 15:01:45 +0200 Subject: [PATCH 16/55] [984] Allow to change locked and sticky status and the board of messages --- app/models/message.rb | 3 +-- test/functional/messages_controller_test.rb | 24 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/models/message.rb b/app/models/message.rb index 51b0b319..1619ef3b 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -41,7 +41,6 @@ class Message < ActiveRecord::Base acts_as_watchable - attr_protected :locked, :sticky validates_presence_of :board, :subject, :content validates_length_of :subject, :maximum => 255 @@ -51,7 +50,7 @@ class Message < ActiveRecord::Base :conditions => Project.allowed_to_condition(args.first || User.current, :view_messages) } } safe_attributes 'subject', 'content' - safe_attributes 'locked', 'sticky', + safe_attributes 'locked', 'sticky', 'board_id', :if => lambda {|message, user| user.allowed_to?(:edit_messages, message.project) } diff --git a/test/functional/messages_controller_test.rb b/test/functional/messages_controller_test.rb index fecc5e26..b92bcc0b 100644 --- a/test/functional/messages_controller_test.rb +++ b/test/functional/messages_controller_test.rb @@ -121,6 +121,30 @@ class MessagesControllerTest < ActionController::TestCase assert_equal 'New body', message.content end + def test_post_edit_sticky_and_locked + @request.session[:user_id] = 2 + post :edit, :board_id => 1, :id => 1, + :message => { :subject => 'New subject', + :content => 'New body', + :locked => '1', + :sticky => '1'} + assert_redirected_to '/boards/1/topics/1' + message = Message.find(1) + assert_equal true, message.sticky? + assert_equal true, message.locked? + end + + def test_post_edit_should_allow_to_change_board + @request.session[:user_id] = 2 + post :edit, :board_id => 1, :id => 1, + :message => { :subject => 'New subject', + :content => 'New body', + :board_id => 2} + assert_redirected_to '/boards/2/topics/1' + message = Message.find(1) + assert_equal Board.find(2), message.board + end + def test_reply @request.session[:user_id] = 2 post :reply, :board_id => 1, :id => 1, :reply => { :content => 'This is a test reply', :subject => 'Test reply' } From 75bb38df08f8a1916f976e716a881369dfc48986 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Mon, 16 Apr 2012 09:25:35 -0700 Subject: [PATCH 17/55] Require WikiContent directly so WikiContentJournal is loaded before it's patched. Error: uninitialized constant MergeWikiVersionsWithJournals::WikiContentJournal --- db/migrate/20100804112053_merge_wiki_versions_with_journals.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/db/migrate/20100804112053_merge_wiki_versions_with_journals.rb b/db/migrate/20100804112053_merge_wiki_versions_with_journals.rb index fd82e71f..2c91b69b 100644 --- a/db/migrate/20100804112053_merge_wiki_versions_with_journals.rb +++ b/db/migrate/20100804112053_merge_wiki_versions_with_journals.rb @@ -12,6 +12,8 @@ # See doc/COPYRIGHT.rdoc for more details. #++ +require 'wiki_content' + class MergeWikiVersionsWithJournals < ActiveRecord::Migration # This is provided here for migrating up after the WikiContent::Version class has been removed class WikiContent < ActiveRecord::Base From 03dfae0529dc98e1ef7a66beb974c0e1225b8c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 28 Apr 2012 15:52:29 +0200 Subject: [PATCH 18/55] ChiliProject on Travis <3 <3 <3 --- .travis.yml | 25 +++++++++++++++++++++++++ Gemfile | 2 ++ lib/tasks/ci.rake | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..fab926dd --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: ruby +rvm: + - 1.8.7 + - 1.9.2 + - 1.9.3 +env: + - "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" + - "RAILS_ENV=test DB=mysql2 BUNDLE_WITHOUT=rmagick:mysql:postgres:sqlite" + - "RAILS_ENV=test DB=postgres BUNDLE_WITHOUT=rmagick:mysql:mysql2:sqlite" + - "RAILS_ENV=test DB=sqlite BUNDLE_WITHOUT=rmagick:mysql:mysql2:postgres" +matrix: + exclude: + - rvm: 1.9.2 + env: "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" + - rvm: 1.9.3 + env: "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" +before_script: + - "sudo apt-get -qq update" + - "sudo apt-get -qq --no-install-recommends install bzr cvs darcs git mercurial subversion" + - "rake ci:travis:prepare" +branches: + only: + - master +notifications: + email: false diff --git a/Gemfile b/Gemfile index 03820dea..f6c804d1 100644 --- a/Gemfile +++ b/Gemfile @@ -15,6 +15,8 @@ gem "tzinfo", "~> 0.3.31" # Fixes #903. Not required for Rails >= 3.2 group :test do gem 'shoulda', '~> 2.10.3' + # Shoulda doesn't work nice on 1.9.3 and seems to need test-unit explicitely… + gem 'test-unit', :platforms => [:mri_19] gem 'edavis10-object_daddy', :require => 'object_daddy' gem 'mocha' gem 'capybara' diff --git a/lib/tasks/ci.rake b/lib/tasks/ci.rake index 320d831f..cd18ea73 100644 --- a/lib/tasks/ci.rake +++ b/lib/tasks/ci.rake @@ -24,6 +24,41 @@ end # Tasks can be hooked into by redefining them in a plugin namespace :ci do + namespace :travis do + desc "Prepare a TRAVIS run" + task :prepare do + ENV['RAILS_ENV'] = 'test' + RAILS_ENV = 'test' + + database_yml = {"database" => "chiliproject_test"} + database_yml.merge! case ENV['DB'] + when 'mysql' + {"adapter" => "mysql", "username" => "root"} + when 'mysql2' + {"adapter" => "mysql2", "username" => "root"} + when 'postgres' + {"adapter" => "postgresql", "username" => "postgres"} + when 'sqlite' + {"adapter" => "sqlite3", "database" => "db/test.sqlite3"} + end + + File.open("config/database.yml", 'w') do |f| + YAML.dump({"test" => database_yml}, f) + end + + Rake::Task["generate_session_store"].invoke + + # Create and migrate the database + Rake::Task["db:create"].invoke + Rake::Task["db:migrate"].invoke + Rake::Task["db:migrate:plugins"].invoke + Rake::Task["db:schema:dump"].invoke + + # Create test repositories + Rake::Task["test:scm:setup:all"].invoke + end + end + desc "Setup Redmine for a new build." task :setup do Rake::Task["ci:dump_environment"].invoke From 6a26543887db94221023189231e1214258241b46 Mon Sep 17 00:00:00 2001 From: tmaruyama Date: Fri, 10 Jun 2011 07:06:11 +0000 Subject: [PATCH 19/55] scm: mercurial: fix unit adapter annotate test fails on Windows Mercurial 1.8.4+29-e597ef52a7c2. git-svn-id: svn://rubyforge.org/var/svn/redmine/trunk@6042 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/scm/adapters/mercurial_adapter.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb index c119e086..98633d3c 100644 --- a/lib/redmine/scm/adapters/mercurial_adapter.rb +++ b/lib/redmine/scm/adapters/mercurial_adapter.rb @@ -271,7 +271,8 @@ module Redmine end blame rescue HgCommandAborted - nil # means not found or cannot be annotated + # means not found or cannot be annotated + Annotate.new end class Revision < Redmine::Scm::Adapters::Revision From d4f0542e743c1219c58fbeca8f3422ea27d6a1de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Mon, 14 May 2012 12:39:17 +0200 Subject: [PATCH 20/55] Don't rely on ordering in news_test The tests would fail because not all storage backends have a default ordering --- test/unit/news_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unit/news_test.rb b/test/unit/news_test.rb index 2d00952e..d2178283 100644 --- a/test/unit/news_test.rb +++ b/test/unit/news_test.rb @@ -17,7 +17,7 @@ class NewsTest < ActiveSupport::TestCase fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :news def valid_news - { :title => 'Test news', :description => 'Lorem ipsum etc', :author => User.find(:first) } + { :title => 'Test news', :description => 'Lorem ipsum etc', :author => users(:users_001) } end @@ -28,7 +28,7 @@ class NewsTest < ActiveSupport::TestCase def test_create_should_send_email_notification ActionMailer::Base.deliveries.clear Setting.notified_events = Setting.notified_events.dup << 'news_added' - news = Project.find(:first).news.new(valid_news) + news = projects(:projects_001).news.new(valid_news) assert news.save assert_equal 2, ActionMailer::Base.deliveries.size From 7930e8fa66354900589e696356d85261cde02836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Mon, 14 May 2012 14:18:52 +0200 Subject: [PATCH 21/55] Also test stable and unstable branches on TravisCI --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index fab926dd..f1a152d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,8 @@ before_script: - "rake ci:travis:prepare" branches: only: + - unstable - master + - stable notifications: email: false From 3e84c4817b564e866bcbe795c2132908123acaf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Fri, 18 May 2012 22:02:40 +0200 Subject: [PATCH 22/55] =?UTF-8?q?Updated=20czech=20localization=20by=20Rad?= =?UTF-8?q?ek=20T=C5=99=C3=AD=C5=A1ka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/cs.yml | 785 +++++++++++++++--------------------------- 1 file changed, 283 insertions(+), 502 deletions(-) diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 5325bbd6..7feb2141 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -2,6 +2,7 @@ # Updated by Josef Liška # CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz # Based on original CZ translation by Jan Kadleček +# Reviewed by Václav Klimeš cs: # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) direction: ltr @@ -10,16 +11,16 @@ cs: # Use the strftime parameters for formats. # When no format has been given, it uses default. # You can provide other formats here if you like! - default: "%Y-%m-%d" - short: "%b %d" - long: "%B %d, %Y" + default: "%d.%m.%Y" + short: "%d.%m." + long: "%d. %B %Y" - day_names: [Neděle, Pondělí, Úterý, Středa, Čtvrtek, Pátek, Sobota] + day_names: [neděle, pondělí, úterý, středa, čtvrtek, pátek, sobota] abbr_day_names: [Ne, Po, Út, St, Čt, Pá, So] # Don't forget the nil at the beginning; there's no such thing as a 0th month - month_names: [~, Leden, Únor, Březen, Duben, Květen, Červen, Červenec, Srpen, Září, Říjen, Listopad, Prosinec] - abbr_month_names: [~, Led, Úno, Bře, Dub, Kvě, Čer, Čec, Srp, Zář, Říj, Lis, Pro] + month_names: [~, leden, únor, březen, duben, květen, červen, červenec, srpen, září, říjen, listopad, prosinec] + abbr_month_names: [~, led, úno, bře, dub, kvě, čvn, čvc, srp, zář, říj, lis, pro] # Used in date_select and datime_select. order: - :year @@ -28,10 +29,10 @@ cs: time: formats: - default: "%a, %d %b %Y %H:%M:%S %z" + default: "%m.%d.%Y %H:%M" time: "%H:%M" - short: "%d %b %H:%M" - long: "%B %d, %Y %H:%M" + short: "%d.%m. %H:%M" + long: "%d. %B %Y %H:%M" am: "dop." pm: "odp." @@ -40,37 +41,37 @@ cs: half_a_minute: "půl minuty" less_than_x_seconds: one: "méně než sekunda" - other: "méně než %{count} sekund" + other: "méně než %{count} sekund(y)" x_seconds: one: "1 sekunda" - other: "%{count} sekund" + other: "%{count} sekund(y)" less_than_x_minutes: one: "méně než minuta" - other: "méně než %{count} minut" + other: "méně než %{count} minut(y)" x_minutes: one: "1 minuta" - other: "%{count} minut" + other: "%{count} minut(y)" about_x_hours: one: "asi 1 hodina" - other: "asi %{count} hodin" + other: "asi %{count} hodin(y)" x_days: one: "1 den" - other: "%{count} dnů" + other: "%{count} dnů(-y)" about_x_months: one: "asi 1 měsíc" - other: "asi %{count} měsíců" + other: "asi %{count} měsíců(-e)" x_months: one: "1 měsíc" - other: "%{count} měsíců" + other: "%{count} měsíců(-e)" about_x_years: one: "asi 1 rok" - other: "asi %{count} let" + other: "asi %{count} roky(-ů)" over_x_years: one: "více než 1 rok" - other: "více než %{count} roky" + other: "více než %{count} roky(-ů)" almost_x_years: one: "témeř 1 rok" - other: "téměř %{count} roky" + other: "téměř %{count} roky(-ů)" number: # Výchozí formát pro čísla @@ -86,8 +87,8 @@ cs: format: "%n %u" units: byte: - one: "Bajt" - other: "Bajtů" + one: "bajt" + other: "bajtů" kb: "kB" mb: "MB" gb: "GB" @@ -98,14 +99,14 @@ cs: support: array: sentence_connector: "a" - skip_last_comma: false + skip_last_comma: true activerecord: errors: template: header: - one: "1 chyba zabránila uložení %{model}" - other: "%{count} chyb zabránilo uložení %{model}" + one: "uložení %{model} zabránila 1 chyba" + other: "uložení %{model} zabránilo(-y) %{count} chyb(y)" messages: inclusion: "není zahrnuto v seznamu" exclusion: "je rezervováno" @@ -114,9 +115,9 @@ cs: accepted: "musí být akceptováno" empty: "nemůže být prázdný" blank: "nemůže být prázdný" - too_long: "je příliš dlouhý" - too_short: "je příliš krátký" - wrong_length: "má chybnou délku" + too_long: "je příliš dlouhý (maximum je %{count} znaků)" + too_short: "je příliš krátký (minimum je %{count} znaků)" + wrong_length: "má chybnou délku (má mít %{count} znaků)" taken: "je již použito" not_a_number: "není číslo" not_a_date: "není platné datum" @@ -124,15 +125,15 @@ cs: greater_than_or_equal_to: "musí být větší nebo rovno %{count}" equal_to: "musí být přesně %{count}" less_than: "musí být méně než %{count}" - less_than_or_equal_to: "musí být méně nebo rovno %{count}" + less_than_or_equal_to: "musí být menší nebo rovno %{count}" odd: "musí být liché" even: "musí být sudé" greater_than_start_date: "musí být větší než počáteční datum" not_same_project: "nepatří stejnému projektu" circular_dependency: "Tento vztah by vytvořil cyklickou závislost" - cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho dílčích úkolů" + cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho podúkolů" - actionview_instancetag_blank_option: Prosím vyberte + actionview_instancetag_blank_option: Vyberte, prosím general_text_No: 'Ne' general_text_Yes: 'Ano' @@ -149,66 +150,66 @@ cs: notice_account_invalid_creditentials: Chybné jméno nebo heslo notice_account_password_updated: Heslo bylo úspěšně změněno. notice_account_wrong_password: Chybné heslo - notice_account_register_done: Účet byl úspěšně vytvořen. Pro aktivaci účtu klikněte na odkaz v emailu, který vám byl zaslán. + notice_account_register_done: Účet byl úspěšně vytvořen. Pro aktivaci účtu klikněte na odkaz v e-mailu, který vám byl zaslán. notice_account_unknown_email: Neznámý uživatel. notice_can_t_change_password: Tento účet používá externí autentifikaci. Zde heslo změnit nemůžete. - notice_account_lost_email_sent: Byl vám zaslán email s intrukcemi jak si nastavíte nové heslo. + notice_account_lost_email_sent: Byl vám zaslán e-mail s instrukcemi, jak si nastavíte nové heslo. notice_account_activated: Váš účet byl aktivován. Nyní se můžete přihlásit. notice_successful_create: Úspěšně vytvořeno. notice_successful_update: Úspěšně aktualizováno. notice_successful_delete: Úspěšně odstraněno. - notice_successful_connection: Úspěšné připojení. - notice_file_not_found: Stránka na kterou se snažíte zobrazit neexistuje nebo byla smazána. + notice_successful_connection: Úspěšně připojeno. + notice_file_not_found: Stránka, kterou se snažíte zobrazit, neexistuje nebo byla odstraněna. notice_locking_conflict: Údaje byly změněny jiným uživatelem. - notice_not_authorized: Nemáte dostatečná práva pro zobrazení této stránky. - notice_not_authorized_archived_project: Projekt ke kterému se snažíte přistupovat byl archivován. - notice_email_sent: "Na adresu %{value} byl odeslán email" - notice_email_error: "Při odesílání emailu nastala chyba (%{value})" + notice_not_authorized: Pro zobrazení této stránky nemáte dostatečná práva. + notice_not_authorized_archived_project: Projekt, ke kterému se snažíte přistupovat, je archivován. + notice_email_sent: "Na adresu %{value} byl odeslán e-mail" + notice_email_error: "Při odesílání e-mailu nastala chyba (%{value})" notice_feeds_access_key_reseted: Váš klíč pro přístup k RSS byl resetován. - notice_api_access_key_reseted: Váš API přístupový klíč byl resetován. + notice_api_access_key_reseted: Váš přístupový klíč API byl resetován. notice_failed_to_save_issues: "Chyba při uložení %{count} úkolu(ů) z %{total} vybraných: %{ids}." notice_failed_to_save_members: "Nepodařilo se uložit člena(y): %{errors}." - notice_no_issue_selected: "Nebyl zvolen žádný úkol. Prosím, zvolte úkoly, které chcete editovat" + notice_no_issue_selected: "Nebyl zvolen žádný úkol. Prosím, zvolte úkoly, které chcete upravit." notice_account_pending: "Váš účet byl vytvořen, nyní čeká na schválení administrátorem." notice_default_data_loaded: Výchozí konfigurace úspěšně nahrána. - notice_unable_delete_version: Nemohu odstanit verzi + notice_unable_delete_version: Nemohu smazat verzi. notice_unable_delete_time_entry: Nelze smazat čas ze záznamu. notice_issue_done_ratios_updated: Koeficienty dokončení úkolu byly aktualizovány. - notice_gantt_chart_truncated: Graf byl oříznut, počet položek přesáhl limit pro zobrazení (%{max}) + notice_gantt_chart_truncated: "Graf byl oříznut, protože počet jeho položek přesáhl limit pro zobrazení (%{max})" error_can_t_load_default_data: "Výchozí konfigurace nebyla nahrána: %{value}" - error_scm_not_found: "Položka a/nebo revize neexistují v repozitáři." - error_scm_command_failed: "Při pokusu o přístup k repozitáři došlo k chybě: %{value}" + error_scm_not_found: "V úložišti neexistuje tato položka nebo revize." + error_scm_command_failed: "Při pokusu o přístup k úložišti nastala chyba: %{value}" error_scm_annotate: "Položka neexistuje nebo nemůže být komentována." error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatří k tomuto projektu' - error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu. + error_no_tracker_in_project: Tomuto projektu nebyla přiřazena žádná fronta. Prosím, zkontroluje nastavení projektu. error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů"). error_can_not_delete_custom_field: Nelze smazat volitelné pole - error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán. - error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat. + error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nelze ji smazat. + error_can_not_remove_role: Tato role se právě používá a nelze ji smazat. error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen error_can_not_archive_project: Tento projekt nemůže být archivován error_issue_done_ratios_not_updated: Koeficient dokončení úkolu nebyl aktualizován. - error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly - error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e) - error_unable_delete_issue_status: Nelze smazat stavy úkolů + error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roli + error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roli(e) + error_unable_delete_issue_status: Nelze smazat stav úkolu error_unable_to_connect: Nelze se připojit (%{value}) warning_attachments_not_saved: "%{count} soubor(ů) nebylo možné uložit." mail_subject_lost_password: "Vaše heslo (%{value})" - mail_body_lost_password: 'Pro změnu vašeho hesla klikněte na následující odkaz:' + mail_body_lost_password: 'Pro změnu svého hesla klikněte na následující odkaz:' mail_subject_register: "Aktivace účtu (%{value})" - mail_body_register: 'Pro aktivaci vašeho účtu klikněte na následující odkaz:' - mail_body_account_information_external: "Pomocí vašeho účtu %{value} se můžete přihlásit." + mail_body_register: 'Pro aktivaci svého účtu klikněte na následující odkaz:' + mail_body_account_information_external: "Můžete se přihlásit pomocí svého účtu %{value}." mail_body_account_information: Informace o vašem účtu - mail_subject_account_activation_request: "Aktivace %{value} účtu" - mail_body_account_activation_request: "Byl zaregistrován nový uživatel %{value}. Aktivace jeho účtu závisí na vašem potvrzení." - mail_subject_reminder: "%{count} úkol(ů) má termín během několik dní (%{days})" - mail_body_reminder: "%{count} úkol(ů), které máte přiřazeny má termín během několik dní (%{days}):" - mail_subject_wiki_content_added: "'%{id}' Wiki stránka byla přidána" - mail_body_wiki_content_added: "'%{id}' Wiki stránka byla přidána od %{author}." - mail_subject_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována" - mail_body_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována od %{author}." + mail_subject_account_activation_request: "Žádost o aktivaci %{value} účtu" + mail_body_account_activation_request: "Zaregistroval se nový uživatel %{value}. Aktivace jeho účtu závisí na vašem potvrzení." + mail_subject_reminder: "%{count} úkol(ů) má termín během následujících %{days} dnů " + mail_body_reminder: "%{count} úkol(ů), které máte přiřazeny, má termín během následujících %{days} dnů:" + mail_subject_wiki_content_added: "Byla přidána wiki stránka '%{id}'" + mail_body_wiki_content_added: "'Wiki stránka '%{id}' byla přidána uživatelem %{author}." + mail_subject_wiki_content_updated: "Byla aktualizována wiki stránka '%{id}'" + mail_body_wiki_content_updated: "'Wiki stránka '%{id}' byla aktualizována uživatelem %{author}." gui_validation_error: 1 chyba gui_validation_error_plural: "%{count} chyb(y)" @@ -219,7 +220,7 @@ cs: field_is_required: Povinné pole field_firstname: Jméno field_lastname: Příjmení - field_mail: Email + field_mail: E-mailová adresa field_filename: Soubor field_filesize: Velikost field_downloads: Staženo @@ -240,11 +241,11 @@ cs: field_status: Stav field_notes: Poznámka field_is_closed: Úkol uzavřen - field_is_default: Výchozí stav + field_is_default: Výchozí hodnota field_tracker: Fronta field_subject: Předmět field_due_date: Uzavřít do - field_assigned_to: Přiřazeno + field_assigned_to: Přiřazeno komu field_priority: Priorita field_fixed_version: Cílová verze field_user: Uživatel @@ -253,30 +254,31 @@ cs: field_homepage: Domovská stránka field_is_public: Veřejný field_parent: Nadřazený projekt - field_is_in_roadmap: Úkoly zobrazené v plánu - field_login: Přihlášení - field_mail_notification: Emailová oznámení + field_is_in_roadmap: Úkoly zobrazeny v plánu + field_login: Přihlašovací jméno + field_mail_notification: E-mailová oznámení field_admin: Administrátor field_last_login_on: Poslední přihlášení field_language: Jazyk + field_effective_date: Datum splnění field_password: Heslo field_new_password: Nové heslo field_password_confirmation: Potvrzení field_version: Verze field_type: Typ - field_host: Host + field_host: Hostitel field_port: Port field_account: Účet field_base_dn: Base DN field_attr_login: Přihlášení (atribut) field_attr_firstname: Jméno (atribut) - field_attr_lastname: Příjemní (atribut) - field_attr_mail: Email (atribut) + field_attr_lastname: Příjmení (atribut) + field_attr_mail: E-mail (atribut) field_onthefly: Automatické vytváření uživatelů field_start_date: Začátek - field_done_ratio: "% Hotovo" + field_done_ratio: "% hotovo" field_auth_source: Autentifikační mód - field_hide_mail: Nezobrazovat můj email + field_hide_mail: Nezobrazovat můj e-mail field_comments: Komentář field_url: URL field_start_page: Výchozí stránka @@ -288,7 +290,7 @@ cs: field_is_filter: Použít jako filtr field_issue_to: Související úkol field_delay: Zpoždění - field_assignable: Úkoly mohou být přiřazeny této roli + field_assignable: Této roli mohou být přiřazeny úkoly field_redirect_existing_links: Přesměrovat stvávající odkazy field_estimated_hours: Odhadovaná doba field_column_names: Sloupce @@ -299,16 +301,21 @@ cs: field_comments_sorting: Zobrazit komentáře field_parent_title: Rodičovská stránka field_editable: Editovatelný - field_watcher: Sleduje + field_watcher: Pozorovatel field_identity_url: OpenID URL field_content: Obsah field_group_by: Seskupovat výsledky podle field_sharing: Sdílení field_parent_issue: Rodičovský úkol - field_member_of_group: Skupina přiřaditele - field_assigned_to_role: Role přiřaditele + field_member_of_group: Skupina přiřazeného + field_assigned_to_role: Role přiřazeného field_text: Textové pole field_visible: Viditelný + field_warn_on_leaving_unsaved: Upozornit, pokud opouštím stránku s neuloženým textem + field_custom_filter: Volitelný filtr LDAP + field_issue_summary: Přehled úkolu + field_new_saved_query: Nový uložený dotaz + field_issue_view_all_open: Všechny otevřené úkoly setting_app_title: Název aplikace setting_app_subtitle: Podtitulek aplikace @@ -318,16 +325,16 @@ cs: setting_self_registration: Povolena automatická registrace setting_attachment_max_size: Maximální velikost přílohy setting_issues_export_limit: Limit pro export úkolů - setting_mail_from: Odesílat emaily z adresy - setting_bcc_recipients: Příjemci skryté kopie (bcc) - setting_plain_text_mail: pouze prostý text (ne HTML) - setting_host_name: Jméno serveru + setting_mail_from: Odesílat e-maily z adresy + setting_bcc_recipients: Příjemci skryté kopie (Bcc) + setting_plain_text_mail: Pouze prostý text (ne HTML) + setting_host_name: Jméno a cesta serveru setting_text_formatting: Formátování textu - setting_wiki_compression: Komprese historie Wiki + setting_wiki_compression: Komprese historie wiki setting_feeds_limit: Limit obsahu příspěvků setting_default_projects_public: Nové projekty nastavovat jako veřejné setting_autofetch_changesets: Automaticky stahovat commity - setting_sys_api_enabled: Povolit WS pro správu repozitory + setting_sys_api_enabled: Povolit WS pro správu úložišť setting_commit_ref_keywords: Klíčová slova pro odkazy setting_commit_fix_keywords: Klíčová slova pro uzavření setting_autologin: Automatické přihlašování @@ -335,12 +342,12 @@ cs: setting_time_format: Formát času setting_cross_project_issue_relations: Povolit vazby úkolů napříč projekty setting_issue_list_default_columns: Výchozí sloupce zobrazené v seznamu úkolů - setting_repositories_encodings: Kódování + setting_repositories_encodings: Kódování úložišť setting_commit_logs_encoding: Kódování zpráv při commitu - setting_emails_header: Hlavička emailů - setting_emails_footer: Patička emailů + setting_emails_header: Hlavička e-mailů + setting_emails_footer: Zápatí e-mailů setting_protocol: Protokol - setting_per_page_options: Povolené počty řádků na stránce + setting_per_page_options: Volby počtu řádků na stránce setting_user_format: Formát zobrazení uživatele setting_activity_days_default: Dny zobrazené v činnosti projektu setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavním projektu @@ -350,80 +357,83 @@ cs: setting_mail_handler_api_key: API klíč setting_sequential_project_identifiers: Generovat sekvenční identifikátory projektů setting_gravatar_enabled: Použít uživatelské ikony Gravatar - setting_gravatar_default: Výchozí Gravatar - setting_diff_max_lines_displayed: Maximální počet zobrazenách řádků rozdílů + setting_gravatar_default: Výchozí obrázek Gravatar + setting_diff_max_lines_displayed: Maximální počet zobrazených řádků rozdílů setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce setting_repository_log_display_limit: Maximální počet revizí zobrazených v logu souboru - setting_openid: Umožnit přihlašování a registrace s OpenID + setting_openid: Umožnit přihlašování a registraci s OpenID setting_password_min_length: Minimální délka hesla setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt - setting_issue_done_ratio: Spočítat koeficient dokončení úkolu s - setting_issue_done_ratio_issue_field: Použít pole úkolu - setting_issue_done_ratio_issue_status: Použít stav úkolu + setting_issue_done_ratio: Spočítat koeficient dokončení úkolu za použití + setting_issue_done_ratio_issue_field: Pole úkolu + setting_issue_done_ratio_issue_status: Stav úkolu setting_start_of_week: Začínat kalendáře setting_rest_api_enabled: Zapnout službu REST setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti setting_default_notification_option: Výchozí nastavení oznámení setting_commit_logtime_enabled: Povolit zapisování času setting_commit_logtime_activity_id: Aktivita pro zapsaný čas - setting_gantt_items_limit: Maximální počet položek zobrazený na ganttově grafu + setting_gantt_items_limit: Maximální počet položek zobrazených v Ganttově grafu + setting_issue_startdate_is_adddate: Pro nové úkoly použij aktuální datum jako počáteční + setting_mail_handler_confirmation_on_success: Při úspěšném příchodu e-mailu pošli potvrzující e-mail + setting_mail_handler_confirmation_on_failure: Při neúspěšném příchodu e-mailu pošli potvrzující e-mail - permission_add_project: Vytvořit projekt - permission_add_subprojects: Vytvořit podprojekty - permission_edit_project: Úprava projektů + permission_add_project: Vytvoření projektu + permission_add_subprojects: Vytvoření podprojektů + permission_edit_project: Úprava projektu permission_select_project_modules: Výběr modulů projektu - permission_manage_members: Spravování členství - permission_manage_project_activities: Spravovat aktivity projektu - permission_manage_versions: Spravování verzí - permission_manage_categories: Spravování kategorií úkolů - permission_view_issues: Zobrazit úkoly + permission_manage_members: Správa členství + permission_manage_project_activities: Správa aktivit projektu + permission_manage_versions: Správa verzí + permission_manage_categories: Správa kategorií úkolů + permission_view_issues: Zobrazení úkoly permission_add_issues: Přidávání úkolů - permission_edit_issues: Upravování úkolů - permission_manage_issue_relations: Spravování vztahů mezi úkoly + permission_edit_issues: Úprava úkolů + permission_manage_issue_relations: Správa vztahů mezi úkoly permission_add_issue_notes: Přidávání poznámek - permission_edit_issue_notes: Upravování poznámek - permission_edit_own_issue_notes: Upravování vlastních poznámek + permission_edit_issue_notes: Úprava poznámek + permission_edit_own_issue_notes: Úprava vlastních poznámek permission_move_issues: Přesouvání úkolů permission_delete_issues: Mazání úkolů permission_manage_public_queries: Správa veřejných dotazů permission_save_queries: Ukládání dotazů - permission_view_gantt: Zobrazené Ganttova diagramu + permission_view_gantt: Zobrazení Ganttova grafu permission_view_calendar: Prohlížení kalendáře - permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů - permission_add_issue_watchers: Přidání sledujících uživatelů - permission_delete_issue_watchers: Smazat přihlížející + permission_view_issue_watchers: Zobrazení seznamu pozorovatelů + permission_add_issue_watchers: Přidání pozorovatelů + permission_delete_issue_watchers: Smazání pozorovatelů permission_log_time: Zaznamenávání stráveného času permission_view_time_entries: Zobrazení stráveného času - permission_edit_time_entries: Upravování záznamů o stráveném času - permission_edit_own_time_entries: Upravování vlastních zázamů o stráveném čase - permission_manage_news: Spravování novinek + permission_edit_time_entries: Úprava záznamů o stráveném čase + permission_edit_own_time_entries: Úprava vlastních zázamů o stráveném čase + permission_manage_news: Správa novinek permission_comment_news: Komentování novinek permission_manage_documents: Správa dokumentů permission_view_documents: Prohlížení dokumentů - permission_manage_files: Spravování souborů + permission_manage_files: Správa souborů permission_view_files: Prohlížení souborů - permission_manage_wiki: Spravování Wiki - permission_rename_wiki_pages: Přejmenovávání Wiki stránek - permission_delete_wiki_pages: Mazání stránek na Wiki - permission_view_wiki_pages: Prohlížení Wiki - permission_view_wiki_edits: Prohlížení historie Wiki - permission_edit_wiki_pages: Upravování stránek Wiki + permission_manage_wiki: Správa wiki + permission_rename_wiki_pages: Přejmenovávání stránek wiki + permission_delete_wiki_pages: Mazání stránek wiki + permission_view_wiki_pages: Prohlížení wiki + permission_view_wiki_edits: Prohlížení historie wiki + permission_edit_wiki_pages: Upravování stránek wiki permission_delete_wiki_pages_attachments: Mazání příloh - permission_protect_wiki_pages: Zabezpečení Wiki stránek - permission_manage_repository: Spravování repozitáře - permission_browse_repository: Procházení repozitáře + permission_protect_wiki_pages: Zabezpečení stránek wiki + permission_manage_repository: Spravování úložiště + permission_browse_repository: Procházení úložiště permission_view_changesets: Zobrazování sady změn permission_commit_access: Commit přístup permission_manage_boards: Správa diskusních fór permission_view_messages: Prohlížení zpráv permission_add_messages: Posílání zpráv - permission_edit_messages: Upravování zpráv - permission_edit_own_messages: Upravit vlastní zprávy + permission_edit_messages: Úprava zpráv + permission_edit_own_messages: Úprava vlastních zpráv permission_delete_messages: Mazání zpráv - permission_delete_own_messages: Smazat vlastní zprávy - permission_export_wiki_pages: Exportovat Wiki stránky - permission_manage_subtasks: Spravovat podúkoly + permission_delete_own_messages: Mazání vlastních zpráv + permission_export_wiki_pages: Export stránek wiki + permission_manage_subtasks: Správa podúkolů project_module_issue_tracking: Sledování úkolů project_module_time_tracking: Sledování času @@ -431,10 +441,10 @@ cs: project_module_documents: Dokumenty project_module_files: Soubory project_module_wiki: Wiki - project_module_repository: Repozitář + project_module_repository: Úložiště project_module_boards: Diskuse project_module_calendar: Kalendář - project_module_gantt: Gantt + project_module_gantt: Ganttův graf label_user: Uživatel label_user_plural: Uživatelé @@ -452,10 +462,10 @@ cs: label_issue: Úkol label_issue_new: Nový úkol label_issue_plural: Úkoly - label_issue_view_all: Všechny úkoly + label_issue_view_all: Zobraz všechny úkoly label_issues_by: "Úkoly podle %{value}" label_issue_added: Úkol přidán - label_issue_updated: Úkol aktualizován + label_issue_updated: Úkol upraven label_document: Dokument label_document_new: Nový dokument label_document_plural: Dokumenty @@ -484,7 +494,7 @@ cs: label_enumeration_new: Nová hodnota label_information: Informace label_information_plural: Informace - label_please_login: Prosím přihlašte se + label_please_login: Přihlašte se, prosím label_register: Registrovat label_login_with_open_id_option: nebo se přihlašte s OpenID label_password_lost: Zapomenuté heslo @@ -498,7 +508,7 @@ cs: label_logout: Odhlášení label_help: Nápověda label_reported_issues: Nahlášené úkoly - label_assigned_to_me_issues: Mé úkoly + label_assigned_to_me_issues: Mně přiřazené úkoly label_last_login: Poslední přihlášení label_registered_on: Registrován label_activity: Aktivita @@ -513,8 +523,8 @@ cs: label_auth_source_plural: Módy autentifikace label_subproject_plural: Podprojekty label_subproject_new: Nový podprojekt - label_and_its_subprojects: "%{value} a jeho podprojekty" - label_min_max_length: Min - Max délka + label_and_its_subprojects: "%{value} a jeho podprojekty" + label_min_max_length: Minimální a maximální délka label_list: Seznam label_date: Datum label_integer: Celé číslo @@ -542,6 +552,7 @@ cs: label_news_latest: Poslední novinky label_news_view_all: Zobrazit všechny novinky label_news_added: Novinka přidána + label_news_comment_added: K novince byl přidán komentář label_settings: Nastavení label_overview: Přehled label_version: Verze @@ -559,15 +570,15 @@ cs: label_x_open_issues_abbr_on_total: zero: 0 otevřených / %{total} one: 1 otevřený / %{total} - other: "%{count} otevřených / %{total}" + other: "%{count} otevřených(-é) / %{total}" label_x_open_issues_abbr: zero: 0 otevřených one: 1 otevřený - other: "%{count} otevřených" + other: "%{count} otevřených(-é)" label_x_closed_issues_abbr: zero: 0 uzavřených one: 1 uzavřený - other: "%{count} uzavřených" + other: "%{count} uzavřených(-é)" label_total: Celkem label_permissions: Práva label_current_status: Aktuální stav @@ -593,24 +604,26 @@ cs: label_x_comments: zero: žádné komentáře one: 1 komentář - other: "%{count} komentářů" + other: "%{count} komentářů(-e)" label_comment_add: Přidat komentáře label_comment_added: Komentář přidán label_comment_delete: Odstranit komentář label_query: Uživatelský dotaz label_query_plural: Uživatelské dotazy label_query_new: Nový dotaz + label_my_queries: Mé dotazy label_filter_add: Přidat filtr label_filter_plural: Filtry label_equals: je label_not_equals: není - label_in_less_than: je měší než + label_in_less_than: je menší než label_in_more_than: je větší než label_greater_or_equal: '>=' label_less_or_equal: '<=' + label_between: mezi label_in: v label_today: dnes - label_all_time: vše + label_all_time: kdykoli label_yesterday: včera label_this_week: tento týden label_last_week: minulý týden @@ -619,14 +632,14 @@ cs: label_last_month: minulý měsíc label_this_year: tento rok label_date_range: Časový rozsah - label_less_than_ago: před méně jak (dny) - label_more_than_ago: před více jak (dny) + label_less_than_ago: před méně než (dny) + label_more_than_ago: před více než (dny) label_ago: před (dny) label_contains: obsahuje label_not_contains: neobsahuje label_day_plural: dny - label_repository: Repozitář - label_repository_plural: Repozitáře + label_repository: Úložiště + label_repository_plural: Úložiště label_browse: Procházet label_modification: "%{count} změna" label_modification_plural: "%{count} změn" @@ -635,12 +648,12 @@ cs: label_revision: Revize label_revision_plural: Revizí label_revision_id: "Revize %{value}" - label_associated_revisions: Související verze + label_associated_revisions: Související revize label_added: přidáno label_modified: změněno label_copied: zkopírováno label_renamed: přejmenováno - label_deleted: odstraněno + label_deleted: smazáno label_latest_revision: Poslední revize label_latest_revision_plural: Poslední revize label_view_revisions: Zobrazit revize @@ -652,32 +665,34 @@ cs: label_sort_lowest: Přesunout na konec label_roadmap: Plán label_roadmap_due_in: "Zbývá %{value}" - label_roadmap_overdue: "%{value} pozdě" + label_roadmap_overdue: "%{value} zpoždění" label_roadmap_no_issues: Pro tuto verzi nejsou žádné úkoly label_search: Hledat + search_input_placeholder: najdi ... label_result_plural: Výsledky label_all_words: Všechna slova label_wiki: Wiki - label_wiki_edit: Wiki úprava - label_wiki_edit_plural: Wiki úpravy - label_wiki_page: Wiki stránka - label_wiki_page_plural: Wiki stránky + label_wiki_edit: Úprava wiki + label_wiki_edit_plural: Úpravy wiki + label_wiki_page: Stránka wiki + label_wiki_page_plural: Stránky wiki label_index_by_title: Index dle názvu label_index_by_date: Index dle data - label_current_version: Aktuální verze + label_current_version: Současná verze label_preview: Náhled label_feed_plural: Příspěvky - label_changes_details: Detail všech změn + label_changes_details: Detaily všech změn label_issue_tracking: Sledování úkolů label_spent_time: Strávený čas - label_overall_spent_time: Celkem strávený čas + label_overall_spent_time: Celkový strávený čas label_f_hour: "%{value} hodina" label_f_hour_plural: "%{value} hodin" label_time_tracking: Sledování času label_change_plural: Změny label_statistics: Statistiky label_commits_per_month: Commitů za měsíc - label_commits_per_author: Commitů za autora + label_commits_per_author: Commitů na autora + label_diff: rozdíly label_view_diff: Zobrazit rozdíly label_diff_inline: uvnitř label_diff_side_by_side: vedle sebe @@ -692,9 +707,9 @@ cs: label_relation_delete: Odstranit souvislost label_relates_to: související s label_duplicates: duplikuje - label_duplicated_by: zduplikován + label_duplicated_by: duplikován label_blocks: blokuje - label_blocked_by: zablokován + label_blocked_by: blokován label_precedes: předchází label_follows: následuje label_end_to_start: od konce do začátku @@ -716,25 +731,25 @@ cs: label_message_new: Nová zpráva label_message_posted: Zpráva přidána label_reply_plural: Odpovědi - label_send_information: Zaslat informace o účtu uživateli + label_send_information: Zaslat uživateli informace o účtu label_year: Rok label_month: Měsíc label_week: Týden label_date_from: Od label_date_to: Do - label_language_based: Podle výchozího jazyku + label_language_based: Podle jazyka uživatele label_sort_by: "Seřadit podle %{value}" - label_send_test_email: Poslat testovací email + label_send_test_email: Poslat testovací e-mail label_feeds_access_key: Přístupový klíč pro RSS - label_missing_feeds_access_key: Postrádá přístupový klíč pro RSS + label_missing_feeds_access_key: Chybí přístupový klíč pro RSS label_feeds_access_key_created_on: "Přístupový klíč pro RSS byl vytvořen před %{value}" label_module_plural: Moduly - label_added_time_by: "Přidáno uživatelem %{author} před %{age}" - label_updated_time_by: "Aktualizováno uživatelem %{author} před %{age}" + label_added_time_by: "Přidal(a) %{author} před %{age}" + label_updated_time_by: "Aktualizoval(a) %{author} před %{age}" label_updated_time: "Aktualizováno před %{value}" label_jump_to_a_project: Vyberte projekt... label_file_plural: Soubory - label_changeset_plural: Changesety + label_changeset_plural: Sady změn label_default_columns: Výchozí sloupce label_no_change_option: (beze změny) label_bulk_edit_selected_issues: Hromadná úprava vybraných úkolů @@ -744,18 +759,18 @@ cs: label_user_mail_option_all: "Pro všechny události všech mých projektů" label_user_mail_option_selected: "Pro všechny události vybraných projektů..." label_user_mail_option_none: "Žádné události" - label_user_mail_option_only_my_events: "Jen pro věci co sleduji nebo jsem v nich zapojen" - label_user_mail_option_only_assigned: "Jen pro všeci kterým sem přiřazen" - label_user_mail_option_only_owner: "Jen pro věci které vlastním" - label_user_mail_no_self_notified: "Nezasílat informace o mnou vytvořených změnách" - label_registration_activation_by_email: aktivace účtu emailem + label_user_mail_option_only_my_events: "Jen pro věci, které sleduji nebo ve kterých jsem zapojen" + label_user_mail_option_only_assigned: "Jen pro věci, kterým jsem přiřazen" + label_user_mail_option_only_owner: "Jen pro věci, které vlastním" + label_user_mail_no_self_notified: "Nezasílat mi informace o mnou vytvořených změnách" + label_registration_activation_by_email: aktivace účtu e-mailem label_registration_manual_activation: manuální aktivace účtu label_registration_automatic_activation: automatická aktivace účtu label_display_per_page: "%{value} na stránku" label_age: Věk label_change_properties: Změnit vlastnosti label_general: Obecné - label_more: Více + label_more: Další label_scm: SCM label_plugins: Doplňky label_ldap_authentication: Autentifikace LDAP @@ -763,20 +778,21 @@ cs: label_optional_description: Volitelný popis label_add_another_file: Přidat další soubor label_preferences: Nastavení - label_chronological_order: V chronologickém pořadí - label_reverse_chronological_order: V obrácaném chronologickém pořadí + label_chronological_order: Od nejstaršího + label_reverse_chronological_order: Od nejnovějšího label_planning: Plánování label_incoming_emails: Příchozí e-maily label_generate_key: Generovat klíč - label_issue_watchers: Sledování + label_issue_watchers: Pozorovatelé + label_document_watchers: Pozorovatelé label_example: Příklad label_display: Zobrazit label_sort: Řazení label_ascending: Vzestupně label_descending: Sestupně label_date_from_to: Od %{start} do %{end} - label_wiki_content_added: Wiki stránka přidána - label_wiki_content_updated: Wiki stránka aktualizována + label_wiki_content_added: Stránka wiki přidána + label_wiki_content_updated: Stránka wiki aktualizována label_group: Skupina label_group_plural: Skupiny label_group_new: Nová skupina @@ -790,27 +806,47 @@ cs: label_copy_source: Zdroj label_copy_target: Cíl label_copy_same_as_target: Stejný jako cíl - label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou - label_api_access_key: API přístupový klíč + label_display_used_statuses_only: Zobrazit pouze stavy použité touto frontou + label_api_access_key: Přístupový klíč API label_missing_api_access_key: Chybějící přístupový klíč API - label_api_access_key_created_on: API přístupový klíč vytvořen %{value} + label_api_access_key_created_on: "Přístupový klíč API vytvořen před %{value}" label_profile: Profil - label_subtask_plural: Podúkol - label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu + label_subtask_plural: Podúkoly + label_subtask_add: Přidat podúkol + label_issue_hierarchy: Hierarchie úkolů + label_project_copy_notifications: Odeslat e-mailové oznámení v průběhu kopírování projektu label_principal_search: "Hledat uživatele nebo skupinu:" label_user_search: "Hledat uživatele:" + label_git_path: Cesta k adresáři .git + label_darcs_path: Kořenový adresář + label_mercurial_path: Kořenový adresář + label_cvs_path: CVSROOT + label_cvs_module: Modul + label_bazaar_path: Kořenový adresář + label_filesystem_path: Kořenový adresář + label_additional_workflow_transitions_for_assignee: Pokud je uživatel přiřazeným, jsou povoleny další změny stavu + label_additional_workflow_transitions_for_author: Pokud je uživatel autorem, jsou povoleny další změny stavu + label_notify_member_plural: Odeslat aktualizace úkolů e-mailem + label_path_encoding: Kódování cesty + label_deleted_custom_field: (smazané volitelné pole) + label_toc: Obsah + label_mail_handler_confirmation: "Potvrzení rozeslání e-mailů: %{subject}" + label_mail_handler_failure: "Neúspěšné rozeslání e-mailů: %{subject}" + label_mail_handler_errors_with_submission: "Rozeslání vašeho e-mailu proběhlo s chybami:" button_login: Přihlásit button_submit: Potvrdit button_save: Uložit - button_check_all: Zašrtnout vše - button_uncheck_all: Odšrtnout vše + button_check_all: Zaškrtnout vše + button_uncheck_all: Odškrtnout vše + button_collapse_all: Sbalit vše + button_expand_all: Rozbalit vše button_delete: Odstranit button_create: Vytvořit button_create_and_continue: Vytvořit a pokračovat button_test: Testovat button_edit: Upravit - button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: %{page_title}" + button_edit_associated_wikipage: "Upravit přiřazenou stránku wiki: %{page_title}" button_add: Přidat button_change: Změnit button_apply: Použít @@ -826,7 +862,7 @@ cs: button_cancel: Storno button_activate: Aktivovat button_sort: Seřadit - button_log_time: Přidat čas + button_log_time: Zaznamenat čas button_rollback: Zpět k této verzi button_watch: Sledovat button_unwatch: Nesledovat @@ -842,7 +878,7 @@ cs: button_update: Aktualizovat button_configure: Konfigurovat button_quote: Citovat - button_duplicate: Duplikát + button_duplicate: Duplikovat button_show: Zobrazit status_active: aktivní @@ -855,71 +891,80 @@ cs: field_active: Aktivní - text_select_mail_notifications: Vyberte akci při které bude zasláno upozornění emailem. + text_select_mail_notifications: Vyberte akce, při kterých se zašle e-mailem upozornění text_regexp_info: např. ^[A-Z0-9]+$ - text_min_max_length_info: 0 znamená bez limitu - text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a všechna související data ? + text_min_max_length_info: 0 znamená bez omezení + text_project_destroy_confirmation: Jste si jisti, že chcete smazat tento projekt a všechna související data ? text_subprojects_destroy_warning: "Jeho podprojek(y): %{value} budou také smazány." - text_workflow_edit: Vyberte roli a frontu k editaci průběhu práce + text_workflow_edit: Vyberte roli a frontu pro úpravu průběhu práce text_are_you_sure: Jste si jisti? text_are_you_sure_with_children: Smazat úkol včetně všech podúkolů? text_journal_changed: "%{label} změněn z %{old} na %{new}" + text_journal_changed_no_detail: "%{label} aktualizováno" text_journal_set_to: "%{label} nastaven na %{value}" text_journal_deleted: "%{label} smazán (%{old})" text_journal_added: "%{label} %{value} přidán" - text_tip_issue_begin_day: úkol začíná v tento den - text_tip_issue_end_day: úkol končí v tento den - text_tip_issue_begin_end_day: úkol začíná a končí v tento den - text_project_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.
Once saved, the identifier can not be changed.' - text_caracters_maximum: "%{count} znaků maximálně." - text_caracters_minimum: "Musí být alespoň %{count} znaků dlouhé." + text_tip_issue_begin_day: v tento den úkol začíná + text_tip_issue_end_day: v tento den úkol končí + text_tip_issue_begin_end_day: v tento den úkol začíná i končí + text_project_identifier_info: 'Jsou povolena jen malá písmena (a-z), číslice, pomlčky a podtržítka.
Uložený identifikátor už nemůže být změněn.' + text_caracters_maximum: "Maximálně %{count} znaků." + text_caracters_minimum: "Musí mít alespoň %{count} znaků(-y)." text_length_between: "Délka mezi %{min} a %{max} znaky." text_tracker_no_workflow: Pro tuto frontu není definován žádný průběh práce text_unallowed_characters: Nepovolené znaky - text_comma_separated: Povoleno více hodnot (oddělěné čárkou). - text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu). + text_comma_separated: Povoleno více hodnot (oddělené čárkou). + text_line_separated: Povoleno více hodnot (každá hodnota na zvláštním řádku). text_issues_ref_in_commit_messages: Odkazování a opravování úkolů ve zprávách commitů text_issue_added: "Úkol %{id} byl vytvořen uživatelem %{author}." text_issue_updated: "Úkol %{id} byl aktualizován uživatelem %{author}." - text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto Wiki a celý její obsah? - text_issue_category_destroy_question: "Některé úkoly (%{count}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?" + text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto wiki a celý její obsah? + text_issue_category_destroy_question: "K této kategorii jsou přiřazeny nějaké úkoly (%{count}). Co s nimi chtete udělat?" text_issue_category_destroy_assignments: Zrušit přiřazení ke kategorii text_issue_category_reassign_to: Přiřadit úkoly do této kategorie - text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámení pouze o vašich či o sledovaných položkách (např. o položkách jejichž jste autor nebo ke kterým jste přiřazen(a))." - text_no_configuration_data: "Role, fronty, stavy úkolů ani průběh práce nebyly zatím nakonfigurovány.\nVelice doporučujeme nahrát výchozí konfiguraci. Po té si můžete vše upravit" + text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámení pouze o položkách, které sledujete nebo do kterých jste začleněn (např. jste jejich autorem nebo jste jim byl(a) přiřazen(a))." + text_no_configuration_data: "Role, fronty, stavy úkolů ani průběh práce nebyly zatím nakonfigurovány.\nVelice doporučujeme nahrát výchozí konfiguraci. Pak si můžete vše upravit." text_load_default_configuration: Nahrát výchozí konfiguraci - text_status_changed_by_changeset: "Použito v changesetu %{value}." - text_time_logged_by_changeset: Aplikováno v changesetu %{value}. - text_issues_destroy_confirmation: 'Opravdu si přejete odstranit všechny zvolené úkoly?' + text_status_changed_by_changeset: "Použito v sadě změn %{value}." + text_time_logged_by_changeset: Aplikováno v sadě změn %{value}. + text_issues_destroy_confirmation: 'Opravdu si přejete smazat zvolené úkoly?' text_select_project_modules: 'Aktivní moduly v tomto projektu:' text_default_administrator_account_changed: Výchozí nastavení administrátorského účtu změněno text_file_repository_writable: Povolen zápis do adresáře ukládání souborů text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets text_rmagick_available: RMagick k dispozici (volitelné) - text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno %{hours} práce. Co chete udělat?" - text_destroy_time_entries: Odstranit evidované hodiny. + text_destroy_time_entries_question: "U úkolů, které chcete odstranit, je evidováno %{hours} hodin práce. Co chcete udělat?" + text_destroy_time_entries: Odstranit evidované hodiny text_assign_time_entries_to_project: Přiřadit evidované hodiny projektu text_reassign_time_entries: 'Přeřadit evidované hodiny k tomuto úkolu:' text_user_wrote: "%{value} napsal:" - text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě." - text_enumeration_category_reassign_to: 'Přeřadit je do této:' - text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci." - text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi ChiliProject uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným ChiliProject uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky." - text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.' - text_custom_field_possible_values_info: 'Každá hodnota na novém řádku' - text_wiki_page_destroy_question: Tato stránka má %{descendants} podstránek a potomků. Co chcete udělat? + text_enumeration_destroy_question: "K této hodnotě je přiřazeno (%{count}) objektů." + text_enumeration_category_reassign_to: 'Přeřadit je k této hodnotě:' + text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání upozornění je zakázáno.\nNastavte SMTP server v souboru config/configuration.yml a restartujte aplikaci." + text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi uživateli ChiliProjectu a uživatelskými jmény nalezenými v logu úložiště.\nUživatelé se shodným uživatelským jménem či e-mailovou adresou v ChiliProjectu a v úložišti jsou namapování automaticky." + text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje maximální zobrazitelnou velikost.' + text_custom_field_possible_values_info: 'Každá hodnota na zvláštním řádku' + text_wiki_page_destroy_question: "Tato stránka má %{descendants} podstránek a potomků. Co chcete udělat?" text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky text_wiki_page_reassign_children: Přiřadit podstránky k tomuto rodiči - text_own_membership_delete_confirmation: "Chystáte se odebrat si některá nebo všechny svá oprávnění a potom již nemusíte být schopni upravit tento projekt.\nOpravdu chcete pokračovat?" + text_own_membership_delete_confirmation: "Chystáte se odebrat si některá nebo všechna oprávnění a potom již možná nebudete moci upravit tento projekt.\nOpravdu chcete pokračovat?" text_zoom_in: Přiblížit text_zoom_out: Oddálit + text_powered_by: Provozováno na %{link} + text_warn_on_leaving_unsaved: Tato stránka obsahuje neuložený text, který bude ztracen, pokud ji opustíte. + text_default_encoding: "Výchozí: UTF-8" + text_mercurial_repo_example: místní úložiště (např. /hgrepo, c:\hgrepo) + text_git_repo_example: prázdné a místní úložiště (např. /gitrepo, c:\gitrepo) + text_display_subprojects: Zobrazit podprojekty + text_current_project: Tento projekt + text_mail_handler_confirmation_successful: Váš e-mail byl úspěšně přidán na následující URL default_role_manager: Manažer default_role_developer: Vývojář default_role_reporter: Reportér - default_role_non_member: Non member - default_role_anonymous: Anonymous + default_role_non_member: Nečlen + default_role_anonymous: Anonym default_tracker_bug: Chyba default_tracker_feature: Požadavek default_tracker_support: Podpora @@ -936,293 +981,29 @@ cs: default_priority_high: Vysoká default_priority_urgent: Urgentní default_priority_immediate: Okamžitá - default_activity_design: Návhr + default_activity_design: Návrh default_activity_development: Vývoj enumeration_issue_priorities: Priority úkolů enumeration_doc_categories: Kategorie dokumentů enumeration_activities: Aktivity (sledování času) - error_scm_annotate: "Položka neexistuje nebo nemůže být komentována." - label_planning: Plánování - text_subprojects_destroy_warning: "Jeho podprojek(y): %{value} budou také smazány." - label_and_its_subprojects: "%{value} a jeho podprojekty" - mail_body_reminder: "%{count} úkol(ů), které máte přiřazeny má termín během několik dní (%{days}):" - mail_subject_reminder: "%{count} úkol(ů) má termín během několik dní (%{days})" - text_user_wrote: "%{value} napsal:" - label_duplicated_by: duplikováno od - setting_enabled_scm: Povolené SCM - text_enumeration_category_reassign_to: 'Přeřadit je do této:' - text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě." - label_incoming_emails: Příchozí e-maily - label_generate_key: Generovat klíč - setting_mail_handler_api_enabled: Povolit WS pro příchozí e-maily - setting_mail_handler_api_key: API klíč - text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/configuration.yml a restartujte aplikaci." - field_parent_title: Rodičovská stránka - label_issue_watchers: Sledování - setting_commit_logs_encoding: Kódování zpráv při commitu - button_quote: Citovat - setting_sequential_project_identifiers: Generovat sekvenční identifikátory projektů - notice_unable_delete_version: Nemohu odstanit verzi - label_renamed: přejmenováno - label_copied: zkopírováno - setting_plain_text_mail: pouze prostý text (ne HTML) - permission_view_files: Prohlížení souborů - permission_edit_issues: Upravování úkolů - permission_edit_own_time_entries: Upravování vlastních zázamů o stráveném čase - permission_manage_public_queries: Správa veřejných dotazů - permission_add_issues: Přidávání úkolů - permission_log_time: Zaznamenávání stráveného času - permission_view_changesets: Zobrazování sady změn - permission_view_time_entries: Zobrazení stráveného času - permission_manage_versions: Spravování verzí - permission_manage_wiki: Spravování Wiki - permission_manage_categories: Spravování kategorií úkolů - permission_protect_wiki_pages: Zabezpečení Wiki stránek - permission_comment_news: Komentování novinek - permission_delete_messages: Mazání zpráv - permission_select_project_modules: Výběr modulů projektu - permission_manage_documents: Správa dokumentů - permission_edit_wiki_pages: Upravování stránek Wiki - permission_add_issue_watchers: Přidání sledujících uživatelů - permission_view_gantt: Zobrazené Ganttova diagramu - permission_move_issues: Přesouvání úkolů - permission_manage_issue_relations: Spravování vztahů mezi úkoly - permission_delete_wiki_pages: Mazání stránek na Wiki - permission_manage_boards: Správa diskusních fór - permission_delete_wiki_pages_attachments: Mazání příloh - permission_view_wiki_edits: Prohlížení historie Wiki - permission_add_messages: Posílání zpráv - permission_view_messages: Prohlížení zpráv - permission_manage_files: Spravování souborů - permission_edit_issue_notes: Upravování poznámek - permission_manage_news: Spravování novinek - permission_view_calendar: Prohlížení kalendáře - permission_manage_members: Spravování členství - permission_edit_messages: Upravování zpráv - permission_delete_issues: Mazání úkolů - permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů - permission_manage_repository: Spravování repozitáře - permission_commit_access: Commit přístup - permission_browse_repository: Procházení repozitáře - permission_view_documents: Prohlížení dokumentů - permission_edit_project: Úprava projektů - permission_add_issue_notes: Přidávání poznámek - permission_save_queries: Ukládání dotazů - permission_view_wiki_pages: Prohlížení Wiki - permission_rename_wiki_pages: Přejmenovávání Wiki stránek - permission_edit_time_entries: Upravování záznamů o stráveném času - permission_edit_own_issue_notes: Upravování vlastních poznámek - setting_gravatar_enabled: Použít uživatelské ikony Gravatar - label_example: Příklad - text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi ChiliProject uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným ChiliProject uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky." - permission_edit_own_messages: Upravit vlastní zprávy - permission_delete_own_messages: Smazat vlastní zprávy - label_user_activity: "Aktivita uživatele: %{value}" - label_updated_time_by: "Akutualizováno: %{author} před: %{age}" - text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.' - setting_diff_max_lines_displayed: Maximální počet zobrazenách řádků rozdílů - text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets - warning_attachments_not_saved: "%{count} soubor(ů) nebylo možné uložit." - button_create_and_continue: Vytvořit a pokračovat - text_custom_field_possible_values_info: 'Každá hodnota na novém řádku' - label_display: Zobrazit - field_editable: Editovatelný - setting_repository_log_display_limit: Maximální počet revizí zobrazených v logu souboru - setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce - field_watcher: Sleduje - setting_openid: Umožnit přihlašování a registrace s OpenID - field_identity_url: OpenID URL - label_login_with_open_id_option: nebo se přihlašte s OpenID - field_content: Obsah - label_descending: Sestupně - label_sort: Řazení - label_ascending: Vzestupně - label_date_from_to: Od %{start} do %{end} - label_greater_or_equal: ">=" - label_less_or_equal: <= - text_wiki_page_destroy_question: Tato stránka má %{descendants} podstránek a potomků. Co chcete udělat? - text_wiki_page_reassign_children: Přiřadit podstránky k tomuto rodiči - text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky - text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky - setting_password_min_length: Minimální délka hesla - field_group_by: Seskupovat výsledky podle - mail_subject_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována" - label_wiki_content_added: Wiki stránka přidána - mail_subject_wiki_content_added: "'%{id}' Wiki stránka byla přidána" - mail_body_wiki_content_added: "'%{id}' Wiki stránka byla přidána od %{author}." - label_wiki_content_updated: Wiki stránka aktualizována - mail_body_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována od %{author}." - permission_add_project: Vytvořit projekt - setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil - label_view_all_revisions: Zobrazit všechny revize - label_tag: Tag - label_branch: Branch - error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu. - error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů"). - text_journal_changed: "%{label} změněn z %{old} na %{new}" - text_journal_set_to: "%{label} nastaven na %{value}" - text_journal_deleted: "%{label} smazán (%{old})" - label_group_plural: Skupiny - label_group: Skupina - label_group_new: Nová skupina - label_time_entry_plural: Strávený čas - text_journal_added: "%{label} %{value} přidán" - field_active: Aktivní enumeration_system_activity: Systémová aktivita - permission_delete_issue_watchers: Smazat přihlížející - version_status_closed: zavřený - version_status_locked: uzamčený - version_status_open: otevřený - error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen - label_user_anonymous: Anonymní - button_move_and_follow: Přesunout a následovat - setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt - setting_gravatar_default: Výchozí Gravatar - field_sharing: Sdílení - label_version_sharing_hierarchy: S hierarchií projektu - label_version_sharing_system: Se všemi projekty - label_version_sharing_descendants: S podprojekty - label_version_sharing_tree: Se stromem projektu - label_version_sharing_none: Nesdíleno - error_can_not_archive_project: Tento projekt nemůže být archivován - button_duplicate: Duplikát - button_copy_and_follow: Kopírovat a následovat - label_copy_source: Zdroj - setting_issue_done_ratio: Spočítat koeficient dokončení úkolu s - setting_issue_done_ratio_issue_status: Použít stav úkolu - error_issue_done_ratios_not_updated: Koeficient dokončení úkolu nebyl aktualizován. - error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e) - setting_issue_done_ratio_issue_field: Použít pole úkolu - label_copy_same_as_target: Stejný jako cíl - label_copy_target: Cíl - notice_issue_done_ratios_updated: Koeficienty dokončení úkolu byly aktualizovány. - error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly - label_update_issue_done_ratios: Aktualizovat koeficienty dokončení úkolů - setting_start_of_week: Začínat kalendáře - permission_view_issues: Zobrazit úkoly - label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou - label_revision_id: Revize %{value} - label_api_access_key: API přístupový klíč - label_api_access_key_created_on: API přístupový klíč vytvořen %{value} - label_feeds_access_key: RSS přístupový klíč - notice_api_access_key_reseted: Váš API přístupový klíč byl resetován. - setting_rest_api_enabled: Zapnout službu REST - label_missing_api_access_key: Chybějící přístupový klíč API - label_missing_feeds_access_key: Chybějící přístupový klíč RSS - button_show: Zobrazit - text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu). - setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků - permission_add_subprojects: Vytvořit podprojekty - label_subproject_new: Nový podprojekt - text_own_membership_delete_confirmation: |- - Chystáte se odebrat si některá nebo všechny svá oprávnění a potom již nemusíte být schopni upravit tento projekt. - Opravdu chcete pokračovat? - label_close_versions: Zavřít dokončené verze - label_board_sticky: Nálepka - label_board_locked: Uzamčeno - permission_export_wiki_pages: Exportovat Wiki stránky - setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti - permission_manage_project_activities: Spravovat aktivity projektu - error_unable_delete_issue_status: Nelze smazat stavy úkolů - label_profile: Profil - permission_manage_subtasks: Spravovat podúkoly - field_parent_issue: Rodičovský úkol - label_subtask_plural: Podúkol - label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu - error_can_not_delete_custom_field: Nelze smazat volitelné pole - error_unable_to_connect: Nelze se připojit (%{value}) - error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat. - error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán. - field_principal: Hlavní - label_my_page_block: Bloky na mé stránce - notice_failed_to_save_members: "Nepodařilo se uložit člena(y): %{errors}." - text_zoom_out: Oddálit - text_zoom_in: Přiblížit - notice_unable_delete_time_entry: Nelze smazat čas ze záznamu. - label_overall_spent_time: Celkově strávený čas - field_time_entries: Zaznamenaný čas - project_module_gantt: Gantt - project_module_calendar: Kalendář - button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: %{page_title}" - text_are_you_sure_with_children: Smazat úkol včetně všech podúkolů? - field_text: Textové pole - label_user_mail_option_only_owner: Only for things I am the owner of - setting_default_notification_option: Default notification option - label_user_mail_option_only_my_events: Only for things I watch or I'm involved in - label_user_mail_option_only_assigned: Only for things I am assigned to - label_user_mail_option_none: No events - field_member_of_group: Assignee's group - field_assigned_to_role: Assignee's role - notice_not_authorized_archived_project: The project you're trying to access has been archived. - label_principal_search: "Search for user or group:" - label_user_search: "Search for user:" - field_visible: Visible - setting_emails_header: Emails header - setting_commit_logtime_activity_id: Activity for logged time - text_time_logged_by_changeset: Applied in changeset %{value}. - setting_commit_logtime_enabled: Enable time logging - notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max}) - setting_gantt_items_limit: Maximum number of items displayed on the gantt chart - text_powered_by: Powered by %{link} - label_cvs_module: Module - label_filesystem_path: Root directory - label_darcs_path: Root directory - label_bazaar_path: Root directory - label_cvs_path: CVSROOT - label_git_path: Path to .git directory - label_mercurial_path: Root directory - label_my_queries: My custom queries - label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee - text_journal_changed_no_detail: "%{label} updated" - button_expand_all: Expand all - button_collapse_all: Collapse all - label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author - field_effective_date: Due date - label_news_comment_added: Comment added to a news - field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text - text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page. - text_default_encoding: "Default: UTF-8" - text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo) - label_notify_member_plural: Email issue updates - label_path_encoding: Path encoding - text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) - label_diff: diff - setting_issue_startdate_is_adddate: Use current date as start date for new issues - description_search: Searchfield - description_user_mail_notification: Mail notification settings - description_date_range_list: Choose range from list - description_date_to: Enter end date - description_query_sort_criteria_attribute: Sort attribute - description_message_content: Message content - description_wiki_subpages_reassign: Choose new parent page - description_available_columns: Available Columns - description_selected_columns: Selected Columns - description_date_range_interval: Choose range by selecting start and end date - description_project_scope: Search scope - description_issue_category_reassign: Choose issue category - description_query_sort_criteria_direction: Sort direction - description_notes: Notes - description_filter: Filter - description_choose_project: Projects - description_date_from: Enter start date - label_deleted_custom_field: (deleted custom field) - field_custom_filter: Custom LDAP filter - text_display_subprojects: Display subprojects - text_current_project: Current project - label_toc: Contents - search_input_placeholder: search ... - setting_mail_handler_confirmation_on_success: Send confirmation email on successful incoming email - label_mail_handler_confirmation: "Confirmation of email submission: %{subject}" - label_mail_handler_errors_with_submission: "There were errors with your email submission:" - label_document_watchers: Watchers - setting_mail_handler_confirmation_on_failure: Send confirmation email on failed incoming email - label_between: between - label_mail_handler_failure: "Failed email submission: %{subject}" - notice_not_authorized_action: You are not authorized to perform this action. - text_mail_handler_confirmation_successful: Your email has been successful added at the following url - field_issue_summary: Issue summary - field_new_saved_query: New saved query - field_issue_view_all_open: View all open issues - label_subtask_add: Add a subtask - label_issue_hierarchy: Issue hierarchy + description_filter: Filtr + description_search: Vyhledávací pole + description_choose_project: Projekty + description_project_scope: Rozsah vyhledávání + description_notes: Poznámky + description_message_content: Obsah zprávy + description_query_sort_criteria_attribute: Atribut řazení + description_query_sort_criteria_direction: Směr řazení + description_user_mail_notification: Nastavení e-mailových upozornění + description_available_columns: Dostupné sloupce + description_selected_columns: Vybrané sloupce + description_issue_category_reassign: Zvolte kategorii úkolu + description_wiki_subpages_reassign: Vyberte novou rodičovskou stránku + description_date_range_list: Vyberte rozsah ze seznamu + description_date_range_interval: Určete rozsah vybráním počátečního a koncového datumu + description_date_from: Zadejte počáteční datum + description_date_to: Zadejte koncové datum + + notice_not_authorized_action: K této akci nemáte oprávnění. From 1d3cdf1fa908ca0b2874c0ad12150dba6a987501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Fri, 18 May 2012 22:45:52 +0200 Subject: [PATCH 23/55] Correct email sending on attachment to document #1008 --- app/controllers/documents_controller.rb | 2 +- test/functional/documents_controller_test.rb | 22 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index 4356ea06..eb5799db 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -85,7 +85,7 @@ class DocumentsController < ApplicationController if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added') # TODO: refactor - attachments.first.container.recipients.each do |recipient| + @document.recipients.each do |recipient| Mailer.deliver_attachments_added(attachments[:files], recipient) end end diff --git a/test/functional/documents_controller_test.rb b/test/functional/documents_controller_test.rb index 441f5ab7..66278a0f 100644 --- a/test/functional/documents_controller_test.rb +++ b/test/functional/documents_controller_test.rb @@ -147,6 +147,28 @@ LOREM end end + context "#add_attachment" do + setup do + @request.session[:user_id] = 2 + set_tmp_attachments_directory + @document = Document.generate!(:project => Project.find('ecookbook'), + :title => 'Test') + end + + should "send a notification mail" do + ActionMailer::Base.deliveries.clear + Setting.notified_events = Setting.notified_events.dup << 'document_added' + + post :add_attachment, + :id => @document.id, + :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} + + @document.reload + assert_not_nil @document + assert_equal 2, ActionMailer::Base.deliveries.size + end + end + def test_destroy @request.session[:user_id] = 2 post :destroy, :id => 1 From 93abdcf487eb51106955816a5c4025afabed8ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 19 May 2012 00:00:16 +0200 Subject: [PATCH 24/55] Fix comments missing in wiki add/update mails #986 --- app/views/mailer/wiki_content_added.text.html.rhtml | 2 +- app/views/mailer/wiki_content_added.text.plain.rhtml | 2 +- app/views/mailer/wiki_content_updated.text.html.rhtml | 2 +- app/views/mailer/wiki_content_updated.text.plain.rhtml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/mailer/wiki_content_added.text.html.rhtml b/app/views/mailer/wiki_content_added.text.html.rhtml index c4cbe5e3..41721527 100644 --- a/app/views/mailer/wiki_content_added.text.html.rhtml +++ b/app/views/mailer/wiki_content_added.text.html.rhtml @@ -1,3 +1,3 @@

<%= l(:mail_body_wiki_content_added, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), :author => h(@wiki_content.author)) %>
-<%=h @wiki_content.comments %>

+<%=h @wiki_content.last_journal.notes %>

diff --git a/app/views/mailer/wiki_content_added.text.plain.rhtml b/app/views/mailer/wiki_content_added.text.plain.rhtml index cbde7ec0..ac97033e 100644 --- a/app/views/mailer/wiki_content_added.text.plain.rhtml +++ b/app/views/mailer/wiki_content_added.text.plain.rhtml @@ -1,5 +1,5 @@ <%= l(:mail_body_wiki_content_added, :id => h(@wiki_content.page.pretty_title), :author => h(@wiki_content.author)) %> -<%= @wiki_content.comments %> +<%= @wiki_content.last_journal.notes %> <%= @wiki_content_url %> diff --git a/app/views/mailer/wiki_content_updated.text.html.rhtml b/app/views/mailer/wiki_content_updated.text.html.rhtml index d62d33e1..6e1bb49b 100644 --- a/app/views/mailer/wiki_content_updated.text.html.rhtml +++ b/app/views/mailer/wiki_content_updated.text.html.rhtml @@ -1,6 +1,6 @@

<%= l(:mail_body_wiki_content_updated, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), :author => h(@wiki_content.author)) %>
-<%=h @wiki_content.comments %>

+<%=h @wiki_content.last_journal.notes %>

<%= l(:label_view_diff) %>:
<%= link_to h(@wiki_diff_url), @wiki_diff_url %>

diff --git a/app/views/mailer/wiki_content_updated.text.plain.rhtml b/app/views/mailer/wiki_content_updated.text.plain.rhtml index 04839eaf..dbbbd5e2 100644 --- a/app/views/mailer/wiki_content_updated.text.plain.rhtml +++ b/app/views/mailer/wiki_content_updated.text.plain.rhtml @@ -1,6 +1,6 @@ <%= l(:mail_body_wiki_content_updated, :id => h(@wiki_content.page.pretty_title), :author => h(@wiki_content.author)) %> -<%= @wiki_content.comments %> +<%= @wiki_content.last_journal.notes %> <%= @wiki_content.page.pretty_title %>: <%= @wiki_content_url %> From 43723385c62cf49596de1379a28a24ab2ef336a3 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Fri, 18 May 2012 23:57:03 +0100 Subject: [PATCH 25/55] Handle the '(Un)Check all' link. #994 --- app/views/issues/_list.rhtml | 3 +-- public/javascripts/context_menu.jquery.js | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/views/issues/_list.rhtml b/app/views/issues/_list.rhtml index 51974157..414cef0d 100644 --- a/app/views/issues/_list.rhtml +++ b/app/views/issues/_list.rhtml @@ -3,8 +3,7 @@
- <%= sort_header_tag('id', :caption => '#', :default_order => 'desc') %> <% query.columns.each do |column| %> diff --git a/public/javascripts/context_menu.jquery.js b/public/javascripts/context_menu.jquery.js index b5148738..aedaa693 100644 --- a/public/javascripts/context_menu.jquery.js +++ b/public/javascripts/context_menu.jquery.js @@ -3,6 +3,7 @@ var element = el; var opts = options; var observingContextMenuClick; + var observingToggleAllClick; var lastSelected = null; var menu; var menuId = 'context-menu'; @@ -194,6 +195,20 @@ inputs.each(function() { inputs.attr('checked', checked ? 'checked' : false); }); + }, + toggleIssuesSelection: function(e) { + e.preventDefault(); + e.stopPropagation(); + var issues = $(this).parents('form').find('tr.issue'); + var checked = methods.isSelected(issues.eq(0)); + issues.each(function() { + var self = $(this); + if(checked) { + methods.removeSelection(self) + } else { + methods.addSelection(self); + } + }); } }; @@ -205,6 +220,11 @@ observingContextMenuClick = true; } + if(!observingToggleAllClick) { + element.find('.issues img[alt="Toggle_check"]').bind('click', methods.toggleIssuesSelection); + observingToggleAllClick = true; + } + methods.unselectAll(); }; From 87f68e58ad082aa523bc6b03959088989fa33ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 19 May 2012 11:38:40 +0200 Subject: [PATCH 26/55] Recalculate last reply of thread on message deletion #968 --- app/models/message.rb | 6 ++++++ test/unit/message_test.rb | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/models/message.rb b/app/models/message.rb index 1619ef3b..504b3452 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -80,9 +80,15 @@ class Message < ActiveRecord::Base end def after_destroy + parent.reset_last_reply_id! if parent board.reset_counters! end + def reset_last_reply_id! + clid = children.present? ? children.last.id : nil + self.update_attribute(:last_reply_id, clid) + end + def sticky=(arg) write_attribute :sticky, (arg == true || arg.to_s == '1' ? 1 : 0) end diff --git a/test/unit/message_test.rb b/test/unit/message_test.rb index d4895b4d..67f5323b 100644 --- a/test/unit/message_test.rb +++ b/test/unit/message_test.rb @@ -101,6 +101,18 @@ class MessageTest < ActiveSupport::TestCase # Watchers removed end + def test_destroy_last_reply + message = Message.find(4) + last_reply = message.last_reply + penultimate_reply = message.children[-2] + + assert last_reply.destroy + + message.reload + + assert_equal penultimate_reply, message.last_reply + end + def test_destroy_reply message = Message.find(5) board = message.board From 9cd14ca152efca10dba9745526d7d8f4ab480dec Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Sat, 19 May 2012 10:44:24 +0100 Subject: [PATCH 27/55] Fix a typo when calculating the menu X position. #1007 --- public/javascripts/context_menu.jquery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/context_menu.jquery.js b/public/javascripts/context_menu.jquery.js index aedaa693..4ae3abb3 100644 --- a/public/javascripts/context_menu.jquery.js +++ b/public/javascripts/context_menu.jquery.js @@ -154,7 +154,7 @@ } if(maxHeight > $(window).height()) { - renderY =+ menu.height(); + renderY -= menu.height(); menu.addClass(reverseYClass); } else { menu.removeClass(reverseYClass); From 20448c7efbee69a03053a2d22f31896b7842c402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sun, 20 May 2012 10:18:00 +0200 Subject: [PATCH 28/55] Load all required fixtures on issue unit test #863 Contributed by Toshi MARUYAMA --- test/unit/issue_test.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 6890d591..73738cad 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -21,6 +21,7 @@ class IssueTest < ActiveSupport::TestCase :issue_statuses, :issue_categories, :issue_relations, :workflows, :enumerations, :issues, + :journals, :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values, :time_entries From 2e18840f123e1298652ee2ab3cb278106aa37231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sun, 20 May 2012 10:30:34 +0200 Subject: [PATCH 29/55] Disable autocomplete on registragion form #844 --- app/views/account/register.rhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/account/register.rhtml b/app/views/account/register.rhtml index 8498d135..d6a1cbe4 100644 --- a/app/views/account/register.rhtml +++ b/app/views/account/register.rhtml @@ -1,6 +1,6 @@

<%=l(:label_register)%> <%=link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %>

-<% form_tag({:action => 'register'}, :class => "tabular") do %> +<% form_tag({:action => 'register'}, :class => "tabular", :autocomplete => :off) do %> <%= error_messages_for 'user' %>
From 375045a82b36cfd49dc1352b7beba993873157b4 Mon Sep 17 00:00:00 2001 From: Dereckson Date: Fri, 6 Apr 2012 03:44:35 +0200 Subject: [PATCH 30/55] Improving French translation #967 --- config/locales/fr.yml | 129 +++++++++++++++++++++--------------------- 1 file changed, 65 insertions(+), 64 deletions(-) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 079e9715..4e899d53 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1,7 +1,8 @@ -# French translations for Ruby on Rails +# French translations for Ruby on Rails and ChiliProject # by Christian Lescuyer (christian@flyingcoders.com) # contributor: Sebastien Grosjean - ZenCocoon.com # contributor: Thibaut Cuvelier - Developpez.com +# contributor: Sébastien Santoro aka Dereckson fr: direction: ltr @@ -174,8 +175,8 @@ fr: notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible. notice_not_authorized: "Vous n'êtes pas autorisé à accéder à cette page." notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé. - notice_email_sent: "Un email a été envoyé à %{value}" - notice_email_error: "Erreur lors de l'envoi de l'email (%{value})" + notice_email_sent: "Un e-mail a été envoyé à %{value}" + notice_email_error: "Erreur lors de l'envoi de l'e-mail (%{value})" notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée." notice_failed_to_save_issues: "%{count} demande(s) sur les %{total} sélectionnées n'ont pas pu être mise(s) à jour : %{ids}." notice_no_issue_selected: "Aucune demande sélectionnée ! Cochez les demandes que vous voulez mettre à jour." @@ -223,7 +224,7 @@ fr: field_is_required: Obligatoire field_firstname: Prénom field_lastname: Nom - field_mail: "Email " + field_mail: "E-mail " field_filename: Fichier field_filesize: Taille field_downloads: Téléchargements @@ -253,12 +254,12 @@ fr: field_fixed_version: Version cible field_user: Utilisateur field_role: Rôle - field_homepage: "Site web " + field_homepage: "Site Web " field_is_public: Public field_parent: Sous-projet de - field_is_in_roadmap: Demandes affichées dans la roadmap + field_is_in_roadmap: Demandes affichées dans la feuille de route field_login: "Identifiant " - field_mail_notification: Notifications par mail + field_mail_notification: Notifications par e-mail field_admin: Administrateur field_last_login_on: "Dernière connexion " field_language: Langue @@ -279,7 +280,7 @@ fr: field_start_date: Début field_done_ratio: "% réalisé" field_auth_source: Mode d'authentification - field_hide_mail: Cacher mon adresse mail + field_hide_mail: Cacher mon adresse e-mail field_comments: Commentaire field_url: URL field_start_page: Page de démarrage @@ -321,10 +322,10 @@ fr: setting_issues_export_limit: Limite export demandes setting_mail_from: Adresse d'émission setting_bcc_recipients: Destinataires en copie cachée (cci) - setting_plain_text_mail: Mail texte brut (non HTML) + setting_plain_text_mail: Mail texte brut (sans HTML) setting_host_name: Nom d'hôte et chemin setting_text_formatting: Formatage du texte - setting_wiki_compression: Compression historique wiki + setting_wiki_compression: Compression de l'historique du wiki setting_feeds_limit: Limite du contenu des flux RSS setting_default_projects_public: Définir les nouveaux projets comme publics par défaut setting_autofetch_changesets: Récupération auto. des commits @@ -338,15 +339,15 @@ fr: setting_issue_list_default_columns: Colonnes affichées par défaut sur la liste des demandes setting_repositories_encodings: Encodages des dépôts setting_commit_logs_encoding: Encodage des messages de commit - setting_emails_footer: Pied-de-page des emails + setting_emails_footer: Pied-de-page des e-mails setting_protocol: Protocole setting_per_page_options: Options d'objets affichés par page setting_user_format: Format d'affichage des utilisateurs setting_activity_days_default: Nombre de jours affichés sur l'activité des projets setting_display_subprojects_issues: Afficher par défaut les demandes des sous-projets sur les projets principaux setting_enabled_scm: SCM activés - setting_mail_handler_body_delimiters: "Tronquer les emails après l'une de ces lignes" - setting_mail_handler_api_enabled: "Activer le WS pour la réception d'emails" + setting_mail_handler_body_delimiters: "Tronquer les e-mails après l'une de ces lignes" + setting_mail_handler_api_enabled: "Activer le WS pour la réception d'e-mails" setting_mail_handler_api_key: Clé de protection de l'API setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels setting_gravatar_enabled: Afficher les Gravatar des utilisateurs @@ -472,8 +473,8 @@ fr: label_tracker_plural: Trackers label_tracker_new: Nouveau tracker label_workflow: Workflow - label_issue_status: Statut de demandes - label_issue_status_plural: Statuts de demandes + label_issue_status: Statut de demande + label_issue_status_plural: Statuts de demande label_issue_status_new: Nouveau statut label_issue_category: Catégorie de demandes label_issue_category_plural: Catégories de demandes @@ -646,7 +647,7 @@ fr: label_sort_higher: Remonter label_sort_lower: Descendre label_sort_lowest: Descendre en dernier - label_roadmap: Roadmap + label_roadmap: Feuille de route label_roadmap_due_in: "Échéance dans %{value}" label_roadmap_overdue: "En retard de %{value}" label_roadmap_no_issues: Aucune demande pour cette version @@ -718,7 +719,7 @@ fr: label_date_to: Au label_language_based: Basé sur la langue de l'utilisateur label_sort_by: "Trier par %{value}" - label_send_test_email: Envoyer un email de test + label_send_test_email: Envoyer un e-mail de test label_feeds_access_key_created_on: "Clé d'accès RSS créée il y a %{value}" label_module_plural: Modules label_added_time_by: "Ajouté par %{author} il y a %{age}" @@ -736,7 +737,7 @@ fr: label_user_mail_option_all: "Pour tous les événements de tous mes projets" label_user_mail_option_selected: "Pour tous les événements des projets sélectionnés..." label_user_mail_no_self_notified: "Je ne veux pas être notifié des changements que j'effectue" - label_registration_activation_by_email: activation du compte par email + label_registration_activation_by_email: activation du compte par e-mail label_registration_manual_activation: activation manuelle du compte label_registration_automatic_activation: activation automatique du compte label_display_per_page: "Par page : %{value}" @@ -754,7 +755,7 @@ fr: label_chronological_order: Dans l'ordre chronologique label_reverse_chronological_order: Dans l'ordre chronologique inverse label_planning: Planning - label_incoming_emails: Emails entrants + label_incoming_emails: E-mails entrants label_generate_key: Générer une clé label_issue_watchers: Observateurs label_example: Exemple @@ -909,7 +910,7 @@ fr: default_role_non_member: "Non membre " default_role_anonymous: "Anonyme " default_tracker_bug: Anomalie - default_tracker_feature: Evolution + default_tracker_feature: Évolution default_tracker_support: Assistance default_issue_status_new: Nouveau default_issue_status_in_progress: En cours @@ -943,13 +944,13 @@ fr: text_journal_deleted: "%{label} %{old} supprimé" text_journal_added: "%{label} %{value} ajouté" enumeration_system_activity: Activité système - label_board_sticky: Sticky + label_board_sticky: Post-it label_board_locked: Verrouillé error_unable_delete_issue_status: Impossible de supprimer le statut de demande error_can_not_delete_custom_field: Impossible de supprimer le champ personnalisé error_unable_to_connect: Connexion impossible (%{value}) error_can_not_remove_role: Ce rôle est utilisé et ne peut pas être supprimé. - error_can_not_delete_tracker: Ce tracker contient des demandes et ne peut pas être supprimé. + error_can_not_delete_tracker: "Ce tracker contenant des demandes, il ne peut pas être supprimé." field_principal: Principal notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: %{errors}." text_zoom_out: Zoom arrière @@ -959,7 +960,7 @@ fr: field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendrier - button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}" + button_edit_associated_wikipage: "Modifier la page wiki associée : %{page_title}" text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ? field_text: Champ texte label_user_mail_option_only_owner: Seulement pour ce que j'ai créé @@ -970,53 +971,53 @@ fr: field_member_of_group: Groupe de l'assigné field_assigned_to_role: Rôle de l'assigné setting_emails_header: En-tête des emails - text_powered_by: Powered by %{link} + text_powered_by: Propulsé par %{link} label_cvs_module: Module - label_filesystem_path: Root directory - label_darcs_path: Root directory - label_bazaar_path: Root directory + label_filesystem_path: Dossier parent + label_darcs_path: Dossier parent + label_bazaar_path: Dossier parent label_cvs_path: CVSROOT - label_git_path: Path to .git directory - label_mercurial_path: Root directory - field_effective_date: Due date - text_default_encoding: "Default: UTF-8" - text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo) + label_git_path: Dossier .git + label_mercurial_path: Dossier parent + field_effective_date: Échéance + text_default_encoding: "par défaut, UTF-8" + text_git_repo_example: un dépôt local et nu (ex. /gitrepo, c:\gitrepo) label_notify_member_plural: Email issue updates - label_path_encoding: Path encoding - text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) - description_search: Searchfield + label_path_encoding: Encodage du dossier + text_mercurial_repo_example: dépôt local (ex. /hgrepo, c:\hgrepo) + description_search: Case de recherche description_user_mail_notification: Mail notification settings description_date_range_list: Choose range from list description_date_to: Enter end date description_query_sort_criteria_attribute: Sort attribute - description_message_content: Message content + description_message_content: Contenu du message description_wiki_subpages_reassign: Choose new parent page - description_available_columns: Available Columns - description_selected_columns: Selected Columns - description_date_range_interval: Choose range by selecting start and end date - description_project_scope: Search scope - description_issue_category_reassign: Choose issue category - description_query_sort_criteria_direction: Sort direction + description_available_columns: Colonnes disponibles + description_selected_columns: Colonnes sélectionnées + description_date_range_interval: Choisissez l'intervalle de date en sélectionnant une date de début et une date de fin + description_project_scope: Portée de recherche + description_issue_category_reassign: Sélectionnez la catégorie de la demande + description_query_sort_criteria_direction: Tri par direction description_notes: Notes - description_filter: Filter - description_choose_project: Projects - description_date_from: Enter start date - field_custom_filter: Custom LDAP filter - text_display_subprojects: Display subprojects - text_current_project: Current project - label_toc: Contents - search_input_placeholder: search ... - setting_mail_handler_confirmation_on_success: Send confirmation email on successful incoming email - label_mail_handler_confirmation: "Confirmation of email submission: %{subject}" - label_mail_handler_errors_with_submission: "There were errors with your email submission:" - label_document_watchers: Watchers - setting_mail_handler_confirmation_on_failure: Send confirmation email on failed incoming email - label_between: between - label_mail_handler_failure: "Failed email submission: %{subject}" - notice_not_authorized_action: You are not authorized to perform this action. - text_mail_handler_confirmation_successful: Your email has been successful added at the following url - field_issue_summary: Issue summary - field_new_saved_query: New saved query - field_issue_view_all_open: View all open issues - label_subtask_add: Add a subtask - label_issue_hierarchy: Issue hierarchy + description_filter: Filtrer + description_choose_project: Projets + description_date_from: Entrer la date du début + field_custom_filter: Filtre LDAP personnalisé + text_display_subprojects: Afficher les sous-projets + text_current_project: Project en cours + label_toc: Table des matières + search_input_placeholder: recherche ... + setting_mail_handler_confirmation_on_success: Envoyer un e-mail + label_mail_handler_confirmation: "Confirmation de l 'envoi d'un e-mail : %{subject}" + label_mail_handler_errors_with_submission: "Des erreurs sont survenues lors de l'envoi de votre e-mail :" + label_document_watchers: Observateurs + setting_mail_handler_confirmation_on_failure: Envoyez une confirmation en cas d'erreur d'e-mail entrant + label_between: entre + label_mail_handler_failure: "Erreur d'envoi d'e-mail : %{subject}" + notice_not_authorized_action: Vous n'êtes pas autoriser à effectuer cette action. + text_mail_handler_confirmation_successful: Votre e-mail a été ajouté avec succès à l'adresse suivante + field_issue_summary: Rapports + field_new_saved_query: Nouveau rapport + field_issue_view_all_open: Demandes ouvertes + label_subtask_add: Ajouter une sous-tâche + label_issue_hierarchy: Hiérarchie de la demande From 61c00779d087cb3a3f136bb47bcf48c502f16156 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Sun, 25 Mar 2012 08:45:48 +0100 Subject: [PATCH 31/55] Set the X-CSRF-Token header for AJAX requests with jQuery. #950 --- public/javascripts/application.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/public/javascripts/application.js b/public/javascripts/application.js index b2c4b730..9b25ddad 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -467,7 +467,15 @@ jQuery.viewportHeight = function() { // Automatically use format.js for jQuery Ajax jQuery.ajaxSetup({ - 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} + 'beforeSend': function(xhr) { + xhr.setRequestHeader("Accept", "text/javascript"); + + // TODO: Remove once jquery-rails (Rails 3) has been added a dependency + var csrf_meta_tag = jQuery('meta[name="csrf-token"]'); + if (csrf_meta_tag) { + xhr.setRequestHeader('X-CSRF-Token', csrf_meta_tag.attr('content')); + } + } }) /* TODO: integrate with existing code and/or refactor */ From f983b451adbd65bf51ef6497092311af803710f6 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Fri, 23 Mar 2012 13:09:35 +0000 Subject: [PATCH 32/55] Reformat CSS to use the coding standard. #947 Formatting was done mostly by hand using the following as a guide http://gnuvince.wordpress.com/2007/02/26/reformatting-a-css-file-with-vim/ " Replace all sequences of white spaces with one space :%s/[ \t\n]\+/ /g " Go to the end of the command, then forward one character and insert " a newline ]/lr^M " Make sure there is a semi-colon before each closing bracket :%s/\([^; ]\) *}/\1;}/g " Add a newline after every semi-colon :%s/;/;^M/g " Add a newline after every opening brace and make put one space " between it and the preceeding text :%s/\([^ ]*\) *{/\1 {^M/g " Add two newlines after every closing brace :%s/}/}^M^M/g " Remove 'trailing' spaces in front of the semi-colons :%s/ *;/;/g " Make sure there is only one space after a colon :%s/: */: /g " Make the text before the colon lowercase :%s/\(.\{-}\):/\L\1:/g " Remove all trailing spaces at the beginning of lines :%s/^ \+/g " Indent the whole file gg=G " Split each rule onto its own line (This also matched some " property/value combos so needed confirming :%s/\([a-z0-9]\+\), \+/\1,^M/gc --- .../assets/stylesheets/example.css | 4 +- public/stylesheets/application.css | 4920 +++++++++++------ public/stylesheets/calendar.css | 33 +- public/stylesheets/context_menu.css | 131 +- public/stylesheets/context_menu_rtl.css | 16 +- public/stylesheets/ie6.css | 50 +- public/stylesheets/ie7.css | 46 +- public/stylesheets/jstoolbar.css | 105 +- public/stylesheets/print.css | 51 +- public/stylesheets/reset.css | 100 +- public/stylesheets/rtl.css | 236 +- public/stylesheets/scm.css | 714 ++- 12 files changed, 4459 insertions(+), 1947 deletions(-) diff --git a/extra/sample_plugin/assets/stylesheets/example.css b/extra/sample_plugin/assets/stylesheets/example.css index 8038567a..7f7e4426 100644 --- a/extra/sample_plugin/assets/stylesheets/example.css +++ b/extra/sample_plugin/assets/stylesheets/example.css @@ -1 +1,3 @@ -.icon-example-works { background-image: url(../images/it_works.png); } +.icon-example-works { + background-image: url(../images/it_works.png); +} diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index d6947d6c..57ce40f2 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -1,40 +1,115 @@ -html {overflow-y:scroll;} -body { font-size: 12px; margin: 0; padding: 0; min-width: 900px; } +html { + overflow-y: scroll; +} -h1, h2, h3, h4 { font-family:"Arial", Arial, sans-serif; } -h1 {margin:0; padding:0; font-size: 24px;} -h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; } -h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; } -h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb;} -h5, .wiki h4 {font-size: 11px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb;} +body { + font-size: 12px; + margin: 0; + padding: 0; + min-width: 900px; +} + +h1, +h2, +h3, +h4 { + font-family: "Arial", Arial, sans-serif; +} + +h1 { + margin: 0; + padding: 0; + font-size: 24px; +} + +h2, +.wiki h1 { + font-size: 20px; + padding: 2px 10px 1px 0px; + margin: 0 0 10px 0; + border-bottom: 1px solid #bbbbbb; +} + +h3, +.wiki h2 { + font-size: 16px; + padding: 2px 10px 1px 0px; + margin: 0 0 10px 0; + border-bottom: 1px solid #bbbbbb; +} + +h4, +.wiki h3 { + font-size: 13px; + padding: 2px 10px 1px 0px; + margin-bottom: 5px; + border-bottom: 1px dotted #bbbbbb; +} + +h5, +.wiki h4 { + font-size: 11px; + padding: 2px 10px 1px 0px; + margin-bottom: 5px; + border-bottom: 1px dotted #bbbbbb; +} /***** Layout *****/ -#wrapper {background: none;} +#wrapper { + background: none; +} + +#top-menu { + background: #2C4056; + color: #fff; + height: 1.8em; + font-size: 0.8em; + padding: 0px; +} + +#top-menu ul { + margin: 0; + padding: 0; +} -#top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 0px; } -#top-menu ul {margin: 0; padding: 0;} #top-menu li { - float:left; - list-style-type:none; + float: left; + list-style-type: none; margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; - white-space:nowrap; + white-space: nowrap; } -#top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; } +#top-menu #loggedas { + float: right; + margin-right: 0.5em; + color: #fff; +} +#quick-search { + float: right; +} -#quick-search {float:right;} +#side-container { + position: absolute; + bottom: auto; + left: 6px; + margin-right: -500px; +} + +#main-menu ul { + margin: 0; + padding: 0; +} -#side-container {position: absolute; bottom: auto; left:6px; margin-right: -500px;} -#main-menu ul {margin: 0; padding: 0;} #main-menu li { float: none; - list-style-type:none; + list-style-type: none; margin: 0px; padding: 0px 0px 0px 0px; - white-space:nowrap; + white-space: nowrap; } + #main-menu li a { display: block; text-decoration: none; @@ -49,7 +124,11 @@ h5, .wiki h4 {font-size: 11px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord overflow: hidden; white-space: nowrap; } -#main-menu li a:hover {color:#555; text-decoration: none;} + +#main-menu li a:hover { + color: #555; + text-decoration: none; +} #content { width: 75%; @@ -60,798 +139,1917 @@ h5, .wiki h4 {font-size: 11px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord padding: 6px 10px 10px 10px; z-index: 10; } -* html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;} -html>body #content { min-height: 600px; } -* html body #content { height: 600px; } /* IE */ -#main.nosidebar #sidebar{ display: none; } -#main.nosidebar #content{ width: auto } - -#footer {clear: both; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center;} - -#login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; } -#login-form table td {padding: 6px;} -#login-form label {font-weight: bold;} -#login-form input#username, #login-form input#password { width: 300px; } - -#login-form form { - border:1px solid #6DABC2; - -moz-border-radius:5px; - -webkit-border-radius:5px; - border-radius:5px; - display:block; - padding:10px; +* html #content { + width: 75%; + padding-left: 0; + margin-top: 0px; + padding: 6px 10px 10px 10px; } -input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; } +html > body #content { + min-height: 600px; +} -.clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; } +* html body #content { + height: 600px; +} + +/* IE */ +#main.nosidebar #sidebar { + display: none; +} + +#main.nosidebar #content { + width: auto; +} + +#footer { + clear: both; + font-size: 0.9em; + color: #aaa; + padding: 5px; + text-align: center; +} + +#login-form table { + margin-top: 5em; + padding: 1em; + margin-left: auto; + margin-right: auto; + border: 2px solid #FDBF3B; + background-color: #FFEBC1; +} + +#login-form table td { + padding: 6px; +} + +#login-form label { + font-weight: bold; +} + +#login-form input#username, +#login-form input#password { + width: 300px; +} + +#login-form form { + border: 1px solid #6DABC2; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + display: block; + padding: 10px; +} + +input#openid_url { + background: url(../images/openid-bg.gif) no-repeat; + background-color: #fff; + background-position: 0 50%; + padding-left: 18px; +} + +.clear:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} /***** Links *****/ -a, a:link, a:visited { - text-decoration: none; - color: #6a0406; - font-weight:bold; - } -a:hover, a:active{ text-decoration: underline;} -a img{ border: 0; } +a, +a:link, +a:visited { + text-decoration: none; + color: #6a0406; + font-weight: bold; +} -a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; } +a:hover, +a:active { + text-decoration: underline; +} + +a img { + border: 0; +} + +a.issue.closed, +a.issue.closed:link, +a.issue.closed:visited { + color: #999; + text-decoration: line-through; +} /***** Tables *****/ -table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; } -table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; } -table.list td { vertical-align: top; } -table.list td.id { width: 2%; text-align: center;} -table.list td.checkbox { width: 15px; padding: 2px 0 0 0; } -table.list td.checkbox input {padding:0px;} -table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; } -table.list td.buttons a { padding-right: 0.6em; } -table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; } +table.list { + border: 1px solid #e4e4e4; + border-collapse: collapse; + width: 100%; + margin-bottom: 4px; +} -tr.project td.name a { white-space:nowrap; } +table.list th { + background-color: #EEEEEE; + padding: 4px; + white-space: nowrap; +} -tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;} -tr.project.idnt-1 td.name {padding-left: 0.5em;} -tr.project.idnt-2 td.name {padding-left: 2em;} -tr.project.idnt-3 td.name {padding-left: 3.5em;} -tr.project.idnt-4 td.name {padding-left: 5em;} -tr.project.idnt-5 td.name {padding-left: 6.5em;} -tr.project.idnt-6 td.name {padding-left: 8em;} -tr.project.idnt-7 td.name {padding-left: 9.5em;} -tr.project.idnt-8 td.name {padding-left: 11em;} -tr.project.idnt-9 td.name {padding-left: 12.5em;} +table.list td { + vertical-align: top; +} -tr.issue { text-align: center; white-space: nowrap; } -tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; } -tr.issue td.subject { text-align: left; } -tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;} +table.list td.id { + width: 2%; + text-align: center; +} -#content tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;} -#content tr.issue.idnt-1 td.subject {padding-left: 0.5em;} -#content tr.issue.idnt-2 td.subject {padding-left: 2em;} -#content tr.issue.idnt-3 td.subject {padding-left: 3.5em;} -#content tr.issue.idnt-4 td.subject {padding-left: 5em;} -#content tr.issue.idnt-5 td.subject {padding-left: 6.5em;} -#content tr.issue.idnt-6 td.subject {padding-left: 8em;} -#content tr.issue.idnt-7 td.subject {padding-left: 9.5em;} -#content tr.issue.idnt-8 td.subject {padding-left: 11em;} -#content tr.issue.idnt-9 td.subject {padding-left: 12.5em;} +table.list td.checkbox { + width: 15px; + padding: 2px 0 0 0; +} -tr.entry { border: 1px solid #f8f8f8; } -tr.entry td { white-space: nowrap; } -tr.entry td.filename { width: 30%; } -tr.entry td.size { text-align: right; font-size: 90%; } -tr.entry td.revision, tr.entry td.author { text-align: center; } -tr.entry td.age { text-align: right; } -tr.entry.file td.filename a { margin-left: 16px; } +table.list td.checkbox input { + padding: 0px; +} -tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;} -tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);} +table.list td.buttons { + width: 15%; + white-space: nowrap; + text-align: right; +} -tr.changeset td.author { text-align: center; width: 15%; } -tr.changeset td.committed_on { text-align: center; width: 15%; } +table.list td.buttons a { + padding-right: 0.6em; +} -table.files tr.file td { text-align: center; } -table.files tr.file td.filename { text-align: left; padding-left: 24px; } -table.files tr.file td.digest { font-size: 80%; } +table.list caption { + text-align: left; + padding: 0.5em 0.5em 0.5em 0; +} -table.members td.roles, table.memberships td.roles { width: 45%; } +tr.project td.name a { + white-space: nowrap; +} -tr.message { height: 2.6em; } -tr.message td.subject { padding-left: 20px; } -tr.message td.created_on { white-space: nowrap; } -tr.message td.last_message { font-size: 80%; white-space: nowrap; } -tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; } -tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; } +tr.project.idnt td.name span { + background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; + padding-left: 16px; +} -tr.version.closed, tr.version.closed a { color: #999; } -tr.version td.name { padding-left: 20px; } -tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; } -tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; } +tr.project.idnt-1 td.name { + padding-left: 0.5em; +} -tr.user td { width:13%; } -tr.user td.email { width:18%; } -tr.user td { white-space: nowrap; } -tr.user.locked, tr.user.registered { color: #aaa; } -tr.user.locked a, tr.user.registered a { color: #aaa; } +tr.project.idnt-2 td.name { + padding-left: 2em; +} -tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;} +tr.project.idnt-3 td.name { + padding-left: 3.5em; +} -tr.time-entry { text-align: center; white-space: nowrap; } -tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; } -td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; } -td.hours .hours-dec { font-size: 0.9em; } +tr.project.idnt-4 td.name { + padding-left: 5em; +} -table.plugins td { vertical-align: middle; } -table.plugins td.configure { text-align: right; padding-right: 1em; } -table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; } -table.plugins span.description { display: block; font-size: 0.9em; } -table.plugins span.url { display: block; font-size: 0.9em; } +tr.project.idnt-5 td.name { + padding-left: 6.5em; +} -table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; } -table.list tbody tr.group span.count { color: #aaa; font-size: 80%; } -tr.group a.toggle-all { color: #aaa; font-size: 80%; font-weight: normal; display:none;} -tr.group:hover a.toggle-all { display:inline;} -a.toggle-all:hover {text-decoration:none;} +tr.project.idnt-6 td.name { + padding-left: 8em; +} -table.list tbody tr:hover { background-color:#ffffdd; } -table.list tbody tr.group:hover { background-color:inherit; } -table td {padding:2px;} -table p {margin:0;} +tr.project.idnt-7 td.name { + padding-left: 9.5em; +} -a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; } -a.sort.asc { background-image: url(../images/sort_asc.png); } -a.sort.desc { background-image: url(../images/sort_desc.png); } +tr.project.idnt-8 td.name { + padding-left: 11em; +} -table.attributes { width: 100% } -table.attributes th { vertical-align: top; text-align: left; } -table.attributes td { vertical-align: top; } +tr.project.idnt-9 td.name { + padding-left: 12.5em; +} -table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; } +tr.issue { + text-align: center; + white-space: nowrap; +} + +tr.issue td.subject, +tr.issue td.category, +td.assigned_to { + white-space: normal; +} + +tr.issue td.subject { + text-align: left; +} + +tr.issue td.done_ratio table.progress { + margin-left: auto; + margin-right: auto; +} + +#content tr.issue.idnt td.subject a { + background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; + padding-left: 16px; +} + +#content tr.issue.idnt-1 td.subject { + padding-left: 0.5em; +} + +#content tr.issue.idnt-2 td.subject { + padding-left: 2em; +} + +#content tr.issue.idnt-3 td.subject { + padding-left: 3.5em; +} + +#content tr.issue.idnt-4 td.subject { + padding-left: 5em; +} + +#content tr.issue.idnt-5 td.subject { + padding-left: 6.5em; +} + +#content tr.issue.idnt-6 td.subject { + padding-left: 8em; +} + +#content tr.issue.idnt-7 td.subject { + padding-left: 9.5em; +} + +#content tr.issue.idnt-8 td.subject { + padding-left: 11em; +} + +#content tr.issue.idnt-9 td.subject { + padding-left: 12.5em; +} + +tr.entry { + border: 1px solid #f8f8f8; +} + +tr.entry td { + white-space: nowrap; +} + +tr.entry td.filename { + width: 30%; +} + +tr.entry td.size { + text-align: right; + font-size: 90%; +} + +tr.entry td.revision, +tr.entry td.author { + text-align: center; +} + +tr.entry td.age { + text-align: right; +} + +tr.entry.file td.filename a { + margin-left: 16px; +} + +tr span.expander { + background-image: url(../images/bullet_toggle_plus.png); + padding-left: 8px; + margin-left: 0; + cursor: pointer; +} + +tr.open span.expander { + background-image: url(../images/bullet_toggle_minus.png); +} + +tr.changeset td.author { + text-align: center; + width: 15%; +} + +tr.changeset td.committed_on { + text-align: center; + width: 15%; +} + +table.files tr.file td { + text-align: center; +} + +table.files tr.file td.filename { + text-align: left; + padding-left: 24px; +} + +table.files tr.file td.digest { + font-size: 80%; +} + +table.members td.roles, +table.memberships td.roles { + width: 45%; +} + +tr.message { + height: 2.6em; +} + +tr.message td.subject { + padding-left: 20px; +} + +tr.message td.created_on { + white-space: nowrap; +} + +tr.message td.last_message { + font-size: 80%; + white-space: nowrap; +} + +tr.message.locked td.subject { + background: url(../images/locked.png) no-repeat 0 1px; +} + +tr.message.sticky td.subject { + background: url(../images/bullet_go.png) no-repeat 0 1px; + font-weight: bold; +} + +tr.version.closed, +tr.version.closed a { + color: #999; +} + +tr.version td.name { + padding-left: 20px; +} + +tr.version.shared td.name { + background: url(../images/link.png) no-repeat 0% 70%; +} + +tr.version td.date, +tr.version td.status, +tr.version td.sharing { + text-align: center; + white-space: nowrap; +} + +tr.user td { + width: 13%; +} + +tr.user td.email { + width: 18%; +} + +tr.user td { + white-space: nowrap; +} + +tr.user.locked, +tr.user.registered { + color: #aaa; +} + +tr.user.locked a, +tr.user.registered a { + color: #aaa; +} + +tr.wiki-page-version td.updated_on, +tr.wiki-page-version td.author { + text-align: center; +} + +tr.time-entry { + text-align: center; + white-space: nowrap; +} + +tr.time-entry td.subject, +tr.time-entry td.comments { + text-align: left; + white-space: normal; +} + +td.hours { + text-align: right; + font-weight: bold; + padding-right: 0.5em; +} + +td.hours .hours-dec { + font-size: 0.9em; +} + +table.plugins td { + vertical-align: middle; +} + +table.plugins td.configure { + text-align: right; + padding-right: 1em; +} + +table.plugins span.name { + font-weight: bold; + display: block; + margin-bottom: 6px; +} + +table.plugins span.description { + display: block; + font-size: 0.9em; +} + +table.plugins span.url { + display: block; + font-size: 0.9em; +} + +table.list tbody tr.group td { + padding: 0.8em 0 0.5em 0.3em; + font-weight: bold; + border-bottom: 1px solid #ccc; +} + +table.list tbody tr.group span.count { + color: #aaa; + font-size: 80%; +} + +tr.group a.toggle-all { + color: #aaa; + font-size: 80%; + font-weight: normal; + display: none; +} + +tr.group:hover a.toggle-all { + display: inline; +} + +a.toggle-all:hover { + text-decoration: none; +} + +table.list tbody tr:hover { + background-color: #ffffdd; +} + +table.list tbody tr.group:hover { + background-color: inherit; +} + +table td { + padding: 2px; +} + +table p { + margin: 0; +} + +a.sort { + padding-right: 16px; + background-position: 100% 50%; + background-repeat: no-repeat; +} + +a.sort.asc { + background-image: url(../images/sort_asc.png); +} + +a.sort.desc { + background-image: url(../images/sort_desc.png); +} + +table.attributes { + width: 100%; +} + +table.attributes th { + vertical-align: top; + text-align: left; +} + +table.attributes td { + vertical-align: top; +} + +table.boards a.board, +h3.comments { + background: url(../images/comment.png) no-repeat 0% 50%; + padding-left: 20px; +} table.query-columns { - border-collapse: collapse; - border: 0; + border-collapse: collapse; + border: 0; } table.query-columns td.buttons { - vertical-align: middle; - text-align: center; + vertical-align: middle; + text-align: center; } -td.center {text-align:center;} +td.center { + text-align: center; +} -h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; } +h3.version { + background: url(../images/package.png) no-repeat 0% 50%; + padding-left: 20px; +} -div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; } -div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; } -div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; } -div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; } +div.issues h3 { + background: url(../images/ticket.png) no-repeat 0% 50%; + padding-left: 20px; +} -#watchers ul {margin: 0; padding: 0;} -#watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;} -#watchers select {width: 95%; display: block;} -#watchers a.delete {opacity: 0.4;} -#watchers a.delete:hover {opacity: 1;} -#watchers img.gravatar {vertical-align: middle;margin: 0 4px 2px 0;} +div.members h3 { + background: url(../images/group.png) no-repeat 0% 50%; + padding-left: 20px; +} -.highlight { background-color: #FCFD8D;} -.highlight.token-1 { background-color: #faa;} -.highlight.token-2 { background-color: #afa;} -.highlight.token-3 { background-color: #aaf;} +div.news h3 { + background: url(../images/news.png) no-repeat 0% 50%; + padding-left: 20px; +} -.box{ -padding:6px; -margin-bottom: 10px; -line-height:1.5em; -border: 1px solid #e4e4e4; +div.projects h3 { + background: url(../images/projects.png) no-repeat 0% 50%; + padding-left: 20px; +} + +#watchers ul { + margin: 0; + padding: 0; +} + +#watchers li { + list-style-type: none; + margin: 0px 2px 0px 0px; + padding: 0px 0px 0px 0px; +} + +#watchers select { + width: 95%; + display: block; +} + +#watchers a.delete { + opacity: 0.4; +} + +#watchers a.delete:hover { + opacity: 1; +} + +#watchers img.gravatar { + vertical-align: middle; + margin: 0 4px 2px 0; +} + +.highlight { + background-color: #FCFD8D; +} + +.highlight.token-1 { + background-color: #faa; +} + +.highlight.token-2 { + background-color: #afa; +} + +.highlight.token-3 { + background-color: #aaf; +} + +.box { + padding: 6px; + margin-bottom: 10px; + line-height: 1.5em; + border: 1px solid #e4e4e4; } div.square { - border: 1px solid #999; - float: left; - margin: .3em .4em 0 .4em; - overflow: hidden; - width: .6em; height: .6em; + border: 1px solid #999; + float: left; + margin: .3em .4em 0 .4em; + overflow: hidden; + width: .6em; + height: .6em; } -.contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;} -.contextual input, .contextual select {font-size:0.9em;} -.message .contextual { margin-top: 0; } -.splitcontentleft{float:left; width:49%;} -.splitcontentright{float:right; width:49%;} -form {display: inline;} -input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;} -fieldset {border: 1px solid #e4e4e4; margin:0; padding:4px;} -hr { width: 100%; height: 1px; background: #ccc; border: 0;} -blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;} -blockquote blockquote { margin-left: 0;} -acronym { border-bottom: 1px dotted; cursor: help; } -textarea.wiki-edit { width: 99%; } -li p {margin-top: 0;} -div.issue {padding:6px; margin-bottom:6px;} -p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;} -p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; } -p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; } +.contextual { + float: right; + white-space: nowrap; + line-height: 1.4em; + margin-top: 5px; + padding-left: 10px; + font-size: 0.9em; +} -div.issue div.subject div div { padding-left: 16px; } -div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;} -div.issue div.subject>div>p { margin-top: 0.5em; } -div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;} +.contextual input, +.contextual select { + font-size: 0.9em; +} -#issue_tree {border: none;} -#issue_tree table.issues { border: 0; } -#issue_tree td.checkbox {display:none;} -#issue_tree tr.self a.issue {color: inherit;} +.message .contextual { + margin-top: 0; +} + +.splitcontentleft { + float: left; + width: 49%; +} + +.splitcontentright { + float: right; + width: 49%; +} + +form { + display: inline; +} + +input, +select { + vertical-align: middle; + margin-top: 1px; + margin-bottom: 1px; +} + +fieldset { + border: 1px solid #e4e4e4; + margin: 0; + padding: 4px; +} + +hr { + width: 100%; + height: 1px; + background: #ccc; + border: 0; +} + +blockquote { + font-style: italic; + border-left: 3px solid #e0e0e0; + padding-left: 0.6em; + margin-left: 2.4em; +} + +blockquote blockquote { + margin-left: 0; +} + +acronym { + border-bottom: 1px dotted; + cursor: help; +} + +textarea.wiki-edit { + width: 99%; +} + +li p { + margin-top: 0; +} + +div.issue { + padding: 6px; + margin-bottom: 6px; +} + +p.breadcrumb { + font-size: 0.9em; + margin: 4px 0 4px 0; +} + +p.subtitle { + font-size: 0.9em; + margin: -6px 0 12px 0; + font-style: italic; +} + +p.footnote { + font-size: 0.9em; + margin-top: 0px; + margin-bottom: 0px; +} + +div.issue div.subject div div { + padding-left: 16px; +} + +div.issue div.subject p { + margin: 0; + margin-bottom: 0.1em; + font-size: 90%; + color: #999; +} + +div.issue div.subject > div > p { + margin-top: 0.5em; +} + +div.issue div.subject h3 { + margin: 0; + margin-bottom: 0.1em; +} + +#issue_tree { + border: none; +} + +#issue_tree table.issues { + border: 0; +} + +#issue_tree td.checkbox { + display: none; +} + +#issue_tree tr.self a.issue { + color: inherit; +} #content fieldset#filters { - padding-bottom:10px; - } -fieldset#filters legend { - -moz-border-radius-bottomleft:0px; - -moz-border-radius-bottomright:0px; - -webkit-border-bottom-left-radius:0px; - -webkit-border-bottom-right-radius:0px; - border-bottom-left-radius:0px; - border-bottom-right-radius:0px; - } -fieldset#column_options legend { - -moz-border-radius-topleft:0px; - -moz-border-radius-topright:0px; - -webkit-border-top-left-radius:0px; - -webkit-border-top-right-radius:0px; - border-top-left-radius:0px; - border-top-right-radius:0px; - } -#content fieldset.collapsible.header_collapsible { - padding-top:0px; - padding-bottom:0px; - border:0px; - margin:0px; - } -fieldset.collapsible.header_collapsible > div { - padding-top:5px; - padding-bottom:5px; + padding-bottom: 10px; } + +fieldset#filters legend { + -moz-border-radius-bottomleft: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-left-radius: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +fieldset#column_options legend { + -moz-border-radius-topleft: 0px; + -moz-border-radius-topright: 0px; + -webkit-border-top-left-radius: 0px; + -webkit-border-top-right-radius: 0px; + border-top-left-radius: 0px; + border-top-right-radius: 0px; +} + +#content fieldset.collapsible.header_collapsible { + padding-top: 0px; + padding-bottom: 0px; + border: 0px; + margin: 0px; +} + +fieldset.collapsible.header_collapsible > div { + padding-top: 5px; + padding-bottom: 5px; +} + fieldset.collapsible.header_collapsible > * { - border-left:1px solid #E6E6E6; - border-right:1px solid #E6E6E6; - border-bottom:1px solid #E6E6E6; - width:100%; - } + border-left: 1px solid #E6E6E6; + border-right: 1px solid #E6E6E6; + border-bottom: 1px solid #E6E6E6; + width: 100%; +} + fieldset.collapsible.header_collapsible legend { - background:#E6E6E6 url(../images/double_arrow_toggle_up.png) no-repeat 99% 50%; cursor:pointer; - padding-left:0px; - width:100%; - height:23px; - line-height:23px; - text-indent:8px; - -moz-border-radius-topleft:5px; - -moz-border-radius-topright:5px; - -webkit-border-top-left-radius:5px; - -webkit-border-top-right-radius:5px; - border-top-left-radius:5px; - border-top-right-radius:5px; - -moz-border-radius-bottomleft:0px; - -moz-border-radius-bottomright:0px; - -webkit-border-bottom-left-radius:0px; - -webkit-border-bottom-right-radius:0px; - border-bottom-left-radius:0px; - border-bottom-right-radius:0px; + background: #E6E6E6 url(../images/double_arrow_toggle_up.png) no-repeat 99% 50%; + cursor: pointer; + padding-left: 0px; + width: 100%; + height: 23px; + line-height: 23px; + text-indent: 8px; + -moz-border-radius-topleft: 5px; + -moz-border-radius-topright: 5px; + -webkit-border-top-left-radius: 5px; + -webkit-border-top-right-radius: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + -moz-border-radius-bottomleft: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-left-radius: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; } fieldset.collapsible.header_collapsible legend:hover { - background-color:#d8d8d8; + background-color: #d8d8d8; } + fieldset.collapsible.collapsed.header_collapsible legend { - background-image:url(../images/double_arrow_toggle_down.png); - -moz-border-radius:5px; - -webkit-border-radius:5px; - border-radius:5px; - } -fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; } -fieldset.collapsible.borders { border-width: 1px; } -fieldset.collapsible.collapsed.borders { border-width: 1px 0 0 0; } -fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; } -fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); } + background-image: url(../images/double_arrow_toggle_down.png); + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} -fieldset#date-range p { margin: 2px 0 2px 0; } -fieldset#filters table { border-collapse: collapse; } -fieldset#filters table td { padding: 0; vertical-align: middle; } -fieldset#filters tr.filter { height: 2em; } -fieldset#filters td.add-filter { text-align: right; vertical-align: top; } -.buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; } +fieldset.collapsible { + border-width: 1px 0 0 0; + font-size: 0.9em; +} -div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;} -div#issue-changesets div.changeset { padding: 4px;} -div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; } -div#issue-changesets p { margin-top: 0; margin-bottom: 1em;} +fieldset.collapsible.borders { + border-width: 1px; +} -div#activity dl, #search-results { margin-left: 2em; } -div#activity dd, #search-results dd { margin-bottom: 1em; font-size: 0.9em; overflow: hidden; } -div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; } -div#activity dt.me .time { border-bottom: 1px solid #999; } -div#activity dt .time { color: #777; font-size: 80%; } -div#activity dd .description, #search-results dd .description { font-style: italic; } -div#activity span.project:after, #search-results span.project:after { content: " -"; } -div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; } +fieldset.collapsible.collapsed.borders { + border-width: 1px 0 0 0; +} -#search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; } +fieldset.collapsible legend { + padding-left: 16px; + background: url(../images/arrow_expanded.png) no-repeat 0% 40%; + cursor: pointer; +} -div#search-results-counts {float:right;} -div#search-results-counts ul { margin-top: 0.5em; } -div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; } +fieldset.collapsible.collapsed legend { + background-image: url(../images/arrow_collapsed.png); +} -dt.issue { background-image: url(../images/ticket.png); } -dt.issue-edit { background-image: url(../images/ticket_edit.png); } -dt.issue-closed { background-image: url(../images/ticket_checked.png); } -dt.issue-note { background-image: url(../images/ticket_note.png); } -dt.changeset { background-image: url(../images/changeset.png); } -dt.news { background-image: url(../images/news.png); } -dt.message { background-image: url(../images/message.png); } -dt.reply { background-image: url(../images/comments.png); } -dt.wiki-page { background-image: url(../images/wiki_edit.png); } -dt.attachment { background-image: url(../images/attachment.png); } -dt.document { background-image: url(../images/document.png); } -dt.project { background-image: url(../images/projects.png); } -dt.time-entry { background-image: url(../images/time.png); } +fieldset#date-range p { + margin: 2px 0 2px 0; +} -#search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); } +fieldset#filters table { + border-collapse: collapse; +} -.search-pagination { text-align: center; } -.search-pagination a {padding: 0 5px; } +fieldset#filters table td { + padding: 0; + vertical-align: middle; +} -div#roadmap .related-issues { margin-bottom: 1em; } -div#roadmap .related-issues td.checkbox { display: none; } -div#roadmap .wiki h1:first-child { display: none; } -div#roadmap .wiki h1 { font-size: 120%; } -div#roadmap .wiki h2 { font-size: 110%; } +fieldset#filters tr.filter { + height: 2em; +} -div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; } -div#version-summary fieldset { margin-bottom: 1em; } -div#version-summary .total-hours { text-align: right; } +fieldset#filters td.add-filter { + text-align: right; + vertical-align: top; +} -table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; } -table#time-report tbody tr { font-style: italic; color: #777; } -table#time-report tbody tr.last-level { font-style: normal; color: #555; } -table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; } -table#time-report .hours-dec { font-size: 0.9em; } +.buttons { + font-size: 0.9em; + margin-bottom: 1.4em; + margin-top: 1em; +} -form .attributes { margin-bottom: 8px; } -form .attributes p { padding-top: 1px; padding-bottom: 2px; } -form .attributes select { min-width: 50%; } +div#issue-changesets { + float: right; + width: 45%; + margin-left: 1em; + margin-bottom: 1em; + background: #fff; + padding-left: 1em; + font-size: 90%; +} -ul.projects { margin: 0; padding-left: 1em; } -ul.projects.root { margin: 0; padding: 0; } -ul.projects ul {border: none; } -ul.projects ul.projects { border-left: 3px solid #e0e0e0; } -ul.projects li.root { list-style-type:none; margin-bottom: 1em; } -ul.projects li.child { list-style-type:none; margin-top: 1em;} -ul.projects div.root a.project { font-family:"Arial", Arial, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; } -.my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; } +div#issue-changesets div.changeset { + padding: 4px; +} -#tracker_project_ids ul { margin: 0; padding-left: 1em; } -#tracker_project_ids li { list-style-type:none; } +div#issue-changesets div.changeset { + border-bottom: 1px solid #ddd; +} -ul.properties {padding:0; font-size: 0.9em; color: #777;} -ul.properties li {list-style-type:none;} -ul.properties li span {font-style:italic;} +div#issue-changesets p { + margin-top: 0; + margin-bottom: 1em; +} -.total-hours { font-size: 110%; font-weight: bold; } -.total-hours span.hours-int { font-size: 120%; } +div#activity dl, +#search-results { + margin-left: 2em; +} -.autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;} -#user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; } +div#activity dd, +#search-results dd { + margin-bottom: 1em; + font-size: 0.9em; + overflow: hidden; +} -#workflow_copy_form select { width: 200px; } +div#activity dt, +#search-results dt { + margin-bottom: 0px; + padding-left: 20px; + line-height: 18px; + background-position: 0 50%; + background-repeat: no-repeat; +} -textarea#custom_field_possible_values {width: 99%} +div#activity dt.me .time { + border-bottom: 1px solid #999; +} -.pagination {font-size: 90%} -p.pagination {margin-top:8px;} +div#activity dt .time { + color: #777; + font-size: 80%; +} + +div#activity dd .description, +#search-results dd .description { + font-style: italic; +} + +div#activity span.project:after, +#search-results span.project:after { + content: " -"; +} + +div#activity dd span.description, +#search-results dd span.description { + display: block; + color: #808080; +} + +#search-results dd { + margin-bottom: 1em; + padding-left: 20px; + margin-left: 0px; +} + +div#search-results-counts { + float: right; +} + +div#search-results-counts ul { + margin-top: 0.5em; +} + +div#search-results-counts li { + list-style-type: none; + float: left; + margin-left: 1em; +} + +dt.issue { + background-image: url(../images/ticket.png); +} + +dt.issue-edit { + background-image: url(../images/ticket_edit.png); +} + +dt.issue-closed { + background-image: url(../images/ticket_checked.png); +} + +dt.issue-note { + background-image: url(../images/ticket_note.png); +} + +dt.changeset { + background-image: url(../images/changeset.png); +} + +dt.news { + background-image: url(../images/news.png); +} + +dt.message { + background-image: url(../images/message.png); +} + +dt.reply { + background-image: url(../images/comments.png); +} + +dt.wiki-page { + background-image: url(../images/wiki_edit.png); +} + +dt.attachment { + background-image: url(../images/attachment.png); +} + +dt.document { + background-image: url(../images/document.png); +} + +dt.project { + background-image: url(../images/projects.png); +} + +dt.time-entry { + background-image: url(../images/time.png); +} + +#search-results dt.issue.closed { + background-image: url(../images/ticket_checked.png); +} + +.search-pagination { + text-align: center; +} + +.search-pagination a { + padding: 0 5px; +} + +div#roadmap .related-issues { + margin-bottom: 1em; +} + +div#roadmap .related-issues td.checkbox { + display: none; +} + +div#roadmap .wiki h1: first-child { + display: none; +} + +div#roadmap .wiki h1 { + font-size: 120%; +} + +div#roadmap .wiki h2 { + font-size: 110%; +} + +div#version-summary { + float: right; + width: 380px; + margin-left: 16px; + margin-bottom: 16px; + background-color: #fff; +} + +div#version-summary fieldset { + margin-bottom: 1em; +} + +div#version-summary .total-hours { + text-align: right; +} + +table#time-report td.hours, +table#time-report th.period, +table#time-report th.total { + text-align: right; + padding-right: 0.5em; +} + +table#time-report tbody tr { + font-style: italic; + color: #777; +} + +table#time-report tbody tr.last-level { + font-style: normal; + color: #555; +} + +table#time-report tbody tr.total { + font-style: normal; + font-weight: bold; + color: #555; + background-color: #EEEEEE; +} + +table#time-report .hours-dec { + font-size: 0.9em; +} + +form .attributes { + margin-bottom: 8px; +} + +form .attributes p { + padding-top: 1px; + padding-bottom: 2px; +} + +form .attributes select { + min-width: 50%; +} + +ul.projects { + margin: 0; + padding-left: 1em; +} + +ul.projects.root { + margin: 0; + padding: 0; +} + +ul.projects ul { + border: none; +} + +ul.projects ul.projects { + border-left: 3px solid #e0e0e0; +} + +ul.projects li.root { + list-style-type: none; + margin-bottom: 1em; +} + +ul.projects li.child { + list-style-type: none; + margin-top: 1em; +} + +ul.projects div.root a.project { + font-family: "Arial", Arial, sans-serif; + font-weight: bold; + font-size: 16px; + margin: 0 0 10px 0; +} + +.my-project { + padding-left: 18px; + background: url(../images/fav.png) no-repeat 0 50%; +} + +#tracker_project_ids ul { + margin: 0; + padding-left: 1em; +} + +#tracker_project_ids li { + list-style-type: none; +} + +ul.properties { + padding: 0; + font-size: 0.9em; + color: #777; +} + +ul.properties li { + list-style-type: none; +} + +ul.properties li span { + font-style: italic; +} + +.total-hours { + font-size: 110%; + font-weight: bold; +} + +.total-hours span.hours-int { + font-size: 120%; +} + +.autoscroll { + overflow-x: auto; + padding: 1px; + margin-bottom: 1.2em; +} + +#user_firstname, +#user_lastname, +#user_mail, +#my_account_form select { + width: 90%; +} + +#workflow_copy_form select { + width: 200px; +} + +textarea#custom_field_possible_values { + width: 99%; +} + +.pagination { + font-size: 90%; +} + +p.pagination { + margin-top: 8px; +} /***** Tabular forms ******/ -.tabular p{ -margin: 0; -padding: 5px 0 8px 0; -padding-left: 180px; /*width of left column containing the label elements*/ -height: auto; -clear:left; +.tabular p { + margin: 0; + padding: 5px 0 8px 0; + padding-left: 180px; + /*width of left column containing the label elements*/ + height: auto; + clear: left; } -html>body .tabular p {overflow:hidden;} - -.tabular label{ -font-weight: bold; -float: left; -text-align: right; -margin-left: -180px; /*width of left column*/ -width: 175px; /*width of labels. Should be smaller than left column to create some right -margin*/ +html > body .tabular p { + overflow: hidden; } -.tabular label.floating{ -font-weight: normal; -margin-left: 0px; -text-align: left; -width: 270px; +.tabular label { + font-weight: bold; + float: left; + text-align: right; + margin-left: -180px; + /*width of left column*/ + width: 175px; + /*width of labels. Should be smaller than left column to create some right margin*/ } -.tabular label.block{ -font-weight: normal; -margin-left: 0px !important; -text-align: left; -float: none; -display: block; -width: auto; +.tabular label.floating { + font-weight: normal; + margin-left: 0px; + text-align: left; + width: 270px; } -.tabular label.inline{ -float:none; -margin-left: 5px !important; -width: auto; +.tabular label.block { + font-weight: normal; + margin-left: 0px !important; + text-align: left; + float: none; + display: block; + width: auto; +} + +.tabular label.inline { + float: none; + margin-left: 5px !important; + width: auto; } label.no-css { font-weight: inherit; - float:none; - text-align:left; - margin-left:0px; - width:auto; + float: none; + text-align: left; + margin-left: 0px; + width: auto; } -input#time_entry_comments { width: 90%;} -#preview fieldset {margin-top: 1em; background: url(../images/draft.png)} +input#time_entry_comments { + width: 90%; +} -.tabular.settings p{ padding-left: 300px; } -.tabular.settings label{ margin-left: -300px; width: 295px; } -.tabular.settings textarea { width: 99%; } +#preview fieldset { + margin-top: 1em; + background: url(../images/draft.png); +} -fieldset.settings label { display: block; } -fieldset#notified_events .parent { padding-left: 20px; } +.tabular.settings p { + padding-left: 300px; +} -.required {color: #bb0000;} -.summary {font-style: italic;} +.tabular.settings label { + margin-left: -300px; + width: 295px; +} -#attachments {font-size: 1em; } -#attachments_fields input[type=text] {margin-left: 8px; } +.tabular.settings textarea { + width: 99%; +} -div.attachments { margin-top: 12px; } -div.attachments p { margin:4px 0 2px 0; } -div.attachments img { vertical-align: middle; } -div.attachments span.author { font-size: 0.9em; color: #888; } +fieldset.settings label { + display: block; +} -p.other-formats { font-size:0.9em; color: #666; } -.other-formats span + span:before { content: "| "; } +fieldset#notified_events .parent { + padding-left: 20px; +} -a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; } +.required { + color: #bb0000; +} + +.summary { + font-style: italic; +} + +#attachments { + font-size: 1em; +} + +#attachments_fields input[type=text] { + margin-left: 8px; +} + +div.attachments { + margin-top: 12px; +} + +div.attachments p { + margin: 4px 0 2px 0; +} + +div.attachments img { + vertical-align: middle; +} + +div.attachments span.author { + font-size: 0.9em; + color: #888; +} + +p.other-formats { + font-size: 0.9em; + color: #666; +} + +.other-formats span + span:before { + content: "| "; +} + +a.atom { + background: url(../images/feed.png) no-repeat 1px 50%; + padding: 2px 0px 3px 16px; +} /* Project members tab */ -div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% } -div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% } -div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; } -div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; } -div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; } -div#tab-content-members fieldset div, div#tab-content-users fieldset div, div#tab-content-memberships fieldset div { max-height: 400px; overflow:auto; } - -table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; } - -input#principal_search, input#user_search {width:100%} - -* html div#tab-content-members fieldset div { height: 450px; } - -/***** Flash & error messages ****/ -#errorExplanation, div.flash, .nodata, .warning { - padding: 4px 4px 4px 30px; - margin-bottom: 12px; - font-size: 1.1em; - border: 2px solid; +div#tab-content-members .splitcontentleft, +div#tab-content-memberships .splitcontentleft, +div#tab-content-users .splitcontentleft { + width: 64%; } -div.flash {margin-top: 8px;} +div#tab-content-members .splitcontentright, +div#tab-content-memberships .splitcontentright, +div#tab-content-users .splitcontentright { + width: 34%; +} -div.flash.error, #errorExplanation { - background: url(../images/exclamation.png) 8px 50% no-repeat; - background-color: #ffe3e3; - border-color: #dd0000; - color: #880000; +div#tab-content-members fieldset, +div#tab-content-memberships fieldset, +div#tab-content-users fieldset { + padding: 1em; + margin-bottom: 1em; +} + +div#tab-content-members fieldset legend, +div#tab-content-memberships fieldset legend, +div#tab-content-users fieldset legend { + font-weight: bold; +} + +div#tab-content-members fieldset label, +div#tab-content-memberships fieldset label, +div#tab-content-users fieldset label { + display: block; +} + +div#tab-content-members fieldset div, +div#tab-content-users fieldset div, +div#tab-content-memberships fieldset div { + max-height: 400px; + overflow: auto; +} + +table.members td.group { + padding-left: 20px; + background: url(../images/group.png) no-repeat 0% 50%; +} + +input#principal_search, +input#user_search { + width: 100%; +} + +* html div#tab-content-members fieldset div { + height: 450px; +} + +/***** Flash & error messages ****/ +#errorExplanation, +div.flash, +.nodata, +.warning { + padding: 4px 4px 4px 30px; + margin-bottom: 12px; + font-size: 1.1em; + border: 2px solid; +} + +div.flash { + margin-top: 8px; +} + +div.flash.error, +#errorExplanation { + background: url(../images/exclamation.png) 8px 50% no-repeat; + background-color: #ffe3e3; + border-color: #dd0000; + color: #880000; } div.flash.notice { - background: url(../images/true.png) 8px 5px no-repeat; - background-color: #dfffdf; - border-color: #9fcf9f; - color: #005f00; + background: url(../images/true.png) 8px 5px no-repeat; + background-color: #dfffdf; + border-color: #9fcf9f; + color: #005f00; } div.flash.warning { background: url(../images/warning.png) 8px 5px no-repeat; - background-color: #FFEBC1; - border-color: #FDBF3B; - color: #A6750C; + background-color: #FFEBC1; + border-color: #FDBF3B; + color: #A6750C; text-align: left; } -.nodata, .warning { - text-align: center; - background-color: #FFEBC1; - border-color: #FDBF3B; - color: #A6750C; +.nodata, +.warning { + text-align: center; + background-color: #FFEBC1; + border-color: #FDBF3B; + color: #A6750C; } -#errorExplanation ul { font-size: 0.9em;} -#errorExplanation h2, #errorExplanation p { display: none; } +#errorExplanation ul { + font-size: 0.9em; +} + +#errorExplanation h2, +#errorExplanation p { + display: none; +} /***** Ajax indicator ******/ #ajax-indicator { -position: absolute; /* fixed not supported by IE */ -background-color:#eee; -border: 1px solid #bbb; -top:35%; -left:40%; -width:20%; -font-weight:bold; -text-align:center; -padding:0.6em; -z-index:100; -filter:alpha(opacity=50); -opacity: 0.5; + position: absolute; + /* fixed not supported by IE */ + background-color: #eee; + border: 1px solid #bbb; + top: 35%; + left: 40%; + width: 20%; + font-weight: bold; + text-align: center; + padding: 0.6em; + z-index: 100; + filter: alpha(opacity=50); + opacity: 0.5; } -html>body #ajax-indicator { position: fixed; } +html > body #ajax-indicator { + position: fixed; +} #ajax-indicator span { -background-position: 0% 40%; -background-repeat: no-repeat; -background-image: url(../images/loading.gif); -padding-left: 26px; -vertical-align: bottom; + background-position: 0% 40%; + background-repeat: no-repeat; + background-image: url(../images/loading.gif); + padding-left: 26px; + vertical-align: bottom; } /***** Calendar *****/ -table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;} -table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; } -table.cal thead th.week-number {width: auto;} -table.cal tbody tr {height: 100px;} -table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;} -table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;} -table.cal td p.day-num {font-size: 1.1em; text-align:right;} -table.cal td.odd p.day-num {color: #bbb;} -table.cal td.today {background:#ffffdd;} -table.cal td.today p.day-num {font-weight: bold;} -table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;} -table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;} -table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;} -p.cal.legend span {display:block;} +table.cal { + border-collapse: collapse; + width: 100%; + margin: 0px 0 6px 0; + border: 1px solid #d7d7d7; +} + +table.cal thead th { + width: 14%; + background-color: #EEEEEE; + padding: 4px; +} + +table.cal thead th.week-number { + width: auto; +} + +table.cal tbody tr { + height: 100px; +} + +table.cal td { + border: 1px solid #d7d7d7; + vertical-align: top; + font-size: 0.9em; +} + +table.cal td.week-number { + background-color: #EEEEEE; + padding: 4px; + border: none; + font-size: 1em; +} + +table.cal td p.day-num { + font-size: 1.1em; + text-align: right; +} + +table.cal td.odd p.day-num { + color: #bbb; +} + +table.cal td.today { + background: #ffffdd; +} + +table.cal td.today p.day-num { + font-weight: bold; +} + +table.cal .starting a, +p.cal.legend .starting { + background: url(../images/bullet_go.png) no-repeat -1px -2px; + padding-left: 16px; +} + +table.cal .ending a, +p.cal.legend .ending { + background: url(../images/bullet_end.png) no-repeat -1px -2px; + padding-left: 16px; +} + +table.cal .starting.ending a, +p.cal.legend .starting.ending { + background: url(../images/bullet_diamond.png) no-repeat -1px -2px; + padding-left: 16px; +} + +p.cal.legend span { + display: block; +} /***** Tooltips ******/ -.tooltip{position:relative;z-index:24;} -.tooltip:hover{z-index:25;color:#000;} -.tooltip span.tip{display: none; text-align:left;} +.tooltip { + position: relative; + z-index: 24; +} -div.tooltip:hover span.tip{ -display:block; -position:absolute; -top:12px; left:24px; width:270px; -border:1px solid #555; -background-color:#fff; -padding: 4px; -font-size: 0.8em; -color:#505050; +.tooltip:hover { + z-index: 25; + color: #000; +} + +.tooltip span.tip { + display: none; + text-align: left; +} + +div.tooltip:hover span.tip { + display: block; + position: absolute; + top: 12px; + left: 24px; + width: 270px; + border: 1px solid #555; + background-color: #fff; + padding: 4px; + font-size: 0.8em; + color: #505050; } /***** Progress bar *****/ #content table.progress { - border: 1px solid #D7D7D7; - border-collapse: collapse; - border-spacing: 0pt; - empty-cells: show; - text-align: center; - float:left; - margin: 1px 6px 1px 0px; + border: 1px solid #D7D7D7; + border-collapse: collapse; + border-spacing: 0pt; + empty-cells: show; + text-align: center; + float: left; + margin: 1px 6px 1px 0px; } -#content table.progress td { height: 0.9em; } -#content table.progress td.closed { background: #BAE0BA none repeat scroll 0%; } -#content table.progress td.done { background: #DEF0DE none repeat scroll 0%; } -#content table.progress td.open { background: #FFF none repeat scroll 0%; } -#content p.pourcent {font-size: 80%;} -#content p.progress-info {clear: left; font-style: italic; font-size: 80%;} +#content table.progress td { + height: 0.9em; +} + +#content table.progress td.closed { + background: #BAE0BA none repeat scroll 0%; +} + +#content table.progress td.done { + background: #DEF0DE none repeat scroll 0%; +} + +#content table.progress td.open { + background: #FFF none repeat scroll 0%; +} + +#content p.pourcent { + font-size: 80%; +} + +#content p.progress-info { + clear: left; + font-style: italic; + font-size: 80%; +} /***** Tabs *****/ -#content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;} -#content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:1em; width: 2000px; border-bottom: 1px solid #bbbbbb;} -#content .tabs ul li { -float:left; -list-style-type:none; -white-space:nowrap; -margin-right:8px; -background:#fff; -position:relative; -margin-bottom:-1px; +#content .tabs { + height: 2.6em; + margin-bottom: 1.2em; + position: relative; + overflow: hidden; } -#content .tabs ul li a{ -display:block; -font-size: 0.9em; -text-decoration:none; -line-height:1.3em; -padding:4px 6px 4px 6px; -border: 1px solid #ccc; -border-bottom: 1px solid #bbbbbb; -background-color: #eeeeee; -color:#777; -font-weight:bold; + +#content .tabs ul { + margin: 0; + position: absolute; + bottom: 0; + padding-left: 1em; + width: 2000px; + border-bottom: 1px solid #bbbbbb; +} + +#content .tabs ul li { + float: left; + list-style-type: none; + white-space: nowrap; + margin-right: 8px; + background: #fff; + position: relative; + margin-bottom: -1px; +} + +#content .tabs ul li a { + display: block; + font-size: 0.9em; + text-decoration: none; + line-height: 1.3em; + padding: 4px 6px 4px 6px; + border: 1px solid #ccc; + border-bottom: 1px solid #bbbbbb; + background-color: #eeeeee; + color: #777; + font-weight: bold; } #content .tabs ul li a:hover { -background-color: #ffffdd; -text-decoration:none; + background-color: #ffffdd; + text-decoration: none; } #content .tabs ul li a.selected { -background-color: #fff; -border: 1px solid #bbbbbb; -border-bottom: 1px solid #fff; + background-color: #fff; + border: 1px solid #bbbbbb; + border-bottom: 1px solid #fff; } #content .tabs ul li a.selected:hover { -background-color: #fff; + background-color: #fff; } -div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; } +div.tabs-buttons { + position: absolute; + right: 0; + width: 48px; + height: 24px; + background: white; + bottom: 0; + border-bottom: 1px solid #bbbbbb; +} -button.tab-left, button.tab-right { - font-size: 0.9em; - cursor: pointer; - height:24px; - border: 1px solid #ccc; - border-bottom: 1px solid #bbbbbb; - position:absolute; - padding:4px; - width: 20px; - bottom: -1px; +button.tab-left, +button.tab-right { + font-size: 0.9em; + cursor: pointer; + height: 24px; + border: 1px solid #ccc; + border-bottom: 1px solid #bbbbbb; + position: absolute; + padding: 4px; + width: 20px; + bottom: -1px; } button.tab-left { - right: 20px; - background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%; + right: 20px; + background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%; } button.tab-right { - right: 0; - background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%; + right: 0; + background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%; } /***** Auto-complete *****/ div.autocomplete { - position:absolute; - width:400px; - margin:0; - padding:0; + position: absolute; + width: 400px; + margin: 0; + padding: 0; } + div.autocomplete ul { - list-style-type:none; - margin:0; - padding:0; + list-style-type: none; + margin: 0; + padding: 0; } + div.autocomplete ul li { - list-style-type:none; - display:block; - margin:-1px 0 0 0; - padding:2px; - cursor:pointer; + list-style-type: none; + display: block; + margin: -1px 0 0 0; + padding: 2px; + cursor: pointer; font-size: 90%; border: 1px solid #ccc; border-left: 1px solid #ccc; border-right: 1px solid #ccc; - background-color:white; + background-color: white; } -div.autocomplete ul li.selected { background-color: #ffb;} + +div.autocomplete ul li.selected { + background-color: #ffb; +} + div.autocomplete ul li span.informal { font-size: 80%; color: #aaa; } -#parent_issue_candidates ul li {width: 500px;} -#related_issue_candidates ul li {width: 500px;} +#parent_issue_candidates ul li { + width: 500px; +} + +#related_issue_candidates ul li { + width: 500px; +} /***** Diff *****/ -.diff_out { background: #fcc; } -.diff_out span { background: #faa; } -.diff_in { background: #cfc; } -.diff_in span { background: #afa; } +.diff_out { + background: #fcc; +} + +.diff_out span { + background: #faa; +} + +.diff_in { + background: #cfc; +} + +.diff_in span { + background: #afa; +} .text-diff { -padding: 1em; -background-color:#f6f6f6; -color:#505050; -border: 1px solid #e4e4e4; + padding: 1em; + background-color: #f6f6f6; + color: #505050; + border: 1px solid #e4e4e4; } /***** Wiki *****/ div.wiki table { - border: 1px solid #505050; - border-collapse: collapse; - margin-bottom: 1em; + border: 1px solid #505050; + border-collapse: collapse; + margin-bottom: 1em; } -div.wiki table, div.wiki td, div.wiki th { - border: 1px solid #bbb; - padding: 4px; +div.wiki table, +div.wiki td, +div.wiki th { + border: 1px solid #bbb; + padding: 4px; } div.wiki .external { - background-position: 0% 60%; - background-repeat: no-repeat; - padding-left: 12px; - background-image: url(../images/external.png); + background-position: 0% 60%; + background-repeat: no-repeat; + padding-left: 12px; + background-image: url(../images/external.png); } div.wiki pre { - margin: 1em 1em 1em 1.6em; - padding: 2px 2px 2px 0; - background-color: #fafafa; - border: 1px solid #dadada; - width:auto; - overflow-x: auto; - overflow-y: hidden; + margin: 1em 1em 1em 1.6em; + padding: 2px 2px 2px 0; + background-color: #fafafa; + border: 1px solid #dadada; + width: auto; + overflow-x: auto; + overflow-y: hidden; } div.wiki ul.toc { - margin: 0; - padding: 0 12px; - display: table + margin: 0; + padding: 0 12px; + display: table; } -* html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */ +* html div.wiki ul.toc { + width: 50%; +} -div.wiki fieldset {padding: 0} -div.wiki fieldset.collapsible.header_collapsible legend {background-position: 95% 50%} -div.wiki fieldset legend span { padding-right: 20px} -div.wiki fieldset.toc div {background-color: #fff} -div.wiki fieldset.toc.right { float: right; padding-left: 12px; width: auto; position: relative; } -div.wiki fieldset.toc.left { float: left; padding-right: 12px; width: auto; position: relative;} -div.wiki ul.toc ul { margin: 0; padding: 0; } -div.wiki ul.toc li { list-style-type:none; margin: 0;} -div.wiki ul.toc li li { margin-left: 1.5em; } +/* IE6 doesn't autosize div */ +div.wiki fieldset { + padding: 0; +} + +div.wiki fieldset.collapsible.header_collapsible legend { + background-position: 95% 50%; +} + +div.wiki fieldset legend span { + padding-right: 20px; +} + +div.wiki fieldset.toc div { + background-color: #fff; +} + +div.wiki fieldset.toc.right { + float: right; + padding-left: 12px; + width: auto; + position: relative; +} + +div.wiki fieldset.toc.left { + float: left; + padding-right: 12px; + width: auto; + position: relative; +} + +div.wiki ul.toc ul { + margin: 0; + padding: 0; +} + +div.wiki ul.toc li { + list-style-type: none; + margin: 0; +} + +div.wiki ul.toc li li { + margin-left: 1.5em; +} div.wiki ul.toc a { - font-weight: normal; - background-image: url(../images/arrow-down.png); - background-repeat: no-repeat; - background-position: 0% 60%; - padding-left: 16px; + font-weight: normal; + background-image: url(../images/arrow-down.png); + background-repeat: no-repeat; + background-position: 0% 60%; + padding-left: 16px; } -a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; } -a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; } -h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; } +a.wiki-anchor { + display: none; + margin-left: 6px; + text-decoration: none; +} -div.wiki img { vertical-align: middle; } +a.wiki-anchor:hover { + color: #aaa !important; + text-decoration: none; +} + +h1:hover a.wiki-anchor, +h2:hover a.wiki-anchor, +h3:hover a.wiki-anchor { + display: inline; + color: #ddd; +} + +div.wiki img { + vertical-align: middle; +} /***** My page layout *****/ .block-receiver { -border:1px dashed #c0c0c0; -margin-bottom: 20px; -padding: 15px 0 15px 0; + border: 1px dashed #c0c0c0; + margin-bottom: 20px; + padding: 15px 0 15px 0; } .mypage-box { - margin-top:20px; + margin-top: 20px; padding: 0px 10px 0px 10px; border: #C4C4C4 solid 1px; - font-size:11px; + font-size: 11px; background: #FFFFFF url(../images/background_widgets.png) repeat-x 0 0; - /* Shadow definitions cross browser */ -moz-box-shadow: 1px 1px 1px #BFBFBF; -webkit-box-shadow: 1px 1px 1px #BFBFBF; box-shadow: 1px 1px 1px #BFBFBF; /* For IE 8 */ - -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=2, Direction=135, Color='#333333')"; + -ms-filter: "progid: DXImageTransform.Microsoft.Shadow(Strength=2, Direction=135, Color='#333333')"; /* For IE 5.5 - 7 */ - filter: progid:DXImageTransform.Microsoft.Shadow(Strength=2, Direction=135, Color='#000000'); + filter: progid: DXImageTransform.Microsoft.Shadow(Strength=2, Direction=135, Color='#000000'); zoom: 1; } @@ -861,25 +2059,28 @@ padding: 15px 0 15px 0; #content .mypage-box table { padding: 10; - margin-top:15px; - margin-bottom:15px; + margin-top: 15px; + margin-bottom: 15px; } -.mypage-box h3, .mypage-box a { - font-size:11px; - font-weight:bold; +.mypage-box h3, +.mypage-box a { + font-size: 11px; + font-weight: bold; } -#content .mypage-box table.issues td, #content .mypage-box table th, #content .mypage-box table.list { - border:none; - padding:0; - width:auto; - padding-right:30px; - padding-bottom:5px; +#content .mypage-box table.issues td, +#content .mypage-box table th, +#content .mypage-box table.list { + border: none; + padding: 0; + width: auto; + padding-right: 30px; + padding-bottom: 5px; } #content .mypage-box table th { - border:none; + border: none; background: white; font-weight: bold; } @@ -889,29 +2090,29 @@ padding: 15px 0 15px 0; } .handle { -cursor: move; + cursor: move; } a.close-icon { -display:block; -margin-top:10px; -overflow:hidden; -width:12px; -height:12px; -background-repeat: no-repeat; -cursor:pointer; -background-image:url('../images/close.png'); + display: block; + margin-top: 10px; + overflow: hidden; + width: 12px; + height: 12px; + background-repeat: no-repeat; + cursor: pointer; + background-image: url('../images/close.png'); } a.close-icon:hover { -background-image:url('../images/close_hl.png'); + background-image: url('../images/close_hl.png'); } /***** Gantt chart *****/ .gantt_hdr { - position:absolute; - top:0; - height:16px; + position: absolute; + top: 0; + height: 16px; border-top: 1px solid #c0c0c0; border-bottom: 1px solid #c0c0c0; border-right: 1px solid #c0c0c0; @@ -919,140 +2120,393 @@ background-image:url('../images/close_hl.png'); overflow: hidden; } -.gantt_subjects { font-size: 0.8em; } -.gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; } +.gantt_subjects { + font-size: 0.8em; +} + +.gantt_subjects div { + line-height: 16px; + height: 16px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} .task { position: absolute; - height:8px; - font-size:0.8em; - color:#888; - padding:0; - margin:0; - line-height:16px; - white-space:nowrap; + height: 8px; + font-size: 0.8em; + color: #888; + padding: 0; + margin: 0; + line-height: 16px; + white-space: nowrap; } -.task.label {width:100%;} -.task.label.project, .task.label.version { font-weight: bold; } +.task.label { + width: 100%; +} -.task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; } -.task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; } -.task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; } +.task.label.project, +.task.label.version { + font-weight: bold; +} -.task_todo.parent { background: #888; border: 1px solid #888; height: 3px;} -.task_late.parent, .task_done.parent { height: 3px;} -.task.parent.marker.starting { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; left: 0px; top: -1px;} -.task.parent.marker.ending { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; right: 0px; top: -1px;} +.task_late { + background: #f66 url(../images/task_late.png); + border: 1px solid #f66; +} -.version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;} -.version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;} -.version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;} -.version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; } +.task_done { + background: #00c600 url(../images/task_done.png); + border: 1px solid #00c600; +} -.project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;} -.project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;} -.project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;} -.project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; } +.task_todo { + background: #aaa url(../images/task_todo.png); + border: 1px solid #aaa; +} -.version-behind-schedule a, .issue-behind-schedule a {color: #f66914;} -.version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;} +.task_todo.parent { + background: #888; + border: 1px solid #888; + height: 3px; +} + +.task_late.parent, +.task_done.parent { + height: 3px; +} + +.task.parent.marker.starting { + position: absolute; + background: url(../images/task_parent_end.png) no-repeat 0 0; + width: 8px; + height: 16px; + margin-left: -4px; + left: 0px; + top: -1px; +} + +.task.parent.marker.ending { + position: absolute; + background: url(../images/task_parent_end.png) no-repeat 0 0; + width: 8px; + height: 16px; + margin-left: -4px; + right: 0px; + top: -1px; +} + +.version.task_late { + background: #f66 url(../images/milestone_late.png); + border: 1px solid #f66; + height: 2px; + margin-top: 3px; +} + +.version.task_done { + background: #00c600 url(../images/milestone_done.png); + border: 1px solid #00c600; + height: 2px; + margin-top: 3px; +} + +.version.task_todo { + background: #fff url(../images/milestone_todo.png); + border: 1px solid #fff; + height: 2px; + margin-top: 3px; +} + +.version.marker { + background-image: url(../images/version_marker.png); + background-repeat: no-repeat; + border: 0; + margin-left: -4px; + margin-top: 1px; +} + +.project.task_late { + background: #f66 url(../images/milestone_late.png); + border: 1px solid #f66; + height: 2px; + margin-top: 3px; +} + +.project.task_done { + background: #00c600 url(../images/milestone_done.png); + border: 1px solid #00c600; + height: 2px; + margin-top: 3px; +} + +.project.task_todo { + background: #fff url(../images/milestone_todo.png); + border: 1px solid #fff; + height: 2px; + margin-top: 3px; +} + +.project.marker { + background-image: url(../images/project_marker.png); + background-repeat: no-repeat; + border: 0; + margin-left: -4px; + margin-top: 1px; +} + +.version-behind-schedule a, +.issue-behind-schedule a { + color: #f66914; +} + +.version-overdue a, +.issue-overdue a, +.project-overdue a { + color: #f00; +} /***** Icons *****/ .icon { -background-position: 0% 50%; -background-repeat: no-repeat; -padding-left: 20px; -padding-top: 2px; -padding-bottom: 3px; + background-position: 0% 50%; + background-repeat: no-repeat; + padding-left: 20px; + padding-top: 2px; + padding-bottom: 3px; } -.icon-add { background-image: url(../images/add.png); } -.icon-edit { background-image: url(../images/edit.png); } -.icon-copy { background-image: url(../images/copy.png); } -.icon-duplicate { background-image: url(../images/duplicate.png); } -.icon-del { background-image: url(../images/delete.png); } -.icon-move { background-image: url(../images/move.png); } -.icon-save { background-image: url(../images/save.png); } -.icon-cancel { background-image: url(../images/cancel.png); } -.icon-multiple { background-image: url(../images/table_multiple.png); } -.icon-folder { background-image: url(../images/folder.png); } -.open .icon-folder { background-image: url(../images/folder_open.png); } -.icon-package { background-image: url(../images/package.png); } -.icon-user { background-image: url(../images/user.png); } -.icon-projects { background-image: url(../images/projects.png); } -.icon-help { background-image: url(../images/help.png); } -.icon-attachment { background-image: url(../images/attachment.png); } -.icon-history { background-image: url(../images/history.png); } -.icon-time { background-image: url(../images/time.png); } -.icon-time-add { background-image: url(../images/time_add.png); } -.icon-stats { background-image: url(../images/stats.png); } -.icon-warning { background-image: url(../images/warning.png); } -.icon-fav { background-image: url(../images/fav.png); } -.icon-fav-off { background-image: url(../images/fav_off.png); } -.icon-reload { background-image: url(../images/reload.png); } -.icon-lock { background-image: url(../images/locked.png); } -.icon-unlock { background-image: url(../images/unlock.png); } -.icon-checked { background-image: url(../images/true.png); } -.icon-details { background-image: url(../images/zoom_in.png); } -.icon-report { background-image: url(../images/report.png); } -.icon-comment { background-image: url(../images/comment.png); } -.icon-summary { background-image: url(../images/lightning.png); } -.icon-server-authentication { background-image: url(../images/server_key.png); } -.icon-issue { background-image: url(../images/ticket.png); } -.icon-zoom-in { background-image: url(../images/zoom_in.png); } -.icon-zoom-out { background-image: url(../images/zoom_out.png); } +.icon-add { + background-image: url(../images/add.png); +} -.icon-file { background-image: url(../images/files/default.png); } -.icon-file.text-plain { background-image: url(../images/files/text.png); } -.icon-file.text-x-c { background-image: url(../images/files/c.png); } -.icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); } -.icon-file.text-x-php { background-image: url(../images/files/php.png); } -.icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); } -.icon-file.text-xml { background-image: url(../images/files/xml.png); } -.icon-file.image-gif { background-image: url(../images/files/image.png); } -.icon-file.image-jpeg { background-image: url(../images/files/image.png); } -.icon-file.image-png { background-image: url(../images/files/image.png); } -.icon-file.image-tiff { background-image: url(../images/files/image.png); } -.icon-file.application-pdf { background-image: url(../images/files/pdf.png); } -.icon-file.application-zip { background-image: url(../images/files/zip.png); } -.icon-file.application-x-gzip { background-image: url(../images/files/zip.png); } +.icon-edit { + background-image: url(../images/edit.png); +} + +.icon-copy { + background-image: url(../images/copy.png); +} + +.icon-duplicate { + background-image: url(../images/duplicate.png); +} + +.icon-del { + background-image: url(../images/delete.png); +} + +.icon-move { + background-image: url(../images/move.png); +} + +.icon-save { + background-image: url(../images/save.png); +} + +.icon-cancel { + background-image: url(../images/cancel.png); +} + +.icon-multiple { + background-image: url(../images/table_multiple.png); +} + +.icon-folder { + background-image: url(../images/folder.png); +} + +.open .icon-folder { + background-image: url(../images/folder_open.png); +} + +.icon-package { + background-image: url(../images/package.png); +} + +.icon-user { + background-image: url(../images/user.png); +} + +.icon-projects { + background-image: url(../images/projects.png); +} + +.icon-help { + background-image: url(../images/help.png); +} + +.icon-attachment { + background-image: url(../images/attachment.png); +} + +.icon-history { + background-image: url(../images/history.png); +} + +.icon-time { + background-image: url(../images/time.png); +} + +.icon-time-add { + background-image: url(../images/time_add.png); +} + +.icon-stats { + background-image: url(../images/stats.png); +} + +.icon-warning { + background-image: url(../images/warning.png); +} + +.icon-fav { + background-image: url(../images/fav.png); +} + +.icon-fav-off { + background-image: url(../images/fav_off.png); +} + +.icon-reload { + background-image: url(../images/reload.png); +} + +.icon-lock { + background-image: url(../images/locked.png); +} + +.icon-unlock { + background-image: url(../images/unlock.png); +} + +.icon-checked { + background-image: url(../images/true.png); +} + +.icon-details { + background-image: url(../images/zoom_in.png); +} + +.icon-report { + background-image: url(../images/report.png); +} + +.icon-comment { + background-image: url(../images/comment.png); +} + +.icon-summary { + background-image: url(../images/lightning.png); +} + +.icon-server-authentication { + background-image: url(../images/server_key.png); +} + +.icon-issue { + background-image: url(../images/ticket.png); +} + +.icon-zoom-in { + background-image: url(../images/zoom_in.png); +} + +.icon-zoom-out { + background-image: url(../images/zoom_out.png); +} + +.icon-file { + background-image: url(../images/files/default.png); +} + +.icon-file.text-plain { + background-image: url(../images/files/text.png); +} + +.icon-file.text-x-c { + background-image: url(../images/files/c.png); +} + +.icon-file.text-x-csharp { + background-image: url(../images/files/csharp.png); +} + +.icon-file.text-x-php { + background-image: url(../images/files/php.png); +} + +.icon-file.text-x-ruby { + background-image: url(../images/files/ruby.png); +} + +.icon-file.text-xml { + background-image: url(../images/files/xml.png); +} + +.icon-file.image-gif { + background-image: url(../images/files/image.png); +} + +.icon-file.image-jpeg { + background-image: url(../images/files/image.png); +} + +.icon-file.image-png { + background-image: url(../images/files/image.png); +} + +.icon-file.image-tiff { + background-image: url(../images/files/image.png); +} + +.icon-file.application-pdf { + background-image: url(../images/files/pdf.png); +} + +.icon-file.application-zip { + background-image: url(../images/files/zip.png); +} + +.icon-file.application-x-gzip { + background-image: url(../images/files/zip.png); +} img.gravatar { - padding: 2px; + padding: 2px; border: solid 1px #d5d5d5; background: #fff; } div.issue table img.gravatar, p.author img.gravatar { - height: 14px; - width: 14px; - padding: 2px; - float: left; - margin: 0 0.5em 0 0; + height: 14px; + width: 14px; + padding: 2px; + float: left; + margin: 0 0.5em 0 0; } h2 img.gravatar { - padding: 3px; - margin: -2px 4px -4px 0; - vertical-align: top; + padding: 3px; + margin: -2px 4px -4px 0; + vertical-align: top; } h4 img.gravatar { - padding: 3px; - margin: -6px 0 -4px 0; - vertical-align: top; + padding: 3px; + margin: -6px 0 -4px 0; + vertical-align: top; } td.username img.gravatar { - margin: 0 0.5em 0 0; - vertical-align: top; + margin: 0 0.5em 0 0; + vertical-align: top; } #activity dt img.gravatar { - float: left; - margin: 0 1em 1em 0; + float: left; + margin: 0 1em 1em 0; } /* Used on 12px Gravatar img tags without the icon background */ @@ -1063,16 +2517,20 @@ td.username img.gravatar { #activity dt, .journal { - clear: left; + clear: left; } .journal-link { - float: right; + float: right; } -h2 img { vertical-align:middle; } +h2 img { + vertical-align: middle; +} -.hascontextmenu { cursor: context-menu; } +.hascontextmenu { + cursor: context-menu; +} /* Merged from the new layout #263 */ /** @@ -1096,39 +2554,48 @@ h2 img { vertical-align:middle; } * * This section includes the typography base for the body and heading elements. ------------------------------------------------------------------------------*/ - body { - font: normal normal normal 12px/1.5 arial,'lucida grandriale','lucida sans unicode',tahom,sans-serif; - background:#f3f3f3; - color:#333; - + font: normal normal normal 12px/1.5 arial,'lucida grandriale','lucida sans unicode',tahom,sans-serif; + background: #f3f3f3; + color: #333; } -h1,h2,h3,h4,h5,h6 { - font-weight:bold; +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; } + h1 { - font-size:21px; + font-size: 21px; } + h2 { - font-size:18px; + font-size: 18px; } + h3 { - font-size:16px; - font-weight:normal; - margin-bottom:16px; + font-size: 16px; + font-weight: normal; + margin-bottom: 16px; } + h4 { - font-size:14px; - margin-bottom:16px; + font-size: 14px; + margin-bottom: 16px; } + h5 { - font-size:12px; - text-transform: uppercase; - margin-bottom:18px; + font-size: 12px; + text-transform: uppercase; + margin-bottom: 18px; } + a:hover { - text-decoration:underline; + text-decoration: underline; } /*------------------------------------------------------------------------------- @@ -1137,391 +2604,465 @@ a:hover { * This section includes the site logo, main navigation background, and styles * the header and navigation links. ------------------------------------------------------------------------------*/ - - #top-menu { - height: 81px; - position:relative; - z-index:21; + height: 81px; + position: relative; + z-index: 21; } -#top-menu.open { /*IE 6-7 z-index stacking issue*/ - z-index:5; + +#top-menu.open { + /*IE 6-7 z-index stacking issue*/ + z-index: 5; } + #account-nav { - display:block; - background:url(../images/background_top_navigation.png) repeat-x left top; + display: block; + background: url(../images/background_top_navigation.png) repeat-x left top; } + #logo { - float:left; - width:200px; - height:43px; - font-size: 3em; - padding-left: 15px; + float: left; + width: 200px; + height: 43px; + font-size: 3em; + padding-left: 15px; } -#logo a, #logo a:hover { - color: #FFFFFF; - text-decoration: none; + +#logo a, +#logo a:hover { + color: #FFFFFF; + text-decoration: none; } + #top-menu-items { - float:right; - padding-right:15px; + float: right; + padding-right: 15px; } + #header { - background: url(../images/background_header.png) repeat-x 20px; - height:43px; - font: arial,19px,white; + background: url(../images/background_header.png) repeat-x 20px; + height: 43px; + font: arial,19px,white; } + #header ul { - line-height:43px; - float:left; - font-size:13px; - font-family:"Arial", Arial, sans-serif; - font-style:normal; - font-weight:normal; - color:#ffffff; - height:43px; - border-top:0; - position:relative; - } + line-height: 43px; + float: left; + font-size: 13px; + font-family: "Arial", Arial, sans-serif; + font-style: normal; + font-weight: normal; + color: #ffffff; + height: 43px; + border-top: 0; + position: relative; +} #header ul#account-info { - margin-right:15px; + margin-right: 15px; } + #header li { - float:left; - border-left:1px solid #450308; - position:relative; - z-index:5; + float: left; + border-left: 1px solid #450308; + position: relative; + z-index: 5; } -#header li:last-child { - border-right:0px; + +#header li: last-child { + border-right: 0px; } + #header li > a { - text-decoration:none; - color:#FFFFFF; - height:43px; - font-weight:normal; + text-decoration: none; + color: #FFFFFF; + height: 43px; + font-weight: normal; } + #header li.drop-down select { - width:100%; + width: 100%; } + #header li.drop-down > a { - background:url(../images/arrow-down-white.png) no-repeat right center; - padding-right:35px; + background: url(../images/arrow-down-white.png) no-repeat right center; + padding-right: 35px; } + #header li > a:hover { - background-color:#700407; + background-color: #700407; } + #header li.drop-down > a:hover { - background:#700407 url(../images/arrow-down-grey.png) no-repeat right center; - padding-right:35px; + background: #700407 url(../images/arrow-down-grey.png) no-repeat right center; + padding-right: 35px; } + #header li li a:hover { - background-color:#FFFFFF; - color:#222222; + background-color: #FFFFFF; + color: #222222; } -#header li.drop-down li > a:hover, #main-menu li a.selected, #main-menu li a:hover { - -moz-border-radius-topleft:5px; - -moz-border-radius-topright:5px; - -webkit-border-top-left-radius:5px; - -webkit-border-top-right-radius:5px; - border-top-left-radius:5px; - border-top-right-radius:5px; - -moz-border-radius-bottomleft:5px; - -moz-border-radius-bottomright:5px; - -webkit-border-bottom-left-radius:5px; - -webkit-border-bottom-right-radius:5px; - border-bottom-left-radius:5px; - border-bottom-right-radius:5px; - background-color:#7F7F7F; - color:#FFFFFF; + +#header li.drop-down li > a:hover, +#main-menu li a.selected, +#main-menu li a:hover { + -moz-border-radius-topleft: 5px; + -moz-border-radius-topright: 5px; + -webkit-border-top-left-radius: 5px; + -webkit-border-top-right-radius: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-left-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #7F7F7F; + color: #FFFFFF; } li a.home { - text-indent:-999em; - width:20px; - height:43px; - background:url(../images/icon_home.png) no-repeat 50% 50%; + text-indent: -999em; + width: 20px; + height: 43px; + background: url(../images/icon_home.png) no-repeat 50% 50%; } li a.help { - text-indent:-999em; - width:20px; - height:43px; - background:url(../images/icon_help.png) no-repeat 50% 50%; -} -li a.help:hover { - background-image:url(../images/icon_help_grey.png); -} -#header li.drop-down.open > a { - color: #6A0406; - background:#FFFFFF url(../images/arrow-down-grey.png) no-repeat right center; - padding-right:35px; -} -#account-nav li{ - padding:0; -} -#account-nav li a { - display:block; - padding:0px 9px 0px; -} -#header .search_field { - border:0px; - color:white; - background:transparent url(../images/background_search.png); - background-repeat:repeat-x; - margin-right:15px; - margin-top:6px; - margin-bottom:4px; - padding-left:10px; - padding-right:27px; - width:125px; - height:30px; -} -input::-webkit-input-placeholder { - color: white; -} -input:-moz-placeholder { - color: white; -} -#search { - float:left; -} -#header li.open > a { - position:relative; - top:0px; - z-index:21; -} -#header li > ul { - display:none; - position:absolute; - height:auto; - min-width:200px; - left:-1px; - z-index:20; - border: 1px solid #b7b7b7; - border-top: 0px; - background-color:#FFFFFF; -} -#header li.last-child > ul { - left:auto; - right:-1px; -} -#header li li { - float:none; - white-space:nowrap; - border-style:solid; - border-width:1px 0; -} -#header li.drop-down li > a { - padding:5px 9px; - background:#FFFFFF; - position:static; - color:#222222; - font-size:13px; - font-family:"Arial", Arial, sans-serif; - font-style:normal; - font-weight:normal; - margin-top:3px; - margin-bottom:3px; - margin-left:6px; - margin-right:6px; - height:15px; - line-height:15px; -} -#header li.drop-down li > a.separator { - border-bottom: 1px solid #555555; -} -#breadcrumb { - height:38px; - line-height:38px; - background:url(../images/background_breadcrumb.png) repeat-x left top; - border-bottom: 1px #d9d9d9; - color:#777777; - padding-left:15px; - font-size:16px; - font-family:"Arial", Arial, sans-serif; - font-style:normal; - font-weight:normal; -} -#breadcrumb a { - text-decoration:underline; - color:#777777; -} -#nav-search { - float: right; + text-indent: -999em; + width: 20px; + height: 43px; + background: url(../images/icon_help.png) no-repeat 50% 50%; } -#nav-search input { - margin:5px 5px; - width:94%; +li a.help:hover { + background-image: url(../images/icon_help_grey.png); } + +#header li.drop-down.open > a { + color: #6A0406; + background: #FFFFFF url(../images/arrow-down-grey.png) no-repeat right center; + padding-right: 35px; +} + +#account-nav li { + padding: 0; +} + +#account-nav li a { + display: block; + padding: 0px 9px 0px; +} + +#header .search_field { + border: 0px; + color: white; + background: transparent url(../images/background_search.png); + background-repeat: repeat-x; + margin-right: 15px; + margin-top: 6px; + margin-bottom: 4px; + padding-left: 10px; + padding-right: 27px; + width: 125px; + height: 30px; +} + +input: : -webkit-input-placeholder { + color: white; +} + +input: -moz-placeholder { + color: white; +} + +#search { + float: left; +} + +#header li.open > a { + position: relative; + top: 0px; + z-index: 21; +} + +#header li > ul { + display: none; + position: absolute; + height: auto; + min-width: 200px; + left: -1px; + z-index: 20; + border: 1px solid #b7b7b7; + border-top: 0px; + background-color: #FFFFFF; +} + +#header li.last-child > ul { + left: auto; + right: -1px; +} + +#header li li { + float: none; + white-space: nowrap; + border-style: solid; + border-width: 1px 0; +} + +#header li.drop-down li > a { + padding: 5px 9px; + background: #FFFFFF; + position: static; + color: #222222; + font-size: 13px; + font-family: "Arial", Arial, sans-serif; + font-style: normal; + font-weight: normal; + margin-top: 3px; + margin-bottom: 3px; + margin-left: 6px; + margin-right: 6px; + height: 15px; + line-height: 15px; +} + +#header li.drop-down li > a.separator { + border-bottom: 1px solid #555555; +} + +#breadcrumb { + height: 38px; + line-height: 38px; + background: url(../images/background_breadcrumb.png) repeat-x left top; + border-bottom: 1px #d9d9d9; + color: #777777; + padding-left: 15px; + font-size: 16px; + font-family: "Arial", Arial, sans-serif; + font-style: normal; + font-weight: normal; +} + +#breadcrumb a { + text-decoration: underline; + color: #777777; +} + +#nav-search { + float: right; +} + +#nav-search input { + margin: 5px 5px; + width: 94%; +} + #nav-login-content { - position: absolute; - top:44px; - right: 0px; - float: right; - background: white; - border:1px solid #194E60; - border-top:0; - padding-left:5px; - padding-top:5px; - padding-right:10px; - padding-bottom:8px; - color:black; + position: absolute; + top: 44px; + right: 0px; + float: right; + background: white; + border: 1px solid #194E60; + border-top: 0; + padding-left: 5px; + padding-top: 5px; + padding-right: 10px; + padding-bottom: 8px; + color: black; } + #nav-login input[type=text], #nav-login input[type=password] { - height: 20px; - width: 150px; + height: 20px; + width: 150px; } + #nav-login div a { - display: inline; - color:black; - padding:0; + display: inline; + color: black; + padding: 0; } + div#optional_login_fields { - top:10px; - white-space:nowrap; - margin-left:2px; + top: 10px; + white-space: nowrap; + margin-left: 2px; } + /*------------------------------------------------------------------------------- * =02 - Side container * * This section includes the layout and styles for the left navigation column and menu. ------------------------------------------------------------------------------*/ - #side-container { - width:185px; - height:100%; - position:absolute; - margin:10px 0 0; - left:0; + width: 185px; + height: 100%; + position: absolute; + margin: 10px 0 0; + left: 0; } + #main-menu ul { - border-top:1px solid #ddd; - border-bottom:1px solid #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #fff; } + #main-menu ul ul { - display:none; - background-color:white; - padding-top:1px; - padding-bottom:1px; + display: none; + background-color: white; + padding-top: 1px; + padding-bottom: 1px; } + #main-menu ul ul.menu-children.unattached { - border-top:1px solid #ddd; + border-top: 1px solid #ddd; } + #main-menu ul ul ul { - position:absolute; - left:185px; - z-index:20; - width:100%; - top:0; - border:1px solid #AFAFAF; - background:#f3f3f3; + position: absolute; + left: 185px; + z-index: 20; + width: 100%; + top: 0; + border: 1px solid #AFAFAF; + background: #f3f3f3; } + #main-menu li { - border-top:1px solid #e2e2e2; - border-bottom:1px solid #f5f5f5; - position:relative; - min-height:23px; - background-color:#e9e9e9; + border-top: 1px solid #e2e2e2; + border-bottom: 1px solid #f5f5f5; + position: relative; + min-height: 23px; + background-color: #e9e9e9; } + #main-menu li li { - border:0; - background-color:white; + border: 0; + background-color: white; } + #main-menu li li li { - padding:0; - width:100%; - border-bottom:1px solid #DDDDDD; - border-top:1px solid #FFFFFF; + padding: 0; + width: 100%; + border-bottom: 1px solid #DDDDDD; + border-top: 1px solid #FFFFFF; } -#main-menu li li li:first-child { - border-top:0; + +#main-menu li li li: first-child { + border-top: 0; } + #main-menu a { - text-decoration:none; - line-height:23px; - display:block; - position:relative; - height:23px; - color:#333333; - font-weight:normal; - font-size:13px; - font-family:"Arial", Arial, sans-serif; - font-style:normal; + text-decoration: none; + line-height: 23px; + display: block; + position: relative; + height: 23px; + color: #333333; + font-weight: normal; + font-size: 13px; + font-family: "Arial", Arial, sans-serif; + font-style: normal; } + #main-menu li a { - margin:6px; - font-weight:bold; - padding: 0 0 0 20px; + margin: 6px; + font-weight: bold; + padding: 0 0 0 20px; } -#main-menu a.selected, #main-menu a:hover { + +#main-menu a.selected, +#main-menu a:hover { + ; } + #main-menu li li a { - font-weight:normal; + font-weight: normal; } + #main-menu li li.current a { - font-weight:bold; + font-weight: bold; } + #main-menu li li a span { - font-weight:normal; - color:#999; - float:right; - padding-right:9px; + font-weight: normal; + color: #999; + float: right; + padding-right: 9px; } + #main-menu li li li a span { - padding:0; + padding: 0; } + #main-menu .toggler { - position:absolute; - right:0px; - top:0px; - background:url(../images/double_arrow_toggle_down.png) no-repeat 32px 7px; - width:50px; - height:25px; + position: absolute; + right: 0px; + top: 0px; + background: url(../images/double_arrow_toggle_down.png) no-repeat 32px 7px; + width: 50px; + height: 25px; } + #main-menu li .open .toggler { - background-image:url(../images/double_arrow_toggle_up.png); + background-image: url(../images/double_arrow_toggle_up.png); } + #main-menu li .open:hover .toggler { - background-image:url(../images/double_arrow_toggle_up_white.png); + background-image: url(../images/double_arrow_toggle_up_white.png); } + #main-menu li .selected .toggler { - background-image:url(../images/double_arrow_toggle_down_white.png); + background-image: url(../images/double_arrow_toggle_down_white.png); } + #main-menu li .selected.open .toggler { - background-image:url(../images/double_arrow_toggle_up_white.png); + background-image: url(../images/double_arrow_toggle_up_white.png); } + #main-menu li a:hover .toggler { - background-image:url(../images/double_arrow_toggle_down_white.png); + background-image: url(../images/double_arrow_toggle_down_white.png); } #main-menu li li .toggler { - display:none; + display: none; } + #main-menu li li li a { - padding:0 12px; + padding: 0 12px; } + #main-menu li li ul.profile-box li { - padding:6px 12px; + padding: 6px 12px; } + #main-menu li li ul.profile-box li a { - display:inline; - padding:0; - color:#226D81; - line-height:1.5; + display: inline; + padding: 0; + color: #226D81; + line-height: 1.5; } + #main-menu li li ul.profile-box li a:hover { - text-decoration:underline; + text-decoration: underline; } /* Mimic ".icon .icon-time" */ -#main-menu li a.time-details, #main-menu li a.billable-time-details, #main-menu li a.overhead-time-details { background-image:url(../../../images/time.png); background-position:30px 40%; background-repeat:no-repeat; padding-left:50px; } - -#main-menu p.password { font-weight: bold; margin: 25px 0; } - +#main-menu li a.time-details, +#main-menu li a.billable-time-details, +#main-menu li a.overhead-time-details { + background-image: url(../../../images/time.png); + background-position: 30px 40%; + background-repeat: no-repeat; + padding-left: 50px; +} +#main-menu p.password { + font-weight: bold; + margin: 25px 0; +} /*------------------------------------------------------------------------------- * =03 - Main Content @@ -1529,108 +3070,129 @@ div#optional_login_fields { * This section includes the layout and styles for the main content area. ------------------------------------------------------------------------------*/ #main { - background:#f3f3f3; - position:relative; - z-index:20; - } -#footer { color: #aaa; padding-left: 186px } + background: #f3f3f3; + position: relative; + z-index: 20; +} + +#footer { + color: #aaa; + padding-left: 186px; +} h1.title { - margin:12px 24px 9px; + margin: 12px 24px 9px; } -#content { - margin:0 15px 10px 185px; - padding:10px; - font-size:11px; - width: auto; -} -#content .title-bar { - position:relative; - margin-bottom:10px; - top: -10px; +#content { + margin: 0 15px 10px 185px; + padding: 10px; + font-size: 11px; + width: auto; } + +#content .title-bar { + position: relative; + margin-bottom: 10px; + top: -10px; +} + .title-bar h2 { - padding:9px 100px 9px 12px; - color:#000; - font-weight:normal; - font-weight:bold; + padding: 9px 100px 9px 12px; + color: #000; + font-weight: normal; + font-weight: bold; } + .title-bar h2 span { - font-weight:bold; + font-weight: bold; } .button-large { + ; } /* .button-large was too generic and targeted other pages with it's positioning */ .title-bar .button-large { - float: left; - padding: 2px 0 3px; + float: left; + padding: 2px 0 3px; } .button-large a { - line-height: 3.5; - display:block; - color:#6a0406; + line-height: 3.5; + display: block; + color: #6a0406; } + .title-bar .add-filter { - right:155px; + right: 155px; } fieldset#filters div.add-filter { - text-align: right; + text-align: right; } .title-bar .new-issue { - right:10px; + right: 10px; } + .title-bar .new-issue a { - background:url(../images/add.png) no-repeat 6px center; - padding-left:26px; + background: url(../images/add.png) no-repeat 6px center; + padding-left: 26px; } + .title-bar-extras { - color:#333333; + color: #333333; } + .title-bar-extras ul { - padding:10px; - overflow:auto; + padding: 10px; + overflow: auto; } + .title-bar-extras li { - padding-bottom:5px; + padding-bottom: 5px; } + .title-bar-extras select { - margin-right:10px; + margin-right: 10px; } + .extras-actions { - padding:5px 10px; - position:relative; + padding: 5px 10px; + position: relative; } + .extras-actions a { - border:0; - color:#000; - padding-left:18px; - margin-right:10px; - cursor:pointer; - font-family:inherit; - font-size:11px; + border: 0; + color: #000; + padding-left: 18px; + margin-right: 10px; + cursor: pointer; + font-family: inherit; + font-size: 11px; } + input.apply { - background-image:url(../images/check.png); + background-image: url(../images/check.png); } + input.clear { - background-image:url(../images/refresh.png); + background-image: url(../images/refresh.png); } + input.save { - background-image:url(../images/disk.png); + background-image: url(../images/disk.png); } + a#extras-close { - position:absolute; - color:#fff; - background:url(../images/arrow-up-white.png) no-repeat right center; - right:10px; - padding-right:15px; - display:none; /* Remove to show the Hide Filters thing */ + position: absolute; + color: #fff; + background: url(../images/arrow-up-white.png) no-repeat right center; + right: 10px; + padding-right: 15px; + display: none; + /* Remove to show the Hide Filters thing */ } /*------------------------------------------------------------------------------- @@ -1638,68 +3200,84 @@ a#extras-close { * * This section includes the layout and styles for the main issues table. ------------------------------------------------------------------------------*/ - form#issue-list { - position:relative; + position: relative; } + #content table.issues { - width:100%; + width: 100%; } + #content table th { - font-weight:normal; - background:#f3f3f3 url(../images/gradient-down.png) repeat-x; + font-weight: normal; + background: #f3f3f3 url(../images/gradient-down.png) repeat-x; } -#content table.issues td, #content table th { - border:1px solid #e6e6e6; - padding:6px; - text-align:left; - position:relative; - vertical-align:top; + +#content table.issues td, +#content table th { + border: 1px solid #e6e6e6; + padding: 6px; + text-align: left; + position: relative; + vertical-align: top; } + #content table th a { - color:#111; - text-decoration:none; + color: #111; + text-decoration: none; } + #content table th.current-sort { - background:#fff url(../images/gradient-up.png) repeat-x; + background: #fff url(../images/gradient-up.png) repeat-x; } + #content table th.current-sort a { - background:url(../images/arrow-down-3.png) no-repeat right center; - padding-right:16px; - display:block; + background: url(../images/arrow-down-3.png) no-repeat right center; + padding-right: 16px; + display: block; } + #content table tr.even { - background-color:#f9f9f9; + background-color: #f9f9f9; } + #content table td.priority { - text-align:center; + text-align: center; } + #content table td.issue { - background:url(../images/arrow-bottom-right.png) no-repeat right bottom; - width:42px; - cursor:context-menu; + background: url(../images/arrow-bottom-right.png) no-repeat right bottom; + width: 42px; + cursor: context-menu; } + #content table td.updated { - width:80px; + width: 80px; } + #content table a.toggle-select { - background:url(../images/check.png) no-repeat center center; - display:block; - text-indent:-9999em; + background: url(../images/check.png) no-repeat center center; + display: block; + text-indent: -9999em; } + #multiple-action-buttons { - float:left; - margin:10px 0; + float: left; + margin: 10px 0; } + #multiple-action-buttons li { - float:left; - margin-right:10px; + float: left; + margin-right: 10px; } -.pagination, .other-formats { - margin:10px 0; + +.pagination, +.other-formats { + margin: 10px 0; } + .pagination a { - padding:1px 2px; + padding: 1px 2px; } /*------------------------------------------------------------------------------- @@ -1707,377 +3285,457 @@ form#issue-list { * * This section includes the layout and styles for the single issues page. ------------------------------------------------------------------------------*/ - .title-bar-actions { - position:absolute; - right:0px; - top:0; - padding:0 100px 0 10px; - height:100%; + position: absolute; + right: 0px; + top: 0; + padding: 0 100px 0 10px; + height: 100%; } + .title-bar-actions .contextual a { -/* color:#fff;*/ + /* color: #fff; + */ } + .title-bar .title-bar-actions .contextual a.icon { - color:#000000; + color: #000000; margin-right: 0px; - float: none; + float: none; } + .title-bar .update { - right:0; + right: 0; } + .title-bar .update a { - padding-left:26px; - background:url(../images/edit.png) no-repeat 5px center; - font-weight:bold; + padding-left: 26px; + background: url(../images/edit.png) no-repeat 5px center; + font-weight: bold; } + div.issue { - padding:10px; + padding: 10px; } + div.issue hr { - margin:10px -10px; - clear:both; + margin: 10px -10px; + clear: both; } + div.issue h3 { - font-size:14px; - border:0px; + font-size: 14px; + border: 0px; } + #content .meta table { - border:0 none; + border: 0 none; } + #content .meta table tr:hover { - background:none; -} -#content .meta table td, #content .meta table th { background: none; - border:0 none; - padding:0 3px; } + +#content .meta table td, #content .meta table th { - font-weight:bold; + background: none; + border: 0 none; + padding: 0 3px; } -#content .meta table td a:hover, #content .meta table th a:hover { - text-decoration:underline; + +#content .meta table th { + font-weight: bold; } + +#content .meta table td a:hover, +#content .meta table th a:hover { + text-decoration: underline; +} + #content .meta table td.priority { - text-align:left; /* Is set to center above */ + text-align: left; + /* Is set to center above */ } + .gravatar { - border:1px solid #aaa; + border: 1px solid #aaa; } + .issue p { - margin-bottom:5px; + margin-bottom: 5px; } + .attachments h4 { - margin-bottom:6px; - background:url(../images/files-showhide.png) no-repeat right bottom; - cursor:pointer; + margin-bottom: 6px; + background: url(../images/files-showhide.png) no-repeat right bottom; + cursor: pointer; } + .attachments h4.closed { - background-position:right 5px; + background-position: right 5px; } table.files { - display: table; + display: table; } -#content table.files td, #content table.files th, #content table.files { - border:0; - background:none; + +#content table.files td, +#content table.files th, +#content table.files { + border: 0; + background: none; } + #content table.files th { - font-weight:bold; - padding:1px; + font-weight: bold; + padding: 1px; } + #content table.files td { - color:#555; - padding:1px; + color: #555; + padding: 1px; } + #content table.files .opt-desc { - width:60%; + width: 60%; } + #content table.files td a { - position:relative; + position: relative; } + #history { - margin:20px 0; + margin: 20px 0; } + #history h3 { - font-size:14px; - border-bottom:1px solid #ddd; - padding-left:10px; - margin-bottom:20px; + font-size: 14px; + border-bottom: 1px solid #ddd; + padding-left: 10px; + margin-bottom: 20px; } + #history .journal { - margin:0 0 45px; + margin: 0 0 45px; } + .journal.has-avatar .journal-details { padding-left: 50px; } + .journal .profile-wrap { float: left; margin: 5px 0 0; } .journal h4 { - font-size:12px; - font-weight:normal; - margin-bottom:10px; - padding-right: 0; - z-index:5; -} -.journal h4 .history-id { - float:right; - color:#999; -} -.journal .wiki { - overflow:auto; -} -.journal .contextual { - float:right; -} -.journal .contextual a { - float:left; - display:block; - margin:0 0 0 5px; - height:16px; - width:16px; - background-repeat:no-repeat; - background-position:center center; -} -.contextual .edit { - background-image:url(../images/edit.png); -} -.contextual .comment { - background-image:url(../images/comment.png); -} -.question-line { - display:block; -} -#content blockquote, .wiki ol, .wiki ul { - padding-left:40px; -} -.wiki p { - margin-bottom:5px; -} -blockquote { - font-style:italic; - background:url(../images/blockquote-bg.png) no-repeat 25px 3px; -} -.wiki ul li { - list-style: disc outside none; -} -.file-thumbs { - margin:20px 0 0; - overflow:hidden; - float: left; -} -.file-thumbs a { - display:block; - float:left; - margin-right:10px; - text-align:center; -} -.file-thumbs a img { - display:block; - margin:0 auto 5px; - border:1px solid #226D81; -} -.file-thumbs a img.pdf { - border:0; + font-size: 12px; + font-weight: normal; + margin-bottom: 10px; + padding-right: 0; + z-index: 5; } -.journal-attributes {color: #999999;} +.journal h4 .history-id { + float: right; + color: #999; +} + +.journal .wiki { + overflow: auto; +} + +.journal .contextual { + float: right; +} + +.journal .contextual a { + float: left; + display: block; + margin: 0 0 0 5px; + height: 16px; + width: 16px; + background-repeat: no-repeat; + background-position: center center; +} + +.contextual .edit { + background-image: url(../images/edit.png); +} + +.contextual .comment { + background-image: url(../images/comment.png); +} + +.question-line { + display: block; +} + +#content blockquote, +.wiki ol, +.wiki ul { + padding-left: 40px; +} + +.wiki p { + margin-bottom: 5px; +} + +blockquote { + font-style: italic; + background: url(../images/blockquote-bg.png) no-repeat 25px 3px; +} + +.wiki ul li { + list-style: disc outside none; +} + +.file-thumbs { + margin: 20px 0 0; + overflow: hidden; + float: left; +} + +.file-thumbs a { + display: block; + float: left; + margin-right: 10px; + text-align: center; +} + +.file-thumbs a img { + display: block; + margin: 0 auto 5px; + border: 1px solid #226D81; +} + +.file-thumbs a img.pdf { + border: 0; +} + +.journal-attributes { + color: #999999; +} /*------------------------------------------------------------------------------- * =06 - Projects Page * * This section defines the styles for the projects "home" page. ------------------------------------------------------------------------------*/ - #content.nosidebar { - margin-left:20px; - padding:15px 60px 15px 25px; - font-size:12px; - + margin-left: 20px; + padding: 15px 60px 15px 25px; + font-size: 12px; } + #project-links { - position:absolute; - right:30px; - color:#ccc; - font-weight:bold; -} -.nosidebar blockquote { - margin:1em 0; -} -.nosidebar p { - margin-bottom:1em; -} -li.root { - font-size:18px; - margin-bottom:24px; -} -li.child { - font-size:14px; -} -.nosidebar ul.projects { - margin:24px 0 0; -} -.nosidebar ul.projects ul { - margin:0; -} -ul.projects .description { - font-size:12px; -} -.nosidebar ul.projects li { - list-style:none outside none; - background: none; -} -.nosidebar ul.projects li .my-project { - padding:0 0 0 24px; - background:url(../images/star.png) no-repeat left top; -} -ul.projects a { - font-weight:bold; -} -ul.projects li div.root { - margin-bottom:12px; -} -.nosidebar ol li { - list-style: decimal outside none; - margin-left:24px; -} -.nosidebar ul li { - background:url(../images/dot-blue.png) no-repeat left top; -} -.nosidebar ol, .nosidebar ul { - margin:0 0 12px 18px; + position: absolute; + right: 30px; + color: #ccc; + font-weight: bold; } +.nosidebar blockquote { + margin: 1em 0; +} + +.nosidebar p { + margin-bottom: 1em; +} + +li.root { + font-size: 18px; + margin-bottom: 24px; +} + +li.child { + font-size: 14px; +} + +.nosidebar ul.projects { + margin: 24px 0 0; +} + +.nosidebar ul.projects ul { + margin: 0; +} + +ul.projects .description { + font-size: 12px; +} + +.nosidebar ul.projects li { + list-style: none outside none; + background: none; +} + +.nosidebar ul.projects li .my-project { + padding: 0 0 0 24px; + background: url(../images/star.png) no-repeat left top; +} + +ul.projects a { + font-weight: bold; +} + +ul.projects li div.root { + margin-bottom: 12px; +} + +.nosidebar ol li { + list-style: decimal outside none; + margin-left: 24px; +} + +.nosidebar ul li { + background: url(../images/dot-blue.png) no-repeat left top; +} + +.nosidebar ol, +.nosidebar ul { + margin: 0 0 12px 18px; +} /*------------------------------------------------------------------------------- * =07 - Behavior Styles * * This section defines the styles for handling behaviors - popups, flyouts, etc. ------------------------------------------------------------------------------*/ - .profile-box { - position:absolute; - right:0; - top:45px; - width:205px; - display:none; - z-index:10; -} -.issue .profile-box ul, .journal .profile-box ul { - background:url(../images/profile-arrow-up.png) no-repeat 175px top; - position:relative; - z-index:11; - top:-8px; - padding-top:8px; - margin-bottom:-8px; -} -.journal .profile-box { - right:auto; - left:0; + position: absolute; + right: 0; + top: 45px; + width: 205px; + display: none; + z-index: 10; } + +.issue .profile-box ul, .journal .profile-box ul { - background-position: 13px top; + background: url(../images/profile-arrow-up.png) no-repeat 175px top; + position: relative; + z-index: 11; + top: -8px; + padding-top: 8px; + margin-bottom: -8px; } + +.journal .profile-box { + right: auto; + left: 0; +} + +.journal .profile-box ul { + background-position: 13px top; +} + .profile-box ul li { - border-top:1px solid #fff; - border-bottom:1px solid #ddd; - padding:5px 10px; + border-top: 1px solid #fff; + border-bottom: 1px solid #ddd; + padding: 5px 10px; } -.profile-box ul li:first-child { - border-top:0; + +.profile-box ul li: first-child { + border-top: 0; } -.profile-box ul li:last-child { - border-bottom:0; + +.profile-box ul li: last-child { + border-bottom: 0; } + .profile-box .gravatar { - border:0; - float:left; - margin-right:6px; + border: 0; + float: left; + margin-right: 6px; } + .profile-box .vcard { - padding-left:20px !important; - background:url(../images/vcard.png) no-repeat left center; - display:block; + padding-left: 20px !important; + background: url(../images/vcard.png) no-repeat left center; + display: block; } /* file table hovers */ a.has-thumb img { - position:absolute; - display:none; - border:1px solid #a6c6cf; - padding:4px; - background:#fff; - -moz-border-radius:3px; - -webkit-border-radius:3px; - border-radius:3px; - + position: absolute; + display: none; + border: 1px solid #a6c6cf; + padding: 4px; + background: #fff; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + a.has-thumb.active { - left:-10px; - background:url(../images/thumb-arrow-right.png) no-repeat left center; - padding-left:10px; - margin-right:-10px; + left: -10px; + background: url(../images/thumb-arrow-right.png) no-repeat left center; + padding-left: 10px; + margin-right: -10px; } td.issue div.issue-wrap-outer { - position:relative; + position: relative; } /* table tooltips */ .js-tooltip { - position:absolute; - left:-30px; - z-index:20; + position: absolute; + left: -30px; + z-index: 20; } + .js-tooltip-inner { - position:absolute; - bottom:5px; - padding:10px; - width:500px; - font-size:11px; - max-height:200px; - overflow:hidden; - z-index:15; + position: absolute; + bottom: 5px; + padding: 10px; + width: 500px; + font-size: 11px; + max-height: 200px; + overflow: hidden; + z-index: 15; } + .js-tooltip .arrow { - width:16px; - height:12px; - position:absolute; - bottom:-6px; - left:76px; - z-index:16; - background:url(../images/tooltip-arrow.png) no-repeat left top; + width: 16px; + height: 12px; + position: absolute; + bottom: -6px; + left: 76px; + z-index: 16; + background: url(../images/tooltip-arrow.png) no-repeat left top; } + .js-tooltip .meta { - margin-top:20px; - overflow:hidden; + margin-top: 20px; + overflow: hidden; } + .js-tooltip .meta li { - float:left; - margin-right:30px; + float: left; + margin-right: 30px; } + .button-large ul { - position:absolute; - right:-1px; - top:20px; - z-index:5; - display:none; + position: absolute; + right: -1px; + top: 20px; + z-index: 5; + display: none; } + .button-large ul li { - padding:0; - white-space:nowrap; + padding: 0; + white-space: nowrap; } + .title-bar .button-large ul li a { - background-image:none; - padding:6px 12px; + background-image: none; + padding: 6px 12px; } + .title-bar .button-large ul li a:hover { - background-color:#fff; + background-color: #fff; } /*------------------------------------------------------------------------------- @@ -2085,19 +3743,21 @@ td.issue div.issue-wrap-outer { * * This section defines reusable classes for menus, etc. ------------------------------------------------------------------------------*/ - .menu li { - position:relative; - padding:6px; + position: relative; + padding: 6px; } -.menu li:first-child { - border-top:0; + +.menu li: first-child { + border-top: 0; } -.menu li:last-child { - border-bottom:0; + +.menu li: last-child { + border-bottom: 0; } + .inline { - display: inline; + display: inline; } /*------------------------------------------------------------------------------- @@ -2105,399 +3765,487 @@ td.issue div.issue-wrap-outer { ------------------------------------------------------------------------------*/ /* tooltip fix */ form#issue-list { - display:block; + display: block; } -.js-tooltip, .js-tooltip-inner {width:100%;} + +.js-tooltip, .js-tooltip-inner { - max-height:none; + width: 100%; } + +.js-tooltip-inner { + max-height: none; +} + .js-tooltip .issue-tooltip-description { - max-height:200px; - overflow:hidden; + max-height: 200px; + overflow: hidden; } /* roadmap breathing */ #roadmap h3 { - margin:21px 0 12px; + margin: 21px 0 12px; } + div#roadmap fieldset.related-issues { - margin: 12px 0; - padding:6px 12px; - -moz-border-radius:5px; - -webkit-border-radius:5px; - border-radius:5px; + margin: 12px 0; + padding: 6px 12px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; } + #roadmap fieldset legend { - font-style: italic; + font-style: italic; } tr.context-menu-selection td.priority { - background:none !important; + background: none !important; } /* Blue dots killed */ .nosidebar ul li { - background:none; - list-style: disc outside none; + background: none; + list-style: disc outside none; } + .nosidebar ul { - margin:12px 0 12px 18px; + margin: 12px 0 12px 18px; } ul.projects div.root a.project { - font-family:inherit; + font-family: inherit; } + #content #login-form table { - border:0 none; - background:none; - margin:0; + border: 0 none; + background: none; + margin: 0; } + #content #login-form table tr:hover { - background:none; + background: none; } -#login-form table td, #login-form table th { - border:0 none; + +#login-form table td, +#login-form table th { + border: 0 none; } /* tables don't all need border you know */ -#relations table td, #relations table th { - border:0 none; +#relations table td, +#relations table th { + border: 0 none; } /* sidebar cleanup */ #sidebar { - padding:10px 2px 2px 20px; - width:auto; - color:#888888; - font-weight:normal; - font-size:11px; - font-family:"Arial", Arial, sans-serif; - font-style:normal; + padding: 10px 2px 2px 20px; + width: auto; + color: #888888; + font-weight: normal; + font-size: 11px; + font-family: "Arial", Arial, sans-serif; + font-style: normal; } + #sidebar h3 { - color:#777777; - font-weight:bold; - font-size:12px; - font-family:"Arial", Arial, sans-serif; - font-style:normal; - margin:0px; - padding:0px; - margin-bottom:8px; + color: #777777; + font-weight: bold; + font-size: 12px; + font-family: "Arial", Arial, sans-serif; + font-style: normal; + margin: 0px; + padding: 0px; + margin-bottom: 8px; } -#sidebar a, #sidebar a:link, #sidebar a:visited { - color: #6a0406; - font-weight:bold; - height:auto; - display:inline; - position:static; - font-size:11px; - font-style:normal; - line-height:1.5; + +#sidebar a, +#sidebar a:link, +#sidebar a:visited { + color: #6a0406; + font-weight: bold; + height: auto; + display: inline; + position: static; + font-size: 11px; + font-style: normal; + line-height: 1.5; } + #sidebar a:hover { - text-decoration:underline; + text-decoration: underline; } + #sidebar input.button-small { - margin-top:6px; + margin-top: 6px; +} + +#sidebar ul { + border: none; +} + +#sidebar li { + border: none; +} + +#sidebar li a { + padding: 0px; } -#sidebar ul {border: none; } -#sidebar li {border: none; } -#sidebar li a {padding: 0px; } #main-menu li li a { - padding-left:30px; - padding-right:3px; - text-indent:-6px; - letter-spacing:-.01em; + padding-left: 30px; + padding-right: 3px; + text-indent: -6px; + letter-spacing: -.01em; } -#main-menu li a.time-details, #main-menu li a.overhead-time-details, #main-menu li a.billable-time-details { - padding-left:40px; - background-position:12px 45%; + +#main-menu li a.time-details, +#main-menu li a.overhead-time-details, +#main-menu li a.billable-time-details { + padding-left: 40px; + background-position: 12px 45%; } /* custom query page */ #content .box fieldset { - border:1px solid #ddd; - margin:18px 10px 6px; - padding:10px; + border: 1px solid #ddd; + margin: 18px 10px 6px; + padding: 10px; } + #content .box fieldset legend { - font-weight:bold; + font-weight: bold; } + .box fieldset li.filter { - padding-top:6px; - overflow:hidden; + padding-top: 6px; + overflow: hidden; } + .box fieldset select { - margin-right:6px; + margin-right: 6px; } + .box fieldset #add_filter_select { - margin-bottom:6px; + margin-bottom: 6px; } + .box li.filter label { - clear:left; - float:left; - width:170px; + clear: left; + float: left; + width: 170px; } + fieldset#columns table { - width:auto; + width: auto; } + fieldset#columns td { - border:0; - vertical-align:middle; + border: 0; + vertical-align: middle; } /* Flash notices */ div.flash { - margin:0 0 10px; - border:1px solid; - -moz-border-radius:5px; - -webkit-border-radius:5px; - border-radius:5px; + margin: 0 0 10px; + border: 1px solid; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; } /* all kinds of wonderful tweaks */ +#account li li: last-child a:hover { + -moz-border-radius-bottomleft: 5px; + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-left-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} -#account li li:last-child a:hover { - -moz-border-radius-bottomleft:5px; - -moz-border-radius-bottomright:5px; - -webkit-border-bottom-left-radius:5px; - -webkit-border-bottom-right-radius:5px; - border-bottom-left-radius:5px; - border-bottom-right-radius:5px; -} .question pre { - color:#111; + color: #111; } + .box p { - padding-top:5px; - padding-bottom:8px; + padding-top: 5px; + padding-bottom: 8px; } + #content .box h3 { - margin-top:3px; + margin-top: 3px; } + div.issue hr { - width:auto; + width: auto; } + .question .wiki { - margin:0; + margin: 0; } + .wiki { - font-size:12px; + font-size: 12px; } -.wiki ol, .wiki ul { - margin-bottom:6px; + +.wiki ol, +.wiki ul { + margin-bottom: 6px; } + #content h3 { - margin:12px 0 6px; + margin: 12px 0 6px; } + #content h2 + h3 { - margin-top:12px; + margin-top: 12px; } + p.author { - margin-bottom:3px; - font-style:italic; + margin-bottom: 3px; + font-style: italic; } /* add filter select box on non-issue pages */ fieldset#filters div.add-filter { - text-align:left; - margin:0 0 6px 0; + text-align: left; + margin: 0 0 6px 0; } + .nosidebar #add_filter_select { - margin-bottom:6px; + margin-bottom: 6px; } + .nosidebar .box fieldset { - line-height:1.5; - margin:0 0 12px 180px; + line-height: 1.5; + margin: 0 0 12px 180px; } + .nosidebar .box fieldset legend { - margin-bottom:6px; + margin-bottom: 6px; } + .nosidebar fieldset ul li { - background:none; + background: none; } + .title-bar .add-filter.button-large { - background:none; - border:none; + background: none; + border: none; } + .title-bar .contextual { - padding:0 12px 0 12px; - position:absolute; - right:0px; - top:0; - margin:0; + padding: 0 12px 0 12px; + position: absolute; + right: 0px; + top: 0; + margin: 0; } + .title-bar .contextual a.icon { - float: left; - line-height:3.5; - margin-right:16px; + float: left; + line-height: 3.5; + margin-right: 16px; } + .title-bar .grouping { - padding:0 10px 10px; + padding: 0 10px 10px; } + .title-bar-extras ul { - border-bottom:none; + border-bottom: none; } + .extras-actions { - border-top:none; + border-top: none; } + #content .meta table.progress { - border:1px solid #bbb; - border-collapse:separate; - -moz-border-radius:3px; - -webkit-border-radius:3px; - border-radius:3px; + border: 1px solid #bbb; + border-collapse: separate; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .nosidebar fieldset ul { - margin-left:0; + margin-left: 0; } + .nosidebar ol.ui-sortable li { - list-style: none outside none; + list-style: none outside none; } + tr.time-entry { - white-space:normal; + white-space: normal; } + .meta td.priority { - background:none !important; + background: none !important; } /*===== Replacement Images =====*/ - -.icon-edit, .title-bar .update a { - background-image:url(../images/pencil.png); +.icon-edit, +.title-bar .update a { + background-image: url(../images/pencil.png); } + .icon-del { - background-image:url(../images/delete.png); -} -.journal .contextual a[title=Edit] img { - display:none; -} -.journal .contextual a[title=Edit] { - background:url(../images/pencil.png) no-repeat; + background-image: url(../images/delete.png); } +.journal .contextual a[title=Edit] img { + display: none; +} + +.journal .contextual a[title=Edit] { + background: url(../images/pencil.png) no-repeat; +} /* -- New #main-menu toggle CSS */ #main-menu .toggle-follow { - padding:5px 5px 5px 0; + padding: 5px 5px 5px 0; } /* Weird Safari cascade bug. More specificity */ -div.issue p, div.issue div, #content td { - font-size:11px; +div.issue p, +div.issue div, +#content td { + font-size: 11px; } /* comments */ .wiki ol li { - list-style: decimal outside; + list-style: decimal outside; } /* scm */ #content table .changeset td.id a:hover { - text-decoration:underline; + text-decoration: underline; } + #history .journal { - clear:left; - min-height: 50px; - margin-bottom:45px; + clear: left; + min-height: 50px; + margin-bottom: 45px; } /* issue updates */ #update form#issue-form .attributes p { - padding-bottom:5px; + padding-bottom: 5px; } + #update fieldset .box { - padding:0; - border:0 none; + padding: 0; + border: 0 none; } + #update .tabular label { - width:140px; - margin-left:-147px; + width: 140px; + margin-left: -147px; } + #update .tabular p { - padding-left:140px; + padding-left: 140px; } /* Delete icon */ table.files a.icon-delete { - float:left; - padding:0; - display:block; - text-indent:-9999em; - width:16px; - height:16px; - background:url(../images/delete.png) no-repeat 0 0; - margin-right:6px; + float: left; + padding: 0; + display: block; + text-indent: -9999em; + width: 16px; + height: 16px; + background: url(../images/delete.png) no-repeat 0 0; + margin-right: 6px; } - /* clearfix */ html > body #content:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; - + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; } + #content table.files .opt-desc { - width:45%; + width: 45%; } /* member settings [pc] */ - select#member_role_id { - width:75px; + width: 75px; } /* fix for thumbnail jankiness */ a.has-thumb.active { - left:auto; - margin-left:-10px; - margin-right:0; - *left:-10px; /* IE6 & 7 hacks */ - *margin-left:0; + left: auto; + margin-left: -10px; + margin-right: 0; + *left: -10px; + /* IE6 & 7 hacks */ + *margin-left: 0; } + a.has-thumb img { - z-index:1001; + z-index: 1001; } /* max height on menus */ #context-menu li.assigned > ul { - max-height:250px; - overflow-x:hidden; - overflow-y:auto; + max-height: 250px; + overflow-x: hidden; + overflow-y: auto; } /* Make icons non repeating */ - -#more-menu.drop-down ul li a.projects { border-top:1px solid #555; } +#more-menu.drop-down ul li a.projects { + border-top: 1px solid #555; +} /* Adds a simple rounded corner background */ -.rounded-background { background: #E6E5E5; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; } +.rounded-background { + background: #E6E5E5; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} /* Used on the wiki to show a page hierarchy/tree */ -.pages-hierarchy { padding-left: 10px; } +.pages-hierarchy { + padding-left: 10px; +} /************************************************************************* Additional wiki styles *************************************************************************/ - .button { padding-left: .25em; padding-right: .25em; - background:#507aaa; + background: #507aaa; color: white; font-weight: bold; } -.wiki p.see-also, .wiki p.caution, .wiki p.important, .wiki p.info, .wiki p.tip, .wiki p.note, -.wiki span.see-also, .wiki span.caution, .wiki span.important, .wiki span.info, .wiki span.tip, .wiki span.note { +.wiki p.see-also, +.wiki p.caution, +.wiki p.important, +.wiki p.info, +.wiki p.tip, +.wiki p.note, +.wiki span.see-also, +.wiki span.caution, +.wiki span.important, +.wiki span.info, +.wiki span.tip, +.wiki span.note { display: block; margin-top: .5em; margin-bottom: .5em; - padding: 4px 4px 4px 48px; min-height: 33px; } @@ -2512,77 +4260,103 @@ Additional wiki styles min-height: 0; } -.wiki p.smallsee-also, .wiki p.smallcaution, .wiki p.smallimportant, .wiki p.smallinfo, .wiki p.smalltip, .wiki p.smallnote, -.wiki span.smallsee-also, .wiki span.smallcaution, .wiki span.smallimportant, .wiki span.smallinfo, .wiki span.smalltip, .wiki span.smallnote { +.wiki p.smallsee-also, +.wiki p.smallcaution, +.wiki p.smallimportant, +.wiki p.smallinfo, +.wiki p.smalltip, +.wiki p.smallnote, +.wiki span.smallsee-also, +.wiki span.smallcaution, +.wiki span.smallimportant, +.wiki span.smallinfo, +.wiki span.smalltip, +.wiki span.smallnote { display: block; margin-top: .5em; margin-bottom: .5em; - padding: 4px 4px 4px 34px; min-height: 24px; } -.wiki p.see-also, .wiki span.see-also { +.wiki p.see-also, +.wiki span.see-also { background: url(../images/wiki_styles/see-also.png) 4px 4px no-repeat #f5fffa; border: 1px solid #AAB1AD; } -.wiki p.smallsee-also, .wiki span.smallsee-also { + +.wiki p.smallsee-also, +.wiki span.smallsee-also { background: url(../images/wiki_styles/see-also_small.png) 4px 4px no-repeat #f5fffa; border: 1px solid #AAB1AD; } -.wiki p.caution, .wiki span.caution { +.wiki p.caution, +.wiki span.caution { background: url(../images/wiki_styles/caution.png) 4px 6px no-repeat #f5fffa; border: 1px solid #AAB1AD; } -.wiki p.smallcaution, .wiki span.smallcaution { + +.wiki p.smallcaution, +.wiki span.smallcaution { background: url(../images/wiki_styles/caution_small.png) 4px 4px no-repeat #f5fffa; border: 1px solid #AAB1AD; } -.wiki p.important, .wiki span.important { +.wiki p.important, +.wiki span.important { background: url(../images/wiki_styles/important.png) 4px 7px no-repeat #F0F8FF; border: 1px solid #C1C8CF; } -.wiki p.smallimportant, .wiki span.smallimportant { + +.wiki p.smallimportant, +.wiki span.smallimportant { background: url(../images/wiki_styles/important_small.png) 4px 6px no-repeat #F0F8FF; border: 1px solid #C1C8CF; } -.wiki p.info, .wiki span.info { +.wiki p.info, +.wiki span.info { background: url(../images/wiki_styles/info.png) 4px 4px no-repeat #FFFFE0; border: 1px solid #FFFF00; } -.wiki p.smallinfo, .wiki span.smallinfo { + +.wiki p.smallinfo, +.wiki span.smallinfo { background: url(../images/wiki_styles/info_small.png) 4px 4px no-repeat #FFFFE0; border: 1px solid #FFFF00; } -.wiki p.tip, .wiki span.tip { +.wiki p.tip, +.wiki span.tip { background: url(../images/wiki_styles/tip.png) 4px 4px no-repeat #F5FFFA; border: 1px solid #C7CFCA; } -.wiki p.smalltip, .wiki span.smalltip { + +.wiki p.smalltip, +.wiki span.smalltip { background: url(../images/wiki_styles/tip_small.png) 4px 5px no-repeat #F5FFFA; border: 1px solid #C7CFCA; } -.wiki p.note, .wiki span.note { +.wiki p.note, +.wiki span.note { background: url(../images/wiki_styles/note.png) 6px 4px no-repeat #F5FFFA; border: 1px solid #C7CFCA; } -.wiki p.smallnote, .wiki span.smallnote { + +.wiki p.smallnote, +.wiki span.smallnote { background: url(../images/wiki_styles/note_small.png) 5px 4px no-repeat #F5FFFA; border: 1px solid #C7CFCA; } - /* Accessibility specific styles */ .hidden-for-sighted { - position:absolute; - left:-10000px; - top:auto; - width:1px; - height:1px; - overflow:hidden; + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; } diff --git a/public/stylesheets/calendar.css b/public/stylesheets/calendar.css index 288ed724..5a82c522 100644 --- a/public/stylesheets/calendar.css +++ b/public/stylesheets/calendar.css @@ -1,14 +1,17 @@ -/* The main calendar widget. DIV containing a table. */ - +/* The main calendar widget. DIV containing a table. */ img.calendar-trigger { - cursor: pointer; - vertical-align: middle; - margin-left: 4px; + cursor: pointer; + vertical-align: middle; + margin-left: 4px; } -div.calendar { position: relative; z-index: 30;} +div.calendar { + position: relative; + z-index: 30; +} -div.calendar, div.calendar table { +div.calendar, +div.calendar table { border: 1px solid #556; font-size: 11px; color: #000; @@ -18,10 +21,9 @@ div.calendar, div.calendar table { } /* Header part -- contains navigation buttons and day names. */ - div.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; /* They are the navigation buttons */ - padding: 2px; /* Make the buttons seem like they're pressing */ + text-align: center; /* They are the navigation buttons */ + padding: 2px; /* Make the buttons seem like they're pressing */ } div.calendar .nav { @@ -29,7 +31,7 @@ div.calendar .nav { } div.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; /* Pressing it will take you to the current date */ + font-weight: bold; /* Pressing it will take you to the current date */ text-align: center; background: #fff; color: #000; @@ -68,17 +70,18 @@ div.calendar thead .active { /* Active (pressed) buttons in header */ } /* The body part -- contains all the days in month. */ - div.calendar tbody .day { /* Cells
in footer (only one right now) */ text-align: center; background: #556; @@ -163,7 +167,6 @@ div.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ } /* Combo boxes (menus that display months/years for direct selection) */ - div.calendar .combo { position: absolute; display: none; diff --git a/public/stylesheets/context_menu.css b/public/stylesheets/context_menu.css index d820815b..8655e2fd 100644 --- a/public/stylesheets/context_menu.css +++ b/public/stylesheets/context_menu.css @@ -1,53 +1,112 @@ -#context-menu { position: absolute; z-index: 40; } +#context-menu { + position: absolute; + z-index: 40; +} -#context-menu ul, #context-menu li, #context-menu a { - display:block; - margin:0; - padding:0; - border:0; +#context-menu ul, +#context-menu li, +#context-menu a { + display: block; + margin: 0; + padding: 0; + border: 0; } #context-menu ul { - width:150px; - border-top:1px solid #ddd; - border-left:1px solid #ddd; - border-bottom:1px solid #777; - border-right:1px solid #777; - background:white; - list-style:none; + width: 150px; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; + border-bottom: 1px solid #777; + border-right: 1px solid #777; + background: white; + list-style: none; } #context-menu li { - position:relative; - padding:1px; - z-index:39; - border:1px solid white; + position: relative; + padding: 1px; + z-index: 39; + border: 1px solid white; } -#context-menu li.folder ul { position:absolute; left:168px; /* IE6 */ top:-2px; max-height:300px; overflow:hidden; overflow-y: auto; } -#context-menu li.folder>ul { left:148px; } -#context-menu.reverse-y li.folder>ul { top:auto; bottom:0; } -#context-menu.reverse-x li.folder ul { left:auto; right:168px; /* IE6 */ } -#context-menu.reverse-x li.folder>ul { right:148px; } +#context-menu li.folder ul { + position: absolute; + left: 168px; /* ie6 */ + top: -2px; + max-height: 300px; + overflow: hidden; + overflow-y: auto; +} + +#context-menu li.folder > ul { + left: 148px; +} + +#context-menu.reverse-y li.folder > ul { + top: auto; + bottom: 0; +} + +#context-menu.reverse-x li.folder ul { + left: auto; + right: 168px; /* IE6 */ +} + +#context-menu.reverse-x li.folder > ul { + right: 148px; +} #context-menu a { - text-decoration:none !important; - background-repeat: no-repeat; - background-position: 1px 50%; - padding: 1px 0px 1px 20px; - width:100%; /* IE */ + text-decoration: none !important; + background-repeat: no-repeat; + background-position: 1px 50%; + padding: 1px 0px 1px 20px; + width: 100%; /* IE */ +} + +#context-menu li > a { + width: auto; +} + +/* others */ +#context-menu a.disabled, +#context-menu a.disabled:hover { + color: #ccc; +} + +#context-menu li:hover { + border: 1px solid gray; + background-color: #eee; +} + +#context-menu a:hover { + color: #2A5685; +} + +#context-menu li.folder:hover { + z-index: 40; +} + +#context-menu ul ul, +#context-menu li:hover ul ul { + display: none; +} + +#context-menu li:hover ul, +#context-menu li:hover li:hover ul { + display: block; } -#context-menu li>a { width:auto; } /* others */ -#context-menu a.disabled, #context-menu a.disabled:hover {color: #ccc;} -#context-menu li:hover { border:1px solid gray; background-color:#eee; } -#context-menu a:hover {color:#2A5685;} -#context-menu li.folder:hover { z-index:40; } -#context-menu ul ul, #context-menu li:hover ul ul { display:none; } -#context-menu li:hover ul, #context-menu li:hover li:hover ul { display:block; } /* selected element */ -.context-menu-selection { background-color:#507AAA !important; color:#000 !important; } -.context-menu-selection:hover { background-color:#507AAA !important; color:#000 !important; } +.context-menu-selection { + background-color: #507AAA !important; + color: #000 !important; +} + +.context-menu-selection:hover { + background-color: #507AAA !important; + color: #000 !important; +} #context-menu .submenu { border: transparent solid 5px; diff --git a/public/stylesheets/context_menu_rtl.css b/public/stylesheets/context_menu_rtl.css index 205bb918..69277d22 100644 --- a/public/stylesheets/context_menu_rtl.css +++ b/public/stylesheets/context_menu_rtl.css @@ -1,6 +1,16 @@ -#context-menu li.folder ul { left:auto; right:168px; } -#context-menu li.folder>ul { left:auto; right:148px; } -#context-menu li a.submenu { background:url("../images/bullet_arrow_left.png") left no-repeat; } +#context-menu li.folder ul { + left: auto; + right: 168px; +} + +#context-menu li.folder > ul { + left: auto; + right: 148px; +} + +#context-menu li a.submenu { + background: url("../images/bullet_arrow_left.png") left no-repeat; +} #context-menu a { background-position: 100% 40%; diff --git a/public/stylesheets/ie6.css b/public/stylesheets/ie6.css index cafd0d8f..1b3319f9 100644 --- a/public/stylesheets/ie6.css +++ b/public/stylesheets/ie6.css @@ -1,46 +1,58 @@ /* IE6 how i love to hate thee */ #account-nav li a { - width:45px; + width: 45px; } + #account-nav li li a { - width:150px; + width: 150px; } + .title-bar { - zoom:1; + zoom: 1; } + .title-bar-extras label { - float:none; - display:inline; - padding-right:10px; + float: none; + display: inline; + padding-right: 10px; } + .issue-dropdown li.hover { - background-color:#fff; + background-color: #fff; } + .issue-dropdown li.hover ul { - display:block; - left:112px; + display: block; + left: 112px; } + body .file-thumbs a { - width:150px; + width: 150px; } + #history .journal { - zoom:1; + zoom: 1; } + body #history .wiki { - overflow:hidden; - zoom:1; + overflow: hidden; + zoom: 1; } + #main-menu li li { - height:30px; + height: 30px; } + #main-menu li li li { - height:auto; + height: auto; } + a.has-thumb.active { - background:none; + background: none; } + .title-bar-extras ul { - background-image:none; - border-top:1px solid #154E5D; -} \ No newline at end of file + background-image: none; + border-top: 1px solid #154E5D; +} diff --git a/public/stylesheets/ie7.css b/public/stylesheets/ie7.css index 6925d908..81861501 100644 --- a/public/stylesheets/ie7.css +++ b/public/stylesheets/ie7.css @@ -1,48 +1,56 @@ /* These will be included for IE6 & IE7 */ .title-bar h2 { - height:21px; + height: 21px; } + td.dropdown { - z-index:50; - position:relative; + z-index: 50; + position: relative; } body .title-bar-extras { - overflow:hidden; + overflow: hidden; } -#main-menu, .title-bar { - z-index:4; +#main-menu, +.title-bar { + z-index: 4; } + .title-bar .button-large ul { - z-index:15; + z-index: 15; } + form.tooltip-active { - z-index:14; + z-index: 14; } + #main-menu li li a span { - position:absolute; - right:0; - top:0; - display:block; + position: absolute; + right: 0; + top: 0; + display: block; } + #main-menu li li li a span { - right:10px; + right: 10px; } body .file-thumbs a { - max-width:150px; + max-width: 150px; } #watchers { - position:relative; - z-index:5; + position: relative; + z-index: 5; } + div.attachments { - position:relative; - z-index:4; + position: relative; + z-index: 4; } + fieldset.collapsible.header_collapsible legend { - margin-left:-15px; + margin-left: -15px; } diff --git a/public/stylesheets/jstoolbar.css b/public/stylesheets/jstoolbar.css index 91eae7b5..ea302684 100644 --- a/public/stylesheets/jstoolbar.css +++ b/public/stylesheets/jstoolbar.css @@ -1,96 +1,123 @@ .jstEditor { - padding-left: 0px; + padding-left: 0px; } + .jstEditor textarea, .jstEditor iframe { margin: 0; } .jstHandle { - height: 10px; - font-size: 0.1em; - cursor: s-resize; - /*background: transparent url(img/resizer.png) no-repeat 45% 50%;*/ + height: 10px; + font-size: 0.1em; + cursor: s-resize; + /*background: transparent url(img/resizer.png) no-repeat 45% 50%;*/ } .jstElements { - padding: 3px 3px; + padding: 3px 3px; } .jstElements button { - margin-right : 6px; - width : 24px; - height: 24px; - padding: 4px; - border-style: solid; - border-width: 1px; - border-color: #ddd; - background-color : #f7f7f7; - background-position : 50% 50%; - background-repeat: no-repeat; + margin-right: 6px; + width: 24px; + height: 24px; + padding: 4px; + border-style: solid; + border-width: 1px; + border-color: #ddd; + background-color: #f7f7f7; + background-position: 50% 50%; + background-repeat: no-repeat; } + .jstElements button:hover { - border-color : #000; + border-color: #000; } + .jstElements button span { - display : none; + display: none; } + .jstElements span { - display : inline; + display: inline; } .jstSpacer { - width : 0px; - font-size: 1px; - margin-right: 4px; + width: 0px; + font-size: 1px; + margin-right: 4px; } -.jstElements .help { float: right; margin-right: 0.5em; padding-top: 8px; font-size: 0.9em; } -.jstElements .help a {padding: 2px 0 2px 20px; background: url(../images/help.png) no-repeat 0 50%;} +.jstElements .help { + float: right; + margin-right: 0.5em; + padding-top: 8px; + font-size: 0.9em; +} + +.jstElements .help a { + padding: 2px 0 2px 20px; + background: url(../images/help.png) no-repeat 0 50%; +} /* Buttons -------------------------------------------------------- */ .jstb_strong { - background-image: url(../images/jstoolbar/bt_strong.png); + background-image: url(../images/jstoolbar/bt_strong.png); } + .jstb_em { - background-image: url(../images/jstoolbar/bt_em.png); + background-image: url(../images/jstoolbar/bt_em.png); } + .jstb_ins { - background-image: url(../images/jstoolbar/bt_ins.png); + background-image: url(../images/jstoolbar/bt_ins.png); } + .jstb_del { - background-image: url(../images/jstoolbar/bt_del.png); + background-image: url(../images/jstoolbar/bt_del.png); } + .jstb_code { - background-image: url(../images/jstoolbar/bt_code.png); + background-image: url(../images/jstoolbar/bt_code.png); } + .jstb_h1 { - background-image: url(../images/jstoolbar/bt_h1.png); + background-image: url(../images/jstoolbar/bt_h1.png); } + .jstb_h2 { - background-image: url(../images/jstoolbar/bt_h2.png); + background-image: url(../images/jstoolbar/bt_h2.png); } + .jstb_h3 { - background-image: url(../images/jstoolbar/bt_h3.png); + background-image: url(../images/jstoolbar/bt_h3.png); } + .jstb_ul { - background-image: url(../images/jstoolbar/bt_ul.png); + background-image: url(../images/jstoolbar/bt_ul.png); } + .jstb_ol { - background-image: url(../images/jstoolbar/bt_ol.png); + background-image: url(../images/jstoolbar/bt_ol.png); } + .jstb_bq { - background-image: url(../images/jstoolbar/bt_bq.png); + background-image: url(../images/jstoolbar/bt_bq.png); } + .jstb_unbq { - background-image: url(../images/jstoolbar/bt_bq_remove.png); + background-image: url(../images/jstoolbar/bt_bq_remove.png); } + .jstb_pre { - background-image: url(../images/jstoolbar/bt_pre.png); + background-image: url(../images/jstoolbar/bt_pre.png); } + .jstb_link { - background-image: url(../images/jstoolbar/bt_link.png); + background-image: url(../images/jstoolbar/bt_link.png); } + .jstb_img { - background-image: url(../images/jstoolbar/bt_img.png); + background-image: url(../images/jstoolbar/bt_img.png); } diff --git a/public/stylesheets/print.css b/public/stylesheets/print.css index d589de30..d8067d51 100644 --- a/public/stylesheets/print.css +++ b/public/stylesheets/print.css @@ -1,11 +1,46 @@ /***** Media print specific styles *****/ @media print { - #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; } - #main { background: #fff; } - #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;} - #wiki_add_attachment { display:none; } - .hide-when-print { display: none; } - .autoscroll {overflow-x: visible;} - table.list {margin-top:0.5em;} - table.list th, table.list td {border: 1px solid #aaa;} + #top-menu, + #header, + #main-menu, + #sidebar, + #footer, + .contextual, + .other-formats { + display:none; + } + + #main { + background: #fff; + } + + #content { + width: 99%; + margin: 0; + padding: 0; + border: 0; + background: #fff; + overflow: visible !important; + } + + #wiki_add_attachment { + display:none; + } + + .hide-when-print { + display: none; + } + + .autoscroll { + overflow-x: visible; + } + + table.list { + margin-top:0.5em; + } + + table.list th, + table.list td { + border: 1px solid #aaa; + } } diff --git a/public/stylesheets/reset.css b/public/stylesheets/reset.css index 6d771b36..609bd882 100644 --- a/public/stylesheets/reset.css +++ b/public/stylesheets/reset.css @@ -2,37 +2,101 @@ * CSS Reset * Based on http://meyerweb.com/eric/tools/css/reset/ */ +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +font, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-size: 100%; - vertical-align: baseline; - background: transparent; -} body { - line-height: 1; + line-height: 1; } -ol, ul { - list-style: none; + +ol, +ul { + list-style: none; } ins { - text-decoration: underline; + text-decoration: underline; } + del { - text-decoration: line-through; + text-decoration: line-through; } /* tables still need 'cellspacing="0"' in the markup */ table { - border-collapse: collapse; - border-spacing: 0; + border-collapse: collapse; + border-spacing: 0; } /* Helper classes */ .clearfix { - clear:both; -} \ No newline at end of file + clear: both; +} diff --git a/public/stylesheets/rtl.css b/public/stylesheets/rtl.css index ea6574bc..87033f7b 100644 --- a/public/stylesheets/rtl.css +++ b/public/stylesheets/rtl.css @@ -1,63 +1,179 @@ -body, #wrapper { direction: rtl;} +body, +#wrapper { + direction: rtl; +} -#quick-search { float: left; } -#main-menu { margin-left: -500px; left: auto; right: 6px; margin-right: 0px;} -#main-menu li { float: right; } -#top-menu ul { float: right; } -#account { float: left; } -#top-menu #loggedas { float: left; } -#top-menu li { float: right; } -.tabular label.floating -{ - margin-right: 0; - margin-left: auto; - text-align: right; +#quick-search { + float: left; } -.tabular label -{ - float: right; - margin-left: auto; -} -.tabular p -{ - clear: right; -} -.tabular label.block { text-align: right; } -.icon -{ - background-position: 100% 40%; - padding-right: 20px; - padding-left: 0px; -} -div#activity dt, #search-results dt -{ - background-position: 100% 50%; - padding-right: 20px; - padding-left: 0px; -} -#content .tabs ul li { float: right; } -#content .tabs ul { padding-left: auto; padding-right: 1em; } -table.progress { float: right; } -.contextual { float: left; } -.icon22 { background-position: 100% 40%; padding-right: 26px; padding-left: auto; } -h3, .wiki h2 { padding: 10px 2px 1px 0; } -.tooltip span.tip { text-align: right; } -tr.issue td.subject { text-align: right; } -tr.time-entry td.subject, tr.time-entry td.comments { text-align: right; } -#sidebar { float: left; } -#main.nosidebar #content { border-width: 1px; border-style: solid; border-color: #D7D7D7 #BBBBBB #BBBBBB #D7D7D7;} -.tabular.settings label { margin-left: auto; } -.splitcontentleft { float: right; } -.splitcontentright { float: left; } -p.progress-info { clear: right; } -table.list td.buttons a { padding-right: 20px; } -.filecontent { direction: ltr; } -.entries { direction: ltr; } -.changeset-changes { direction: ltr; padding-left: 2em } -.changesets { direction: ltr; } -div#issue-changesets { float: left; margin-right: 1em; margin-left: 0 } -div#issue-changesets div.wiki { direction: ltr; padding-left: 2em } -#activity dt, .journal { clear: right; } -.journal-link { float: left; } -div.wiki pre { direction: ltr; } +#main-menu { + margin-left: -500px; + left: auto; + right: 6px; + margin-right: 0px; +} + +#main-menu li { + float: right; +} + +#top-menu ul { + float: right; +} + +#account { + float: left; +} + +#top-menu #loggedas { + float: left; +} + +#top-menu li { + float: right; +} + +.tabular label.floating { + margin-right: 0; + margin-left: auto; + text-align: right; +} + +.tabular label { + float: right; + margin-left: auto; +} + +.tabular p { + clear: right; +} + +.tabular label.block { + text-align: right; +} + +.icon { + background-position: 100% 40%; + padding-right: 20px; + padding-left: 0px; +} + +div#activity dt, +#search-results dt { + background-position: 100% 50%; + padding-right: 20px; + padding-left: 0px; +} + +#content .tabs ul li { + float: right; +} + +#content .tabs ul { + padding-left: auto; + padding-right: 1em; +} + +table.progress { + float: right; +} + +.contextual { + float: left; +} + +.icon22 { + background-position: 100% 40%; + padding-right: 26px; + padding-left: auto; +} + +h3, +.wiki h2 { + padding: 10px 2px 1px 0; +} + +.tooltip span.tip { + text-align: right; +} + +tr.issue td.subject { + text-align: right; +} + +tr.time-entry td.subject, +tr.time-entry td.comments { + text-align: right; +} + +#sidebar { + float: left; +} + +#main.nosidebar #content { + border-width: 1px; + border-style: solid; + border-color: #D7D7D7 #BBBBBB #BBBBBB #D7D7D7; +} + +.tabular.settings label { + margin-left: auto; +} + +.splitcontentleft { + float: right; +} + +.splitcontentright { + float: left; +} + +p.progress-info { + clear: right; +} + +table.list td.buttons a { + padding-right: 20px; +} + +.filecontent { + direction: ltr; +} + +.entries { + direction: ltr; +} + +.changeset-changes { + direction: ltr; + padding-left: 2em; +} + +.changesets { + direction: ltr; +} + +div#issue-changesets { + float: left; + margin-right: 1em; + margin-left: 0; +} + +div#issue-changesets div.wiki { + direction: ltr; + padding-left: 2em; +} + +#activity dt, +.journal { + clear: right; +} + +.journal-link { + float: left; +} + +div.wiki pre { + direction: ltr; +} diff --git a/public/stylesheets/scm.css b/public/stylesheets/scm.css index 2b1fed44..161c1be6 100644 --- a/public/stylesheets/scm.css +++ b/public/stylesheets/scm.css @@ -1,181 +1,583 @@ - -div.changeset-changes ul { margin: 0; padding: 0; } -div.changeset-changes ul > ul { margin-left: 18px; padding: 0; } - -li.change { - list-style-type:none; - background-image: url(../images/bullet_black.png); - background-position: 1px 1px; - background-repeat: no-repeat; - padding-top: 1px; - padding-bottom: 1px; - padding-left: 20px; - margin: 0; +div.changeset-changes ul { + margin: 0; + padding: 0; } -li.change.folder { background-image: url(../images/folder_open.png); } -li.change.folder.change-A { background-image: url(../images/folder_open_add.png); } -li.change.folder.change-M { background-image: url(../images/folder_open_orange.png); } -li.change.change-A { background-image: url(../images/bullet_add.png); } -li.change.change-M { background-image: url(../images/bullet_orange.png); } -li.change.change-C { background-image: url(../images/bullet_blue.png); } -li.change.change-R { background-image: url(../images/bullet_purple.png); } -li.change.change-D { background-image: url(../images/bullet_delete.png); } -li.change .copied-from { font-style: italic; color: #999; font-size: 0.9em; } -li.change .copied-from:before { content: " - "} +div.changeset-changes ul > ul { + margin-left: 18px; + padding: 0; +} -#changes-legend { float: right; font-size: 0.8em; margin: 0; } -#changes-legend li { float: left; background-position: 5px 0; } +li.change { + list-style-type: none; + background-image: url(../images/bullet_black.png); + background-position: 1px 1px; + background-repeat: no-repeat; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 20px; + margin: 0; +} + +li.change.folder { + background-image: url(../images/folder_open.png); +} + +li.change.folder.change-A { + background-image: url(../images/folder_open_add.png); +} + +li.change.folder.change-M { + background-image: url(../images/folder_open_orange.png); +} + +li.change.change-A { + background-image: url(../images/bullet_add.png); +} + +li.change.change-M { + background-image: url(../images/bullet_orange.png); +} + +li.change.change-C { + background-image: url(../images/bullet_blue.png); +} + +li.change.change-R { + background-image: url(../images/bullet_purple.png); +} + +li.change.change-D { + background-image: url(../images/bullet_delete.png); +} + +li.change .copied-from { + font-style: italic; + color: #999; + font-size: 0.9em; +} + +li.change .copied-from:before { + content: " - "; +} + +#changes-legend { + float: right; + font-size: 0.8em; + margin: 0; +} + +#changes-legend li { + float: left; + background-position: 5px 0; +} + +table.filecontent { + border: 1px solid #ccc; + border-collapse: collapse; + width: 98%; + background-color: #fafafa; +} + +table.filecontent th { + border: 1px solid #ccc; + background-color: #eee; +} + +table.filecontent th.filename { + background-color: #e4e4d4; + text-align: left; + padding: 0.2em; +} + +table.filecontent tr.spacing th { + text-align: center; +} + +table.filecontent tr.spacing td { + height: 0.4em; + background: #EAF2F5; +} -table.filecontent { border: 1px solid #ccc; border-collapse: collapse; width:98%; background-color: #fafafa; } -table.filecontent th { border: 1px solid #ccc; background-color: #eee; } -table.filecontent th.filename { background-color: #e4e4d4; text-align: left; padding: 0.2em;} -table.filecontent tr.spacing th { text-align:center; } -table.filecontent tr.spacing td { height: 0.4em; background: #EAF2F5;} table.filecontent th.line-num { - border: 1px solid #d7d7d7; - font-size: 0.8em; - text-align: right; - width: 2%; - padding-right: 3px; - color: #999; + border: 1px solid #d7d7d7; + font-size: 0.8em; + text-align: right; + width: 2%; + padding-right: 3px; + color: #999; } + table.filecontent th.line-num a { - text-decoration: none; - color: inherit; + text-decoration: none; + color: inherit; } + table.filecontent td.line-code pre { - margin: 0px; - white-space: pre-wrap; /* CSS2.1 compliant */ - white-space: -moz-pre-wrap; /* Mozilla-based browsers */ - white-space: -o-pre-wrap; /* Opera 7+ */ + margin: 0px; + white-space: pre-wrap; /* CSS2.1 compliant */ + white-space: -moz-pre-wrap; /* Mozilla-based browsers */ + white-space: -o-pre-wrap; /* Opera 7+ */ } /* 12 different colors for the annonate view */ -table.annotate tr.bloc-0 {background: #FFFFBF;} -table.annotate tr.bloc-1 {background: #EABFFF;} -table.annotate tr.bloc-2 {background: #BFFFFF;} -table.annotate tr.bloc-3 {background: #FFD9BF;} -table.annotate tr.bloc-4 {background: #E6FFBF;} -table.annotate tr.bloc-5 {background: #BFCFFF;} -table.annotate tr.bloc-6 {background: #FFBFEF;} -table.annotate tr.bloc-7 {background: #FFE6BF;} -table.annotate tr.bloc-8 {background: #FFE680;} -table.annotate tr.bloc-9 {background: #AA80FF;} -table.annotate tr.bloc-10 {background: #FFBFDC;} -table.annotate tr.bloc-11 {background: #BFE4FF;} +table.annotate tr.bloc-0 { + background: #FFFFBF; +} + +table.annotate tr.bloc-1 { + background: #EABFFF; +} + +table.annotate tr.bloc-2 { + background: #BFFFFF; +} + +table.annotate tr.bloc-3 { + background: #FFD9BF; +} + +table.annotate tr.bloc-4 { + background: #E6FFBF; +} + +table.annotate tr.bloc-5 { + background: #BFCFFF; +} + +table.annotate tr.bloc-6 { + background: #FFBFEF; +} + +table.annotate tr.bloc-7 { + background: #FFE6BF; +} + +table.annotate tr.bloc-8 { + background: #FFE680; +} + +table.annotate tr.bloc-9 { + background: #AA80FF; +} + +table.annotate tr.bloc-10 { + background: #FFBFDC; +} + +table.annotate tr.bloc-11 { + background: #BFE4FF; +} table.annotate td.revision { - text-align: center; - width: 2%; - padding-left: 1em; - background: inherit; + text-align: center; + width: 2%; + padding-left: 1em; + background: inherit; } - + table.annotate td.author { - text-align: center; - border-right: 1px solid #d7d7d7; - white-space: nowrap; - padding-left: 1em; - padding-right: 1em; - width: 3%; - background: inherit; - font-size: 90%; + text-align: center; + border-right: 1px solid #d7d7d7; + white-space: nowrap; + padding-left: 1em; + padding-right: 1em; + width: 3%; + background: inherit; + font-size: 90%; } -table.annotate td.line-code { background-color: #fafafa; } +table.annotate td.line-code { + background-color: #fafafa; +} -div.action_M { background: #fd8 } -div.action_D { background: #f88 } -div.action_A { background: #bfb } +div.action_M { + background: #fd8; +} + +div.action_D { + background: #f88; +} + +div.action_A { + background: #bfb; +} /************* CodeRay styles *************/ -.syntaxhl div {display: inline;} -.syntaxhl .line-numbers { padding: 2px 4px 2px 4px; background-color: #eee; margin: 0 7px 0 0; } -.syntaxhl .code pre { overflow: auto } -.syntaxhl .debug { color:white ! important; background:blue ! important; } +.syntaxhl div { + display: inline; +} -.syntaxhl .annotation { color:#007 } -.syntaxhl .attribute-name { color:#b48 } -.syntaxhl .attribute-value { color:#700 } -.syntaxhl .binary { color:#509 } -.syntaxhl .char .content { color:#D20 } -.syntaxhl .char .delimiter { color:#710 } -.syntaxhl .char { color:#D20 } -.syntaxhl .class { color:#B06; font-weight:bold } -.syntaxhl .class-variable { color:#369 } -.syntaxhl .color { color:#0A0 } -.syntaxhl .comment { color:#777 } -.syntaxhl .comment .char { color:#444 } -.syntaxhl .comment .delimiter { color:#444 } -.syntaxhl .complex { color:#A08 } -.syntaxhl .constant { color:#036; font-weight:bold } -.syntaxhl .decorator { color:#B0B } -.syntaxhl .definition { color:#099; font-weight:bold } -.syntaxhl .delimiter { color:black } -.syntaxhl .directive { color:#088; font-weight:bold } -.syntaxhl .doc { color:#970 } -.syntaxhl .doc-string { color:#D42; font-weight:bold } -.syntaxhl .doctype { color:#34b } -.syntaxhl .entity { color:#800; font-weight:bold } -.syntaxhl .error { color:#F00; background-color:#FAA } -.syntaxhl .escape { color:#666 } -.syntaxhl .exception { color:#C00; font-weight:bold } -.syntaxhl .float { color:#60E } -.syntaxhl .function { color:#06B; font-weight:bold } -.syntaxhl .global-variable { color:#d70 } -.syntaxhl .hex { color:#02b } -.syntaxhl .imaginary { color:#f00 } -.syntaxhl .include { color:#B44; font-weight:bold } -.syntaxhl .inline { background-color: hsla(0,0%,0%,0.07); color: black } -.syntaxhl .inline-delimiter { font-weight: bold; color: #666 } -.syntaxhl .instance-variable { color:#33B } -.syntaxhl .integer { color:#00D } -.syntaxhl .key .char { color: #60f } -.syntaxhl .key .delimiter { color: #404 } -.syntaxhl .key { color: #606 } -.syntaxhl .keyword { color:#080; font-weight:bold } -.syntaxhl .label { color:#970; font-weight:bold } -.syntaxhl .local-variable { color:#963 } -.syntaxhl .namespace { color:#707; font-weight:bold } -.syntaxhl .octal { color:#40E } -.syntaxhl .operator { } -.syntaxhl .predefined { color:#369; font-weight:bold } -.syntaxhl .predefined-constant { color:#069 } -.syntaxhl .predefined-type { color:#0a5; font-weight:bold } -.syntaxhl .preprocessor { color:#579 } -.syntaxhl .pseudo-class { color:#00C; font-weight:bold } -.syntaxhl .regexp .content { color:#808 } -.syntaxhl .regexp .delimiter { color:#404 } -.syntaxhl .regexp .modifier { color:#C2C } -.syntaxhl .regexp { background-color:hsla(300,100%,50%,0.06); } -.syntaxhl .reserved { color:#080; font-weight:bold } -.syntaxhl .shell .content { color:#2B2 } -.syntaxhl .shell .delimiter { color:#161 } -.syntaxhl .shell { background-color:hsla(120,100%,50%,0.06); } -.syntaxhl .string .char { color: #b0b } -.syntaxhl .string .content { color: #D20 } -.syntaxhl .string .delimiter { color: #710 } -.syntaxhl .string .modifier { color: #E40 } -.syntaxhl .string { background-color:hsla(0,100%,50%,0.05); } -.syntaxhl .symbol .content { color:#A60 } -.syntaxhl .symbol .delimiter { color:#630 } -.syntaxhl .symbol { color:#A60 } -.syntaxhl .tag { color:#070 } -.syntaxhl .type { color:#339; font-weight:bold } -.syntaxhl .value { color: #088; } -.syntaxhl .variable { color:#037 } +.syntaxhl .line-numbers { + padding: 2px 4px 2px 4px; + background-color: #eee; + margin: 0 7px 0 0; +} -.syntaxhl .insert { background: hsla(120,100%,50%,0.12) } -.syntaxhl .delete { background: hsla(0,100%,50%,0.12) } -.syntaxhl .change { color: #bbf; background: #007; } -.syntaxhl .head { color: #f8f; background: #505 } -.syntaxhl .head .filename { color: white; } +.syntaxhl .code pre { + overflow: auto; +} -.syntaxhl .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; } -.syntaxhl .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; } +.syntaxhl .debug { + color: white ! important; + background: blue ! important; +} -.syntaxhl .insert .insert { color: #0c0; background:transparent; font-weight:bold } -.syntaxhl .delete .delete { color: #c00; background:transparent; font-weight:bold } -.syntaxhl .change .change { color: #88f } -.syntaxhl .head .head { color: #f4f } +.syntaxhl .annotation { + color: #007; +} + +.syntaxhl .attribute-name { + color: #b48; +} + +.syntaxhl .attribute-value { + color: #700; +} + +.syntaxhl .binary { + color: #509; +} + +.syntaxhl .char .content { + color: #D20; +} + +.syntaxhl .char .delimiter { + color: #710; +} + +.syntaxhl .char { + color: #D20; +} + +.syntaxhl .class { + color: #B06; + font-weight: bold; +} + +.syntaxhl .class-variable { + color: #369; +} + +.syntaxhl .color { + color: #0A0; +} + +.syntaxhl .comment { + color: #777; +} + +.syntaxhl .comment .char { + color: #444; +} + +.syntaxhl .comment .delimiter { + color: #444; +} + +.syntaxhl .complex { + color: #A08; +} + +.syntaxhl .constant { + color: #036; + font-weight: bold; +} + +.syntaxhl .decorator { + color: #B0B; +} + +.syntaxhl .definition { + color: #099; + font-weight: bold; +} + +.syntaxhl .delimiter { + color: black; +} + +.syntaxhl .directive { + color: #088; + font-weight: bold; +} + +.syntaxhl .doc { + color: #970; +} + +.syntaxhl .doc-string { + color: #D42; + font-weight: bold; +} + +.syntaxhl .doctype { + color: #34b; +} + +.syntaxhl .entity { + color: #800; + font-weight: bold; +} + +.syntaxhl .error { + color: #F00; + background-color: #FAA; +} + +.syntaxhl .escape { + color: #666; +} + +.syntaxhl .exception { + color: #C00; + font-weight: bold; +} + +.syntaxhl .float { + color: #60E; +} + +.syntaxhl .function { + color: #06B; + font-weight: bold; +} + +.syntaxhl .global-variable { + color: #d70; +} + +.syntaxhl .hex { + color: #02b; +} + +.syntaxhl .imaginary { + color: #f00; +} + +.syntaxhl .include { + color: #B44; + font-weight: bold; +} + +.syntaxhl .inline { + background-color: hsla(0,0%,0%,0.07); + color: black; +} + +.syntaxhl .inline-delimiter { + font-weight: bold; + color: #666; +} + +.syntaxhl .instance-variable { + color: #33B; +} + +.syntaxhl .integer { + color: #00D; +} + +.syntaxhl .key .char { + color: #60f; +} + +.syntaxhl .key .delimiter { + color: #404; +} + +.syntaxhl .key { + color: #606; +} + +.syntaxhl .keyword { + color: #080; + font-weight: bold; +} + +.syntaxhl .label { + color: #970; + font-weight: bold; +} + +.syntaxhl .local-variable { + color: #963; +} + +.syntaxhl .namespace { + color: #707; + font-weight: bold; +} + +.syntaxhl .octal { + color: #40E; +} + +.syntaxhl .operator { +} + +.syntaxhl .predefined { + color: #369; + font-weight: bold; +} + +.syntaxhl .predefined-constant { + color: #069; +} + +.syntaxhl .predefined-type { + color: #0a5; + font-weight: bold; +} + +.syntaxhl .preprocessor { + color: #579; +} + +.syntaxhl .pseudo-class { + color: #00C; + font-weight: bold; +} + +.syntaxhl .regexp .content { + color: #808; +} + +.syntaxhl .regexp .delimiter { + color: #404; +} + +.syntaxhl .regexp .modifier { + color: #C2C; +} + +.syntaxhl .regexp { + background-color: hsla(300,100%,50%,0.06); +} + +.syntaxhl .reserved { + color: #080; + font-weight: bold; +} + +.syntaxhl .shell .content { + color: #2B2; +} + +.syntaxhl .shell .delimiter { + color: #161; +} + +.syntaxhl .shell { + background-color: hsla(120,100%,50%,0.06); +} + +.syntaxhl .string .char { + color: #b0b; +} + +.syntaxhl .string .content { + color: #D20; +} + +.syntaxhl .string .delimiter { + color: #710; +} + +.syntaxhl .string .modifier { + color: #E40; +} + +.syntaxhl .string { + background-color: hsla(0,100%,50%,0.05); +} + +.syntaxhl .symbol .content { + color: #A60; +} + +.syntaxhl .symbol .delimiter { + color: #630; +} + +.syntaxhl .symbol { + color: #A60; +} + +.syntaxhl .tag { + color: #070; +} + +.syntaxhl .type { + color: #339; + font-weight: bold; +} + +.syntaxhl .value { + color: #088; +} + +.syntaxhl .variable { + color: #037; +} + +.syntaxhl .insert { + background: hsla(120,100%,50%,0.12); +} + +.syntaxhl .delete { + background: hsla(0,100%,50%,0.12); +} + +.syntaxhl .change { + color: #bbf; + background: #007; +} + +.syntaxhl .head { + color: #f8f; + background: #505; +} + +.syntaxhl .head .filename { + color: white; +} + +.syntaxhl .delete .eyecatcher { + background-color: hsla(0,100%,50%,0.2); + border: 1px solid hsla(0,100%,45%,0.5); + margin: -1px; + border-bottom: none; + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} + +.syntaxhl .insert .eyecatcher { + background-color: hsla(120,100%,50%,0.2); + border: 1px solid hsla(120,100%,25%,0.5); + margin: -1px; + border-top: none; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} + +.syntaxhl .insert .insert { + color: #0c0; + background: transparent; + font-weight: bold; +} + +.syntaxhl .delete .delete { + color: #c00; + background: transparent; + font-weight: bold; +} + +.syntaxhl .change .change { + color: #88f; +} + +.syntaxhl .head .head { + color: #f4f; +} From a43c06ff773dfda2453b2bd278b8aae47123d62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Fri, 25 May 2012 13:37:11 +0200 Subject: [PATCH 33/55] Don't depend on DB ordering in journal_test And add all fixtures needed to run the test on its own. --- test/unit/journal_test.rb | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/test/unit/journal_test.rb b/test/unit/journal_test.rb index b36bfbf1..d014e09a 100644 --- a/test/unit/journal_test.rb +++ b/test/unit/journal_test.rb @@ -14,7 +14,9 @@ require File.expand_path('../../test_helper', __FILE__) class JournalTest < ActiveSupport::TestCase - fixtures :issues, :issue_statuses, :journals, :enumerations + fixtures :issues, :issue_statuses, :journals, :enumerations,\ + :users, :trackers, :projects, :members, :member_roles, :roles,\ + :enabled_modules def setup @journal = IssueJournal.find(1) @@ -35,23 +37,17 @@ class JournalTest < ActiveSupport::TestCase def test_create_should_send_email_notification ActionMailer::Base.deliveries.clear - issue = Issue.find(:first) - if issue.journals.empty? - issue.init_journal(User.current, "This journal represents the creationa of journal version 1") - issue.save - end - user = User.find(:first) + issue = issues :issues_001 assert_equal 0, ActionMailer::Base.deliveries.size - issue.reload issue.update_attribute(:subject, "New subject to trigger automatic journal entry") assert_equal 2, ActionMailer::Base.deliveries.size end def test_create_should_not_send_email_notification_if_told_not_to ActionMailer::Base.deliveries.clear - issue = Issue.find(:first) - user = User.find(:first) + issue = issues :issues_001 + user = users :users_001 journal = issue.init_journal(user, "A note") JournalObserver.instance.send_notification = false From 8ab42473d942f2279f1358703446b88e9bc3a7a6 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Fri, 1 Jun 2012 20:56:09 +0200 Subject: [PATCH 34/55] [#1025] Fix Rails vulnerability (CVE-2012-2660) --- config/initializers/10-patches.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb index 697d2736..d533efbc 100644 --- a/config/initializers/10-patches.rb +++ b/config/initializers/10-patches.rb @@ -115,4 +115,32 @@ module ActionController end end end + + # Backported fix for CVE-2012-2660 + # https://groups.google.com/group/rubyonrails-security/browse_thread/thread/f1203e3376acec0f + # TODO: Remove this once we are on Rails >= 3.2.4 + require 'action_controller/request' + class Request + protected + + # Remove nils from the params hash + def deep_munge(hash) + hash.each_value do |v| + case v + when Array + v.grep(Hash) { |x| deep_munge(x) } + when Hash + deep_munge(v) + end + end + + keys = hash.keys.find_all { |k| hash[k] == [nil] } + keys.each { |k| hash[k] = nil } + hash + end + + def parse_query(qs) + deep_munge(super) + end + end end From c8be011a937ac4bcc584d7dfa45f35bd69ace4a8 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Fri, 1 Jun 2012 23:31:03 +1000 Subject: [PATCH 35/55] Correct major logic issues when selecting multiple rows. The rows were being incorrectly selected (because the class name had a missing '.'). jQuery items can't be directly compared to each other so we need to get the HTML element to test if they are the same. --- public/javascripts/context_menu.jquery.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/public/javascripts/context_menu.jquery.js b/public/javascripts/context_menu.jquery.js index 4ae3abb3..ee38c277 100644 --- a/public/javascripts/context_menu.jquery.js +++ b/public/javascripts/context_menu.jquery.js @@ -69,18 +69,17 @@ if (lastSelected !== null) { var toggling = false; - var rows = $(selectorName); - for (i = 0; i < rows.length; i++) - { - if (toggling || rows[i] == tr) - { - methods.addSelection(rows[i]); + var rows = $('.' + selectorName); + rows.each(function() { + var self = $(this); + if(toggling || (self.get(0) == tr.get(0))) { + methods.addSelection(self); } - if (rows[i] == tr || rows[i] == lastSelected) - { + if(((self.get(0) == tr.get(0)) || (self.get(0) == lastSelected.get(0))) + && (tr.get(0) !== lastSelected.get(0))) { toggling = !toggling; } - } + }); } else { methods.addSelection(tr); } From 7c1b17509f8937daf846b92c48771cba310029c4 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Fri, 1 Jun 2012 23:32:54 +1000 Subject: [PATCH 36/55] Clear the document selection when selecting multiple rows. --- public/javascripts/context_menu.jquery.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/javascripts/context_menu.jquery.js b/public/javascripts/context_menu.jquery.js index ee38c277..13e09c33 100644 --- a/public/javascripts/context_menu.jquery.js +++ b/public/javascripts/context_menu.jquery.js @@ -174,6 +174,7 @@ addSelection: function(element) { element.addClass(contextMenuSelectionClass); methods.checkSelectionBox(element, true); + methods.clearDocumentSelection(); }, isSelected: function(element) { return element.hasClass(contextMenuSelectionClass); @@ -208,6 +209,13 @@ methods.addSelection(self); } }); + }, + clearDocumentSelection: function() { + if(document.selection) { + document.selection.clear(); + } else { + window.getSelection().removeAllRanges(); + } } }; From 4956e9ca9339be67e57145e9ee8718bd3cd9a412 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Tue, 22 May 2012 06:33:13 +0100 Subject: [PATCH 37/55] Limit the size of the projects dropdown menu. #1016 --- public/javascripts/application.js | 7 +++++++ public/stylesheets/application.css | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 9b25ddad..3ce6ec16 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -571,6 +571,13 @@ jQuery(document).ready(function($) { // Click on the menu header with a dropdown menu $('#account-nav .drop-down').live('click', function(event) { var menuItem = $(this); + var menuUl = menuItem.find('> ul'); + + menuUl.css('height', 'auto'); + if(menuUl.height() > $.viewportHeight()) { + var windowHeight = $.viewportHeight() - 150; + menuUl.css({'height': windowHeight}); + } toggleTopMenu(menuItem); diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 57ce40f2..0d7d499b 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -2797,6 +2797,17 @@ input: -moz-placeholder { border: 1px solid #b7b7b7; border-top: 0px; background-color: #FFFFFF; + display:none; + position:absolute; + height:auto; + min-width:200px; + left:-1px; + z-index:20; + border: 1px solid #b7b7b7; + border-top: 0px; + background-color:#FFFFFF; + overflow: hidden; + overflow-y: auto; } #header li.last-child > ul { @@ -2826,6 +2837,7 @@ input: -moz-placeholder { margin-right: 6px; height: 15px; line-height: 15px; + overflow: hidden; } #header li.drop-down li > a.separator { From 1722e96bb01feb13139e4be095c034e90dfadbbe Mon Sep 17 00:00:00 2001 From: Justin Geibel Date: Sat, 3 Dec 2011 17:01:01 -0500 Subject: [PATCH 38/55] Change default branch behaviour for git repos #749 If git repository HEAD points to a branch, use that as the default branch. Otherwise fall back to previous method. --- lib/redmine/scm/adapters/git_adapter.rb | 7 +++++++ test/unit/lib/redmine/scm/adapters/git_adapter_test.rb | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb index 8f3008df..e1932da7 100644 --- a/lib/redmine/scm/adapters/git_adapter.rb +++ b/lib/redmine/scm/adapters/git_adapter.rb @@ -100,6 +100,13 @@ module Redmine def default_branch bras = self.branches return nil if bras.nil? + head = nil + scm_cmd('symbolic-ref', 'HEAD') do |io| + head = io.readline + end + /^refs\/heads\/(.*)$/.match(head) + bras.include?($1) ? $1 : bras.first + rescue ScmCommandAborted, EOFError bras.include?('master') ? 'master' : bras.first end diff --git a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb index acee7b90..15724417 100644 --- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb @@ -231,6 +231,13 @@ begin end end + def test_default_branch + @adapter.send :scm_cmd, 'branch', '-m', 'master', 'non-master-default-branch' + assert_equal 'non-master-default-branch', @adapter.default_branch + ensure + @adapter.send :scm_cmd, 'branch', '-m', 'non-master-default-branch', 'master' + end + private def test_scm_version_for(scm_command_version, version) From d6ad07ee978a75547e0e1998f5ca0314963618e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Tue, 5 Jun 2012 15:58:38 +0200 Subject: [PATCH 39/55] Refine some apt-get commands in Travis * Remove the update, the Travis VMs should be up-to-date enough for us * Remove the quiets so we can see errors if needed --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f1a152d6..87359bb3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,8 +15,7 @@ matrix: - rvm: 1.9.3 env: "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" before_script: - - "sudo apt-get -qq update" - - "sudo apt-get -qq --no-install-recommends install bzr cvs darcs git mercurial subversion" + - "sudo apt-get --no-install-recommends install bzr cvs darcs git mercurial subversion" - "rake ci:travis:prepare" branches: only: From 69656422a1d189e0405bf6e65d2907fcc85e8076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 2 Jun 2012 14:18:43 +0200 Subject: [PATCH 40/55] Test ChiliProject on rubinius on Travis rubinius 1.9-mode won't load liquid currently: https://github.com/Shopify/liquid/pull/107 --- .gitignore | 1 + .travis.yml | 5 +++++ Gemfile | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 2b276861..366534de 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ doc/app /.rvmrc* /*.iml /.idea +.rbx diff --git a/.travis.yml b/.travis.yml index 87359bb3..cd39a758 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ rvm: - 1.8.7 - 1.9.2 - 1.9.3 + - rbx-18mode env: - "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" - "RAILS_ENV=test DB=mysql2 BUNDLE_WITHOUT=rmagick:mysql:postgres:sqlite" @@ -14,6 +15,10 @@ matrix: env: "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" - rvm: 1.9.3 env: "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" + - rvm: rbx-18mode + env: "RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite" + allow_failures: + - rvm: rbx-18mode before_script: - "sudo apt-get --no-install-recommends install bzr cvs darcs git mercurial subversion" - "rake ci:travis:prepare" diff --git a/Gemfile b/Gemfile index f6c804d1..9b93963b 100644 --- a/Gemfile +++ b/Gemfile @@ -54,7 +54,7 @@ end # orders of magnitude compared to their native counterparts. You have been # warned. -platforms :mri, :mingw do +platforms :mri, :mingw, :rbx do group :mysql2 do gem "mysql2", "~> 0.2.7" end @@ -76,7 +76,7 @@ platforms :mri_18, :mingw_18 do end end -platforms :mri_19, :mingw_19 do +platforms :mri_19, :mingw_19, :rbx do group :sqlite do gem "sqlite3" end From 3997220a45054d99c34b5c6e587c3cb488525861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 9 Jun 2012 12:02:54 +0200 Subject: [PATCH 41/55] Add IRC notifications to the Travis config --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index cd39a758..abc95cb9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,3 +29,4 @@ branches: - stable notifications: email: false + irc: "irc.freenode.org#chiliproject" From 32e1cc2deea5591605d7c8df80d730a66d280c2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 9 Jun 2012 09:41:23 +0200 Subject: [PATCH 42/55] Don't test transaction-based features on SQLite SQLite doesn't support nested transactions, thus we can't test transaction-based features inside a test wrapped in a transaction. --- test/functional/project_enumerations_controller_test.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/functional/project_enumerations_controller_test.rb b/test/functional/project_enumerations_controller_test.rb index 5da7ed24..6514f457 100644 --- a/test/functional/project_enumerations_controller_test.rb +++ b/test/functional/project_enumerations_controller_test.rb @@ -131,6 +131,10 @@ class ProjectEnumerationsControllerTest < ActionController::TestCase end def test_update_when_creating_new_activities_will_not_convert_existing_data_if_an_exception_is_raised + # SQLite doesn't support nested transactions, thus we can't test transaction- + # based features in a test wrapped in a transaction. + return if ChiliProject::Database.sqlite? + # TODO: Need to cause an exception on create but these tests # aren't setup for mocking. Just create a record now so the # second one is a dupicate From 1f91054244cb076d27c8b03145a34c2c2a4d5bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 9 Jun 2012 10:47:32 +0200 Subject: [PATCH 43/55] Switch from vendored gravatar lib to gravatarify gem #1033 --- Gemfile | 1 + app/helpers/application_helper.rb | 12 ++- vendor/plugins/gravatar/.gitignore | 1 - vendor/plugins/gravatar/MIT-LICENSE | 20 ----- vendor/plugins/gravatar/README.rdoc | 55 ------------ vendor/plugins/gravatar/Rakefile | 32 ------- vendor/plugins/gravatar/about.yml | 7 -- vendor/plugins/gravatar/init.rb | 3 - vendor/plugins/gravatar/lib/gravatar.rb | 89 ------------------- vendor/plugins/gravatar/spec/gravatar_spec.rb | 44 --------- 10 files changed, 12 insertions(+), 252 deletions(-) delete mode 100644 vendor/plugins/gravatar/.gitignore delete mode 100644 vendor/plugins/gravatar/MIT-LICENSE delete mode 100644 vendor/plugins/gravatar/README.rdoc delete mode 100644 vendor/plugins/gravatar/Rakefile delete mode 100644 vendor/plugins/gravatar/about.yml delete mode 100644 vendor/plugins/gravatar/init.rb delete mode 100644 vendor/plugins/gravatar/lib/gravatar.rb delete mode 100644 vendor/plugins/gravatar/spec/gravatar_spec.rb diff --git a/Gemfile b/Gemfile index 9b93963b..6979c65c 100644 --- a/Gemfile +++ b/Gemfile @@ -9,6 +9,7 @@ gem "rubytree", "~> 0.5.2", :require => 'tree' gem "rdoc", ">= 2.4.2" gem "liquid", "~> 2.3.0" gem "acts-as-taggable-on", "= 2.1.0" +gem 'gravatarify', '~> 3.0.0' # Needed only on RUBY_VERSION = 1.8, ruby 1.9+ compatible interpreters should bring their csv gem "fastercsv", "~> 1.5.0", :platforms => [:ruby_18, :jruby, :mingw_18] gem "tzinfo", "~> 0.3.31" # Fixes #903. Not required for Rails >= 3.2 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 3528957c..3cfc5628 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -17,7 +17,7 @@ require 'cgi' module ApplicationHelper include Redmine::I18n - include GravatarHelper::PublicMethods + include Gravatarify::Helper extend Forwardable def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter @@ -954,6 +954,16 @@ module ApplicationHelper (@has_content && @has_content[name]) || false end + # Returns the gravatar image tag for the given email + # +email+ is a string with an email address + def gravatar(email, options={}) + gravatarify_options = {} + gravatarify_options[:secure] = options.delete :ssl + [:default, :size, :rating, :filetype].each {|key| gravatarify_options[:key] = options.delete :key} + gravatarify_options[:html] = options + gravatar_tag email, gravatarify_options + end + # Returns the avatar image tag for the given +user+ if avatars are enabled # +user+ can be a User or a string that will be scanned for an email address (eg. 'joe ') def avatar(user, options = { }) diff --git a/vendor/plugins/gravatar/.gitignore b/vendor/plugins/gravatar/.gitignore deleted file mode 100644 index 4ebc8aea..00000000 --- a/vendor/plugins/gravatar/.gitignore +++ /dev/null @@ -1 +0,0 @@ -coverage diff --git a/vendor/plugins/gravatar/MIT-LICENSE b/vendor/plugins/gravatar/MIT-LICENSE deleted file mode 100644 index 6a222ac4..00000000 --- a/vendor/plugins/gravatar/MIT-LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2007 West Arete Computing, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/plugins/gravatar/README.rdoc b/vendor/plugins/gravatar/README.rdoc deleted file mode 100644 index 0b95e85e..00000000 --- a/vendor/plugins/gravatar/README.rdoc +++ /dev/null @@ -1,55 +0,0 @@ -== Gravatar Plugin - -This plugin provides a handful of view helpers for displaying gravatars -(globally-recognized avatars). - -Gravatars allow users to configure an avatar to go with their email address at -a central location: http://gravatar.com. Gravatar-aware websites (such -as yours) can then look up and display each user's preferred avatar, without -having to handle avatar management. The user gets the benefit of not having to -set up an avatar for each site that they post on. - -== Installation - - cd ~/myapp - ruby script/plugin install git://github.com/woods/gravatar-plugin.git - -or, if you're using piston[http://piston.rubyforge.org] (worth it!): - - cd ~/myapp/vendor/plugins - piston import git://github.com/woods/gravatar-plugin.git - -== Example - -If you represent your users with a model that has an +email+ method (typical -for most rails authentication setups), then you can simply use this method -in your views: - - <%= gravatar_for @user %> - -This will be replaced with the full HTML +img+ tag necessary for displaying -that user's gravatar. - -Other helpers are documented under GravatarHelper::PublicMethods. - -== Acknowledgments - -Thanks to Magnus Bergmark (http://github.com/Mange), who contributed the SSL -support in this plugin, as well as a few minor fixes. - -The following people have also written gravatar-related Ruby libraries: -* Seth Rasmussen created the gravatar gem[http://gravatar.rubyforge.org] -* Matt McCray has also created a gravatar - plugin[http://mattmccray.com/svn/rails/plugins/gravatar_helper] - -== Author - - Scott A. Woods - West Arete Computing, Inc. - http://westarete.com - scott at westarete dot com - -== TODO - -* Add specs for ssl support -* Finish rdoc documentation \ No newline at end of file diff --git a/vendor/plugins/gravatar/Rakefile b/vendor/plugins/gravatar/Rakefile deleted file mode 100644 index e67e5e7f..00000000 --- a/vendor/plugins/gravatar/Rakefile +++ /dev/null @@ -1,32 +0,0 @@ -require 'spec/rake/spectask' -require 'rake/rdoctask' - -desc 'Default: run all specs' -task :default => :spec - -desc 'Run all application-specific specs' -Spec::Rake::SpecTask.new(:spec) do |t| - # t.rcov = true -end - -desc "Report code statistics (KLOCs, etc) from the application" -task :stats do - RAILS_ROOT = File.dirname(__FILE__) - STATS_DIRECTORIES = [ - %w(Libraries lib/), - %w(Specs spec/), - ].collect { |name, dir| [ name, "#{RAILS_ROOT}/#{dir}" ] }.select { |name, dir| File.directory?(dir) } - require 'code_statistics' - CodeStatistics.new(*STATS_DIRECTORIES).to_s -end - -namespace :doc do - desc 'Generate documentation for the assert_request plugin.' - Rake::RDocTask.new(:plugin) do |rdoc| - rdoc.rdoc_dir = 'rdoc' - rdoc.title = 'Gravatar Rails Plugin' - rdoc.options << '--line-numbers' << '--inline-source' << '--accessor' << 'cattr_accessor=rw' - rdoc.rdoc_files.include('README') - rdoc.rdoc_files.include('lib/**/*.rb') - end -end diff --git a/vendor/plugins/gravatar/about.yml b/vendor/plugins/gravatar/about.yml deleted file mode 100644 index aa5b8b19..00000000 --- a/vendor/plugins/gravatar/about.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Scott Woods, West Arete Computing -summary: View helpers for displaying gravatars. -homepage: http://github.com/woods/gravatar-plugin/ -plugin: git://github.com/woods/gravatar-plugin.git -license: MIT -version: 0.1 -rails_version: 1.0+ diff --git a/vendor/plugins/gravatar/init.rb b/vendor/plugins/gravatar/init.rb deleted file mode 100644 index 3336c81c..00000000 --- a/vendor/plugins/gravatar/init.rb +++ /dev/null @@ -1,3 +0,0 @@ -#-- encoding: UTF-8 -require 'gravatar' -ActionView::Base.send :include, GravatarHelper::PublicMethods diff --git a/vendor/plugins/gravatar/lib/gravatar.rb b/vendor/plugins/gravatar/lib/gravatar.rb deleted file mode 100644 index 80fe9bf8..00000000 --- a/vendor/plugins/gravatar/lib/gravatar.rb +++ /dev/null @@ -1,89 +0,0 @@ -#-- encoding: UTF-8 -require 'digest/md5' -require 'cgi' - -module GravatarHelper - - # These are the options that control the default behavior of the public - # methods. They can be overridden during the actual call to the helper, - # or you can set them in your environment.rb as such: - # - # # Allow racier gravatars - # GravatarHelper::DEFAULT_OPTIONS[:rating] = 'R' - # - DEFAULT_OPTIONS = { - # The URL of a default image to display if the given email address does - # not have a gravatar. - :default => nil, - - # The default size in pixels for the gravatar image (they're square). - :size => 50, - - # The maximum allowed MPAA rating for gravatars. This allows you to - # exclude gravatars that may be out of character for your site. - :rating => 'PG', - - # The alt text to use in the img tag for the gravatar. Since it's a - # decorational picture, the alt text should be empty according to the - # XHTML specs. - :alt => '', - - # The title text to use for the img tag for the gravatar. - :title => '', - - # The class to assign to the img tag for the gravatar. - :class => 'gravatar', - - # Whether or not to display the gravatars using HTTPS instead of HTTP - :ssl => false, - } - - # The methods that will be made available to your views. - module PublicMethods - - # Return the HTML img tag for the given user's gravatar. Presumes that - # the given user object will respond_to "email", and return the user's - # email address. - def gravatar_for(user, options={}) - gravatar(user.email, options) - end - - # Return the HTML img tag for the given email address's gravatar. - def gravatar(email, options={}) - src = h(gravatar_url(email, options)) - options = DEFAULT_OPTIONS.merge(options) - [:class, :alt, :size, :title].each { |opt| options[opt] = h(options[opt]) } - "\"#{options[:alt]}\"" - end - - # Returns the base Gravatar URL for the given email hash. If ssl evaluates to true, - # a secure URL will be used instead. This is required when the gravatar is to be - # displayed on a HTTPS site. - def gravatar_api_url(hash, ssl=false) - if ssl - "https://secure.gravatar.com/avatar/#{hash}" - else - "http://www.gravatar.com/avatar/#{hash}" - end - end - - # Return the gravatar URL for the given email address. - def gravatar_url(email, options={}) - email_hash = Digest::MD5.hexdigest(email) - options = DEFAULT_OPTIONS.merge(options) - options[:default] = CGI::escape(options[:default]) unless options[:default].nil? - gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url| - opts = [] - [:rating, :size, :default].each do |opt| - unless options[opt].nil? - value = h(options[opt]) - opts << [opt, value].join('=') - end - end - url << "?#{opts.join('&')}" unless opts.empty? - end - end - - end - -end diff --git a/vendor/plugins/gravatar/spec/gravatar_spec.rb b/vendor/plugins/gravatar/spec/gravatar_spec.rb deleted file mode 100644 index 4ccfa0e5..00000000 --- a/vendor/plugins/gravatar/spec/gravatar_spec.rb +++ /dev/null @@ -1,44 +0,0 @@ -#-- encoding: UTF-8 -require 'rubygems' -require 'erb' # to get "h" -require 'active_support' # to get "returning" -require File.dirname(__FILE__) + '/../lib/gravatar' -include GravatarHelper, GravatarHelper::PublicMethods, ERB::Util - -describe "gravatar_url with a custom default URL" do - before(:each) do - @original_options = DEFAULT_OPTIONS.dup - DEFAULT_OPTIONS[:default] = "no_avatar.png" - @url = gravatar_url("somewhere") - end - - it "should include the \"default\" argument in the result" do - @url.should match(/&default=no_avatar.png/) - end - - after(:each) do - DEFAULT_OPTIONS.merge!(@original_options) - end - -end - -describe "gravatar_url with default settings" do - before(:each) do - @url = gravatar_url("somewhere") - end - - it "should have a nil default URL" do - DEFAULT_OPTIONS[:default].should be_nil - end - - it "should not include the \"default\" argument in the result" do - @url.should_not match(/&default=/) - end - -end - -describe "gravatar with a custom title option" do - it "should include the title in the result" do - gravatar('example@example.com', :title => "This is a title attribute").should match(/This is a title attribute/) - end -end From d11e074748357ded8e2196fbfe66cb5e6a349dd1 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Sat, 9 Jun 2012 17:52:37 +0200 Subject: [PATCH 44/55] Fix trailing whitespace --- config/locales/sv.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/sv.yml b/config/locales/sv.yml index ece40f13..cef757b7 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1,7 +1,7 @@ # Swedish translation for Ruby on Rails and ChiliProject # by Johan Lundström (johanlunds@gmail.com), # with parts taken from http://github.com/daniel/swe_rails -# +# # contributor: Björn Blissing sv: @@ -988,7 +988,7 @@ sv: text_display_subprojects: Visa underprojekt text_current_project: Nuvarande project text_mail_handler_confirmation_successful: "Din e-post har framgångsrikt lagts till på följande webbadress" - + default_role_manager: Projektledare default_role_developer: Utvecklare default_role_reporter: Rapportör From bcb02a46342c662f4fc8a017c8674ab04223a205 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Sat, 9 Jun 2012 17:56:21 +0200 Subject: [PATCH 45/55] Update Changelog for v3.2.0 --- doc/CHANGELOG.rdoc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/doc/CHANGELOG.rdoc b/doc/CHANGELOG.rdoc index b981d2af..74ffb3ae 100644 --- a/doc/CHANGELOG.rdoc +++ b/doc/CHANGELOG.rdoc @@ -1,5 +1,32 @@ = ChiliProject Changelog +== 2012-06-09 v3.2.0 + +* Bug #844: Set autocomplete=off for some fields in Registration form +* Bug #863: missing journals fixture at test/unit/issue_test.rb +* Bug #950: jQuery AJAX requests don't include CSRF token +* Bug #966: "edit own notes" fails since 3.1.0 +* Bug #967: Menu - Missing translations (French) +* Bug #968: Forum threads aren't always displaying "Last Message" +* Bug #969: Forum URLs in the menu are missing the project_id +* Bug #970: Long version titles extend outside the group menu when expanding Roadmap +* Bug #974: menu link broken in duplicate issue mode +* Bug #975: Start Date is not saved for Versions +* Bug #984: Cannot unlock a forum thread +* Bug #986: Notification Mail for Wiki-Changes doesn't contain change comment +* Bug #994: select all in issue list isn't working +* Bug #1007: Right clicking on item in roadmap displays menu at incorrect position +* Bug #1008: error 500 when uploading a new file to an existing document +* Bug #1024: Select multiple issues with shift key in issue list +* Bug #1025: Rails: Unsafe Query Generation Risk in Ruby on Rails (CVE-2012-2660) +* Bug #1033: Replace vendored gravatar lib by gem +* Feature #749: Git Integration: Property Main Branch +* Feature #947: Reformat the CSS files to use a standard +* Feature #983: Bulgarian translation of several strings +* Feature #988: Swedish translation of several strings +* Feature #1016: Limit height of project drop down menu +* Task #982: Updated czech localization for chiliproject 3.1 + == 2012-04-04 v3.1.0 * Bug #739: Relative textile links not converted to full URLs in emails From bd132c5607715cfeb3ad48c97ab3b714aa0dc280 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Sat, 9 Jun 2012 17:59:06 +0200 Subject: [PATCH 46/55] Bump version to 3.2.0 --- lib/chili_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chili_project/version.rb b/lib/chili_project/version.rb index 1808f31c..ab4d8f98 100644 --- a/lib/chili_project/version.rb +++ b/lib/chili_project/version.rb @@ -18,7 +18,7 @@ module ChiliProject module VERSION #:nodoc: MAJOR = 3 - MINOR = 1 + MINOR = 2 PATCH = 0 TINY = PATCH # Redmine compat From f8ec89b9998398b54800e1f244fa40f4b25951d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sat, 9 Jun 2012 19:02:18 +0200 Subject: [PATCH 47/55] Test stable- and release- branches on Travis too --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index abc95cb9..be952ece 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,6 +27,8 @@ branches: - unstable - master - stable + - /^stable-.*$/ + - /^release-.*$/ notifications: email: false irc: "irc.freenode.org#chiliproject" From 5ef63ec4bb722b19310b371309aac6b088a5ffd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sun, 10 Jun 2012 19:42:52 +0200 Subject: [PATCH 48/55] Fix option parsing for gravatars #1034 In addition to that: * the default size was 50px in the old lib, this has been restored * some tests to test the default and option parsing --- app/helpers/application_helper.rb | 4 +++- test/unit/helpers/application_helper_test.rb | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 3cfc5628..80a8a50d 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -959,7 +959,9 @@ module ApplicationHelper def gravatar(email, options={}) gravatarify_options = {} gravatarify_options[:secure] = options.delete :ssl - [:default, :size, :rating, :filetype].each {|key| gravatarify_options[:key] = options.delete :key} + [:default, :size, :rating, :filetype].each {|key| gravatarify_options[key] = options.delete key} + # Default size is 50x50 px + gravatarify_options[:size] ||= 50 gravatarify_options[:html] = options gravatar_tag email, gravatarify_options end diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index 8c9af006..00985c3c 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -664,6 +664,11 @@ RAW Setting.gravatar_enabled = '1' assert avatar(User.find_by_mail('jsmith@somenet.foo')).include?(Digest::MD5.hexdigest('jsmith@somenet.foo')) assert avatar('jsmith ').include?(Digest::MD5.hexdigest('jsmith@somenet.foo')) + # Default size is 50 + assert avatar('jsmith ').include?('s=50') + assert avatar('jsmith ', :size => 24).include?('s=24') + # Non-avatar options should be considered html options + assert avatar('jsmith ', :title => 'John Smith').include?('title="John Smith"') assert_nil avatar('jsmith') assert_nil avatar(nil) From caceb58947a87ee59dddafb9fa0efff95a2200e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= Date: Sun, 10 Jun 2012 20:34:23 +0200 Subject: [PATCH 49/55] Restore the default class for gravatars #1034 --- app/helpers/application_helper.rb | 1 + test/unit/helpers/application_helper_test.rb | 3 +++ 2 files changed, 4 insertions(+) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 80a8a50d..2ecf9671 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -962,6 +962,7 @@ module ApplicationHelper [:default, :size, :rating, :filetype].each {|key| gravatarify_options[key] = options.delete key} # Default size is 50x50 px gravatarify_options[:size] ||= 50 + options[:class] ||= 'gravatar' gravatarify_options[:html] = options gravatar_tag email, gravatarify_options end diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index 00985c3c..b964b85d 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -669,6 +669,9 @@ RAW assert avatar('jsmith ', :size => 24).include?('s=24') # Non-avatar options should be considered html options assert avatar('jsmith ', :title => 'John Smith').include?('title="John Smith"') + # The default class of the img tag should be gravatar + assert avatar('jsmith ').include?('class="gravatar"') + assert !avatar('jsmith ', :class => 'picture').include?('class="gravatar"') assert_nil avatar('jsmith') assert_nil avatar(nil) From 8e41daf92afa9da1edd136fb40f0551b86603d6c Mon Sep 17 00:00:00 2001 From: Holger Just Date: Sun, 10 Jun 2012 20:07:36 +0200 Subject: [PATCH 50/55] Update changelog for v3.2.1 --- doc/CHANGELOG.rdoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/CHANGELOG.rdoc b/doc/CHANGELOG.rdoc index 74ffb3ae..8d5f4581 100644 --- a/doc/CHANGELOG.rdoc +++ b/doc/CHANGELOG.rdoc @@ -1,5 +1,9 @@ = ChiliProject Changelog +== 2012-06-10 v3.2.1 + +* Bug #1034: Gravatar + == 2012-06-09 v3.2.0 * Bug #844: Set autocomplete=off for some fields in Registration form From c9d141061d83b6fd6234bfcf8a24f81de4807499 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Sun, 10 Jun 2012 20:08:40 +0200 Subject: [PATCH 51/55] Bump version to v3.2.1 --- lib/chili_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chili_project/version.rb b/lib/chili_project/version.rb index ab4d8f98..40724554 100644 --- a/lib/chili_project/version.rb +++ b/lib/chili_project/version.rb @@ -19,7 +19,7 @@ module ChiliProject MAJOR = 3 MINOR = 2 - PATCH = 0 + PATCH = 1 TINY = PATCH # Redmine compat # Used by semver to define the special version (if any). From d629209364076a2c353de00c12d9373818895807 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 13 Jun 2012 09:29:39 +0200 Subject: [PATCH 52/55] Fix SQL injection via nested hashes in conditions (CVE-2012-2694) #1036 --- config/initializers/10-patches.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb index d533efbc..664bd528 100644 --- a/config/initializers/10-patches.rb +++ b/config/initializers/10-patches.rb @@ -116,26 +116,33 @@ module ActionController end end - # Backported fix for CVE-2012-2660 + # Backported fix for + # CVE-2012-2660 # https://groups.google.com/group/rubyonrails-security/browse_thread/thread/f1203e3376acec0f - # TODO: Remove this once we are on Rails >= 3.2.4 + # + # CVE-2012-2694 + # https://groups.google.com/group/rubyonrails-security/browse_thread/thread/8c82d9df8b401c5e + # + # TODO: Remove this once we are on Rails >= 3.2.6 require 'action_controller/request' class Request protected # Remove nils from the params hash def deep_munge(hash) + keys = hash.keys.find_all { |k| hash[k] == [nil] } + keys.each { |k| hash[k] = nil } + hash.each_value do |v| case v when Array v.grep(Hash) { |x| deep_munge(x) } + v.compact! when Hash deep_munge(v) end end - keys = hash.keys.find_all { |k| hash[k] == [nil] } - keys.each { |k| hash[k] = nil } hash end From 16e266e7e5e70092b3f33d163e09623f5cd43fbc Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 13 Jun 2012 10:12:10 +0200 Subject: [PATCH 53/55] Fix SQL injection via nested hashes in conditions. CVE-2012-2695 #1037 --- config/initializers/10-patches.rb | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb index 664bd528..e51e30d2 100644 --- a/config/initializers/10-patches.rb +++ b/config/initializers/10-patches.rb @@ -151,3 +151,42 @@ module ActionController end end end + +# Backported fix for CVE-2012-2695 +# https://groups.google.com/group/rubyonrails-security/browse_thread/thread/9782f44c4540cf59 +# TODO: Remove this once we are on Rails >= 3.2.6 +require 'active_record/base' +module ActiveRecord + class Base + class << self + def sanitize_sql_hash_for_conditions(attrs, default_table_name = quoted_table_name, top_level = true) + attrs = expand_hash_conditions_for_aggregates(attrs) + + conditions = attrs.map do |attr, value| + table_name = default_table_name + + if not value.is_a?(Hash) + attr = attr.to_s + + # Extract table name from qualified attribute names. + if attr.include?('.') and top_level + attr_table_name, attr = attr.split('.', 2) + attr_table_name = connection.quote_table_name(attr_table_name) + else + attr_table_name = table_name + end + + attribute_condition("#{attr_table_name}.#{connection.quote_column_name(attr)}", value) + elsif top_level + sanitize_sql_hash_for_conditions(value, connection.quote_table_name(attr.to_s), false) + else + raise ActiveRecord::StatementInvalid + end + end.join(' AND ') + + replace_bind_variables(conditions, expand_range_bind_variables(attrs.values)) + end + alias_method :sanitize_sql_hash, :sanitize_sql_hash_for_conditions + end + end +end From 4d9060964fb3f68facd2d83d9e4aaa724a505302 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 13 Jun 2012 10:25:18 +0200 Subject: [PATCH 54/55] Update changelog for v3.2.2 --- doc/CHANGELOG.rdoc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/CHANGELOG.rdoc b/doc/CHANGELOG.rdoc index 8d5f4581..e3d4610a 100644 --- a/doc/CHANGELOG.rdoc +++ b/doc/CHANGELOG.rdoc @@ -1,5 +1,10 @@ = ChiliProject Changelog +== 2012-06-13 v3.2.2 + +* Bug #1036: Ruby on Rails Unsafe Query Generation Risk in Ruby on Rails (CVE-2012-2694) +* Bug #1037: SQL Injection Vulnerability in Ruby on Rails (CVE-2012-2695) + == 2012-06-10 v3.2.1 * Bug #1034: Gravatar From 5c7a3a53c239494939986c49f4ac68c8d47e2ba2 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 13 Jun 2012 10:26:48 +0200 Subject: [PATCH 55/55] Bump version to 3.2.2 --- lib/chili_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chili_project/version.rb b/lib/chili_project/version.rb index 40724554..e7f94b7a 100644 --- a/lib/chili_project/version.rb +++ b/lib/chili_project/version.rb @@ -19,7 +19,7 @@ module ChiliProject MAJOR = 3 MINOR = 2 - PATCH = 1 + PATCH = 2 TINY = PATCH # Redmine compat # Used by semver to define the special version (if any).
<%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;', - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> + <%= link_to image_tag('toggle_check.png'), {}, :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> containing month days dates */ width: 2em; color: #456; text-align: right; padding: 2px 4px 2px 2px; } + div.calendar tbody .day.othermonth { font-size: 80%; color: #bbb; } + div.calendar tbody .day.othermonth.oweekend { color: #fbb; } @@ -125,7 +128,9 @@ div.calendar tbody td.today { /* Cell showing selected date */ color: #f00; } -div.calendar tbody .disabled { color: #999; } +div.calendar tbody .disabled { + color: #999; +} div.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; @@ -136,7 +141,6 @@ div.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) } /* The footer part -- status bar and "Close" button */ - div.calendar tfoot .footrow { /* The