diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 55d7608..7f1fd09 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -5,12 +5,17 @@ class ApplicationController < ActionController::Base before_filter :detect_stuff_by_domain attr_reader :virtual_community + #TODO To diplay the content we need a variable called '@boxes'. + #This variable is a set of boxes belongs to a owner + #We have to see a better way to do that before_filter :load_boxes def load_boxes - @owner = User.find(1) - @boxes = @owner.boxes + if User.exists?(1) + owner = User.find(1) + owner.nil? ? Array.new : @boxes = owner.boxes + end end - + protected def detect_stuff_by_domain diff --git a/app/controllers/edit_template_controller.rb b/app/controllers/edit_template_controller.rb index 171ccbf..012301d 100644 --- a/app/controllers/edit_template_controller.rb +++ b/app/controllers/edit_template_controller.rb @@ -1,31 +1,14 @@ class EditTemplateController < ApplicationController - # TODO: this methods don't belong here - #TODO See a better way to do this. The layout need a owner to work -# before_filter :load_owner -# def load_owner -# end - - def index - @bli = _('testing the app') - end -# before_filter :load_boxes - def load_boxes - @owner = User.find(1) - @boxes = @owner.boxes - end - # This method changes a block content to a different box place and # updates all boxes at the ends def change_box -render :text => "fudeuuuuuu" -return b = Block.find(params[:block]) b.box = Box.find(params[:box_id]) b.save render :update do |page| - @owner.boxes.each do |box| - @box_number = box.number + @boxes.each do |box| + @box = box page.replace_html "box_#{box.number}", {:partial => 'layouts/box_template'} page.sortable "sort_#{box.number}", :url => {:action => 'sort_box', :box_number => box.number} end @@ -33,8 +16,6 @@ return end def sort_box -render :text => "oxeee" -return blocks = Array.new box_number = params[:box_number] pos = 0 @@ -45,7 +26,7 @@ return b.save blocks.push(b) end - @box_number = box_number + @box = box_number render :partial => 'layouts/box_template' end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index c0f457d..6b2a949 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,42 +1,67 @@ # Methods added to this helper will be available to all templates in the application. module ApplicationHelper - def display_boxes(boxes, main_content) - boxes.map do |box| - content_tag(:div, show_blocks(box, main_content) ,:id=>"box_#{box.number}") + # This method expect an array of boxes and the content retuned of a controller action + def display_boxes(boxes, main_content = "") + # If no boxes is passed return the main content + return main_content if boxes.nil? + + #Generate all boxes of the current profile and considering the defined on template. + content = boxes.map do |box| + content_tag(:div, edit_mode? ? edit_blocks(box, main_content) : show_blocks(box, main_content) , :id=>"box_#{box.number}") end + + #In case of edit mode add a new div with a class named 'edit_mode' covering all div boxes. + content = content_tag(:div, content, :class => 'edit_mode') if edit_mode? + + content + end + + private + + def edit_mode? + true if controller.controller_name == 'edit_template' + end + + def show_blocks(box, main_content = "") + blocks = box.blocks_sort_by_position + content_tag(:ul, + blocks.map {|b| + content_tag(:li, b.main? ? main_content : b.to_html, :class =>"block_item_box_#{box.number}" , :id => "block_#{b.id}" ) + }, :id => "sort_#{box.number}" + ) end - def show_blocks(box, main_content) - blocks = box.blocks + def edit_blocks(box, main_content = "") + blocks = box.blocks_sort_by_position content_tag(:ul, blocks.map {|b| - content_tag(:li, b.main? ? main_content : b.to_html, :class =>"block_item_box_#{b.box_id}" , :id => "block_#{b.id}" ) + draggable('block_'+b.id.to_s) + content_tag(:li, b.main? ? main_content : b.to_html , :class =>"block_item_box_#{box.number}" , :id => "block_#{b.id}" ) + draggable("block_#{b.id}") }, :id => "sort_#{box.number}" - ) + drag_drop_item(box.number) + sortable_block(box.number) + ) + drag_drop_items(box) + sortable_block(box.number) end def sortable_block(box_number) sortable_element "sort_#{box_number}", - :complete => visual_effect(:highlight, "sort_#{box_number}"), - :url => {:action => 'sort_box', :box_number => box_number } + :url => {:action => 'sort_box', :box_number => box_number }, + :complete => visual_effect(:highlight, "sort_#{box_number}") end def draggable(item) draggable_element(item, :ghosting=>true, :revert=>true) end - def drag_drop_item box_number - boxes = Box.find_not_box(box_number) + def drag_drop_items(box) + boxes = Box.find_not_box(box.id) boxes.map{ |b| - drop_receiving_element("box_#{box_number}", + drop_receiving_element("box_#{box.number}", :accept => "block_item_box_#{b.number}", :complete => "$('spinner').hide();", :before => "$('spinner').show();", :hoverclass => 'hover', :with => "'block=' + encodeURIComponent(element.id.split('_').last())", - :url => {:action=>:change_box, :box_id => box_number}) + :url => {:action=>:change_box, :box_id => box.id}) }.to_s end diff --git a/app/helpers/edit_template_helper.rb b/app/helpers/edit_template_helper.rb deleted file mode 100644 index 36780ef..0000000 --- a/app/helpers/edit_template_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module EditTemplateHelper -end diff --git a/app/models/box.rb b/app/models/box.rb index b925d30..601e8ef 100644 --- a/app/models/box.rb +++ b/app/models/box.rb @@ -11,4 +11,9 @@ class Box < ActiveRecord::Base def self.find_not_box(box_id) return Box.find(:all, :conditions => ['id != ?', box_id]) end + + def blocks_sort_by_position + self.blocks.sort{|x,y| x.position <=> y.position} + end + end diff --git a/app/views/edit_template/index.rhtml b/app/views/edit_template/index.rhtml index caee0d9..70a9e73 100644 --- a/app/views/edit_template/index.rhtml +++ b/app/views/edit_template/index.rhtml @@ -1 +1 @@ -oi funfou <%= @bli %> +