コード例 #1
0
ファイル: share.js プロジェクト: nycitt/listinception
  render: function () {
    Emitter.trigger('overlay:show');
    this.setElement($(this.template(this.model.toJSON())));
    this.$el.appendTo('body').center();

    return this
  }
コード例 #2
0
ファイル: list.js プロジェクト: nycitt/listinception
    var onProgress = function(evt) {
      if (evt.lengthComputable) {
        var percentComplete = Math.round(evt.loaded * 100 / evt.total);
        Emitter.trigger('progress:update', {percent: percentComplete + '%'});
      }

    };
コード例 #3
0
ファイル: list.js プロジェクト: nycitt/listinception
  drop: function(e) {
    e.stopPropagation();
    e.preventDefault();

    var self = this;

    var onProgress = function(evt) {
      if (evt.lengthComputable) {
        var percentComplete = Math.round(evt.loaded * 100 / evt.total);
        Emitter.trigger('progress:update', {percent: percentComplete + '%'});
      }

    };

    var files = e.originalEvent.dataTransfer.files;
    if (files && files.length) {
      // Only upload one file for now
      // make sure file is an image
      var file      = files[0];
      var formData  = new FormData(); 
      formData.append('image', file);
      var req = $.ajax({
          url: '/api/upload',
          type: 'POST',
          data: formData,
          contentType: false,
          processData: false,
          xhr: function() {
            var xhr = $.ajaxSettings.xhr();
            // add progress event
            xhr.addEventListener('progress', onProgress, false);
            // show the progress bar
            Emitter.trigger('progress:show');
            return xhr
          },
          always: function() {
            Emitter.trigger('progress:hide');
          }
      });

      req.done(function(data) {
        console.log(data);
        // update the note with the new image url
        var note = self.model.get('note');
        note += "\n![]("+ location + "uploads/" + data.path  +")";
        self.model.set('note', note);
      });

      req.always(function() {
        Emitter.trigger('progress:hide');
      });

      return false

    } else {
      Emitter.trigger('error:error', {errors: [{message: 'Please select a file.'}]});
    }
      
  },
コード例 #4
0
ファイル: list.js プロジェクト: nycitt/listinception
 xhr: function() {
   var xhr = $.ajaxSettings.xhr();
   // add progress event
   xhr.addEventListener('progress', onProgress, false);
   // show the progress bar
   Emitter.trigger('progress:show');
   return xhr
 },
コード例 #5
0
ファイル: share.js プロジェクト: nycitt/listinception
 destroy: function() {
   this.trigger('destroy');
   this.undelegateEvents();
   this.unbind();
   this.$el.removeData().unbind();
   this.remove();
   Emitter.trigger('overlay:hide');
   console.log('action view destroyed.');
 },
コード例 #6
0
ファイル: list.js プロジェクト: nycitt/listinception
  updateOrder: function (e) {
    e.stopImmediatePropagation();
    // how to get the new parent_id
    var parentLi  = this.$el.parents(".node:first"),
        cid       = parentLi.data('cid') || null,
        that      = this;


    // how to sort
    // 1. get the model just before this one
    // 2. get the model just after this one
    // 3. generate a random date between the two
    // 4. save the date.

    var index         = lists.indexOf(this.model),
        prevNodeEl    = this.$el.prev('li.node'),
        nextNodeEl    = this.$el.next('li.node'),
        prevNode      = lists.get(prevNodeEl.data('cid')), // change this to use events
        nextNode      = lists.get(nextNodeEl.data('cid')),
        order_date    = null;

    if (prevNode && nextNode) {
      var prevNodeDate  = new Date(prevNode.get('order_date'));
      var nextNodeDate  = new Date(nextNode.get('order_date'));
      //order_date = randomDate(prevNodeDate, nextNodeDate);
    } else if (!prevNode && nextNode) {
      console.log('it has no prev node');
      var nextNodeDate  = new Date(nextNode.get('order_date'));
      var prevNodeDate = new Date(nextNodeDate.getTime());
      moment(prevNodeDate).subtract('ms', 2);
    } else if (!nextNode && prevNode){
      console.log('it has no next node');
      var prevNodeDate  = new Date(prevNode.get('order_date'));
      var nextNodeDate = new Date(prevNodeDate.getTime());
      moment(nextNodeDate).add('ms', 2);
    }

    order_date = randomDate(prevNodeDate, nextNodeDate);
    console.log(prevNodeDate.getTime())
    console.log(order_date.getTime())
    console.log(nextNodeDate.getTime())

    if (cid) {
      Emitter.trigger('collection:lists:get', {cid: cid}, function (model) {
        that.model.set({parent_id: model.get('_id'), order_date: order_date});
      });
    } else {
        that.model.set({parent_id: null, order_date: order_date});
    }


  },
