ami/src/ami.js/z_eepromv1.js

170 lines
6.3 KiB
JavaScript

#include common.js
#include utility.js
var eepromAppl = 1,
eepromSupportImageEmbed = true,
eepromSupportAudioEmbed = true,
eepromSupportVideoEmbed = true;
var eepromInitialise = function(auth) {
window.eepromHistory = {};
window.eepromClient = new EEPROM(eepromAppl, futami.get('eeprom'), auth.getHttpAuth());
window.eepromUploadsTable = $i('uploadHistory');
$i('uploadSelector').onchange = function() {
for(var i = 0; i < this.files.length; ++i)
eepromFileUpload(this.files[i]);
};
$i('uploadButton').onclick = function() {
$i('uploadSelector').click();
};
ami.chat.inputBox.watch('paste', function(ev) {
if(ev.clipboardData && ev.clipboardData.files.length > 0) {
if('preventDefault' in ev)
ev.preventDefault();
for(var i = 0; i < ev.clipboardData.files.length; ++i)
eepromFileUpload(ev.clipboardData.files[i]);
}
});
if((typeof document.body.ondrop).toLowerCase() !== 'undefined') {
document.body.ondragenter = function(ev) {
ev.preventDefault();
ev.stopPropagation();
};
document.body.ondragover = function(ev) {
ev.preventDefault();
ev.stopPropagation();
};
document.body.ondragleave = function(ev) {
ev.preventDefault();
ev.stopPropagation();
};
document.body.ondrop = function(ev) {
ev.preventDefault();
ev.stopPropagation();
if(ev.dataTransfer && ev.dataTransfer.files.length > 0)
for(var i = 0; i < ev.dataTransfer.files.length; ++i)
eepromFileUpload(ev.dataTransfer.files[i]);
};
}
};
var eepromFileUpload = function(file) {
if(!window.eepromUploadsTable || !window.eepromClient) {
console.error('Upload history or EEPROM client is missing???');
return;
}
var uploadEntryWrap = window.eepromUploadsTable.insertRow(0),
uploadEntry = uploadEntryWrap.insertCell(0);
uploadEntryWrap.className = (window.eepromUploadsTable.rows.length % 2) ? 'rowOdd' : 'rowEven';
var name = document.createElement('a');
name.target = '_blank';
name.style.wordWrap = 'normal';
name.style.wordBreak = 'break-word';
name.style.display = 'block';
name.style.margin = '2px 10px';
name.style.textDecoration = 'none !important';
name.textContent = file.name;
name.title = 'SHIFT+Click to delete file';
uploadEntry.appendChild(name);
var prog = document.createElement('div'),
progBar = document.createElement('div');
prog.style.border = '1px solid #808080';
prog.style.background = '#000';
prog.style.padding = '0';
prog.style.margin = '2px 10px';
progBar.style.background = '#808080';
progBar.style.width = '0%';
progBar.style.height = '12px';
progBar.style.padding = '0';
progBar.style.border = '1px solid #000';
progBar.style.boxSizing = 'border-box';
prog.appendChild(progBar);
uploadEntry.appendChild(prog);
var uploadTask = window.eepromClient.createUpload(file);
uploadTask.onProgress = function(progressInfo) {
progBar.style.width = progressInfo.progress.toString() + '%';
};
uploadTask.onFailure = function(errorInfo) {
if(!errorInfo.userAborted) {
var errorText = 'Was unable to upload file.';
switch(errorInfo.error) {
case EEPROM.ERR_INVALID:
errorText = 'Upload request was invalid.';
break;
case EEPROM.ERR_AUTH:
errorText = 'Upload authentication failed, refresh and try again.';
break;
case EEPROM.ERR_ACCESS:
errorText = 'You\'re not allowed to upload files.';
break;
case EEPROM.ERR_GONE:
errorText = 'Upload client has a configuration error or the server is gone.';
break;
case EEPROM.ERR_DMCA:
errorText = 'This file has been uploaded before and was removed for copyright reasons, you cannot upload this file.';
break;
case EEPROM.ERR_SERVER:
errorText = 'Upload server returned a critical error, try again later.';
break;
case EEPROM.ERR_SIZE:
if(errorInfo.maxSize < 1)
errorText = 'Selected file is too large.';
else {
var _t = ['bytes', 'KB', 'MB', 'GB', 'TB'],
_i = parseInt(Math.floor(Math.log(errorInfo.maxSize) / Math.log(1024))),
_s = Math.round(errorInfo.maxSize / Math.pow(1024, _i), 2);
errorText = 'Upload may not be larger than %1 %2.'.replace('%1', _s).replace('%2', _t[_i]);
}
break;
}
alert(errorText);
}
uploadHistory.deleteRow(uploadEntryWrap.rowIndex);
};
name.onclick = function(ev) {
if(ev.shiftKey) {
ev.preventDefault();
var fileInfo = window.eepromHistory[name.getAttribute('data-eeprom-id') || ''];
if(fileInfo) {
window.eepromClient.deleteUpload(fileInfo).start();
uploadHistory.deleteRow(uploadEntryWrap.rowIndex);
} else uploadTask.abort();
}
};
uploadTask.onComplete = function(fileInfo) {
window.eepromHistory[fileInfo.id] = fileInfo;
name.style.textDecoration = null;
name.setAttribute('data-eeprom-id', fileInfo.id);
name.href = fileInfo.url;
uploadEntry.removeChild(prog);
var insertText = location.protocol + fileInfo.url;
if(eepromSupportImageEmbed && fileInfo.type.indexOf('image/') === 0)
insertText = '[img]' + fileInfo.url + '[/img]';
else if(eepromSupportAudioEmbed && (fileInfo.type === 'application/x-font-gdos' || fileInfo.type.indexOf('audio/') === 0))
insertText = '[audio]' + fileInfo.url + '[/audio]';
else if(eepromSupportVideoEmbed && fileInfo.type.indexOf('video/') === 0)
insertText = '[video]' + fileInfo.url + '[/video]';
ami.chat.inputBox.insert(insertText);
};
uploadTask.start();
};