function logout(ev) { ev.preventDefault(); ev.stopPropagation(); // effectively overwrites the current session request.post('/session').when(authenticatedUi); }
function attemptCreate(ev) { ev.preventDefault(); ev.stopPropagation(); /*jshint validthis:true*/ var obj , serializeToNativeTypes = true ; obj = serializeForm('form#js-signup', serializeToNativeTypes); console.log('form#js-signup'); console.log(this); console.log(obj); request.post('/users', null, obj).when(function (err, ahr, data) { console.log('response to user creation'); authenticatedUi(err, ahr, data); }); }
function init() { var login = store.get('login') , urlObj = { protocol: location.protocol , hostname: location.hostname , port: location.port , pathname: '/session' } , href ; if (login && login.username && login.secret) { // TODO this should be handled as part of ahr2 urlObj.auth = login.username + ':' + login.secret; } // try to login as guest or user // if the guest token is bad, the server will respond with a different guest token href = url.format(urlObj); request.post(href).when(authenticatedUi); $('body').on('.js-logout', 'click', logout); $('body').on('form#js-auth', 'submit', attemptLogin); $('body').on('form#js-signup', 'submit', attemptCreate); $('body').on('form#js-signup .js-username', 'keyup', checkUsername); $('body').on('.js-show-signup', 'click', showSignup); $('body').on('.js-show-login', 'click', showLogin); $('body').on('.js-close-signup-login', 'click', hideLoginSignup); $('body').on('.js-passphrase', 'keyup', copyPassphrase); $('body').on('.js-hide-passphrase', 'change', hidePassphrase); $('.js-signup-container').addClass('css-login-hidden'); $('.js-login-container').addClass('css-login-hidden'); $('.js-login-container').addClass('css-login-hidden'); $('.js-close-signup-login').addClass('css-hidden'); $('.js-password').addClass('css-hidden'); $('.js-signup-submit').attr('disabled', 'disabled'); }
function attemptLogin(ev) { var obj , urlObj , href ; ev.preventDefault(); ev.stopPropagation(); obj = serializeForm('form#js-auth', serializeToNativeTypes); urlObj = { protocol: location.protocol , hostname: location.hostname , port: location.port , pathname: '/session' , auth: obj.username + ':' + obj.passphrase }; href = url.format(urlObj); request.post(href).when(authenticatedUi); }
sequence.then(function (next) { var emitter; emitter = request.post(location.pathname + 'files', {}, formData); emitter.when(function (err, ahr, data2) { console.log('data at data2', data); data.forEach(function (token, k) { console.log(fileData, k); var file = fileData[k].file , link = fileData[k].link ; console.log('file, link', file, link); // TODO link.find('.js-progress').remove(); link.find('.js-byte-count').remove(); // TODO //link.find('.js-remove-file').show(); }); next(); }); console.log(emitter); emitter.upload.on('progress', function (ev) { var totalLoaded = ev.loaded , i , file , bytesLeft , link , bytesLoaded ; fileData.forEach(function (fileDatum, i) { //for (i = 0; i < files.length; i += 1) { file = fileDatum.file; link = fileDatum.link; if (totalLoaded > 0) { bytesLeft = file.size - totalLoaded; if (bytesLeft > 0) { bytesLoaded = file.size - bytesLeft; } else { bytesLoaded = file.size; bytesLeft = 0; } totalLoaded -= bytesLoaded; } else { bytesLoaded = 0; bytesLeft = file.size; } link.find('.js-progress').attr('value', bytesLoaded); link.find('.js-progress').find('.js-val').text(bytesLoaded); // TODO use a hide/show on 'of' link.find('.js-byte-count').html( '<br>' + toByteCount(bytesLoaded) + ' of ' + toByteCount(file.size) ); //} }); // TODO console.log('progressEv', ev.loaded, ev.total); }); });
function uploadMeta(files, meta) { // I was attaching directly files[i].link = link // but that failed (inconsistently) in Firefox // maybe buggy garbage collection? var fileData = [] ; $('#js-drop .js-no-links').hide(); // begin tempalte meta.forEach(function (m, i) { var link = $(linkTpl) ; link.find('.js-id').text(''); link.find('.js-name').text(m.name); link.find('.js-ds-link').text(' '); link.find('.js-ds-link').attr('href', '#'); link.find('.js-remove-file').hide(); fileData[i] = {}; fileData[i].link = link; fileData[i].file = files[i]; $('#js-drop .js-uploadlist').append(link); }); request.post(location.pathname + 'files/new', {}, meta).when(function (err, ahr, data) { var formData = new FormData() ; formData.append('secret', data.secret) // TODO data.result data.forEach(function (token, j) { var file = fileData[j].file , link = fileData[j].link , host = location.host , fullhost = location.protocol + '//' + host ; // TODO selectable target server formData.append(token, file); console.log('formData append', token, file.name); // TODO use data-meta-id link.find('.js-id').text(token); link.find('.js-progress').attr('max', file.size); link.find('.js-progress').find('.js-max').text(file.size); link.find('.js-name').remove(); link.find('.js-ds-link').text(host + '#' + token); //encodeURIComponent(file.name)); link.find('.js-ds-link').attr('href', fullhost + '#' + token); //encodeURIComponent(file.name)); }); // this hack forces Chrome / Safari to redraw $('#js-drop .js-uploadlist')[0].style.display = 'none'; $('#js-drop .js-uploadlist')[0].offsetHeight; $('#js-drop .js-uploadlist')[0].style.display = 'block'; // "global" upload queue sequence.then(function (next) { var emitter; emitter = request.post(location.pathname + 'files', {}, formData); emitter.when(function (err, ahr, data2) { console.log('data at data2', data); data.forEach(function (token, k) { console.log(fileData, k); var file = fileData[k].file , link = fileData[k].link ; console.log('file, link', file, link); // TODO link.find('.js-progress').remove(); link.find('.js-byte-count').remove(); // TODO //link.find('.js-remove-file').show(); }); next(); }); console.log(emitter); emitter.upload.on('progress', function (ev) { var totalLoaded = ev.loaded , i , file , bytesLeft , link , bytesLoaded ; fileData.forEach(function (fileDatum, i) { //for (i = 0; i < files.length; i += 1) { file = fileDatum.file; link = fileDatum.link; if (totalLoaded > 0) { bytesLeft = file.size - totalLoaded; if (bytesLeft > 0) { bytesLoaded = file.size - bytesLeft; } else { bytesLoaded = file.size; bytesLeft = 0; } totalLoaded -= bytesLoaded; } else { bytesLoaded = 0; bytesLeft = file.size; } link.find('.js-progress').attr('value', bytesLoaded); link.find('.js-progress').find('.js-val').text(bytesLoaded); // TODO use a hide/show on 'of' link.find('.js-byte-count').html( '<br>' + toByteCount(bytesLoaded) + ' of ' + toByteCount(file.size) ); //} }); // TODO console.log('progressEv', ev.loaded, ev.total); }); }); }); }