Commit cd64d11e authored by Eric Davis's avatar Eric Davis

Merge branch 'master' into unstable

Conflicts:
	app/controllers/watchers_controller.rb
	app/views/issues/_action_menu.rhtml
	config/locales/pt-BR.yml
	doc/CHANGELOG.rdoc
	lib/redmine/export/pdf.rb
	lib/redmine/wiki_formatting/textile/helper.rb
parents 46f66add 44b1bcfa
......@@ -4,17 +4,18 @@ class AutoCompletesController < ApplicationController
def issues
@issues = []
q = params[:q].to_s
query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues
if q.match(/^\d+$/)
@issues << query.visible.find_by_id(q.to_i)
end
unless q.blank?
@issues += query.visible.find(:all,
if q.present?
query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues
@issues |= query.visible.find_all_by_id(q.to_i) if q =~ /^\d+$/
@issues |= query.visible.find(:all,
:limit => 10,
:order => "#{Issue.table_name}.id ASC",
:conditions => ["LOWER(#{Issue.table_name}.subject) LIKE :q OR CAST(#{Issue.table_name}.id AS CHAR(13)) LIKE :q", {:q => "%#{q.downcase}%" }])
end
@issues.compact!
render :layout => false
end
......
class HelpController < ApplicationController
def wiki_syntax
end
def wiki_syntax_detailed
end
end
......@@ -60,6 +60,11 @@ module ApplicationHelper
h(user.to_s)
end
end
# Show a sorted linkified (if active) comma-joined list of users
def list_users(users, options={})
users.sort.collect{|u| link_to_user(u, options)}.join(", ")
end
# Displays a link to +issue+ with its subject.
# Examples:
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>Wiki formatting</title>
<style type="text/css">
h1 { font-family: Verdana, sans-serif; font-size: 14px; text-align: center; color: #444; }
body { font-family: Verdana, sans-serif; font-size: 12px; color: #444; }
table th { padding-top: 1em; }
table td { vertical-align: top; background-color: #f5f5f5; height: 2em; vertical-align: middle;}
table td code { font-size: 1.2em; }
table td h1 { font-size: 1.8em; text-align: left; }
table td h2 { font-size: 1.4em; text-align: left; }
table td h3 { font-size: 1.2em; text-align: left; }
</style>
</head>
<body>
<% content_for :styles do %>
h1 { font-family: Verdana, sans-serif; font-size: 14px; text-align: center; color: #444; }
body { font-family: Verdana, sans-serif; font-size: 12px; color: #444; }
table th { padding-top: 1em; }
table td { vertical-align: top; background-color: #f5f5f5; height: 2em; vertical-align: middle;}
table td code { font-size: 1.2em; }
table td h1 { font-size: 1.8em; text-align: left; }
table td h2 { font-size: 1.4em; text-align: left; }
table td h3 { font-size: 1.2em; text-align: left; }
<% end %>
<% html_title "Wiki Syntax Quick Reference" %>
<h1>Wiki Syntax Quick Reference</h1>
<table width="100%">
......@@ -48,8 +40,9 @@ table td h3 { font-size: 1.2em; text-align: left; }
<tr><th></th><td>http://foo.bar</td><td><a href="#">http://foo.bar</a></td></tr>
<tr><th></th><td>"Foo":http://foo.bar</td><td><a href="#">Foo</a></td></tr>
<tr><th colspan="3">Redmine links</th></tr>
<tr><th colspan="3">ChiliProject links</th></tr>
<tr><th><img src="../images/jstoolbar/bt_link.png" style="border: 1px solid #bbb;" alt="Link to a Wiki page" /></th><td>[[Wiki page]]</td><td><a href="#">Wiki page</a></td></tr>
<tr><th><img src="../images/jstoolbar/bt_link.png" style="border: 1px solid #bbb;" alt="Link to a Wiki page" /></th><td>[[Sandbox:Wiki page]]</td><td><a href="#">Wiki page</a> (On the Sandbox project)</td></tr>
<tr><th></th><td>Issue #12</td><td>Issue <a href="#">#12</a></td></tr>
<tr><th></th><td>Revision r43</td><td>Revision <a href="#">r43</a></td></tr>
<tr><th></th><td>commit:f30e13e43</td><td><a href="#">f30e13e4</a></td></tr>
......@@ -60,7 +53,4 @@ table td h3 { font-size: 1.2em; text-align: left; }
<tr><th></th><td>!<em>attached_image</em>!</td><td></td></tr>
</table>
<p><a href="wiki_syntax_detailed.html" onclick="window.open('wiki_syntax_detailed.html', '', ''); return false;">More Information</a></p>
</body>
</html>
<p><a href="wiki_syntax_detailed" onclick="window.open('wiki_syntax_detailed', '', ''); return false;">More Information</a></p>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>RedmineWikiFormatting</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
<% content_for :styles do %>
body { font:80% Verdana,Tahoma,Arial,sans-serif; }
h1, h2, h3, h4 { font-family: Trebuchet MS,Georgia,"Times New Roman",serif; }
pre, code { font-size:120%; }
......@@ -19,35 +14,34 @@
a.new { color: #b73535; }
.CodeRay .c { color:#666; }
.CodeRay .cl { color:#B06; font-weight:bold }
.CodeRay .dl { color:black }
.CodeRay .fu { color:#06B; font-weight:bold }
.CodeRay .il { background: #eee }
.CodeRay .il .idl { font-weight: bold; color: #888 }
.CodeRay .iv { color:#33B }
.CodeRay .r { color:#080; font-weight:bold }
.CodeRay .s { background-color:#fff0f0 }
.CodeRay .s .dl { color:#710 }
</style>
</head>
<% end %>
<body>
<h1><a name="1" class="wiki-page"></a>Wiki formatting</h1>
<% html_title "Wiki Formatting" %>
<h1><a name="1" class="wiki-page"></a>Wiki Formatting</h1>
<h2><a name="2" class="wiki-page"></a>Links</h2>
<h3><a name="3" class="wiki-page"></a>Redmine links</h3>
<h3><a name="3" class="wiki-page"></a>ChiliProject links</h3>
<p>Redmine allows hyperlinking between issues, changesets and wiki pages from anywhere wiki formatting is used.</p>
<p>ChiliProject allows hyperlinking between issues, changesets and wiki pages from anywhere wiki formatting is used.</p>
<ul>
<li>Link to an issue: <strong>#124</strong> (displays <del><a href="#" class="issue" title="bulk edit doesn't change the category or fixed version properties (Closed)">#124</a></del>, link is striked-through if the issue is closed)</li>
<li>Link to a changeset: <strong>r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">r758</a>)</li>
<li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays <a href="#" class="changeset">c6f4d0fd</a>).</li>
<li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sanbox:r758</a>)</li>
<li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sandbox:r758</a>)</li>
<li>Link to a changeset with a non-numeric hash: <strong>sandbox:c6f4d0fd</strong> (displays <a href="#" class="changeset">sandbox:c6f4d0fd</a>).</li>
</ul>
......@@ -130,8 +124,8 @@
<p>Escaping:</p>
<ul>
<li>You can prevent Redmine links from being parsed by preceding them with an exclamation mark: !</li>
<ul>
<li>You can prevent ChiliProject links from being parsed by preceding them with an exclamation mark: !</li>
</ul>
......@@ -140,24 +134,24 @@
<p>HTTP URLs and email addresses are automatically turned into clickable links:</p>
<pre>
http://www.redmine.org, someone@foo.bar
https://www.chiliproject.org, someone@foo.bar
</pre>
<p>displays: <a class="external" href="http://www.redmine.org">http://www.redmine.org</a>, <a href="mailto:someone@foo.bar" class="email">someone@foo.bar</a></p>
<p>displays: <a class="external" href="https://www.chiliproject.org">https://www.chiliproject.org</a>, <a href="mailto:someone@foo.bar" class="email">someone@foo.bar</a></p>
<p>If you want to display a specific text instead of the URL, you can use the standard textile syntax:</p>
<pre>
"Redmine web site":http://www.redmine.org
"ChiliProject web site":https://www.chiliproject.org
</pre>
<p>displays: <a href="http://www.redmine.org" class="external">Redmine web site</a></p>
<p>displays: <a href="https://www.chiliproject.org" class="external">ChiliProject web site</a></p>
<h2><a name="5" class="wiki-page"></a>Text formatting</h2>
<p>For things such as headlines, bold, tables, lists, Redmine supports Textile syntax. See <a class="external" href="http://www.textism.com/tools/textile/">http://www.textism.com/tools/textile/</a> for information on using any of these features. A few samples are included below, but the engine is capable of much more of that.</p>
<p>For things such as headlines, bold, tables, lists, ChiliProject supports Textile syntax. See <a class="external" href="http://www.textism.com/tools/textile/">http://www.textism.com/tools/textile/</a> for information on using any of these features. A few samples are included below, but the engine is capable of much more of that.</p>
<h3><a name="6" class="wiki-page"></a>Font style</h3>
......@@ -195,7 +189,7 @@ h2. Subheading
h3. Subsubheading
</pre>
<p>Redmine assigns an anchor to each of those headings thus you can link to them with "#Heading", "#Subheading" and so forth.</p>
<p>ChiliProject assigns an anchor to each of those headings thus you can link to them with "#Heading", "#Subheading" and so forth.</p>
<h3><a name="9" class="wiki-page"></a>Paragraphs</h3>
......@@ -205,7 +199,7 @@ p>. right aligned
p=. centered
</pre>
<p style="text-align:center;">This is centered paragraph.</p>
<p style="text-align:center;">This is a centered paragraph.</p>
<h3><a name="10" class="wiki-page"></a>Blockquotes</h3>
......@@ -233,7 +227,7 @@ To go live, all you need to add is a database and a web server.
<h2><a name="12" class="wiki-page"></a>Macros</h2>
<p>Redmine has the following builtin macros:</p>
<p>ChiliProject has the following builtin macros:</p>
<p><dl><dt><code>hello_world</code></dt><dd><p>Sample macro.</p></dd><dt><code>include</code></dt><dd><p>Include a wiki page. Example:</p>
......@@ -266,5 +260,3 @@ To go live, all you need to add is a database and a web server.
<span class="no"><strong>10</strong></span> <span class="r">end</span>
</code>
</pre>
</body>
</html>
......@@ -3,7 +3,7 @@
<p><%= f.select :relation_type, collection_for_relation_type_select, {}, :onchange => "setPredecessorFieldsVisibility();" %>
<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 10 %>
<div id="related_issue_candidates" class="autocomplete"></div>
<%= javascript_tag "observeRelatedIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
<%= javascript_tag "observeRelatedIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project, :escape => false) }')" %>
<span id="predecessor_fields" style="display:none;">
<%= l(:field_delay) %>: <%= f.text_field :delay, :size => 3 %> <%= l(:label_day_plural) %>
</span>
......
......@@ -11,7 +11,7 @@
<% if User.current.allowed_to?(:manage_subtasks, @project) %>
<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p>
<div id="parent_issue_candidates" class="autocomplete"></div>
<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project, :escape => false) }')" %>
<% end %>
<p><%= f.text_area :description,
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title><%= h html_title %></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
<%= yield(:styles) %>
</style>
</head>
<body>
<%= yield %>
</body>
</html>
......@@ -18,6 +18,12 @@ hr {
background: #ccc;
border: 0;
}
blockquote {
border-left: 3px solid #E0E0E0;
font-style: italic;
margin-left: 2.4em;
padding-left: 0.6em;
}
.footer {
font-size: 0.8em;
font-style: italic;
......
......@@ -25,9 +25,9 @@
<p><%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %></p>
<% end %>
<div id="password_fields" style="<%= 'display:none;' if @user.auth_source %>">
<p><%= f.password_field :password, :required => true, :size => 25 %><br />
<p><%= f.password_field :password, :required => true, :size => 25, :autocomplete => :off %><br />
<em><%= l(:text_caracters_minimum, :count => Setting.password_min_length) %></em></p>
<p><%= f.password_field :password_confirmation, :required => true, :size => 25 %></p>
<p><%= f.password_field :password_confirmation, :required => true, :size => 25, :autocomplete => :off %></p>
</div>
</div>
......
......@@ -972,17 +972,18 @@ pt-BR:
button_collapse_all: Collapse all
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_cvs_module: Module
label_filesystem_path: Root directory
label_darcs_path: Root directory
field_effective_date: Due date
label_bazaar_path: Root directory
label_cvs_path: CVSROOT
label_git_path: Path to .git directory
text_powered_by: Powered by %{link}
label_mercurial_path: Root directory
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_cvs_module: Módulo
label_filesystem_path: Diretório raiz
label_darcs_path: Diretório raiz
label_bazaar_path: Diretório raiz
label_git_path: Caminho para o diretório .git
label_mercurial_path: Diretório raiz
......@@ -19,6 +19,25 @@
* Patch #7598: Extensible MailHandler
* Patch #7795: Internal server error at journals#index with custom fields
== 2011-05-27 v1.4.0
* Bug #81: Replace favicon
* Bug #311: Update the watcher list on "watch"-link click
* Bug #322: reposman.rb doesn't work with Rubygems >= 1.6.0
* Bug #340: Properly format blockquotes in HTML mails
* Bug #357: Wrap long text fields properly in PDF exports
* Bug #360: Set autocomplete=off for some fields in user form
* Bug #373: Issue auto completion returns duplicates
* Bug #374: HTML-escaped URLs in JavaScript
* Bug #379: Help controller headings rendered differently in Ruby 1.9
* Bug #380: Wiki-Help Page
* Bug #424: Loading issue context menu causes two identical AJAX requests
* Bug #425: Deprecation warning when using ChiliProject with Rake 0.9
* Feature #202: Adding the theme used on chiliproject.org to the repository
* Feature #304: Add a helper to format user lists
* Feature #361: [Cleanup] Removing code comment, by answering the implied question in wikitoolbar_for helper
* Feature #362: Introduce Help controller to dynamically generate wiki help pages
== 2011-05-01 v1.3.0
* Bug #309: The login screen after lost_password redirects back to lost_password after you login
......
......@@ -482,6 +482,7 @@ sub get_project_identifier {
my $location = $r->location;
my ($identifier) = $r->uri =~ m{$location/*([^/]+)};
$identifier =~ s/\.git$// if (defined $cfg->{RedmineGitSmartHttp} and $cfg->{RedmineGitSmartHttp});
$identifier;
}
......
......@@ -66,6 +66,10 @@ require 'rdoc/usage'
require 'find'
require 'etc'
# working around deprecation in RubyGems 1.6
# needed for rails <2.3.9 only, don't merge to unstable!
require 'thread'
Version = "1.3"
SUPPORTED_SCM = %w( Subversion Darcs Mercurial Bazaar Git Filesystem )
......
Description:
The plugin generator creates stubs for a new ChiliProject plugin.
Example:
./script/generate chliproject_plugin meetings
create vendor/plugins/chiliproject_meetings/app/controllers
create vendor/plugins/chiliproject_meetings/app/helpers
create vendor/plugins/chiliproject_meetings/app/models
create vendor/plugins/chiliproject_meetings/app/views
create vendor/plugins/chiliproject_meetings/db/migrate
create vendor/plugins/chiliproject_meetings/lib/tasks
create vendor/plugins/chiliproject_meetings/assets/images
create vendor/plugins/chiliproject_meetings/assets/javascripts
create vendor/plugins/chiliproject_meetings/assets/stylesheets
create vendor/plugins/chiliproject_meetings/lang
create vendor/plugins/chiliproject_meetings/README
create vendor/plugins/chiliproject_meetings/init.rb
create vendor/plugins/chiliproject_meetings/lang/en.yml
create vendor/plugins/chiliproject_meetings/config/locales/en.yml
create vendor/plugins/chiliproject_meetings/test/test_helper.rb
class RedminePluginGenerator < Rails::Generator::NamedBase
class ChiliprojectPluginGenerator < Rails::Generator::NamedBase
attr_reader :plugin_path, :plugin_name, :plugin_pretty_name
def initialize(runtime_args, runtime_options = {})
super
@plugin_name = "redmine_#{file_name.underscore}"
@plugin_name = "chiliproject_#{file_name.underscore}"
@plugin_pretty_name = plugin_name.titleize
@plugin_path = "vendor/plugins/#{plugin_name}"
end
......
......@@ -3,7 +3,7 @@ require 'redmine'
Redmine::Plugin.register :<%= plugin_name %> do
name '<%= plugin_pretty_name %> plugin'
author 'Author name'
description 'This is a plugin for Redmine'
description 'This is a plugin for ChiliProject'
version '0.0.1'
url 'http://example.com/path/to/plugin'
author_url 'http://example.com/about'
......
......@@ -2,4 +2,4 @@ Description:
Generates a plugin controller.
Example:
./script/generate redmine_plugin_controller MyPlugin Pools index show vote
./script/generate chiliproject_plugin_controller MyPlugin Pools index show vote
require 'rails_generator/base'
require 'rails_generator/generators/components/controller/controller_generator'
class RedminePluginControllerGenerator < ControllerGenerator
class ChiliprojectPluginControllerGenerator < ControllerGenerator
attr_reader :plugin_path, :plugin_name, :plugin_pretty_name
def initialize(runtime_args, runtime_options = {})
runtime_args = runtime_args.dup
usage if runtime_args.empty?
@plugin_name = "redmine_" + runtime_args.shift.underscore
@plugin_name = "chiliproject_" + runtime_args.shift.underscore
@plugin_pretty_name = plugin_name.titleize
@plugin_path = "vendor/plugins/#{plugin_name}"
super(runtime_args, runtime_options)
......
......@@ -2,4 +2,4 @@ Description:
Generates a plugin model.
Examples:
./script/generate redmine_plugin_model MyPlugin pool title:string question:text
./script/generate chiliproject_plugin_model MyPlugin pool title:string question:text
require 'rails_generator/base'
require 'rails_generator/generators/components/model/model_generator'
class RedminePluginModelGenerator < ModelGenerator
class ChiliprojectPluginModelGenerator < ModelGenerator
attr_accessor :plugin_path, :plugin_name, :plugin_pretty_name
def initialize(runtime_args, runtime_options = {})
runtime_args = runtime_args.dup
usage if runtime_args.empty?
@plugin_name = "redmine_" + runtime_args.shift.underscore
@plugin_name = "chiliproject_" + runtime_args.shift.underscore
@plugin_pretty_name = plugin_name.titleize
@plugin_path = "vendor/plugins/#{plugin_name}"
super(runtime_args, runtime_options)
......
Description:
The plugin generator creates stubs for a new Redmine plugin.
Example:
./script/generate redmine_plugin meetings
create vendor/plugins/redmine_meetings/app/controllers
create vendor/plugins/redmine_meetings/app/helpers
create vendor/plugins/redmine_meetings/app/models
create vendor/plugins/redmine_meetings/app/views
create vendor/plugins/redmine_meetings/db/migrate
create vendor/plugins/redmine_meetings/lib/tasks
create vendor/plugins/redmine_meetings/assets/images
create vendor/plugins/redmine_meetings/assets/javascripts
create vendor/plugins/redmine_meetings/assets/stylesheets
create vendor/plugins/redmine_meetings/lang
create vendor/plugins/redmine_meetings/README
create vendor/plugins/redmine_meetings/init.rb
create vendor/plugins/redmine_meetings/lang/en.yml
create vendor/plugins/redmine_meetings/config/locales/en.yml
create vendor/plugins/redmine_meetings/test/test_helper.rb
......@@ -156,7 +156,7 @@ module Redmine
end || ''
return txt
end
def RDMCell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
Cell(w,h,fix_text_encoding(txt),border,ln,align,fill,link)
end
......@@ -193,13 +193,25 @@ module Redmine
pdf.SetTitle(title)
pdf.alias_nb_pages
pdf.footer_date = format_date(Date.today)
pdf.SetAutoPageBreak(false)
pdf.AddPage("L")
row_height = 6
# Landscape A4 = 210 x 297 mm
page_height = 210
page_width = 297
right_margin = 10
bottom_margin = 20
col_id_width = 10
row_height = 5
# column widths
table_width = page_width - right_margin - 10 # fixed left margin
col_width = []
unless query.columns.empty?
col_width = query.columns.collect {|column| column.name == :subject ? 4.0 : 1.0 }
ratio = 262.0 / col_width.inject(0) {|s,w| s += w}
col_width = query.columns.collect do |c|
(c.name == :subject || (c.is_a?(QueryCustomFieldColumn) && ['string', 'text'].include?(c.custom_field.field_format)))? 4.0 : 1.0
end
ratio = (table_width - col_id_width) / col_width.inject(0) {|s,w| s += w}
col_width = col_width.collect {|w| w * ratio}
end
......@@ -211,7 +223,7 @@ module Redmine
# headers
pdf.SetFontStyle('B',8)
pdf.SetFillColor(230, 230, 230)
pdf.RDMCell(15, row_height, "#", 1, 0, 'L', 1)
pdf.RDMCell(col_id_width, row_height, "#", 1, 0, 'L', 1)
query.columns.each_with_index do |column, i|
pdf.RDMCell(col_width[i], row_height, column.caption, 1, 0, 'L', 1)
end
......@@ -230,8 +242,9 @@ module Redmine
pdf.SetFontStyle('',8)
previous_group = group
end
pdf.RDMCell(15, row_height, issue.id.to_s, 1, 0, 'L', 1)
query.columns.each_with_index do |column, i|
# fetch all the row values
col_values = query.columns.collect do |column|
s = if column.is_a?(QueryCustomFieldColumn)
cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id}
show_value(cv)
......@@ -244,18 +257,64 @@ module Redmine
else
value
end
end
pdf.RDMCell(col_width[i], row_height, s.to_s, 1, 0, 'L', 1)
end
s.to_s
end
pdf.Ln
# render it off-page to find the max height used
base_x = pdf.GetX
base_y = pdf.GetY
pdf.SetY(2 * page_height)
max_height = issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
pdf.SetXY(base_x, base_y)
# make new page if it doesn't fit on the current one
space_left = page_height - base_y - bottom_margin
if max_height > space_left
pdf.AddPage("L")
base_x = pdf.GetX
base_y = pdf.GetY
end
# write the cells on page
pdf.Cell(col_id_width, row_height, issue.id.to_s, "T", 0, 'C', 1)
issues_to_pdf_write_cells(pdf, col_values, col_width, row_height)
issues_to_pdf_draw_borders(pdf, base_x, base_y, base_y + max_height, col_id_width, col_width)
pdf.SetY(base_y + max_height);
end
if issues.size == Setting.issues_export_limit.to_i
pdf.SetFontStyle('B',10)
pdf.RDMCell(0, row_height, '...')
end
pdf.Output
end
# Renders MultiCells and returns the maximum height used
def issues_to_pdf_write_cells(pdf, col_values, col_widths, row_height)
base_y = pdf.GetY
max_height = row_height
col_values.each_with_index do |column, i|
col_x = pdf.GetX
pdf.RDMMultiCell(col_widths[i], row_height, col_values[i], "T", 'L', 1)
max_height = (pdf.GetY - base_y) if (pdf.GetY - base_y) > max_height
pdf.SetXY(col_x + col_widths[i], base_y);
end
return max_height
end
# Draw lines to close the row (MultiCell border drawing in not uniform)
def issues_to_pdf_draw_borders(pdf, top_x, top_y, lower_y, id_width, col_widths)
col_x = top_x + id_width
pdf.Line(col_x, top_y, col_x, lower_y) # id right border
col_widths.each do |width|
col_x += width
pdf.Line(col_x, top_y, col_x, lower_y) # columns right border
end
pdf.Line(top_x, top_y, top_x, lower_y) # left border
pdf.Line(top_x, lower_y, col_x, lower_y) # bottom border
end
# Returns a PDF string of a single issue
def issue_to_pdf(issue)
if ( current_language.to_s.downcase == 'ko' ||
......@@ -273,7 +332,7 @@ module Redmine
pdf.AddPage
pdf.SetFontStyle('B',11)
pdf.RDMCell(190,10, "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}")
pdf.RDMMultiCell(190,5, "#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}")
pdf.Ln
y0 = pdf.GetY
......@@ -325,19 +384,13 @@ module Redmine
pdf.RDMMultiCell(155,5, (show_value custom_value),"R")
end
pdf.SetFontStyle('B',9)
pdf.RDMCell(35,5, l(:field_subject) + ":","LTB")
pdf.SetFontStyle('',9)
pdf.RDMCell(155,5, issue.subject,"RTB")
pdf.Ln
pdf.SetFontStyle('B',9)
pdf.RDMCell(35,5, l(:field_description) + ":")
pdf.SetFontStyle('',9)
pdf.RDMMultiCell(155,5, issue.description.to_s,"BR")
pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
pdf.Line(pdf.GetX, pdf.GetY, pdf.GetX + 190, pdf.GetY)
pdf.Ln
if issue.changesets.any? && User.current.allowed_to?(:view_changesets, issue.project)
......@@ -359,16 +412,17 @@ module Redmine
pdf.SetFontStyle('B',9)
pdf.RDMCell(190,5, l(:label_history), "B")
pdf.Ln
for journal in issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_at ASC")
for journal in issue.journals.find(:all, :include => [:user], :order => "#{Journal.table_name}.created_at ASC")
pdf.SetFontStyle('B',8)
pdf.RDMCell(190,5, format_time(journal.created_at) + " - " + journal.user.name)
pdf.Ln
pdf.SetFontStyle('I',8)
for detail in journal.details
pdf.RDMCell(190,5, "- " + journal.render_detail(detail, true))
pdf.RDMMultiCell(190,5, "- " + journal.render_detail(detail, true))
pdf.Ln
end
if journal.notes?
pdf.Ln unless journal.details.empty?
pdf.SetFontStyle('',8)
pdf.RDMMultiCell(190,5, journal.notes.to_s)
end
......
......@@ -3,7 +3,7 @@ require 'rexml/document'
module Redmine
module VERSION #:nodoc:
MAJOR = 1
MINOR = 3
MINOR = 4
PATCH = 0
TINY = PATCH # Redmine compat
......
......@@ -21,9 +21,7 @@ module Redmine
module Helper
def wikitoolbar_for(field_id)
heads_for_wiki_formatter
# Is there a simple way to link to a public resource?
url = "#{Redmine::Utils.relative_url_root}/help/wiki_syntax.html"
url = url_for(:controller => 'help', :action => 'wiki_syntax')
help_link = link_to(l(:setting_text_formatting), url,
:onclick => "window.open(\"#{ url }\", \"\", \"resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes\"); return false;",
:tabindex => -1)
......
......@@ -167,12 +167,12 @@ END_DESC
end
desc "Send a test email to the user with the provided login name"
task :test, :login, :needs => :environment do |task, args|
task :test, [:login] => :environment do |task, args|
include Redmine::I18n
abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank?
abort l(:notice_email_error, "Please include the user login to test with. Example: login=example-login") if args[:login].blank?
user = User.find_by_login(args[:login])
abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged?
abort l(:notice_email_error, "User #{args[:login]} not found") unless user && user.logged?
ActionMailer::Base.raise_delivery_errors = true
begin
......
......@@ -85,9 +85,6 @@ ContextMenu.prototype = {
}
}
}
else{
this.RightClick(e);
}
},
createMenu: function() {
......
0.2.0 (22-05-2009)
* Defect #236: Icons (ticket__*.png) aren't referenced correctly
* Feature #243: Add support for Redmine Graphs plugin
* Feature #261: Add support for Redmine Bugcloud plugin
* Feature #262: Add support for Redmine Scrumdashboard plugin
* Feature #263: Add support for Redmine Code Review plugin
* Enhancement #230: Other font-family for header
* Enhancement #233: Change used Fugue-icon for Roadmap project-menu item
* Enhancement #255: Make image-references relative for sub-URI compatibility
* Enhancement #256: Fix upcoming change in supported Budget-plugin
* Enhancement #258: Fix upcoming change in supported Invoices-plugin
* Enhancement #259: Fix upcoming change in supported Scores-plugin
* Enhancement #260: Fix upcoming change in supported Simple-CI plugin
* Enhancement #267: Fix upcoming change in supported Todos plugin
* Task-HITDM #235: Update vendor source of the fugue icon-set to current release
* Task-HITDM #257: Clean-up and Fix project-menu declarations of supported plugins
* Task-HITDM #266: Remove unused images while creating the 0.2-release branch
0.1.0 (21-03-2009)
* Defect #186: Project-menu icons aren't rendered after Redmine core rev2022
* Defect #187: Right-aligned columns on version-page have a white background instead of transparent
* Defect #193: There exists some cross-browser compatibility-errors on Presto-engine
* Defect #195: Some faulty references to non-existing images exists due to typos
* Defect #196: Fix overflow of the content
* Defect #199: Issue-journals should be displayed *behind* the related-revisions block, not below it
* Defect #207: Several PNG-images are rendered with a white background, disrupting the nice gray-gradient
* Defect #208: Fix the rendering of the note-icon when inline-editing an issue-journal
* Defect #211: After r40 unordered lists inside the issue-journal comment are smaller-sized too
* Defect #212: Issue-journal comment note-icons rendered for all paragraphs instead of the first only
* Defect #213: After r37 the context-menu item-links are rendered as bold; should be normal
* Defect #228: After r6 selected project-menu tabs aren't highlighted anymore
* Feature #210: Add specific declarations for third-party plugins
* Feature #229: Add KHTML-support for rounded-borders on the first & last project-menu items
* Enhancement #190: Improve link-visibility globally
* Enhancement #191: Refactor the styling of the issue-journals
* Enhancement #192: Modify (overall) font-sizes to make the UI more consistent
* Enhancement #194: Sidebar should have a bit more width
* Enhancement #198: Overrule bordered-table styles imported from the Alternate-theme
* Enhancement #214: Project-menu overflows the right border when lots of modules are enabled on a project
* Enhancement #223: Improve icon-declarations
* Task-HITDM #188: Remove project-body headers introduced by Squeejee based on a core-hack
* Task-HITDM #189: Undue the theme from dependency on (import of) the Alternate-theme
* Task-HITDM #200: Remove unused images from release
* Task-HITDM #201: Clean CSS-styles coding
* Task-HITDM #205: 0.1.0 Release QA
* Task-HITDM #209: CSS-Code Cleanup (round 2)
* Task-HITDM #215: Update vendor source of the fugue icon-set to 1.4.6
* Task-HITDM #224: Update vendor source of the fugue icon-set to 1.4.7
* Task-HITDM #226: Fix issues found in 0.1.0 Release QA-Sprint/2 (#205)
0.0.0
Initial source by Wynn Netherland as of 20-11-2008
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
= ChiliProject.org theme
This theme is based on the Redmine Squeejee theme. It is available bundled with ChiliProject as well as on Github.
* ChiliProject - https://www.chiliproject.org
* Github - https://github.com/edavis10/squeejee_theme/tree/chiliproject.org
See README.redmine for the official Squeejee theme readme.
h1. Squeejee theme
A theme for Redmine which is based on a dark but "shiny" color-scheme and which includes a subtle (re)styled project-menu.
h2. Packager, contributor and maintainer
* Mischa The Evil
h2. Initial author
* "Wynn Netherland":http://www.squeejee.com/team.html#wynn_netherland
h2. History
For the complete history of the theme's creation you could see "this forum-thread":http://www.redmine.org/boards/1/topics/2736.
h2. Features
The Squeejee© theme is an updated, packaged release of Wynn Netherland's work for "Squeejee's":http://www.squeejee.com internal Redmine instance. It initially was a heavily modified derivation of the [[ThemeAlternate|alternate theme]] which required Redmine core hacks but is made stand-alone and working without core hacks (by using the core's support for project-menu item styling (r2059)) for this release.
It's looks can be best described as a dark theme with gradient backgrounds, dark-gray and bold links, but all with a "shiny" and "friendly" touch. It reintroduces the project-menu item-icons with the extension that styling of third-party plugins (including selected icons) is supported too.
Also the overflow to a second line of the project-menu, when using a lot of plugins with menu-items, is handled without disturbing the surrounding layout and elements.
The colour-scheme basically consists of three basic colours: black, grey and white.
It includes:
* issue-colouring in the issuelist, based on default priority-enumerations for issues
* more sophistically styled "tabs", "tables", etc.
* (project-menu item styling) support for (lots of) third-party plugins
h2. Screenshots
[ ... see online version of this page ... ]
h2. Compatibility
h3. Redmine compatibility
The theme is compatible with the Redmine 0.8-stable branch (thus including releases: 0.8.0, 0.8.1, 0.8.2 and 0.8.3) and the trunk.
h3. Browser compatibility
* This theme is fully compatible with the current, big-four of browser-engines:
* Gecko (Mozilla)
* Trident (Internet Explorer 8)
* Presto (Opera)
* WebKit (Safari/Chrome)
* This theme is for about 95% compatible with the following browser-engine:
* Trident (Internet Explorer 7)
Though, tiny differences can occur across different browsers.
h2. Obtaining the theme
The theme can be downloaded as a packaged release from:
* this page; the archive is attached
* this MediaFire-mirror: http://www.mediafire.com/evildev
* the upcoming website http://www.evil-dev.net
h2. Installation
Follow the Redmine theme installation steps at: http://www.redmine.org/wiki/redmine/Themes#Installing-a-theme.
h2. Upgrade
1. Download the latest archive file from the available sources (see "Obtaining the theme")
2. Backup the currently deployed squeejee theme (in _"../public/themes"_: @mv squeejee squeejee-backup@)
3. Unzip the downloaded file to your Redmine into the theme-directory _"../public/themes"_
4. Restart your Redmine
h2. Uninstall
1. Remove the directory "squeejee" from the theme-directory _"../public/themes"_
2. Restart Redmine
h2. Changelog
For the complete changelog see the @CHANGELOG@-file in the Squeejee theme directory.
h2. Credits
Thanks goes out to the following people:
* Wynn Netherland, Squeejee (http://www.squeejee.com)
** Initial author (designer and coder) of the draft of this theme which can be found here: http://github.com/squeejee/redmine/tree/master/public/themes/squeejee
* Jean-Philippe Lang, Project-leader of Redmine (http://www.redmine.org)
** For creating and maintaining the Redmine system...
h2. Licensing
This theme is open-source and licensed under the "GNU General Public License v2":http://www.gnu.org/licenses/old-licenses/gpl-2.0.html (GPL). Certain icons are part of the Fugue icon-set (http://www.pinvoke.com) which is released under the "Creative Commons Attribution 3.0 Unported":http://creativecommons.org/licenses/by/3.0 license.
* (C)2009, Mischa The Evil (http://www.evil-dev.net)
* (C)2008, Wynn Netherland (http://www.squeejee.com)
h2. Support
If you need help, would like to report a bug or request a new feature you can contact the
maintainer via mail (mischa_the_evil [AT] hotmail [DOT] com) or at his (upcoming) website: http://www.evil-dev.net.
Version 2.0 (May 13, 2009)
- Add <drive*>.
- Add <edit-disable>.
- Add <navigation*>.
- Add <report-excel>.
- Add <smiley-paint-brush>.
- Add <ui-toolbar-bookmark>.
- Add <umbrella-disable>.
- Add <user-disable> and <user-female-disable>.
--------------------------------------------------------------------------------
Version 1.9.3 (May 12, 2009)
- Add <balloon-ellipsis> and <balloon-sound>.
- Add <brightness-control*>.
- Add <clock-disable>.
- Add <contrast-control*>.
- Add <hammer-disable> and <hammer-screwdriver-disable>.
- Add <keyboard-disable> and <keyboard-space>.
- Add <pill-disable>.
- Add <pin-disable>.
- Add <plug-disable>.
- Add <printer-disable>.
- Add <ruler-disable> and <ruler-triangle-disable>.
- Add <safe-disable>.
- Add <scissors-disable>.
- Add <screwdriver-disable>.
- Add <switch-disable>.
- Add <target-disable>.
- Add <thumb-disable> and <thumb-up-disable>.
- Add <wand-disable>.
- Add <webcam*>.
- Add <wrench-disable> and <wrench-screwdriver-disable>.
--------------------------------------------------------------------------------
Version 1.9.2 (May 10, 2009)
* Increase contrast.
- Add <alarm-clock-disable>.
- Add <block-disable>.
- Add <broom-disable>.
- Add <compass-disable>.
- Add <direction-disable>.
- Add <drill-disable>.
- Add <eye-disable>.
- Add <information-balloon>.
- Add <lifebuoy-disable>.
- Add <megaphone-disable>.
- Add <microphone-disable>.
- Add <question-balloon>.
--------------------------------------------------------------------------------
Version 1.9.1 (May 9, 2009)
- Add <cake*>.
- Add <clipboard-list>.
- Add <document-copy> and <document-list>.
- Add <image-empty>.
- Add <keyboard*>.
- Add <paint-brush*>.
- Add <pencil-ruler>.
- Add <switch-small>.
- Add <table-delete-row>, <table-insert-row> and <table-sheet>.
- Add <ui-combo-box-calendar>.
- Add <ui-progress-bar-indeterminate>.
- Add <universal>.
- Add <user-nude*> and <user-white*>.
- Add <yin-yang>.
--------------------------------------------------------------------------------
Version 1.9 (May 4, 2009)
- Add <document-hf*> and <document-insert>.
- Add <film-cast>.
- Add <grid-snap*>.
- Add <guide*>.
- Add <image-cast>.
- Add <layer-shade>.
- Add <megaphone*>.
- Add <subversion>.
- Add <volume*>.
--------------------------------------------------------------------------------
Version 1.8.1 (May 1, 2009)
- Add <block-small>.
- Add <border*>.
- Add <document-block> and <document-code>.
- Add <media-player-cast>.
- Add <script-attribute*>, <script-block>, <script-code>, <script-flash> and <script-globe>.
--------------------------------------------------------------------------------
Version 1.8 (April 29, 2009)
- Add <credit-card*>.
- Add <credit-cards>.
- Add <document-attribute*>, <document-globe> and <document-photoshop-image>.
- Add <edit-diff>.
- Add <globe-place>.
- Add <layer-resize-replicate*>.
--------------------------------------------------------------------------------
Version 1.7 (April 15, 2009)
--------------------------------------------------------------------------------
Version 1.6 (April 6, 2009)
--------------------------------------------------------------------------------
Version 1.5 (March 17, 2009)
--------------------------------------------------------------------------------
Version 1.4 (January 28, 2009)
--------------------------------------------------------------------------------
Version 1.3 (January 22, 2009)
--------------------------------------------------------------------------------
Version 1.2 (January 11, 2009)
--------------------------------------------------------------------------------
Version 1.1 (January 2, 2009)
--------------------------------------------------------------------------------
Version 1.0 (October 12, 2008)
* Initial non-beta release.
--------------------------------------------------------------------------------
Version 0.9 (August 4, 2008)
--------------------------------------------------------------------------------
Version 0.8 (July 28, 2008)
--------------------------------------------------------------------------------
Version 0.7 (July 22, 2008)
--------------------------------------------------------------------------------
Version 0.6 (July 14, 2008)
--------------------------------------------------------------------------------
Version 0.5 (July 13, 2008)
--------------------------------------------------------------------------------
Version 0.4 (July 9, 2008)
--------------------------------------------------------------------------------
Version 0.3 (June 29, 2008)
--------------------------------------------------------------------------------
Version 0.2 (June 27, 2008)
--------------------------------------------------------------------------------
Version 0.1 (June 17, 2008)
* Initial beta release.
\ No newline at end of file
Fugue Icons
================================================================================
Copyright (C) 2009 Yusuke Kamiyamane. All rights reserved.
The icons are licensed under a Creative Commons Attribution 3.0 license.
<http://creativecommons.org/licenses/by/3.0/>
--------------------------------------------------------------------------------
If you can't or don't want to place link back, please purchase a royalty-free license.
<http://www.pinvoke.com/>
--------------------------------------------------------------------------------
I'm unavailable for custom icon design work. But your suggestions are always welcome!
<mailto:yusuke.kamiyamane@gmail.com>
\ No newline at end of file
/* Load the default Redmine stylesheet */
@import url(../../../stylesheets/application.css);
body {
font-size: 81%;
font-family: "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif;
background: #333 url(../images/bottom_shine.png) bottom left repeat-x;
}
/*
* Links
*/
a, a:link, a:visited {
color: #8c8c8c;
text-decoration: none;
font-weight: bold;
}
a:hover {
color: #b3b3b3;
text-decoration: underline;
}
/*
* Layout
*/
#wrapper,
#main,
#footer {
background: none;
}
#main {
margin: 0;
}
#content {
margin: 1em 1.4em 1em 1em;
width: 77%;
overflow: auto;
background: #fff url(../images/shadow_top.png) top left repeat-x;
border-top: solid 1px #fff;
border-right: solid 1px #fff;
-webkit-box-shadow: 5px 5px 10px rgba(0,0,0,.8);
}
/*
* Top-menu
*/
#top-menu {
background: #000 url(../images/bottom_shine.png) bottom left repeat-x;
}
#top-menu {
padding: 1em 1em 0em 1em;
color: #999;
font-family: Verdana, sans-serif;
}
#top-menu #loggedas {
color: #ccc;
}
#top-menu a {
font-weight: bold;
color: #999;
}
#top-menu a:hover {
text-decoration: none;
color: #fff;
}
/*
* Header
*/
#header {
background: #000 url(../images/bottom_shine.png) bottom left repeat-x;
padding: 0.5em 1em 2.3em 1em;
}
#header > h1 {
font-family: Verdana, sans-serif;
}
/*
* Project-menu
*/
/* Prevent the project-menu to overflow into right, instead continue on a new line */
#main-menu {
right: 6px;
margin-right: 0;
}
/* Project-menu link containers (ul > li == tab) */
#main-menu li {
background: #111 url(../images/bottom_shine.png) 0px -40px repeat-x;
border: solid 1px #333;
border-width: 1px 1px 0px 0px;
font-size: 1.00em;
font-family: "Myriad Pro", "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif;
margin: 0;
}
/* Project-menu links (ul > li > a == textlink) */
#main-menu li a,
#main-menu li a.selected,
#main-menu li a:hover {
text-decoration: none;
line-height: 20px;
text-shadow: 1px 1px 1px rgba(0,0,0,.8);
}
#main-menu li a,
#main-menu li a:hover {
background: none;
color: #aaa;
padding: 5px 10px 5px 10px;
font-weight: normal;
}
#main-menu li a.selected,
#main-menu li a.selected:hover {
background: #222 url(../images/bottom_shine.png) 0px -36px repeat-x;
border-color: #444;
color: #d5d5d5;
font-weight: bold;
}
#main-menu li:hover {
background: #333 url(../images/bottom_shine.png) 0px -40px repeat-x;
border-color: #555;
}
#main-menu li:hover a {
color: #fff;
}
/* Project-menu first/last tab roundings (for KHTML [Konqueror], Gecko [Mozilla] and WebKit [Safari/Chrome]) */
#main-menu li:first-child {
-khtml-border-radius-topleft: 5px;
-moz-border-radius-topleft: 5px;
-webkit-border-top-left-radius: 5px;
}
#main-menu li:last-child {
-khtml-border-radius-topright: 5px;
-moz-border-radius-topright: 5px;
-webkit-border-top-right-radius: 5px;
}
/* Redmine core project-menu links */
#main-menu li a.overview,
#main-menu li a.overview:hover {
background: url(../images/fugue/document-text-image.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.activity,
#main-menu li a.activity:hover {
background: url(../images/fugue/lightning.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.roadmap,
#main-menu li a.roadmap:hover {
background: url(../images/fugue/map-pin.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.issues,
#main-menu li a.issues:hover {
background: url(../images/fugue/ticket.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.new-issue,
#main-menu li a.new-issue:hover {
background: url(../images/fugue/ticket--plus.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.news,
#main-menu li a.news:hover {
background: url(../images/fugue/newspaper.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.documents,
#main-menu li a.documents:hover {
background: url(../images/fugue/documents-text.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.wiki,
#main-menu li a.wiki:hover {
background: url(../images/fugue/document-horizontal-text.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.boards,
#main-menu li a.boards:hover {
background: url(../images/fugue/balloons.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.files,
#main-menu li a.files:hover {
background: url(../images/fugue/document-zipper.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.repository,
#main-menu li a.repository:hover {
background: url(../images/fugue/safe.png) 6px center no-repeat;
padding-left: 26px;
}
#main-menu li a.settings,
#main-menu li a.settings:hover {
background: url(../images/fugue/equalizer.png) 6px center no-repeat;
padding-left: 26px;
}
/* Third-party project-menu links */
/*************************************************************************
THIRD-PARTY DECLARATIONS FOR PROJECT-MENU LINKS - START
*************************************************************************/
/* Budget plugin */
/* > 0.2.0 */
#main-menu li a.deliverables,
#main-menu li a.deliverables:hover,
/* <= 0.2.0 */
#main-menu li a.budget,
#main-menu li a.budget:hover {
background: url(../images/fugue/money--pencil.png) 6px center no-repeat;
padding-left: 26px;
}
/* Bugcloud plugin */
#main-menu li a.bugcloud,
#main-menu li a.bugcloud:hover {
background: url(../images/fugue/tags-label.png) 6px center no-repeat;
padding-left: 26px;
}
/* Burndowns plugin */
#main-menu li a.burndown,
#main-menu li a.burndown:hover {
background: url(../images/fugue/burn.png) 6px center no-repeat;
padding-left: 26px;
}
/* Charts plugin */
#main-menu li a.charts,
#main-menu li a.charts:hover {
background: url(../images/fugue/monitor.png) 6px center no-repeat;
padding-left: 26px;
}
/* Code Review plugin */
#main-menu li a.code-review,
#main-menu li a.code-review:hover {
background: url(../images/fugue/ruler--pencil.png) 6px center no-repeat;
padding-left: 26px;
}
/* Customer plugin */
#main-menu li a.customers,
#main-menu li a.customers:hover {
background: url(../images/fugue/user-business.png) 6px center no-repeat;
padding-left: 26px;
}
/* Embedded plugin */
#main-menu li a.embedded,
#main-menu li a.embedded:hover {
background: url(../images/fugue/layout-select-content.png) 6px center no-repeat;
padding-left: 26px;
}
/* EzFAQ plugin */
#main-menu li a.ezfaq,
#main-menu li a.ezfaq:hover {
background: url(../images/fugue/question-balloon.png) 6px center no-repeat;
padding-left: 26px;
}
/* EzLibrarian plugin */
/* > 0.0.2 (AKA EzLibrarian) */
#main-menu li a.treasures,
#main-menu li a.treasures:hover {
background: url(../images/fugue/trophy.png) 6px center no-repeat;
padding-left: 26px;
}
/* <= 0.0.2 (AKA EzBookshelf) */
#main-menu li a.books,
#main-menu li a.books:hover {
background: url(../images/fugue/books-stack.png) 6px center no-repeat;
padding-left: 26px;
}
/* Google Calendar plugin */
#main-menu li a.google-calendar,
#main-menu li a.google-calendar:hover {
background: url(../images/fugue/calendar-month.png) 6px center no-repeat;
padding-left: 26px;
}
/* Invoice plugin */
/* > 0.1.0 */
#main-menu li a.invoice,
#main-menu li a.invoice:hover,
/* <= 0.1.0 */
#main-menu li a.Invoices,
#main-menu li a.Invoices:hover {
background: url(../images/fugue/notebooks--pencil.png) 6px center no-repeat;
padding-left: 26px;
}
/* Schedules plugin */
#main-menu li a.schedules,
#main-menu li a.schedules:hover {
background: url(../images/fugue/report--exclamation.png) 6px center no-repeat;
padding-left: 26px;
}
/* Scores plugin */
/* > 0.0.1 */
#main-menu li a.scores,
#main-menu li a.scores:hover,
/* <= 0.0.1 */
#main-menu li a.Scores,
#main-menu li a.Scores:hover {
background: url(../images/fugue/ui-progress-bar.png) 6px center no-repeat;
padding-left: 26px;
}
/* Scrum plugin */
#main-menu li a.scrum,
#main-menu li a.scrum:hover {
background: url(../images/fugue/projection-screen--pencil.png) 6px center no-repeat;
padding-left: 26px;
}
/* Scrumdashboard plugin */
#main-menu li a.dashboard,
#main-menu li a.dashboard:hover {
background: url(../images/fugue/dashboard--pencil.png) 6px center no-repeat;
padding-left: 26px;
}
/* Simple CI plugin */
/* > 1.0 */
#main-menu li a.simple-ci,
#main-menu li a.simple-ci:hover,
/* <= 1.0 */
#main-menu li a.Integration,
#main-menu li a.Integration:hover {
background: url(../images/fugue/pill--exclamation.png) 6px center no-repeat;
padding-left: 26px;
}
/* Status Updates plugin */
/* Initial release by Brian Terlson and fork by Eric Davis*/
#main-menu li a.Status.Updates,
#main-menu li a.Status.Updates:hover,
/* Fork by Joe Naha */
#main-menu li a.statuses,
#main-menu li a.statuses:hover {
background: url(../images/fugue/tick-shield.png) 6px center no-repeat;
padding-left: 26px;
}
/* Tab plugin */
#main-menu li a.tab,
#main-menu li a.tab:hover {
background: url(../images/fugue/layout-2.png) 6px center no-repeat;
padding-left: 26px;
}
/* Taskboard plugin */
#main-menu li a.task-board,
#main-menu li a.task-board:hover {
background: url(../images/fugue/dashboard--pencil.png) 6px center no-repeat;
padding-left: 26px;
}
/* Todo-lists plugin */
/* > 0.0.3.4 */
#main-menu li a.todos,
#main-menu li a.todos:hover,
/* <= 0.0.3.4 */
#main-menu li a.todo-lists,
#main-menu li a.todo-lists:hover {
background: url(../images/fugue/hammer--arrow.png) 6px center no-repeat;
padding-left: 26px;
}
/*************************************************************************
THIRD-PARTY DECLARATIONS FOR PROJECT-MENU LINKS - END
*************************************************************************/
/* Project-menu tab highlight when link == the selected page (has the class .selected) */
#main-menu li a.selected {
background-color: #333;
}
/*
* Headings
*/
h1, h2, h3, h4, h5 {
font-family: "Myriad Pro", "Lucida Grande", "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif;
}
h2, h3, h4, .wiki h1, .wiki h2, .wiki h3 {
border-bottom: none;
}
/*
* Footer
*/
#footer {
border: none;
}
#footer a {
color: #ccc;
font-weight: normal;
}
#footer a:hover {
color: #fff;
text-decoration: none;
}
/*
* Sidebar
*/
#sidebar h1, #sidebar h2, #sidebar h3, #sidebar h4, #sidebar h5 {
color: #efefef;
text-shadow: 1px 1px 1px rgba(0,0,0,.8);
}
#sidebar {
color: #ccc;
width: 19%;
text-shadow: 1px 1px 1px rgba(0,0,0,.6);
}
#sidebar a {
color: #aaa;
font-weight: normal;
}
/*
* Generic Tables
*/
/* Table headers */
table.list thead th {
background: #ccc url(../images/shadow_top.png) left center repeat-x;
font-size: 0.94em;
border-color: #999;
border-color: #d5d5d5 #d5d5d5 #aaa;
border-style: solid;
border-width: 1px;
}
/* Table header links */
table.list thead th a,
table.list thead th a:hover {
color: #444;
text-shadow: 1px 1px 1px rgba(0,0,0,.3);
border: none;
}
table.list thead th a:hover {
color: #ddd;
}
/* Table data (cells) */
table.list td {
background-image: url(../images/shadow_top.png);
background-repeat: repeat-x;
background-position: 0px -65px;
vertical-align: middle;
font-size: 0.94em;
}
/*
* Issue-List Tables
*/
/* Table-row links */
table.list tr.issue a {
color: #666;
}
table.list tr.issue a:hover {
color: #999;
border-bottom: dotted 1px #999;
text-decoration: none;
}
/* Table-row colouring by priority (styles provided by Wynn Netherland) */
tr.odd.priority-5, table.list tbody tr.odd.priority-5:hover { color: #900; font-weight: bold; }
tr.odd.priority-5 { background: #ffc4c4; }
tr.even.priority-5, table.list tbody tr.even.priority-5:hover { color: #900; font-weight: bold; }
tr.even.priority-5 { background: #ffd4d4; }
tr.priority-5 a, tr.priority-5:hover a { color: #900; }
tr.odd.priority-5 td, tr.even.priority-5 td { border-color: #ffb4b4; }
tr.odd.priority-4, table.list tbody tr.odd.priority-4:hover { color: #900; }
tr.odd.priority-4 { background: #ffc4c4; }
tr.even.priority-4, table.list tbody tr.even.priority-4:hover { color: #900; }
tr.even.priority-4 { background: #ffd4d4; }
tr.priority-4 a { color: #900; }
tr.odd.priority-4 td, tr.even.priority-4 td { border-color: #ffb4b4; }
tr.odd.priority-3, table.list tbody tr.odd.priority-3:hover { color: #900; }
tr.odd.priority-3 { background: #fee; }
tr.even.priority-3, table.list tbody tr.even.priority-3:hover { color: #900; }
tr.even.priority-3 { background: #fff2f2; }
tr.priority-3 a { color: #900; }
tr.odd.priority-3 td, tr.even.priority-3 td { border-color: #fcc; }
tr.odd.priority-1, table.list tbody tr.odd.priority-1:hover { color: #559; }
tr.odd.priority-1 { background: #eaf7ff; }
tr.even.priority-1, table.list tbody tr.even.priority-1:hover { color: #559; }
tr.even.priority-1 { background: #f2faff; }
tr.priority-1 a { color: #559; }
tr.odd.priority-1 td, tr.even.priority-1 td { border-color: #add7f3; }
/* Table-row link-colouring by priority (respecting the table-row colouring styles above) */
table.list tr.priority-5 a,
table.list tr.priority-4 a,
table.list tr.priority-3 a { color: #900; }
table.list tr.priority-1 a { color: #559; }
/*
* Progressbars
*/
/* Generic progressbars */
table.progress td.todo,
table.progress td.done,
table.progress td.closed {
background: #666 url(../images/middle_shine.png) left center repeat-x;
height: 25px;
border: none;
}
table.progress td.todo {
background: #fff;
}
table.progress td.done {
background-color: #37b3ff;
}
table.progress td.closed {
background-color: #2187C6;
}
/* Issuelist progressbars */
table.list table.progress td {
height: 15px;
}
p.pourcent {
font-size: 1.25em;
}
/*
* Icons
*/
.icon {
background-position: left top;
background-repeat: no-repeat;
padding-left: 20px;
padding-top: 2px;
padding-bottom: 3px;
line-height: 16px;
margin-left: 5px;
}
.icon22 {
background-position: 0% 40%;
background-repeat: no-repeat;
padding-left: 26px;
line-height: 22px;
vertical-align: middle;
}
/* Icons replaced by Fugue icons */
.icon-add { background-image: url(../images/fugue/plus-small.png); }
.icon-edit { background-image: url(../images/fugue/pencil-small.png); }
.icon-copy { background-image: url(../images/fugue/documents.png); }
.icon-del { background-image: url(../images/fugue/ticket--minus.png); }
.icon-move { background-image: url(../images/fugue/ticket--arrow.png); }
.icon-save { background-image: url(../images/fugue/disk-black.png); }
.icon-cancel { background-image: url(../images/fugue/arrow.png); }
.icon-time { background-image: url(../images/fugue/clock.png); }
.icon-time-add { background-image: url(../images/fugue/clock--plus.png); }
.icon-fav { background-image: url(../images/fugue/star.png); }
.icon-fav-off { background-image: url(../images/fugue/star-empty.png); }
/* Icons not replaced by Fugue icons
.icon-file { background-image: url(/images/file.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-home { background-image: url(/images/home.png); }
.icon-user { background-image: url(/images/user.png); }
.icon-mypage { background-image: url(/images/user_page.png); }
.icon-admin { background-image: url(/images/admin.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-index { background-image: url(/images/index.png); }
.icon-history { background-image: url(/images/history.png); }
.icon-stats { background-image: url(/images/stats.png); }
.icon-warning { background-image: url(/images/warning.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); }
.icon22-projects { background-image: url(/images/22x22/projects.png); }
.icon22-users { background-image: url(/images/22x22/users.png); }
.icon22-tracker { background-image: url(/images/22x22/tracker.png); }
.icon22-role { background-image: url(/images/22x22/role.png); }
.icon22-workflow { background-image: url(/images/22x22/workflow.png); }
.icon22-options { background-image: url(/images/22x22/options.png); }
.icon22-notifications { background-image: url(/images/22x22/notifications.png); }
.icon22-authent { background-image: url(/images/22x22/authent.png); }
.icon22-info { background-image: url(/images/22x22/info.png); }
.icon22-comment { background-image: url(/images/22x22/comment.png); }
.icon22-package { background-image: url(/images/22x22/package.png); }
.icon22-settings { background-image: url(/images/22x22/settings.png); }
.icon22-plugin { background-image: url(/images/22x22/plugin.png); }
*/
/*
* Buttons
*/
input[type="button"], input[type="submit"], input[type="reset"] {
background-color: #f2f2f2;
color: #222222;
border: 1px outset #cccccc;
}
input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover {
background-color: #ccccbb;
}
/*
* Fields
*/
input[type="text"], textarea, select {
padding: 2px;
border: 1px solid #d7d7d7;
}
input[type="text"] {
padding: 3px;
}
input[type="text"]:focus, textarea:focus, select:focus {
border: 1px solid #888866;
}
/*
* Boxes
*/
div.box {
border: none;
background: none;
}
/*
* Quicksearch
*/
div#quick-search a {
padding-left: 20px;
background: url(../images/fugue/magnifier-left.png) left center no-repeat;
font-weight: normal;
}
/*
* Issue Journals
*/
/* Issue-history (journal) UL for issue-field changes*/
#history ul {
list-style: disc;
margin-top: 8px;
margin-left: 14px;
padding-left: 20px;
font-size: 94%;
}
/* Issue-history comment UL font-size reset*/
#history .wiki > ul {
font-size: inherit; /* back to 81% to workaround the 94% of #history ul */
}
/* Generic Issue-journals */
#history .journal {
border-bottom: solid 1px #d5d5d5;
padding-bottom: 14px;
}
/* Issue-journal paragraphs */
#history .journal p {
margin-bottom: 8px;
}
/* Issue-journals, first paragraph after .contextual, note-image insertion */
#history .journal .contextual + p:before { /* Not on <= IE7 */
vertical-align: -12%;
padding-right: 5px;
content: url(../images/fugue/sticky-note.png);
}
/* Fixes for issue-journals when editing them inline */
#history .journal > form > p {
padding-left: 0px;
background: none;
}
/*
* Roadmap versions
*/
div#version-summary {
background: transparent;
}
/*
* Issue-report zoom-images
*/
div.nosidebar#main > div#content > div.splitcontentleft > h3,
div.nosidebar#main > div#content > div.splitcontentright > h3 {
margin-top: 15px;
}
/*
* Repository-browser
*/
table#browser tr td.filename a {
color: #666;
font-weight: normal;
}
table#browser tr td.filename a:hover {
color: #b3b3b3;
}
/*
* Repository-statistics images
*/
div.nosidebar#main > div#content embed {
display: block;
margin-top: 28px;
margin-left: auto;
margin-right: auto;
}
/*
* Context-menu
*/
/* Context-menu link font-weight ("a:hover {color:xxx;}" isn't settable...) */
#context-menu a {
font-weight: normal;
}
/*************************************************************************
THIRD-PARTY DECLARATIONS FOR NON PROJECT-MENU ITEMS - START
*************************************************************************/
/* Burndowns plugin */
div#main > div#content > p > img {
display: block;
margin-top: 28px;
margin-left: auto;
margin-right: auto;
}
/* Charts plugin */
div#main > div#content > div.splitcontentright > object {
margin-top: 28px;
}
/* Google-Calendar & Tab plugin */
div#main > div#content > iframe {
display: block;
margin-top: 28px;
margin-left: auto;
margin-right: auto;
}
/* Graphs plugin */
div#main > div#content > embed {
margin-top: 28px;
margin-bottom: 20px;
}
div.nosidebar#main > div#content > fieldset#target_version_graph > embed {
margin-top: 0px;
}
/* Taskboard plugin */
#task_board tr > td {
height: 0.75em;
}
/*************************************************************************
THIRD-PARTY DECLARATIONS FOR NON PROJECT-MENU ITEMS - END
*************************************************************************/
/*************************************************************************
Custom tweaks based on other themes
*************************************************************************/
body {background: white; }
#top-menu {background-color: white; color: black; }
#top-menu a {color: black; }
#top-menu a:hover {color: black; text-decoration: underline; text-shadow: 1px 1px 1px rgba(0,0,0,.5); }
#header {background: none; color: black; }
#header a {color: black; }
#top-menu #loggedas { color: black; }
#content { background-image: none; border: 1px solid #000; -webkit-box-shadow: 2px 2px 4px rgba(0,0,0,.8); }
#content > h2 {font-size: 3em; text-shadow: 1px 1px 1px rgba(0,0,0,.5); background-color: #EDF3FE; margin: -6px -10px 10px -15px; padding: 10px 20px; } /* Title of the content section */
#main { background: white; }
#sidebar { padding-top: 20px; } /* lower the text below any content headers */
#sidebar, #sidebar h1, #sidebar h2, #sidebar h3, #sidebar h4, #sidebar h5 { color: #666; text-shadow: none; }
#sidebar a { color: #000000; }
#footer, #footer a { color: #AAAAAA;}
#footer a { color: #888888; }
#footer a:hover { color: #888888; text-decoration: underline; }
/**** Project menus ****/
/* Link color */
#main-menu li a {color: #222222;}
#main-menu li a.selected {color: #111111;}
#main-menu li a:hover, #main-menu li a.selected:hover {color: #000000;}
/* Background */
#main-menu li {background-color: #FFFFFF; border-color: #DDDDDD; border-width: 1px 1px 1px 1px; }
#main-menu li:hover {background-color: #DDDDDD;}
#main-menu li a, #main-menu li a:hover {}
#main-menu li a.selected, #main-menu li a.selected:hover {background-color: #EEEEEE;}
#main-menu li a, #main-menu li a.selected, #main-menu li a:hover {text-shadow: none;} /* Remove drop shadow */
#top-menu { border-bottom: 2px solid #FF4719; }
/* Project-menu first/last tab bottom roundings (for KHTML [Konqueror], Gecko [Mozilla] and WebKit [Safari/Chrome]) */
#main-menu li:first-child {
-khtml-border-radius-bottomleft: 5px;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
}
#main-menu li:last-child {
-khtml-border-radius-bottomright: 5px;
-moz-border-radius-bottomright: 5px;
-webkit-border-bottom-right-radius: 5px;
}
/*************************************************************************
Additional wiki styles
*************************************************************************/
.button {
padding-left: .25em;
padding-right: .25em;
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 {
display: block;
margin-top: .5em;
margin-bottom: .5em;
padding: 4px 4px 4px 48px;
min-height: 33px;
}
.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 {
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 {
background: url(../images/wiki_styles/see-also_small.png) 4px 4px no-repeat #f5fffa;
border: 1px solid #AAB1AD;
}
.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 {
background: url(../images/wiki_styles/caution_small.png) 4px 4px no-repeat #f5fffa;
border: 1px solid #AAB1AD;
}
.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 {
background: url(../images/wiki_styles/important_small.png) 4px 6px no-repeat #F0F8FF;
border: 1px solid #C1C8CF;
}
.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 {
background: url(../images/wiki_styles/info_small.png) 4px 4px no-repeat #FFFFE0;
border: 1px solid #FFFF00;
}
.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 {
background: url(../images/wiki_styles/tip_small.png) 4px 5px no-repeat #F5FFFA;
border: 1px solid #C7CFCA;
}
.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 {
background: url(../images/wiki_styles/note_small.png) 5px 4px no-repeat #F5FFFA;
border: 1px solid #C7CFCA;
}
\ No newline at end of file
......@@ -20,19 +20,19 @@ class AutoCompletesControllerTest < ActionController::TestCase
test 'should return issues matching a given id' do
@project = Project.find('subproject1')
@issue_21 = Issue.generate_for_project!(@project, :id => 21)
@issue_101 = Issue.generate_for_project!(@project, :id => 101)
@issue_102 = Issue.generate_for_project!(@project, :id => 102)
@issue_with_subject = Issue.generate_for_project!(@project, :subject => 'This has 1 in the subject')
@issue_2101 = Issue.generate_for_project!(@project, :id => 2101)
@issue_2102 = Issue.generate_for_project!(@project, :id => 2102)
@issue_with_subject = Issue.generate_for_project!(@project, :subject => 'This has 21 in the subject')
get :issues, :project_id => @project.id, :q => '1'
get :issues, :project_id => @project.id, :q => '21'
assert_response :success
assert_not_nil assigns(:issues)
assert assigns(:issues).include?(Issue.find(13))
assert assigns(:issues).include?(@issue_21)
assert assigns(:issues).include?(@issue_101)
assert assigns(:issues).include?(@issue_102)
assert assigns(:issues).include?(@issue_2101)
assert assigns(:issues).include?(@issue_2102)
assert assigns(:issues).include?(@issue_with_subject)
assert_equal assigns(:issues).size, assigns(:issues).uniq.size, "Issues list includes duplicates"
end
def test_auto_complete_with_scope_all_and_cross_project_relations
......
require 'test_helper'
class HelpControllerTest < ActionController::TestCase
test "renders wiki_syntax properly" do
get "wiki_syntax"
assert_select "h1", "Wiki Syntax Quick Reference"
end
test "renders wiki_syntax_detailed properly" do
get "wiki_syntax_detailed"
assert_select "h1", "Wiki Formatting"
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment