diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-03-13 14:56:49 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-03-13 14:56:49 +0000 |
commit | 8e3d1b694ab47317638b474082cb70e08a8d02e7 (patch) | |
tree | 9997cc24910a029fea3e98ed0765566d9c4bb97e /public | |
parent | e109c9b6b6f314dea19bf92dffa217d962eaa200 (diff) | |
download | redmine-8e3d1b694ab47317638b474082cb70e08a8d02e7.tar.gz redmine-8e3d1b694ab47317638b474082cb70e08a8d02e7.zip |
Adds subtasking (#443) including:
* priority, start/due dates, progress, estimate, spent time roll-up to parent issues
* descendant issues tree displayed on the issue view with context menu support
* issue tree display on the gantt chart
* issue tree copy on project copy
* unlimited nesting
Defining subtasks requires the new permission 'Manage subtasks'.
Subtasks can not belong to a different project than the parent task.
Implementation is based on scoped nested sets for fast reads and updates.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3573 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'public')
-rw-r--r-- | public/images/task_parent_end.png | bin | 0 -> 165 bytes | |||
-rw-r--r-- | public/javascripts/application.js | 12 | ||||
-rw-r--r-- | public/stylesheets/application.css | 25 |
3 files changed, 32 insertions, 5 deletions
diff --git a/public/images/task_parent_end.png b/public/images/task_parent_end.png Binary files differnew file mode 100644 index 000000000..fc9205643 --- /dev/null +++ b/public/images/task_parent_end.png diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 787b9904c..4cd34c2f2 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -194,6 +194,18 @@ function randomKey(size) { return key; } +function observeParentIssueField(url) { + new Ajax.Autocompleter('issue_parent_issue_id', + 'parent_issue_candidates', + url, + { minChars: 3, + frequency: 0.5, + paramName: 'q', + updateElement: function(value) { + document.getElementById('issue_parent_issue_id').value = value.id; + }}); +} + /* shows and hides ajax indicator */ Ajax.Responders.register({ onCreate: function(){ diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index ec31c95c3..cd8e98699 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -237,6 +237,13 @@ 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 table.issues { border: 0; } + fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; } 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); } @@ -588,8 +595,7 @@ button.tab-right { /***** Auto-complete *****/ div.autocomplete { position:absolute; - width:250px; - background-color:white; + width:400px; margin:0; padding:0; } @@ -598,23 +604,26 @@ div.autocomplete ul { margin:0; padding:0; } -div.autocomplete ul li.selected { background-color: #ffb;} div.autocomplete ul li { list-style-type:none; display:block; - margin:0; + margin:-1px 0 0 0; padding:2px; cursor:pointer; font-size: 90%; - border-bottom: 1px solid #ccc; + border: 1px solid #ccc; border-left: 1px solid #ccc; border-right: 1px solid #ccc; + background-color:white; } +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;} + /***** Diff *****/ .diff_out { background: #fcc; } .diff_in { background: #cfc; } @@ -741,6 +750,12 @@ background-image:url('../images/close_hl.png'); .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; } .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; } .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; } + +.task_todo.parent { background: #888; border: 1px solid #888; height: 6px;} +.task_late.parent, .task_done.parent { height: 3px;} +.task_todo.parent .left { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -5px; left: 0px; top: -1px;} +.task_todo.parent .right { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-right: -5px; right: 0px; top: -1px;} + .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; } /***** Icons *****/ |