summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/Speedometer/resources/flightjs-example-app/app/component_data/compose_box.js
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/resources/flightjs-example-app/app/component_data/compose_box.js')
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/flightjs-example-app/app/component_data/compose_box.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/flightjs-example-app/app/component_data/compose_box.js b/third_party/webkit/PerformanceTests/Speedometer/resources/flightjs-example-app/app/component_data/compose_box.js
new file mode 100644
index 0000000000..e728086f02
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/flightjs-example-app/app/component_data/compose_box.js
@@ -0,0 +1,93 @@
+'use strict';
+
+define(
+
+ [
+ 'flight/lib/component',
+ 'components/mustache/mustache',
+ 'app/data',
+ 'app/templates'
+ ],
+
+ function(defineComponent, Mustache, dataStore, templates) {
+ return defineComponent(composeBox);
+
+ function composeBox() {
+
+ this.defaultAttrs({
+ dataStore: dataStore,
+ recipientHintId: 'recipient_hint',
+ subjectHint: 'Subject',
+ messageHint: 'Message',
+ toHint: 'To',
+ forwardPrefix: 'Fw',
+ replyPrefix: 'Re'
+ });
+
+ this.serveComposeBox = function(ev, data) {
+ this.trigger("dataComposeBoxServed", {
+ markup: this.renderComposeBox(data.type, data.relatedMailId),
+ type: data.type});
+ };
+
+ this.getSubject = function(type, relatedMailId) {
+ var relatedMail = this.attr.dataStore.mail.filter(function(each) {
+ return each.id == relatedMailId;
+ })[0];
+
+ var subject = relatedMail && relatedMail.subject;
+
+ var subjectLookup = {
+ newMail: this.attr.subjectHint,
+ forward: this.attr.forwardPrefix + ": " + subject,
+ reply: this.attr.replyPrefix + ": " + subject
+ }
+
+ return subjectLookup[type];
+ };
+
+ this.renderComposeBox = function(type, relatedMailId) {
+ var recipientId = this.getRecipientId(type, relatedMailId);
+ var contacts = this.attr.dataStore.contacts.map(function(contact) {
+ contact.recipient = (contact.id == recipientId);
+ return contact;
+ });
+
+ return Mustache.render(templates.composeBox, {
+ newMail: type == 'newMail',
+ reply: type == 'reply',
+ subject: this.getSubject(type, relatedMailId),
+ message: this.attr.messageHint,
+ contacts: contacts
+ });
+ };
+
+ this.getRecipientId = function(type, relatedMailId) {
+ var relatedMail = (type == 'reply') && this.attr.dataStore.mail.filter(function(each) {
+ return each.id == relatedMailId;
+ })[0];
+
+ return relatedMail && relatedMail.contact_id || this.attr.recipientHintId;
+ };
+
+
+ this.send = function(ev, data) {
+ this.attr.dataStore.mail.push({
+ id: String(Date.now()),
+ contact_id: data.to_id,
+ folders: ["sent"],
+ time: Date.now(),
+ subject: data.subject,
+ message: data.message
+ });
+ this.trigger('dataMailItemsRefreshRequested', {folder: data.currentFolder});
+ };
+
+ this.after("initialize", function() {
+ this.on("uiComposeBoxRequested", this.serveComposeBox);
+ this.on("uiSendRequested", this.send);
+ });
+ }
+
+ }
+);