OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/app/views/my/page_layout.html.erb

152 lines
5.9 KiB

<%#-- copyright
OpenProject is a project management system.
Copyright (C) 2012-2015 the OpenProject Foundation (OPF)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
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.
See doc/COPYRIGHT.rdoc for more details.
++#%>
<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++) {
var block = $('block_' + s.options[i].value);
if (block && block.visible()) {
s.options[i].disabled = true;
} else {
if (block) { block.remove(); }
s.options[i].disabled = false;
}
}
s.options[0].selected = true;
}
function afterAddBlock() {
recreateSortables();
updateSelect();
}
function removeBlock(block) {
Effect.DropOut(block,{ 'afterFinish':function(){
updateSelect();
}});
}
//]]>
</script>
<%= toolbar title: l(:label_my_page) do %>
<li class="toolbar-item">
<%= styled_form_tag({action: "add_block"}, id: "block-form") do %>
<%= styled_select_tag 'block', "<option>--#{t(:button_add)}--</option>".html_safe + options_for_select(@block_options),
id: "block-select",
class: '-small' %>
<% end %>
</li>
<li class="toolbar-item">
<%= link_to_remote l(:button_add),
{url: { action: "add_block" },
with: "Form.serialize('block-form')",
update: "list-top",
position: :top,
complete: "afterAddBlock();"
}, class: 'button'
%>
</li>
<li class="toolbar-item">
<%= link_to({action: 'page'}, class: 'button') do %>
<i class="button--icon icon-cancel"></i>
<span class="button--text"><%= l(:button_back) %></span>
<% end %>
</li>
<% end %>
<h4><%=l(:label_visible_elements) %></h4>
<div id="visible-grid">
<div class="grid-block">
<div id="list-top" class="grid-content block-receiver">
<% @blocks['top'].each do |b|
next unless MyController.available_blocks.keys.include? b %>
<%= render partial: 'block', locals: {user: @user, block_name: b} %>
<% end if @blocks['top'] %>
</div>
</div>
<div class="grid-block">
<div id="list-left" class="grid-content block-receiver left">
<% @blocks['left'].each do |b|
next unless MyController.available_blocks.keys.include? b %>
<%= render partial: 'block', locals: {user: @user, block_name: b} %>
<% end if @blocks['left'] %>
</div>
<div id="list-right" class="grid-content block-receiver right">
<% @blocks['right'].each do |b|
next unless MyController.available_blocks.keys.include? b %>
<%= render partial: 'block', locals: {user: @user, block_name: b} %>
<% end if @blocks['right'] %>
</div>
</div>
</div>
<%= sortable_element 'list-top',
tag: 'div',
only: 'mypage-box',
handle: "handle",
dropOnEmpty: true,
containment: ['list-top', 'list-left', 'list-right'],
constraint: false,
url: { action: "order_blocks", group: "top" }
%>
<%= sortable_element 'list-left',
tag: 'div',
only: 'mypage-box',
handle: "handle",
dropOnEmpty: true,
containment: ['list-top', 'list-left', 'list-right'],
constraint: false,
url: { action: "order_blocks", group: "left" }
%>
<%= sortable_element 'list-right',
tag: 'div',
only: 'mypage-box',
handle: "handle",
dropOnEmpty: true,
containment: ['list-top', 'list-left', 'list-right'],
constraint: false,
url: { action: "order_blocks", group: "right" }
%>
<%= javascript_tag "updateSelect()" %>
<% html_title(l(:label_my_page)) -%>