Skip to content

Commit

Permalink
Improve error handling and widget insertion in pages
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesu committed May 6, 2010
1 parent d75cf15 commit a99a083
Show file tree
Hide file tree
Showing 11 changed files with 106 additions and 45 deletions.
5 changes: 4 additions & 1 deletion app/helpers/pages_helper.rb
Expand Up @@ -84,10 +84,13 @@ def page_buttons(project,page)
return unless project.editable?(current_user)
render :partial => 'pages/buttons', :locals => { :project => project, :page => page, :in_bar => false }
end

def page_bar_buttons(project,page)
return unless project.editable?(current_user)
render :partial => 'pages/buttons', :locals => { :project => project, :page => page, :in_bar => true }
end

def insert_widget(widget_id, position, location, view_options={})
page.call "Page.insertWidget", widget_id, position, location, render(view_options)
end
end
20 changes: 20 additions & 0 deletions app/javascripts/pages.js
Expand Up @@ -89,6 +89,26 @@ var Page = {
});
},

insertWidget: function(widget_id, pos, element_id, content) {
var el = $(element_id);
var opts = {};
if (!el) {
// fallback: before/after == top/bottom
el = $('slots');
if (pos == 'before')
opts['top'] = content;
else if (pos == 'after')
opts['bottom'] = content;
else
opts[pos] = content; // 0_0;
} else {
opts[pos] = content;
}

el.insert(opts);
new Effect.Highlight(widget_id, {duration:3});
},

refreshEvents: function() {
Event.addBehavior.reload();
},
Expand Down
12 changes: 9 additions & 3 deletions app/models/page.rb
Expand Up @@ -37,10 +37,16 @@ def new_note(note = {})
def new_slot(insert_id, insert_before, widget)
PageSlot.transaction do
# Calculate correct position
insert_pos = nil

# Assuming we have an insert_id...
if !insert_id.nil? and insert_id != 0
old_slot = PageSlot.find(insert_id)
insert_pos = insert_before ? old_slot.position : old_slot.position+1
else
old_slot = PageSlot.find(insert_id) rescue nil
insert_pos = (insert_before ? old_slot.position : old_slot.position+1) unless old_slot.nil?
end

# Fallback
if insert_pos.nil?
if self.slots.empty?
insert_pos = 0
else
Expand Down
14 changes: 9 additions & 5 deletions app/views/dividers/create.js.rjs
@@ -1,17 +1,21 @@
widget_id = "divider_#{@divider.id}"

