Example #1
0
  function logout(ev) {
    ev.preventDefault();
    ev.stopPropagation();

    // effectively overwrites the current session
    request.post('/session').when(authenticatedUi);
  }
Example #2
0
  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);
    });
  }
Example #3
0
  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');
  }
Example #4
0
  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);
  }
Example #5
0
      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);
        });
      });
Example #6
0
  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);
        });
      });
    });
  }