From 4f452ba5886d1f8fbac647478ab497c80a9fe4df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Dahlgren?= Date: Sat, 5 Apr 2014 14:50:40 +0000 Subject: [PATCH] Mission upload --- public/js/app/forms/mission.js | 32 --- public/js/app/views/missions/form.js | 40 ++++ public/js/app/views/missions/list.js | 11 + public/js/lib/jquery.iframe-transport.js | 247 +++++++++++++++++++++++ public/js/tpl/forms/mission.html | 8 - public/js/tpl/missions/form.html | 8 + public/js/tpl/missions/list.html | 4 +- routes/missions.js | 5 +- 8 files changed, 311 insertions(+), 44 deletions(-) delete mode 100644 public/js/app/forms/mission.js create mode 100644 public/js/app/views/missions/form.js create mode 100644 public/js/lib/jquery.iframe-transport.js delete mode 100644 public/js/tpl/forms/mission.html create mode 100644 public/js/tpl/missions/form.html diff --git a/public/js/app/forms/mission.js b/public/js/app/forms/mission.js deleted file mode 100644 index fbd924a..0000000 --- a/public/js/app/forms/mission.js +++ /dev/null @@ -1,32 +0,0 @@ -define(function (require) { - - "use strict"; - - var $ = require('jquery'), - _ = require('underscore'), - Backbone = require('backbone'), - Marionette = require('marionette'), - FormView = require('marionette-formview'), - Settings = require('app/models/settings'), - tpl = require('text!tpl/forms/settings.html'); - - return FormView.extend({ - template: _.template(tpl), - - fields: { - path: { - el: ".mission", - required: "Please select a file." - } - }, - - initialize: function () { - var self = this; - new Mission().fetch({success: function (model, response, options) { - self.model = model; - self.runInitializers(); - }}); - } - }); - -}); \ No newline at end of file diff --git a/public/js/app/views/missions/form.js b/public/js/app/views/missions/form.js new file mode 100644 index 0000000..3c5ace5 --- /dev/null +++ b/public/js/app/views/missions/form.js @@ -0,0 +1,40 @@ +define(function (require) { + + "use strict"; + + var $ = require('jquery'), + _ = require('underscore'), + Backbone = require('backbone'), + Marionette = require('marionette'), + FormView = require('marionette-formview'), + IframeTransport = require('jquery.iframe-transport'), + Mission = require('app/models/mission'), + tpl = require('text!tpl/missions/form.html'); + + return Marionette.ItemView.extend({ + template: _.template(tpl), + + initialize: function (options) { + this.missions = options.missions; + this.model = new Mission(); + this.bind("ok", this.submit); + }, + + submit: function (modal) { + var self = this; + + modal.preventClose(); + + var $form = $("form"); + $.ajax("/api/missions", { + files: $form.find(":file"), + iframe: true + }).complete(function(data) { + modal.close(); + self.missions.fetch(); + Backbone.history.navigate('#missions', true) + }); + }, + }); + +}); \ No newline at end of file diff --git a/public/js/app/views/missions/list.js b/public/js/app/views/missions/list.js index ce54565..0b95ad6 100644 --- a/public/js/app/views/missions/list.js +++ b/public/js/app/views/missions/list.js @@ -7,6 +7,7 @@ define(function (require) { Backbone = require('backbone'), Marionette = require('marionette'), ListItemView = require('app/views/missions/list_item'), + FormView = require('app/views/missions/form'), tpl = require('text!tpl/missions/list.html'), template = _.template(tpl); @@ -15,5 +16,15 @@ define(function (require) { itemView: ListItemView, itemViewContainer: "tbody", template: template, + + events: { + "click #upload": "upload" + }, + + upload: function (event) { + event.preventDefault(); + var view = new FormView({missions: this.collection}); + new Backbone.BootstrapModal({ content: view }).open() + }, }); }); diff --git a/public/js/lib/jquery.iframe-transport.js b/public/js/lib/jquery.iframe-transport.js new file mode 100644 index 0000000..e8ef077 --- /dev/null +++ b/public/js/lib/jquery.iframe-transport.js @@ -0,0 +1,247 @@ +// This [jQuery](https://jquery.com/) plugin implements an `"); + + // The first load event gets fired after the iframe has been injected + // into the DOM, and is used to prepare the actual submission. + iframe.one("load", function() { + + // The second load event gets fired when the response to the form + // submission is received. The implementation detects whether the + // actual payload is embedded in a `