From 93e80690973befb83048d3e62cbd9070bad242f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Wed, 16 Jun 2010 20:58:14 +0200 Subject: [PATCH] asynchronous file uploads in Pages RJS + iframe magic --- app/controllers/uploads_controller.rb | 12 +++++++++++- app/javascripts/pages.js | 7 +++++++ app/views/shared/iframe_rjs.html.erb | 9 +++++++++ app/views/uploads/create.js.rjs | 15 +++++++++++++++ app/views/uploads/create_page.erb | 19 ------------------- 5 files changed, 42 insertions(+), 20 deletions(-) create mode 100644 app/views/shared/iframe_rjs.html.erb create mode 100644 app/views/uploads/create.js.rjs delete mode 100644 app/views/uploads/create_page.erb diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 7f11fa9a5b..82c593f288 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -62,7 +62,13 @@ def create flash[:error] = "There was an error uploading the file" redirect_to :back elsif @upload.page - redirect_to [@current_project, @upload.page] + if iframe? + template = self.view_paths.find_template(default_template_name(action_name), :js) + @code = render_to_string :template => template + render :template => 'shared/iframe_rjs', :layout => false + else + redirect_to [@current_project, @upload.page] + end else redirect_to [@current_project, :uploads] end @@ -108,5 +114,9 @@ def find_upload @upload = @current_project.uploads.find_by_asset_file_name(params[:id]) end end + + def iframe? + params[:iframe] == 'true' + end end \ No newline at end of file diff --git a/app/javascripts/pages.js b/app/javascripts/pages.js index 039f84bcb7..5acf01f6a0 100644 --- a/app/javascripts/pages.js +++ b/app/javascripts/pages.js @@ -361,3 +361,10 @@ document.on('ajax:complete', '.page_slot .note form, .page_slot .divider form', document.on('ajax:create', 'form.edit_note', function(e, element) { element.down('img.loading').show() }); + +document.on('submit', 'body.show_pages form#new_upload', function(e, form) { + var iframe = new Element('iframe', { id: 'file_upload_iframe' }).hide() + $(document.body).insert(iframe) + form.target = iframe.id + form.insert(new Element('input', { type: 'hidden', name: 'iframe', value: 'true' })) +}) diff --git a/app/views/shared/iframe_rjs.html.erb b/app/views/shared/iframe_rjs.html.erb new file mode 100644 index 0000000000..724b6ab5cf --- /dev/null +++ b/app/views/shared/iframe_rjs.html.erb @@ -0,0 +1,9 @@ + + + + + + + <%= javascript_tag("window.top.eval('#{escape_javascript(@code)}')") %> + + diff --git a/app/views/uploads/create.js.rjs b/app/views/uploads/create.js.rjs new file mode 100644 index 0000000000..8be83c9b8b --- /dev/null +++ b/app/views/uploads/create.js.rjs @@ -0,0 +1,15 @@ +if @insert_element.nil? + position = :bottom + location = 'slots' +else + position = @insert_before ? :before : :after + location = @insert_element +end + +page.insert_widget dom_id(@upload), position, location, + :partial => 'pages/slot', + :object => @slot, + :locals => { :page => @page, :project => @current_project } + +page.call "InsertionBar.clearWidgetForm" +page.reload_page_sort diff --git a/app/views/uploads/create_page.erb b/app/views/uploads/create_page.erb deleted file mode 100644 index 0722f8c695..0000000000 --- a/app/views/uploads/create_page.erb +++ /dev/null @@ -1,19 +0,0 @@ -<%= -update_page_tag do |page| - if @upload.new_record? - else - slot_html = render :partial => 'pages/slot', :object => @upload.page_slot, :locals => {:page => @page, :project => @current_project} - insert_pos = @insert_before ? :before : :after - if @insert_element.nil? - page << "top.$('slots').insert({top:\"#{escape_javascript slot_html}\"})"; - else - page << "top.$('#{@insert_element}').insert({#{insert_pos}:\"#{escape_javascript slot_html}\"})"; - end - - page << "top.document.currentPage.refreshEvents();" - page << "top.document.currentPage.makeSortable();" - end - - page << "top.document.currentPage.removeIFrameForm(this.document);" -end -%>