Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Bug 1139148 - Save bug data offline
Browse files Browse the repository at this point in the history
  • Loading branch information
daleharvey committed Mar 26, 2015
1 parent 6622f14 commit f607d51
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 27 deletions.
1 change: 0 additions & 1 deletion lib/app.js
Expand Up @@ -32,7 +32,6 @@ App.prototype.init = function() {
this.emit('login', details.login);
this.emit('init');
}.bind(this)).catch(function() {
localStorage.user = '';
this.emit('logout');
this.emit('init');
}.bind(this));
Expand Down
94 changes: 69 additions & 25 deletions lib/views/create-bug.js
@@ -1,20 +1,28 @@
'use strict';

var filesize = require('filesize');
var localforage = require('localforage');

var tpl = require('../template.js');
var utils = require('../utils.js');
var conf = require('../config.js');

var form;
var attachments = [];

var KEY = 'bugData';

var bug = {
summary: null,
description: null,
attachments: []
};

function value(selector) {
return document.querySelector(selector).value.trim();
}

function deleteAttachment(e) {
attachments = attachments.filter(function(file) {
bug.attachments = bug.attachments.filter(function(file) {
return file.name !== e.target.dataset.name;
});
drawAttachments();
Expand All @@ -37,7 +45,7 @@ function previewAttachment(file) {
function drawAttachments() {
tpl.read('/views/attachment-row.tpl').then(function(row) {
var frag = document.createDocumentFragment();
attachments.map(function(file) {
bug.attachments.map(function(file) {
var types = ['image/png', 'image/jpg', 'image/jpeg'];
var dom = row.cloneNode(true);
var a = dom.querySelector('a');
Expand Down Expand Up @@ -74,11 +82,12 @@ function inputChanged(e) {
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
attachments.push({
bug.attachments.push({
name: theFile.name,
type: theFile.type,
data: e.target.result.split(',')[1]
});
bugChanged();
drawAttachments();
}
})(file);
Expand All @@ -92,17 +101,41 @@ function addAttachments(blobs, names) {
var reader = new window.FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
attachments.push({
bug.attachments.push({
name: names[i],
type: blob.type,
data: reader.result
});
bugChanged();
drawAttachments();
}
});
}


var timeout;
function bugChanged() {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(updateBugData, 1000);
}


function updateBugData() {
bug.summary = value('#summary');
bug.description = value('#description');
localforage.setItem(KEY, bug);
}


function updateFromBugData(el) {
el.querySelector('#summary').value = bug.summary;
el.querySelector('#description').value = bug.description;
drawAttachments();
}


function formSubmitted(e) {

e.preventDefault();
Expand All @@ -114,24 +147,26 @@ function formSubmitted(e) {
component: ((conf.version === 1) ? 'Gaia' : value('#component')),
op_sys: 'All',
platform: 'All',
summary: value('#summary'),
description: value('#description'),
summary: bug.summary,
description: bug.description,
version: 'unspecified'
}).then(function(result) {
var id = result.id;
var self = this;
function createAttachments() {
if (!attachments.length) {
dialog.close();
utils.toaster('Bug Submitted');
if (conf.version === 1) {
self.app.page('/create/');
} else {
self.app.page('/bug/' + result.id);
}
if (!bug.attachments.length) {
localforage.setItem(KEY, null).then(function() {
dialog.close();
utils.toaster('Bug Submitted');
if (conf.version === 1) {
self.app.page('/create/');
} else {
self.app.page('/bug/' + result.id);
}
});
return;
}
var file = attachments.pop();
var file = bug.attachments.pop();
self.app.bugzilla.createAttachment(id, {
ids: [id],
data: file.data,
Expand All @@ -158,22 +193,31 @@ function CreateBug(app) {
};

CreateBug.prototype.render = function(ctx) {
return tpl.read('/views/create_bug.tpl').then((function(_form) {

var self = this;
return tpl.read('/views/create_bug.tpl').then(function(_form) {
form = _form;

if (this.app.activity) {
addAttachments(this.app.activity.data.blobs, this.app.activity.data.filenames);
this.app.activity = null;
return localforage.getItem(KEY);
}).then(function(data) {

// Activity data overrides locally stored data for now
var activity = self.app.activity;
if (activity) {
addAttachments(activity.data.blobs, activity.data.filenames);
self.app.activity = null;
} else if (data) {
bug = data;
updateFromBugData(form);
}

[].forEach.call(form.querySelectorAll('input[type=file]'), function(file) {
file.addEventListener('change', inputChanged.bind(this));
file.addEventListener('change', inputChanged.bind(self));
});
form.addEventListener('submit', formSubmitted.bind(this));

form.addEventListener('input', bugChanged);
form.addEventListener('submit', formSubmitted.bind(self));

return form;
}).bind(this));
});
};

module.exports = function (app) {
Expand Down
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -29,6 +29,7 @@
"mocha": "^2.1.0",
"wd": "^0.3.11",
"envify": "^3.3.1",
"filesize": "^3.1.2"
"filesize": "^3.1.2",
"localforage": "^1.2.2"
}
}

0 comments on commit f607d51

Please sign in to comment.