Initial commit
This commit is contained in:
132
lib/assets/javascripts/builder/data/asset-model.js
Executable file
132
lib/assets/javascripts/builder/data/asset-model.js
Executable file
@@ -0,0 +1,132 @@
|
||||
var _ = require('underscore');
|
||||
var Backbone = require('backbone');
|
||||
var Utils = require('builder/helpers/utils');
|
||||
|
||||
require('backbone-model-file-upload');
|
||||
|
||||
module.exports = Backbone.Model.extend({
|
||||
fileAttribute: 'filename',
|
||||
|
||||
defaults: {
|
||||
type: '',
|
||||
filename: '',
|
||||
interval: 0,
|
||||
progress: 0,
|
||||
state: 'idle',
|
||||
option: ''
|
||||
},
|
||||
|
||||
_initBinds: function () {
|
||||
this.bind('progress', function (progress) {
|
||||
this.set({
|
||||
progress: progress * 100,
|
||||
state: 'uploading'
|
||||
});
|
||||
}, this);
|
||||
|
||||
this.bind('change:filename change:url', function () {
|
||||
if (this.get('state') === 'error') {
|
||||
this.set({ state: 'idle' });
|
||||
this.unset('get_error_text', { silent: true });
|
||||
}
|
||||
}, this);
|
||||
|
||||
this.bind('error invalid', function (m, d) {
|
||||
this.set({
|
||||
state: 'error',
|
||||
error_code: (d && d.error_code) || '',
|
||||
get_error_text: {
|
||||
title: _t('componentes.data.asset-model.invalid-import'),
|
||||
what_about: (d && d.msg) || ''
|
||||
}
|
||||
}, { silent: true });
|
||||
// We need this, if not validate will run again and again and again... :(
|
||||
this.trigger('change');
|
||||
}, this);
|
||||
},
|
||||
|
||||
validate: function (attrs) {
|
||||
if (!attrs) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (attrs.type === 'filename') { // Number of files
|
||||
if (attrs.filename && attrs.filename.length) {
|
||||
return {
|
||||
msg: _t('componentes.data.asset-model.one-file-per-upload')
|
||||
};
|
||||
}
|
||||
// File extension
|
||||
var name = attrs.filename.name;
|
||||
var ext = name.substr(name.lastIndexOf('.') + 1);
|
||||
|
||||
if (ext) {
|
||||
ext = ext.toLowerCase();
|
||||
}
|
||||
|
||||
if (!_.contains(['jpg', 'png', 'gif', 'svg'], ext)) {
|
||||
return {
|
||||
msg: _t('componentes.data.asset-model.invalid-extension')
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (attrs.type === 'url') { // Valid URL?
|
||||
if (!Utils.isURL(attrs.url)) {
|
||||
return {
|
||||
msg: _t('componentes.data.asset-model.invalid-url')
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
isValid: function () {
|
||||
return (this.get('filename') || this.get('url')) && this.get('state') !== 'error';
|
||||
},
|
||||
|
||||
upload: function () {
|
||||
var self = this;
|
||||
|
||||
var options = {
|
||||
kind: this.get('kind')
|
||||
};
|
||||
|
||||
if (this.get('type') === 'file') {
|
||||
options.filename = this.get('filename');
|
||||
} else if (this.get('type') === 'url') {
|
||||
options.filename = this.get('filename');
|
||||
}
|
||||
|
||||
this.xhr = this.save(options, {
|
||||
success: function (m) {
|
||||
m.set('state', 'uploaded');
|
||||
},
|
||||
|
||||
error: function (m, msg) {
|
||||
var response;
|
||||
var message = _t('componentes.data.asset-model.connection-error');
|
||||
|
||||
if (msg && msg.status === 429) {
|
||||
response = JSON.parse(msg.responseText);
|
||||
message = response.error;
|
||||
} else if (msg && msg.status === 400) {
|
||||
response = JSON.parse(msg.responseText);
|
||||
message = response.error;
|
||||
}
|
||||
|
||||
self.set({
|
||||
state: 'error',
|
||||
get_error_text: { title: _t('componentes.data.asset-model.error'), what_about: message }
|
||||
});
|
||||
},
|
||||
|
||||
complete: function () {
|
||||
delete self.xhr;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
stopUpload: function () {
|
||||
if (this.xhr) this.xhr.abort();
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user