Imgorg.UploadQueue = Ext.extend(Ext.Panel,{
swfu: '',
autoRemove: false,
uploaded: false,
initComponent: function() {
Ext.apply(this,{
layout: 'fit',
autoScroll: true,
items: [{
xtype: 'dataview',
id: 'img-uploaddv',
autoWidth: true,
tpl: new Ext.XTemplate(
'',
'',
'
{name}
',
'
',
'
',
'
{size:fileSize}
',
'
',
''
),
store: new Ext.data.JsonStore({
root: '',
id: 'id',
fields: [
{name: 'creationdate', type: 'date'},
{name: 'modificationdate', type: 'date'},
'filestatus','id','index','name','size','type','dbid'
]
}),
itemSelector: 'div.upload-file',
selectedClass: 'upload-file-selected',
singleSelect: true
}],
tbar:[{
text: 'Start Upload',
handler: this.startUpload,
scope: this,
iconCls: 'start-upload'
},{
text: 'Clear',
handler: this.cancelUpload,
scope: this,
iconCls: 'cancel'
},'-',{
text: 'Add to Album',
handler: this.addAllAlbum,
scope: this,
iconCls: 'album-add'
},{
text: 'Tag',
handler: this.tagAll,
scope: this,
iconCls: 'tag'
},
'->',{
xtype: 'checkbox',
checked: this.autoRemove,
listeners: {
check: function(cb, checked) {
this.autoRemove = checked;
},
scope: this
}
},'Auto-Remove Uploaded']
});
Imgorg.UploadQueue.superclass.initComponent.call(this);
this.progressBars = {};
Ext.ux.SwfuMgr.on('filequeued', this.addFile, this);
Ext.ux.SwfuMgr.on('uploadprogress', this.updateProgress, this);
Ext.ux.SwfuMgr.on('uploadsuccess', this.uploadSuccess, this);
},
getDv: function() {
if (!this.imgUplDv) {
this.imgUplDv = this.getComponent('img-uploaddv');
}
return this.imgUplDv;
},
startUpload: function() {
this.swfu.startUpload();
},
cancelUpload: function() {
this.swfu.cancelUpload();
for (var pb in this.progressBars) {
this.progressBars[pb].destroy();
}
this.getDv().store.removeAll();
this.uploaded = false;
},
addFile: function(swfu, file) {
this.getDv().store.loadData([file], true);
},
addAllAlbum: function(btn) {
if (!this.uploaded) {
Ext.Msg.alert('Warning', 'You must upload files before you can add them to an Album');
return;
}
var dv = this.getDv();
var recs = dv.getRecords(dv.getNodes());
if (!this.albumWin) {
this.albumWin = new Imgorg.AlbumWin();
}
this.albumWin.selectedRecords = recs;
this.albumWin.show(btn.btnEl.dom);
},
tagAll: function(btn) {
if (!this.uploaded) {
Ext.Msg.alert('Warning', 'You must upload files before you can Tag them');
return;
}
var dv = this.getDv();
var recs = dv.getRecords(dv.getNodes());
Imgorg.TagWin.selectedRecords = recs;
Imgorg.TagWin.show(btn.btnEl.dom);
},
updateProgress: function(swfu, file, complete, total) {
if (this.progressBars[file.id]) {
this.progressBars[file.id].updateProgress(file.percentUploaded/100,Math.round(file.percentUploaded)+'% Completed... '+Ext.util.Format.fileSize(file.currentSpeed)+'s');
} else {
this.progressBars[file.id] = new Ext.ProgressBar({
text:'0% Completed...',
renderTo: file.id+'-pb'
});
}
},
uploadSuccess: function(swfu, file, data) {
var store = this.getDv().store;
var rec = store.getById(file.id);
if (this.progressBars[file.id]) {
this.progressBars[file.id].updateProgress(1, '100% Completed...');
}
if (this.autoRemove) {
store.remove(rec);
}
var data = Ext.decode(Ext.util.Format.stripTags(data));
rec.data.dbid = data.result.res.id;
this.uploaded = true;
}
});
Ext.reg('img-uploadqueue', Imgorg.UploadQueue);
Ext.ux.SwfuManager = Ext.extend(Ext.util.Observable, {
constructor: function(config) {
Ext.ux.SwfuManager.superclass.constructor.call(this, config);
this.addEvents(
'filequeued',
'uploadstart',
'uploadprogress',
'uploaderror',
'uploadsuccess'
);
}
});
Ext.ux.SwfuMgr = new Ext.ux.SwfuManager();