コード例 #7
0
ファイル: list.js プロジェクト: nycitt/listinception
  decideLink: function(e) {
    e.stopImmediatePropagation()
    var href = $(e.currentTarget).attr('href');
    if (href && href.indexOf('search') !== 0) {
      var tag = href
                  .replace('/search/', "")
                  .replace('%23', "#");

      // should search the document
      Emitter.trigger('search:search', tag);
    }
    return false
  }
コード例 #8
0
ファイル: index.js プロジェクト: nycitt/listinception
$('body').ajaxError(function(e, xhr, settings, exception) {

  var vent = {};

  try {
    // erorr is json
    vent.errors = JSON.parse(xhr.responseText).errors;
  } catch (e) {
    // error is just a text, just display it
    vent.errors = [{message: xhr.responseText}];
  }

  if (xhr.status > 399) {
    console.log(vent)
    Emitter.trigger('error:ajax', vent);
  }

});
コード例 #9
0
ファイル: list.js プロジェクト: nycitt/listinception
  create: function(e) {

    e.stopImmediatePropagation();

    var titleInput = this.$('>.edit-input');
    var create = function(model) {
      var list = new List({
        parent_id: model.get('_id') || model.get('id'),
      });
      return list
    };

    // if key is backspace and title is empty
    // delete it
    
    if (e.keyCode === 8 && !titleInput.val()) {
      // move the focus to the one before it

      var prev = this.$el.prev('.node').find('>.title');
      if (!prev.length) {
        var prev = this.$el.parents('.node:first').find('>.title');
      }
      prev.trigger('click');

      this.model.destroy();
      return false
    };

    switch (e.keyCode) {

      // enter
      case 13:
        // update this model then create a new one and focus on it
        this.model.set('title', this.$('>.edit-input').val());

        if (this.model.get('state') === 'open') {
          // just create a new node
          var list = new List({
            parent_id: this.model.get('_id')
          });
          var after = null;
        } else if (this.model.get('state') === 'collapsed') {
          var parent_id = this.model.get('parent_id') || null;
          var list = new List({
            parent_id: parent_id
          });
          var after = this.$el;
        };
        // save the model
        list.save(list.toJSON(), {wait:true})
        // emit event to add the model to the collection
        Emitter.trigger('collection:lists:add', {model: list, insertAfter: after});
        break;
      // Top arrow key
      case 38:
        // find sibling if sibgling, use else find parent
        var prevNode = this.$el.prev('.node');
        if (prevNode.length) {
          this.$el.prev('.node').find('>.title').trigger('click');
        } else {
          this.$el.parents('.node:first').find('>.title').trigger('click');
        }
        break;
      // Bottom arrow key
      case 40:
        var nextNode = this.$el.next('.node');
        if (nextNode.length) {
          this.$el.next('.node').find('>.title').trigger('click');
        } else {
          this.$('>.children >.node:first').find('>.title').trigger('click');
        }
    }
  },
コード例 #10
0
ファイル: list.js プロジェクト: nycitt/listinception
 req.always(function() {
   Emitter.trigger('progress:hide');
 });
コード例 #11
0
ファイル: list.js プロジェクト: nycitt/listinception
 always: function() {
   Emitter.trigger('progress:hide');
 }