diff options
Diffstat (limited to 'web-ui/public/js/mail_view/data')
-rw-r--r-- | web-ui/public/js/mail_view/data/feedback_sender.js | 49 | ||||
-rw-r--r-- | web-ui/public/js/mail_view/data/mail_builder.js | 102 | ||||
-rw-r--r-- | web-ui/public/js/mail_view/data/mail_sender.js | 93 |
3 files changed, 244 insertions, 0 deletions
diff --git a/web-ui/public/js/mail_view/data/feedback_sender.js b/web-ui/public/js/mail_view/data/feedback_sender.js new file mode 100644 index 00000000..2232dbe4 --- /dev/null +++ b/web-ui/public/js/mail_view/data/feedback_sender.js @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2015 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ +define( + [ + 'flight/lib/component', + 'helpers/monitored_ajax', + 'page/events' + ], + function (defineComponent, monitoredAjax, events) { + 'use strict'; + + return defineComponent(function () { + this.defaultAttrs({ + feedbackResource: '/feedback' + }); + + this.successSubmittingFeedback = function() { + this.trigger(document, events.feedback.submitted); + }; + + this.submitFeedback = function(event, data) { + monitoredAjax.call(_, this, this.attr.feedbackResource, { + type: 'POST', + dataType: 'json', + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(data) + }).done(this.successSubmittingFeedback()); + }; + + this.after('initialize', function () { + this.on(document, events.feedback.submit, this.submitFeedback); + }); + + }); +}); diff --git a/web-ui/public/js/mail_view/data/mail_builder.js b/web-ui/public/js/mail_view/data/mail_builder.js new file mode 100644 index 00000000..7a478dd8 --- /dev/null +++ b/web-ui/public/js/mail_view/data/mail_builder.js @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2014 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +define(['services/model/mail'], function (mailModel) { + 'use strict'; + + var mail; + + function recipients(mail, place, v) { + if (v !== '' && !_.isUndefined(v)) { + if (_.isArray(v)) { + mail[place] = v; + } else { + mail[place] = v.split(' '); + } + } else { + mail[place] = []; + } + } + + return { + newMail: function (ident) { + ident = _.isUndefined(ident) ? '' : ident; + + mail = { + header: { + to: [], + cc: [], + bcc: [], + from: undefined, + subject: '' + }, + tags: [], + body: '', + attachments: [], + ident: ident + }; + return this; + }, + + subject: function (subject) { + mail.header.subject = subject; + return this; + }, + + body: function (body) { + mail.body = body; + return this; + }, + + to: function (to) { + recipients(mail.header, 'to', to); + return this; + }, + + cc: function (cc) { + recipients(mail.header, 'cc', cc); + return this; + }, + + bcc: function (bcc) { + recipients(mail.header, 'bcc', bcc); + return this; + }, + + header: function (name, value) { + mail.header[name] = value; + return this; + }, + + tag: function (tag) { + if (_.isUndefined(tag)) { + tag = 'drafts'; + } + mail.tags.push(tag); + return this; + }, + + attachment: function (attachmentList) { + mail.attachments = attachmentList; + return this; + }, + + build: function () { + return mailModel.create(mail); + } + }; +}); diff --git a/web-ui/public/js/mail_view/data/mail_sender.js b/web-ui/public/js/mail_view/data/mail_sender.js new file mode 100644 index 00000000..8bb01f70 --- /dev/null +++ b/web-ui/public/js/mail_view/data/mail_sender.js @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2014 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ +define( + [ + 'flight/lib/component', + 'mail_view/data/mail_builder', + 'page/events', + 'helpers/monitored_ajax', + 'features' + ], + function (defineComponent, mailBuilder, events, monitoredAjax, features) { + 'use strict'; + + return defineComponent(mailSender); + + function mailSender() { + function successSendingMail(on){ + return function(result) { + on.trigger(document, events.mail.sent, result); + }; + } + + function failureSendingMail(on) { + return function(result) { + on.trigger(document, events.mail.send_failed, result); + }; + } + + function successSaveDraft(on){ + return function(result){ + on.trigger(document, events.mail.draftSaved, result); + }; + } + + this.defaultAttrs({ + mailsResource: '/mails' + }); + + this.sendMail = function(event, data) { + this.trigger(events.dispatchers.rightPane.openNoMessageSelected); + monitoredAjax.call(_, this, this.attr.mailsResource, { + type: 'POST', + dataType: 'json', + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(data) + }).done(successSendingMail(this)).fail(failureSendingMail(this)); + + }; + + this.saveMail = function(mail) { + return monitoredAjax.call(_, this, this.attr.mailsResource, { + type: 'PUT', + dataType: 'json', + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(mail), + skipErrorMessage: true + }); + }; + + this.saveDraft = function(event, data) { + this.saveMail(data) + .done(successSaveDraft(this)); + }; + + this.saveMailWithCallback = function(event, data) { + this.saveMail(data.mail) + .done(function(result) { return data.callback(result); }) + .fail(function(result) { return data.callback(result); }); + }; + + this.after('initialize', function () { + this.on(events.mail.send, this.sendMail); + if(features.isEnabled('saveDraft')) { + this.on(events.mail.saveDraft, this.saveDraft); + } + this.on(document, events.mail.save, this.saveMailWithCallback); + }); + } + }); |