Commit 92376e38556db312842764a701927bdf18dc1618
1 parent
6794ef2e
Exists in
master
and in
22 other branches
ActionItem0: refactoring layout generation
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@62 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
10 changed files
with
71 additions
and
48 deletions
Show diff stats
app/controllers/application.rb
| @@ -5,12 +5,17 @@ class ApplicationController < ActionController::Base | @@ -5,12 +5,17 @@ class ApplicationController < ActionController::Base | ||
| 5 | before_filter :detect_stuff_by_domain | 5 | before_filter :detect_stuff_by_domain |
| 6 | attr_reader :virtual_community | 6 | attr_reader :virtual_community |
| 7 | 7 | ||
| 8 | + #TODO To diplay the content we need a variable called '@boxes'. | ||
| 9 | + #This variable is a set of boxes belongs to a owner | ||
| 10 | + #We have to see a better way to do that | ||
| 8 | before_filter :load_boxes | 11 | before_filter :load_boxes |
| 9 | def load_boxes | 12 | def load_boxes |
| 10 | - @owner = User.find(1) | ||
| 11 | - @boxes = @owner.boxes | 13 | + if User.exists?(1) |
| 14 | + owner = User.find(1) | ||
| 15 | + owner.nil? ? Array.new : @boxes = owner.boxes | ||
| 16 | + end | ||
| 12 | end | 17 | end |
| 13 | - | 18 | + |
| 14 | protected | 19 | protected |
| 15 | 20 | ||
| 16 | def detect_stuff_by_domain | 21 | def detect_stuff_by_domain |
app/controllers/edit_template_controller.rb
| 1 | class EditTemplateController < ApplicationController | 1 | class EditTemplateController < ApplicationController |
| 2 | 2 | ||
| 3 | - # TODO: this methods don't belong here | ||
| 4 | - #TODO See a better way to do this. The layout need a owner to work | ||
| 5 | -# before_filter :load_owner | ||
| 6 | -# def load_owner | ||
| 7 | -# end | ||
| 8 | - | ||
| 9 | - def index | ||
| 10 | - @bli = _('testing the app') | ||
| 11 | - end | ||
| 12 | -# before_filter :load_boxes | ||
| 13 | - def load_boxes | ||
| 14 | - @owner = User.find(1) | ||
| 15 | - @boxes = @owner.boxes | ||
| 16 | - end | ||
| 17 | - | ||
| 18 | # This method changes a block content to a different box place and | 3 | # This method changes a block content to a different box place and |
| 19 | # updates all boxes at the ends | 4 | # updates all boxes at the ends |
| 20 | def change_box | 5 | def change_box |
| 21 | -render :text => "fudeuuuuuu" | ||
| 22 | -return | ||
| 23 | b = Block.find(params[:block]) | 6 | b = Block.find(params[:block]) |
| 24 | b.box = Box.find(params[:box_id]) | 7 | b.box = Box.find(params[:box_id]) |
| 25 | b.save | 8 | b.save |
| 26 | render :update do |page| | 9 | render :update do |page| |
| 27 | - @owner.boxes.each do |box| | ||
| 28 | - @box_number = box.number | 10 | + @boxes.each do |box| |
| 11 | + @box = box | ||
| 29 | page.replace_html "box_#{box.number}", {:partial => 'layouts/box_template'} | 12 | page.replace_html "box_#{box.number}", {:partial => 'layouts/box_template'} |
| 30 | page.sortable "sort_#{box.number}", :url => {:action => 'sort_box', :box_number => box.number} | 13 | page.sortable "sort_#{box.number}", :url => {:action => 'sort_box', :box_number => box.number} |
| 31 | end | 14 | end |
| @@ -33,8 +16,6 @@ return | @@ -33,8 +16,6 @@ return | ||
| 33 | end | 16 | end |
| 34 | 17 | ||
| 35 | def sort_box | 18 | def sort_box |
| 36 | -render :text => "oxeee" | ||
| 37 | -return | ||
| 38 | blocks = Array.new | 19 | blocks = Array.new |
| 39 | box_number = params[:box_number] | 20 | box_number = params[:box_number] |
| 40 | pos = 0 | 21 | pos = 0 |
| @@ -45,7 +26,7 @@ return | @@ -45,7 +26,7 @@ return | ||
| 45 | b.save | 26 | b.save |
| 46 | blocks.push(b) | 27 | blocks.push(b) |
| 47 | end | 28 | end |
| 48 | - @box_number = box_number | 29 | + @box = box_number |
| 49 | render :partial => 'layouts/box_template' | 30 | render :partial => 'layouts/box_template' |
| 50 | end | 31 | end |
| 51 | 32 |
app/helpers/application_helper.rb
| 1 | # Methods added to this helper will be available to all templates in the application. | 1 | # Methods added to this helper will be available to all templates in the application. |
| 2 | module ApplicationHelper | 2 | module ApplicationHelper |
| 3 | 3 | ||
| 4 | - def display_boxes(boxes, main_content) | ||
| 5 | - boxes.map do |box| | ||
| 6 | - content_tag(:div, show_blocks(box, main_content) ,:id=>"box_#{box.number}") | 4 | + # This method expect an array of boxes and the content retuned of a controller action |
| 5 | + def display_boxes(boxes, main_content = "") | ||
| 6 | + # If no boxes is passed return the main content | ||
| 7 | + return main_content if boxes.nil? | ||
| 8 | + | ||
| 9 | + #Generate all boxes of the current profile and considering the defined on template. | ||
| 10 | + content = boxes.map do |box| | ||
| 11 | + content_tag(:div, edit_mode? ? edit_blocks(box, main_content) : show_blocks(box, main_content) , :id=>"box_#{box.number}") | ||
| 7 | end | 12 | end |
| 13 | + | ||
| 14 | + #In case of edit mode add a new div with a class named 'edit_mode' covering all div boxes. | ||
| 15 | + content = content_tag(:div, content, :class => 'edit_mode') if edit_mode? | ||
| 16 | + | ||
| 17 | + content | ||
| 18 | + end | ||
| 19 | + | ||
| 20 | + private | ||
| 21 | + | ||
| 22 | + def edit_mode? | ||
| 23 | + true if controller.controller_name == 'edit_template' | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + def show_blocks(box, main_content = "") | ||
| 27 | + blocks = box.blocks_sort_by_position | ||
| 28 | + content_tag(:ul, | ||
| 29 | + blocks.map {|b| | ||
| 30 | + content_tag(:li, b.main? ? main_content : b.to_html, :class =>"block_item_box_#{box.number}" , :id => "block_#{b.id}" ) | ||
| 31 | + }, :id => "sort_#{box.number}" | ||
| 32 | + ) | ||
| 8 | end | 33 | end |
| 9 | 34 | ||
| 10 | - def show_blocks(box, main_content) | ||
| 11 | - blocks = box.blocks | 35 | + def edit_blocks(box, main_content = "") |
| 36 | + blocks = box.blocks_sort_by_position | ||
| 12 | content_tag(:ul, | 37 | content_tag(:ul, |
| 13 | blocks.map {|b| | 38 | blocks.map {|b| |
| 14 | - 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) | 39 | + content_tag(:li, b.main? ? main_content : b.to_html , :class =>"block_item_box_#{box.number}" , :id => "block_#{b.id}" ) + draggable("block_#{b.id}") |
| 15 | }, :id => "sort_#{box.number}" | 40 | }, :id => "sort_#{box.number}" |
| 16 | - ) + drag_drop_item(box.number) + sortable_block(box.number) | 41 | + ) + drag_drop_items(box) + sortable_block(box.number) |
| 17 | end | 42 | end |
| 18 | 43 | ||
| 19 | def sortable_block(box_number) | 44 | def sortable_block(box_number) |
| 20 | sortable_element "sort_#{box_number}", | 45 | sortable_element "sort_#{box_number}", |
| 21 | - :complete => visual_effect(:highlight, "sort_#{box_number}"), | ||
| 22 | - :url => {:action => 'sort_box', :box_number => box_number } | 46 | + :url => {:action => 'sort_box', :box_number => box_number }, |
| 47 | + :complete => visual_effect(:highlight, "sort_#{box_number}") | ||
| 23 | end | 48 | end |
| 24 | 49 | ||
| 25 | def draggable(item) | 50 | def draggable(item) |
| 26 | draggable_element(item, :ghosting=>true, :revert=>true) | 51 | draggable_element(item, :ghosting=>true, :revert=>true) |
| 27 | end | 52 | end |
| 28 | 53 | ||
| 29 | - def drag_drop_item box_number | ||
| 30 | - boxes = Box.find_not_box(box_number) | 54 | + def drag_drop_items(box) |
| 55 | + boxes = Box.find_not_box(box.id) | ||
| 31 | 56 | ||
| 32 | boxes.map{ |b| | 57 | boxes.map{ |b| |
| 33 | - drop_receiving_element("box_#{box_number}", | 58 | + drop_receiving_element("box_#{box.number}", |
| 34 | :accept => "block_item_box_#{b.number}", | 59 | :accept => "block_item_box_#{b.number}", |
| 35 | :complete => "$('spinner').hide();", | 60 | :complete => "$('spinner').hide();", |
| 36 | :before => "$('spinner').show();", | 61 | :before => "$('spinner').show();", |
| 37 | :hoverclass => 'hover', | 62 | :hoverclass => 'hover', |
| 38 | :with => "'block=' + encodeURIComponent(element.id.split('_').last())", | 63 | :with => "'block=' + encodeURIComponent(element.id.split('_').last())", |
| 39 | - :url => {:action=>:change_box, :box_id => box_number}) | 64 | + :url => {:action=>:change_box, :box_id => box.id}) |
| 40 | }.to_s | 65 | }.to_s |
| 41 | end | 66 | end |
| 42 | 67 |
app/helpers/edit_template_helper.rb
app/models/box.rb
| @@ -11,4 +11,9 @@ class Box < ActiveRecord::Base | @@ -11,4 +11,9 @@ class Box < ActiveRecord::Base | ||
| 11 | def self.find_not_box(box_id) | 11 | def self.find_not_box(box_id) |
| 12 | return Box.find(:all, :conditions => ['id != ?', box_id]) | 12 | return Box.find(:all, :conditions => ['id != ?', box_id]) |
| 13 | end | 13 | end |
| 14 | + | ||
| 15 | + def blocks_sort_by_position | ||
| 16 | + self.blocks.sort{|x,y| x.position <=> y.position} | ||
| 17 | + end | ||
| 18 | + | ||
| 14 | end | 19 | end |
app/views/edit_template/index.rhtml
app/views/layouts/_box_template.rhtml
db/migrate/004_create_boxes.rb
| 1 | class CreateBoxes < ActiveRecord::Migration | 1 | class CreateBoxes < ActiveRecord::Migration |
| 2 | def self.up | 2 | def self.up |
| 3 | create_table :boxes do |t| | 3 | create_table :boxes do |t| |
| 4 | + t.column :name, :string | ||
| 4 | t.column :number, :integer | 5 | t.column :number, :integer |
| 5 | t.column :owner_type, :string | 6 | t.column :owner_type, :string |
| 6 | t.column :owner_id, :integer | 7 | t.column :owner_id, :integer |
db/migrate/005_create_blocks.rb
| 1 | class CreateBlocks < ActiveRecord::Migration | 1 | class CreateBlocks < ActiveRecord::Migration |
| 2 | def self.up | 2 | def self.up |
| 3 | create_table :blocks do |t| | 3 | create_table :blocks do |t| |
| 4 | + t.column :name, :string | ||
| 4 | t.column :box_id, :integer | 5 | t.column :box_id, :integer |
| 5 | t.column :position, :integer | 6 | t.column :position, :integer |
| 6 | t.column :type, :string | 7 | t.column :type, :string |
public/stylesheets/default.css
| 1 | -.hover { | 1 | +.edit_mode .hover { |
| 2 | background-color: pink; | 2 | background-color: pink; |
| 3 | border: 2px dotted black; | 3 | border: 2px dotted black; |
| 4 | } | 4 | } |
| 5 | 5 | ||
| 6 | -.hover ul li { | 6 | +.edit_mode .hover ul li { |
| 7 | border: 2px dotted black; | 7 | border: 2px dotted black; |
| 8 | } | 8 | } |
| 9 | 9 | ||
| 10 | +.edit_mode #box_1 ul, .edit_mode #box_2 ul, .edit_mode #box_3 ul { | ||
| 11 | + list-style: none; | ||
| 12 | + cursor: -moz-grab; | ||
| 13 | + margin: 10px; | ||
| 14 | + padding:0px; | ||
| 15 | + | ||
| 16 | +} | ||
| 10 | 17 | ||
| 11 | -#box_1 ul li, #box_2 ul li, #box_3 ul li { | 18 | +.edit_mode #box_1 ul li, .edit_mode #box_2 ul li, .edit_mode #box_3 ul li { |
| 12 | list-style: none; | 19 | list-style: none; |
| 13 | cursor: -moz-grab; | 20 | cursor: -moz-grab; |
| 14 | border: 1px solid black; | 21 | border: 1px solid black; |
| 15 | - margin: 20px; | 22 | + margin: 15px; |
| 16 | } | 23 | } |
| 17 | 24 | ||
| 18 | -#box_1, #box_2, #box_3 { | ||
| 19 | - border: 1px solid green; | 25 | +.edit_mode #box_1, .edit_mode #box_2, .edit_mode #box_3 { |
| 26 | + border: 3px solid green; | ||
| 20 | } | 27 | } |
| 21 | 28 | ||
| 22 | #box_1 { | 29 | #box_1 { |