170 lines
6.3 KiB
JavaScript
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();
|
|
};
|