@user = User.current
@blocks = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup
@block_options = []
- BLOCKS.each {|k, v| @block_options << [l("my.blocks.#{v}", :default => [v, v.to_s.humanize]), k.dasherize]}
+ BLOCKS.each do |k, v|
+ unless %w(top left right).detect {|f| (@blocks[f] ||= []).include?(k)}
+ @block_options << [l("my.blocks.#{v}", :default => [v, v.to_s.humanize]), k.dasherize]
+ end
+ end
end
# Add a block to user's page
layout['top'].unshift block
@user.pref[:my_page_layout] = layout
@user.pref.save
- render :partial => "block", :locals => {:user => @user, :block_name => block}
+ redirect_to :action => 'page_layout'
end
# Remove a block to user's page
%w(top left right).each {|f| (layout[f] ||= []).delete block }
@user.pref[:my_page_layout] = layout
@user.pref.save
- render :nothing => true
+ redirect_to :action => 'page_layout'
end
# Change blocks order on user's page
-<script language="JavaScript">
-//<![CDATA[
-function recreateSortables() {
- Sortable.destroy('list-top');
- Sortable.destroy('list-left');
- Sortable.destroy('list-right');
-
- Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'top') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'})
- Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'left') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'})
- Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'right') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'})
-}
-
-function updateSelect() {
- s = $('block-select')
- for (var i = 0; i < s.options.length; i++) {
- if ($('block_' + s.options[i].value)) {
- s.options[i].disabled = true;
- } else {
- s.options[i].disabled = false;
- }
- }
- s.options[0].selected = true;
-}
-
-function afterAddBlock() {
- recreateSortables();
- updateSelect();
-}
-
-function removeBlock(block) {
- Effect.DropOut(block);
- updateSelect();
-}
-//]]>
-</script>
-
<div class="contextual">
-<%= form_tag({:action => "add_block"}, :id => "block-form") do %>
-<%= label_tag('block-select', l(:label_my_page_block)) %>:
-<%= select_tag 'block',
- content_tag('option') + options_for_select(@block_options),
- :id => "block-select" %>
-<%= link_to_remote l(:button_add),
- {:url => { :action => "add_block" },
- :with => "Form.serialize('block-form')",
- :update => "list-top",
- :position => :top,
- :complete => "afterAddBlock();"
- }, :class => 'icon icon-add'
- %>
+<% if @block_options.present? %>
+ <%= form_tag({:action => "add_block"}, :id => "block-form") do %>
+ <%= label_tag('block-select', l(:label_my_page_block)) %>:
+ <%= select_tag 'block',
+ content_tag('option') + options_for_select(@block_options),
+ :id => "block-select" %>
+ <%= link_to l(:button_add), '#', :onclick => '$("block-form").submit()', :class => 'icon icon-add' %>
+ <% end %>
<% end %>
<%= link_to l(:button_back), {:action => 'page'}, :class => 'icon icon-cancel' %>
</div>
:url => { :action => "order_blocks", :group => "right" }
%>
-<%= javascript_tag "updateSelect()" %>
<% html_title(l(:label_my_page)) -%>
end
def test_add_block
- xhr :post, :add_block, :block => 'issuesreportedbyme'
- assert_response :success
+ post :add_block, :block => 'issuesreportedbyme'
+ assert_redirected_to '/my/page_layout'
assert User.find(2).pref[:my_page_layout]['top'].include?('issuesreportedbyme')
end
def test_remove_block
- xhr :post, :remove_block, :block => 'issuesassignedtome'
- assert_response :success
+ post :remove_block, :block => 'issuesassignedtome'
+ assert_redirected_to '/my/page_layout'
assert !User.find(2).pref[:my_page_layout].values.flatten.include?('issuesassignedtome')
end