if @insert_element.nil?
page.insert_html(:bottom, 'slots',
page.insert_widget(widget_id,
:bottom,
'slots',
:partial => 'pages/slot',
:object => @divider.page_slot,
:locals => {:page => @page, :project => @current_project})
else
page.insert_html((@insert_before ? :before : :after),
@insert_element,
page.insert_widget(widget_id,
(@insert_before ? :before : :after),
@insert_element,
:partial => 'pages/slot',
:object => @divider.page_slot,
:locals => {:page => @page, :project => @current_project})
end

page.hide_divider_form
page["divider_#{@divider.id}"].highlight
#page.dividers_sortable(project_page_path(@divider.page.project,@divider.page))
page.reload_javascript_events
page.reload_page_sort
12 changes: 8 additions & 4 deletions app/views/dividers/destroy.js.rjs
@@ -1,4 +1,8 @@
page["divider_#{@divider.id}"].dropOut
page.delay(3) do
page["page_slot_#{@divider.page_slot.id}"].remove
end
if @divider
page["divider_#{@divider.id}"].dropOut
page.delay(3) do
page["page_slot_#{@divider.page_slot.id}"].remove
end
else
page.alert t('common.not_allowed')
end
16 changes: 10 additions & 6 deletions app/views/dividers/edit.js.rjs
@@ -1,6 +1,10 @@
page["divider_#{@divider.id}"].hide
page.insert_html :after, "divider_#{@divider.id}", :partial => 'dividers/edit', :locals => { :divider => @divider }
page << "$('edit_divider_#{@divider.id}').focusFirstElement()"
page.reload_javascript_events
page["loading_action_divider_#{@divider.id}"].remove
page["edit_divider_#{@divider.id}_link"].show
if @divider
page["divider_#{@divider.id}"].hide
page.insert_html :after, "divider_#{@divider.id}", :partial => 'dividers/edit', :locals => { :divider => @divider }
page << "$('edit_divider_#{@divider.id}').focusFirstElement()"
page.reload_javascript_events
page["loading_action_divider_#{@divider.id}"].remove
page["edit_divider_#{@divider.id}_link"].show
else
page.alert t('common.not_allowed')
end
14 changes: 9 additions & 5 deletions app/views/dividers/update.js.rjs
@@ -1,5 +1,9 @@
page["edit_divider_#{@divider.id}"].remove
page.replace "divider_#{@divider.id}", :partial => 'dividers/divider', :locals => { :divider => @divider }
page["divider_#{@divider.id}"].show
page.reload_javascript_events
page.reload_page_sort
if @divider
page["edit_divider_#{@divider.id}"].remove
page.replace "divider_#{@divider.id}", :partial => 'dividers/divider', :locals => { :divider => @divider }
page["divider_#{@divider.id}"].show
page.reload_javascript_events
page.reload_page_sort
else
page.alert t('common.not_allowed')
end
18 changes: 11 additions & 7 deletions app/views/notes/create.js.rjs
@@ -1,17 +1,21 @@
widget_id = "note_#{@note.id}"

if @insert_element.nil?
page.insert_html(:bottom, 'slots',
:partial => 'pages/slot',
page.insert_widget(widget_id,
:bottom,
'slots',
:partial => 'pages/slot',
:object => @note.page_slot,
:locals => {:page => @page, :project => @current_project})
else
page.insert_html((@insert_before ? :before : :after),
@insert_element,
:partial => 'pages/slot',
page.insert_widget(widget_id,
(@insert_before ? :before : :after),
@insert_element,
:partial => 'pages/slot',
:object => @note.page_slot,
:locals => {:page => @page, :project => @current_project})
end

page.hide_note_form
page["note_#{@note.id}"].highlight
#page.notes_sortable(project_page_path(@note.page.project,@note.page))
page.reload_javascript_events
page.reload_page_sort
10 changes: 7 additions & 3 deletions app/views/notes/destroy.js.rjs
@@ -1,4 +1,8 @@
page["note_#{@note.id}"].dropOut
page.delay(3) do
page["page_slot_#{@note.page_slot.id}"].remove
if @note
page["note_#{@note.id}"].dropOut
page.delay(3) do
page["page_slot_#{@note.page_slot.id}"].remove
end
else
page.alert t('common.not_allowed')
end
16 changes: 10 additions & 6 deletions app/views/notes/edit.js.rjs
@@ -1,6 +1,10 @@
page["note_#{@note.id}"].hide
page.insert_html :after, "note_#{@note.id}", :partial => 'notes/edit', :locals => { :note => @note }
page << "$('edit_note_#{@note.id}').focusFirstElement()"
page.reload_javascript_events
page["loading_action_note_#{@note.id}"].remove
page["edit_note_#{@note.id}_link"].show
if @note
page["note_#{@note.id}"].hide
page.insert_html :after, "note_#{@note.id}", :partial => 'notes/edit', :locals => { :note => @note }
page << "$('edit_note_#{@note.id}').focusFirstElement()"
page.reload_javascript_events
page["loading_action_note_#{@note.id}"].remove
page["edit_note_#{@note.id}_link"].show
else
page.alert t('common.not_allowed')
end
14 changes: 9 additions & 5 deletions app/views/notes/update.js.rjs
@@ -1,5 +1,9 @@
page["edit_note_#{@note.id}"].remove
page.replace "note_#{@note.id}", :partial => 'notes/note', :locals => { :note => @note }
page["note_#{@note.id}"].show
page.reload_javascript_events
page.reload_page_sort
if @note
page["edit_note_#{@note.id}"].remove
page.replace "note_#{@note.id}", :partial => 'notes/note', :locals => { :note => @note }
page["note_#{@note.id}"].show
page.reload_javascript_events
page.reload_page_sort
else
page.alert t('common.not_allowed')
end

0 comments on commit a99a083

Please sign in to comment.