Commit 1c97572bc660cde5b68cdc66d134d73c652f430f
1 parent
77b54988
Exists in
master
and in
28 other branches
Change community track creation usability
Showing
6 changed files
with
117 additions
and
33 deletions
Show diff stats
plugins/community_track/lib/community_track_plugin/step_helper.rb
| ... | ... | @@ -21,6 +21,16 @@ module CommunityTrackPlugin::StepHelper |
| 21 | 21 | nil |
| 22 | 22 | end |
| 23 | 23 | |
| 24 | + def link_to_step_tool(step, options={}) | |
| 25 | + if step.tool | |
| 26 | + link_to step.tool.view_url, options do | |
| 27 | + yield | |
| 28 | + end | |
| 29 | + else | |
| 30 | + yield | |
| 31 | + end | |
| 32 | + end | |
| 33 | + | |
| 24 | 34 | protected |
| 25 | 35 | |
| 26 | 36 | def status_index(step) | ... | ... |
plugins/community_track/public/style.css
| ... | ... | @@ -3,17 +3,17 @@ |
| 3 | 3 | background-image: url(/plugins/community_track/icons/community-track.png) |
| 4 | 4 | } |
| 5 | 5 | |
| 6 | -.step_active, #article .step_active a { | |
| 6 | +.step_active, #article .step_active { | |
| 7 | 7 | background-color: #CCEBD6; |
| 8 | 8 | color: #338533; |
| 9 | 9 | } |
| 10 | 10 | |
| 11 | -.step_waiting, #article .step_waiting a { | |
| 11 | +.step_waiting, #article .step_waiting { | |
| 12 | 12 | background-color: #FFFFD1; |
| 13 | 13 | color: #D17519; |
| 14 | 14 | } |
| 15 | 15 | |
| 16 | -.step_finished, #article .step_finished a { | |
| 16 | +.step_finished, #article .step_finished { | |
| 17 | 17 | background-color: #D1FFFF; |
| 18 | 18 | color: #00297A; |
| 19 | 19 | } |
| ... | ... | @@ -24,6 +24,7 @@ |
| 24 | 24 | |
| 25 | 25 | .step { |
| 26 | 26 | font-weight: bold; |
| 27 | + margin-bottom: 3px; | |
| 27 | 28 | } |
| 28 | 29 | |
| 29 | 30 | .track_list .item .step { |
| ... | ... | @@ -73,6 +74,11 @@ |
| 73 | 74 | .steps .step { |
| 74 | 75 | margin-top: 3px; |
| 75 | 76 | margin-bottom: 3px; |
| 77 | + display: block; | |
| 78 | +} | |
| 79 | + | |
| 80 | +.steps a { | |
| 81 | + text-decoration: none; | |
| 76 | 82 | } |
| 77 | 83 | |
| 78 | 84 | .track_list .item_card .track_stats { |
| ... | ... | @@ -126,11 +132,12 @@ |
| 126 | 132 | #track .position { |
| 127 | 133 | font-size: 24px; |
| 128 | 134 | font-weight: bold; |
| 129 | - float: left; | |
| 130 | 135 | margin: 0 10px; |
| 136 | + display: inline-block; | |
| 137 | + vertical-align: top; | |
| 131 | 138 | } |
| 132 | 139 | |
| 133 | -#track .step .name, #track .step .name a { | |
| 140 | +#track .step .name { | |
| 134 | 141 | font-weight: bold; |
| 135 | 142 | color: #333; |
| 136 | 143 | } |
| ... | ... | @@ -151,7 +158,7 @@ |
| 151 | 158 | |
| 152 | 159 | #track .content { |
| 153 | 160 | margin: 6px 0px; |
| 154 | - border-bottom: 1px solid #DDDDDD; | |
| 161 | + display: inline-block; | |
| 155 | 162 | } |
| 156 | 163 | |
| 157 | 164 | #track .ui-state-default .content { |
| ... | ... | @@ -201,16 +208,51 @@ |
| 201 | 208 | } |
| 202 | 209 | |
| 203 | 210 | .step_list .step .tools { |
| 204 | - text-align: center; | |
| 211 | + margin-top: 5px; | |
| 205 | 212 | } |
| 206 | 213 | |
| 207 | -.step_list .step .actions { | |
| 208 | - float: right; | |
| 214 | +#article .step_list .step .tool_icon, | |
| 215 | +.tool_icon { | |
| 216 | + color: #888; | |
| 217 | + background-color: transparent; | |
| 218 | + border: 0px; | |
| 219 | + background-repeat: no-repeat; | |
| 220 | + line-height: 20px; | |
| 221 | + height: 20px; | |
| 222 | + padding: 3px 2px 3px 22px; | |
| 209 | 223 | } |
| 210 | 224 | |
| 211 | -#article .step_list .step .actions .button { | |
| 225 | +#article .step .tool_link { | |
| 226 | + cursor: pointer; | |
| 227 | +} | |
| 228 | + | |
| 229 | +#article .step_active .tool_link:hover, | |
| 230 | +.step_active:hover { | |
| 231 | + background-color: #B8D4C1; | |
| 232 | +} | |
| 233 | + | |
| 234 | +#article .step_waiting .tool_link:hover, | |
| 235 | +.step_waiting:hover { | |
| 236 | + background-color: #E6E6BC; | |
| 237 | +} | |
| 238 | + | |
| 239 | +#article .step_finished .tool_link:hover, | |
| 240 | +.step_finished:hover { | |
| 241 | + background-color: #BCE6E6; | |
| 242 | +} | |
| 243 | + | |
| 244 | +.step_list .step .step_actions { | |
| 245 | + text-align: right; | |
| 246 | + border-top: 1px solid; | |
| 247 | +} | |
| 248 | + | |
| 249 | +#article .step_list .step .step_actions .button { | |
| 212 | 250 | color: #888; |
| 213 | 251 | background-color: transparent; |
| 214 | 252 | border: 0px; |
| 215 | - background-image: none; | |
| 253 | + border-right: 1px solid; | |
| 254 | +} | |
| 255 | + | |
| 256 | +#article .step_list .step .step_actions .button:hover { | |
| 257 | + color: #444; | |
| 216 | 258 | } | ... | ... |
plugins/community_track/test/functional/community_track_plugin_content_viewer_controller_test.rb
| ... | ... | @@ -21,7 +21,7 @@ class ContentViewerControllerTest < ActionController::TestCase |
| 21 | 21 | |
| 22 | 22 | should 'show actions for tracks when user has permission for edit' do |
| 23 | 23 | get :view_page, @track.url |
| 24 | - assert_tag :tag => 'div', :attributes => {:id => 'track' }, :descendant => { :tag => 'div', :attributes => { :class => 'actions' } } | |
| 24 | + assert_tag :tag => 'div', :attributes => {:id => 'track' }, :descendant => { :tag => 'div', :attributes => { :class => 'track actions' } } | |
| 25 | 25 | end |
| 26 | 26 | |
| 27 | 27 | should 'do not show actions for tracks when user has not permission to edit' do |
| ... | ... | @@ -107,7 +107,7 @@ class ContentViewerControllerTest < ActionController::TestCase |
| 107 | 107 | @block = CommunityTrackPlugin::TrackListBlock.create!(:box => box) |
| 108 | 108 | @profile.boxes << box |
| 109 | 109 | get :view_page, @step.url |
| 110 | - assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'div', :attributes => { :class => "step #{@block.status_class(@step)}" } } } | |
| 110 | + assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'span', :attributes => { :class => "step #{@block.status_class(@step)}" } } } | |
| 111 | 111 | end |
| 112 | 112 | |
| 113 | 113 | should 'render tracks in track card list block' do | ... | ... |
plugins/community_track/test/unit/community_track_plugin/step_helper_test.rb
| ... | ... | @@ -35,4 +35,21 @@ class StepHelperTest < ActiveSupport::TestCase |
| 35 | 35 | assert !custom_options_for_article(fast_create(Article)) |
| 36 | 36 | end |
| 37 | 37 | |
| 38 | + should 'return content without link if there is no tool in a step' do | |
| 39 | + link = link_to_step_tool(@step) do | |
| 40 | + "content" | |
| 41 | + end | |
| 42 | + assert_equal 'content', link | |
| 43 | + end | |
| 44 | + | |
| 45 | + should 'return link to step tool if there is a tool' do | |
| 46 | + profile = fast_create(Community) | |
| 47 | + tool = fast_create(Article, :profile_id => profile.id) | |
| 48 | + @step.stubs(:tool).returns(tool) | |
| 49 | + expects(:link_to).with(tool.view_url, {}).once | |
| 50 | + link = link_to_step_tool(@step) do | |
| 51 | + "content" | |
| 52 | + end | |
| 53 | + end | |
| 54 | + | |
| 38 | 55 | end | ... | ... |
plugins/community_track/views/blocks/_track.rhtml
| 1 | 1 | <% extend CommunityTrackPlugin::TrackHelper %> |
| 2 | +<% extend CommunityTrackPlugin::StepHelper %> | |
| 2 | 3 | <div class="item <%= category_class(track) %>"> |
| 3 | 4 | <div class="track_content"> |
| 4 | 5 | <div class="lead"> |
| ... | ... | @@ -10,10 +11,13 @@ |
| 10 | 11 | <div class="steps"> |
| 11 | 12 | <h3><%= _("Steps") %></h3> |
| 12 | 13 | <% track.steps.each do |step| %> |
| 13 | - <div class="step <%= block.status_class(step) %>"> | |
| 14 | - <div class="position"><%= step.position %></div> | |
| 15 | - <%= link_to step.name, step.url %> | |
| 16 | - </div> | |
| 14 | + <% link_to_step_tool(step) do %> | |
| 15 | + <span class="step <%= block.status_class(step) %>"> | |
| 16 | + <span class="position"><%= step.position %></span> | |
| 17 | + <span class="tool_icon button with-text icon-new icon-new<%= step.tool_class.icon_name if step.tool_class %>"></span> | |
| 18 | + <span class="name"><%= step.name %></span> | |
| 19 | + </span> | |
| 20 | + <% end %> | |
| 17 | 21 | <% end %> |
| 18 | 22 | </div> |
| 19 | 23 | </div> | ... | ... |
plugins/community_track/views/content_viewer/_step_item.rhtml
| 1 | 1 | <li class="step <%= status_class(step_item) %>"> |
| 2 | 2 | <%= hidden_field_tag "step_ids[]", step_item.id %> |
| 3 | - <div class="position"><%= step_item.hidden ? '' : step_item.position %></div> | |
| 4 | - <div class="actions"> | |
| 3 | + <div class="tool_link" onclick="l=jQuery('#step_link_<%= step_item.id%>'); if(l.length) window.location = l.first().attr('href');"> | |
| 4 | + <div class="position"><%= step_item.hidden ? '' : step_item.position %></div> | |
| 5 | + <div class="content"> | |
| 6 | + <div class="date"> | |
| 7 | + <%= show_period(step_item.start_date, step_item.end_date) %> | |
| 8 | + </div> | |
| 9 | + <div class="name"><span class="tool_icon button with-text icon-new icon-new<%= step_item.tool_class.icon_name if step_item.tool_class %>"></span> <%= step_item.name %></div> | |
| 10 | + <div class="lead"><%= step_item.body %></div> | |
| 11 | + <div class="tools"> | |
| 12 | + <% if step_item.tool %> | |
| 13 | + <%= _('Tool: ') %> | |
| 14 | + | |
| 15 | + <% link_to_step_tool(step_item, {:id => "step_link_#{step_item.id}"}) do %> | |
| 16 | + <%= step_item.tool.name %> | |
| 17 | + <% end %> | |
| 18 | + | |
| 19 | + <% elsif step_item.allow_create?(user) && step_item.tool_class %> | |
| 20 | + <a id="step_link_<%= step_item.id %>" href="<%= url_for({:controller => 'cms', :action => 'new', :type => step_item.tool_class, :parent_id => step_item, :success_back_to => url_for(step_item.parent.view_url)}) %>" class="button icon-new with-text icon-new<%= step_item.tool_class.icon_name %>"><%= _('Create %s' % step_item.tool_class.short_description) %></a> | |
| 21 | + <% end %> | |
| 22 | + </div> | |
| 23 | + </div> | |
| 24 | + </div> | |
| 25 | + <div class="step_actions"> | |
| 5 | 26 | <% if step_item.allow_edit?(user) && !remove_content_button(:edit) %> |
| 27 | + <%= button('eyes', _('View'), step_item.url) %> | |
| 6 | 28 | <% content = content_tag('span', label_for_edit_article(step_item)) %> |
| 7 | 29 | <% url = profile.admin_url.merge({ :controller => 'cms', :action => 'edit', :id => step_item.id, :success_back_to => url_for(step_item.parent.view_url) }) %> |
| 8 | 30 | <%= expirable_button step_item, :edit, content, url %> |
| 9 | 31 | <% end %> |
| 10 | - </div> | |
| 11 | - <div class="content"> | |
| 12 | - <div class="date"> | |
| 13 | - <%= show_period(step_item.start_date, step_item.end_date) %> | |
| 14 | - </div> | |
| 15 | - <div class="name"><%= link_to step_item.name, step_item.url %></div> | |
| 16 | - <div class="lead"><%= step_item.body %></div> | |
| 17 | - </div> | |
| 18 | - <div class="tools"> | |
| 19 | - <% if step_item.tool %> | |
| 20 | - <%= link_to step_item.tool.name, step_item.tool.view_url %> | |
| 21 | - <% elsif step_item.allow_create?(user) && step_item.tool_class %> | |
| 22 | - <a href="<%= url_for({:controller => 'cms', :action => 'new', :type => step_item.tool_class, :parent_id => step_item, :success_back_to => url_for(step_item.parent.view_url)}) %>" class="button icon-new with-text icon-new<%= step_item.tool_class.icon_name %>"><%= _('Create %s' % step_item.tool_class.short_description) %></a> | |
| 23 | - <% end %> | |
| 32 | + <% if step_item.accept_uploads? && step_item.allow_create?(user) %> | |
| 33 | + <%= button('upload-file', _('Upload files'), profile.admin_url.merge(:controller => 'cms', :action => 'upload_files', :parent_id => step_item)) unless remove_content_button(:upload)%> | |
| 34 | + <% end %> | |
| 24 | 35 | </div> |
| 25 | 36 | </li> | ... | ... |