Example #1
0
File: view.js Project: 89berner/app
CommentsView.prototype.oncancelremove = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a.cancel-remove');
  var comment = closest(target, 'li[data-id]');
  classes(comment).remove('remove');
};
Example #2
0
CommentsRepliesView.prototype.onconfirmremove = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a.cancel-remove');
  var replyEl = closest(target, 'li[data-id]');
  var id = replyEl.getAttribute('data-id');
  var view = this;
  request
    .del('/api/comment/:commentId/reply/:replyId'.replace(':commentId', this.comment.id).replace(':replyId', id))
    .end(function(err, res) {
      if (err) return log('Fetch error: %s', err);
      if (!res.ok) err = res.error, log('Fetch error: %s', err);
      if (res.body && res.body.error) err = res.body.error, log('Fetch response error: %s', err);

      classes(replyEl).remove('remove');
      var messageEl = o('.onreply.message', replyEl);
      messageEl.style.display = 'block';
      if (err) {
        return messageEl.innerHTML = err;
      } else {
        log('successfull reply removed %s', id);
        messageEl.innerHTML = t('The argument was removed');
        setTimeout(function () {
          replyEl.remove();
        }, 1000);
        view.emit('remove', { commentId: view.comment.id, replyId: id });
      }
  });
};
Example #3
0
File: view.js Project: 3manuek/app
CommentsView.prototype.ondislike = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a');
  var comment = closest(target,'li[data-id]');
  var id = comment.getAttribute('data-id');
  var liked = classes(o('a.like', comment)).has('selected');
  var disliked = classes(o('a.dislike', comment)).has('selected');

  classes(target).add('selected');
  classes(o('a.like', comment)).remove('selected');

  var counter = o('.comment-counter', comment);
  var count = parseInt(counter.innerHTML, 10) || 0;
  count -= liked ? 2 : (disliked ? 0 : 1);
  counter.innerHTML = count;
  
  request
  .post('/api/comment/:id/downvote'.replace(':id', id))
  .end(function(err, res) {
    if (err) return log('Fetch error: %s', err), classes(target).remove('selected');
    if (!res.ok) return log('Fetch error: %s', res.error), classes(target).remove('selected');
    if (res.body && res.body.error) return log('Fetch response error: %s', res.body.error), classes(target).remove('selected');
    log('successfull downvote %s', id);
  });
}
Example #4
0
File: view.js Project: Docworld/app
CommentsFilter.prototype.onsortclick = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a');
  var li = closest(target, 'li');
  var sort = li.getAttribute('data-sort');
  this.set(sort);
}
Example #5
0
File: view.js Project: 89berner/app
CommentsView.prototype.onremove = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a');
  var comment = closest(target, 'li[data-id]');
  classes(comment).add('remove');
  var btnEdit = o('.btn-edit', comment);
  classes(btnEdit).remove('hide');
  var mediaBody = o('.media-body', comment);
  classes(mediaBody).remove('edit');
};
Example #6
0
File: view.js Project: 89berner/app
CommentsView.prototype.onshowspam = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a');
  var comment = closest(target,'li[data-id]');
  var id = comment.getAttribute('data-id');
  var flagged = classes(target).has('selected');
  flagged ? target.title=t('Spam') : target.title=t('Not spam');
    
  classes(comment).remove('spam');
}
Example #7
0
 on(document.body, '.data-table-cell-editor-action .okButton', 'click', function(e) {
   var editContainer = parents(e.target, '.data-table-cell-editor')
   var editor = dom(editContainer).select('.data-table-cell-editor-editor')
   var updated = editor.val()
   var tr = parents(editContainer, 'tr')
   var td = parents(editContainer, 'td')
   var key = dom(tr).attr('data-key')
   var column = dom(td).attr('data-header')
   var row = state.rows[key]
   row[column] = updated
   closeCellEdit(editContainer)
   post(row, function(err) {
     if (err) notify(err.message)
   })
 })
Example #8
0
                return function (e) {
                    e.delegateTarget = closest(e.target, selector, true);

                    if (e.delegateTarget) {
                        callback.call(element, e);
                    }
                }
Example #9
0
 on(document.body, '.uploadBlob', 'change', function(e) {
   e.preventDefault()
   var files = Array.prototype.slice.call(e.target.files)
   var first = files[0]
   var container = parents(e.target, '.inspectContainer')
   var key = dom(container).attr('data-key')
   var row = state.rows[key]
   
   var uploaderEl = dom('.blobUploader')
   uploaderEl.html('<progress max="100" value="0"></progress>')
   var progressBar = uploaderEl.select('progress')
   
   var uri = state.remote + '/api/' + row.key + '/' + first.name + '?version=' + row.version
   
   var req = xhr({uri: uri, method: "POST", timeout: 0, body: first, cors: true, onUploadProgress: onProgress}, function(err, resp, body) {
     if (err) notify(err)
     var updated = JSON.parse(body)
     state.rows[updated.key] = updated
     showInspector(updated)
   })
   
   function onProgress(e) {
     if (e.lengthComputable) {
       var progress = ((e.loaded / e.total) * 100)
       progressBar.attr('value', progress)
     }
   }
 })
Example #10
0
File: view.js Project: 89berner/app
CommentsView.prototype.onhidemessage = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, '.message');
  target.innerHTML = '';
  target.style.display = 'none';
};
Example #11
0
   on(document.body, '.json-paste-import .okButton', 'click', function(e) {
     var container = parents(e.target, '.json-paste-import')
     var textarea = dom(container).select('.data-table-cell-copypaste-editor')
     var input = textarea.val()
     if (input.length === 0) return notify('No JSON in input!')
 
     try {
       var rows = input.split(/\r?\n/)
       var objects = []
       rows.map(function(r) { if (r.length > 0) objects.push(JSON.parse(r)) })
     } catch(e) {
       return notify('Could not parse newline separated JSON --- Invalid JSON')
     }
 
     notify('Uploading data...')
 
     xhr({uri: state.remote + '/api/bulk?results=true', method: "POST", body: input, cors: true, headers: {"content-type": "application/json"}}, function(err, resp, body) {
       if (err) return notify(err)
       var lines = body.split(/\r?\n/)
       var created = []
       var updated = []
       var conflicts = []
       lines.map(function(r) {
         if (r.length === 0) return
         var row = JSON.parse(r)
         if (row.conflict) conflicts.push(row)
         else if (row.version === 1) created.push(row)
         else updated.push(row)
       })
       notify("New: " + created.length + ' rows, updated: ' + updated.length + ' rows, conflicts: ' + conflicts.length + ' rows')
       refreshTable()
     })
     dialog.hide()
     dialogOverlay.hide()
   })
Example #12
0
ProposalOptions.prototype.vote = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, '[data-proposal]')
  var id = target.getAttribute('data-proposal');
  var self = this;
  var value;

  if (classes(target).has('vote-no')) {
    value = 'negative';
  } else if (classes(target).has('vote-yes')) {
    value = 'positive';
  } else if (classes(target).has('vote-abstain')) {
    value = 'neutral';
  }

  if (this.citizen.id) {
    log('casting vote %s for %s', value, id);
    this.post(
      '/api/law/:id/vote'.replace(':id', id),
      { value: value },
      function (err, res) {
        if (err || !res.ok) return log('Failed cast %s for %s with error: %j', value, id, err || res.error);
        bus.emit('vote', id, value);
        self.emit('vote', value);
      }
    );    
  } else {
    classes(o('.proposal-options p.text-mute', this.el)).remove('hide');
  }
}
Example #13
0
FilterView.prototype.onsortclick = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, '[data-sort]', true);
  var sort = target.getAttribute('data-sort');
  
  filter.set('sort', sort);
}
Example #14
0
 on(document.body, '.project-actions .button', 'click', function(e) {
   var el = e.target
   if (!dom(el).hasClass('button')) el = parents(el, '.button')
   var action = dom(el).attr('data-action')
   render(action + 'Actions', '.menu')
   position(menu, el, {left: -60, top: 0})
   menuOverlay.show()
 })
Example #15
0
 on(document.body, '#sign-in-form', 'submit', function(e) {
   var container = parents(e.target, '.signInContainer')
   e.preventDefault()
   var button = dom(container).select('.okButton')[0]
   var click = document.createEvent('HTMLEvents')
   click.initEvent('click', true, false)
   button.dispatchEvent(click)
 })
Example #16
0
FilterView.prototype.onhidevotedclick = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, '[type=checkbox]', true);
  var checked = !!target.checked;
  
  filter.set('hide-voted', checked);
}
Example #17
0
FilterView.prototype.onstatusclick = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, '[data-status]', true);
  var status = target.getAttribute('data-status');
  
  filter.set('status', status);
}
Example #18
0
File: view.js Project: 89berner/app
CommentsView.prototype.newreply = function(reply) {
  var replyEl = o('li[data-id=' + reply.id + ']', this.el);
  var commentEl = closest(replyEl, 'li.comment-item');
  var replyCounter = o('.reply-counter', commentEl);
  var counter = replyCounter.innerHTML != '' ? parseInt(replyCounter.innerHTML) : 0;
  var btnRemove = o('.comment-action.btn-remove', commentEl);
  classes(btnRemove).add('hide');
  counter++;
  replyCounter.innerHTML = counter;
}
Example #19
0
File: view.js Project: 3manuek/app
CommentsView.prototype.readmore = function(ev) {
  ev.preventDefault();

  var commentContainer = closest(ev.target,'li[data-id]');
  var id = commentContainer.getAttribute('data-id');
  var comment = get(this.comments, 'id === "%id"'.replace('%id', id));
  var commentText = o('.comment-text', commentContainer);
  
  commentText.innerHTML = new Paragraphs(comment.text).split();
}
Example #20
0
Section.prototype.readmore = function(ev) {
  ev.preventDefault();

  var commentContainer = closest(ev.target,'li[data-comment-id]');
  var id = commentContainer.getAttribute('data-comment-id');
  var comment = get(this.comments, 'id === "%id"'.replace('%id', id));
  var commentText = o('p.comment', commentContainer);

  commentText.html(comment.text);
}
Example #21
0
document.addEventListener('click', function (ev) {
	if (open) {
		open.classList.remove('open');
		open = undefined;
	}
	var cell = closest(ev.target, 'th, td', true);
	if (!cell) return;
	cell.classList.add('open');
	open = cell;
});
Example #22
0
Controller.prototype._getTargetUser = function(event) {
  var target = event.target;

  if (!target) {
    return false;
  }

  var userEl = closest(target, '.' + COMMON.USER_CLASS, false);

  return userEl;
};
Example #23
0
    return function(e) {
        var delegateTarget = closest(e.target, selector, true);

        if (delegateTarget) {
            Object.defineProperty(e, 'target', {
                value: delegateTarget
            });

            callback.call(element, e);
        }
    }
Example #24
0
File: view.js Project: 89berner/app
CommentsView.prototype.ondislike = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a');
  var commentEl = closest(target,'li[data-id]');
  var id = commentEl.getAttribute('data-id');
  var comment = get(this.comments, 'id === "%id"'.replace('%id', id));
  if (!comment) {
    comment = get(this.myArguments, 'id === "%id"'.replace('%id', id));
  }
  var liked = classes(o('a.like', commentEl)).has('selected');
  var disliked = classes(o('a.dislike', commentEl)).has('selected');

  var error = o('.error', commentEl);

  if (comment.author.id == citizen.id) {
    return error.innerHTML = t('You\'re not allowed to vote your own argument');
  } else if (!citizen.id) {
    return error.innerHTML = t('comments.sign-in-required-to-vote-comments');
  } else {
    error.innerHTML = '';
  }

  classes(target).add('selected');
  classes(o('a.like', commentEl)).remove('selected');

  var counter = o('.comment-counter', commentEl);
  var count = parseInt(counter.innerHTML, 10) || 0;
  count -= liked ? 2 : (disliked ? 0 : 1);
  counter.innerHTML = count;
  
  request
  .post('/api/comment/:id/downvote'.replace(':id', id))
  .end(function(err, res) {
    if (err) return log('Fetch error: %s', err), classes(target).remove('selected');
    if (res.status == 401) return error.innerHTML = t(res.body.error);
    if (!res.ok) return log('Fetch error: %s', res.error), classes(target).remove('selected');
    if (res.body && res.body.error) return log('Fetch response error: %s', res.body.error), classes(target).remove('selected');
    log('successfull downvote %s', id);
  });
}
Example #25
0
File: view.js Project: 89berner/app
CommentsView.prototype.onflag = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a');
  var commentEl = closest(target,'li[data-id]');
  var id = commentEl.getAttribute('data-id');
  var comment = get(this.comments, 'id === "%id"'.replace('%id', id));
  var flagged = classes(target).has('selected');
  var alreadyFlagged = classes(commentEl).has('spam');

  classes(target).toggle('selected');
  flagged ? target.title=t('Spam') : target.title=t('Not spam');
  var flags = comment.flags.length + (flagged ? -1 : 1);

  if (config['spam limit']) {
    var spam = flags > config['spam limit'];
  } else {
    var spam = flags > (comment.upvotes.length - comment.downvotes.length)
  }
  spam ? classes(commentEl).add('spam') : classes(commentEl).remove('spam');
  
  request
  .post('/api/comment/:id/:action'.replace(':id', id).replace(':action', flagged ? 'unflag' : 'flag'))
  .end(function(err, res) {
    if (err) return handleError(err);
    if (!res.ok) return handleError(res.error);
    if (res.body && res.body.error) return handleError(res.body.error);
    
    log('successfull %s as spam %s', flagged ? 'unflag' : 'flag', id);
    var count = o('.count', target);
    var innerCount = count.innerHTML != '' ? parseInt(count.innerHTML) : 0;
    innerCount += (flagged ? -1 : 1)
    count.innerHTML = innerCount ? innerCount : '';

    function handleError(error) {
      log('Fetch response error: %s', error)
      if (alreadyFlagged) classes(commentEl).remove('spam');
      return classes(target).remove('selected');
    }
  });
}
  const keyDownListener = on(el, 'keydown', keyPressed(13, { ctrlKey: true }, event => {
    event.preventDefault()
    const submitEvent = new window.Event('submit', { bubbles: true, cancelable: true })
    const form = closest(el, 'form')
    const submitter = form.querySelector('button[type="submit"], input[type="submit"]')

    if (submitter) {
      submitter.click()
    } else {
      form.dispatchEvent(submitEvent)
    }
  }))
Example #27
0
File: view.js Project: 89berner/app
CommentsView.prototype.readmore = function(ev) {
  ev.preventDefault();

  var commentContainer = closest(ev.target,'li[data-id]');
  var id = commentContainer.getAttribute('data-id');
  var comment = get(this.comments, 'id === "%id"'.replace('%id', id));
  if (!comment) {
    comment = get(this.myArguments, 'id === "%id"'.replace('%id', id));
  }
  var commentText = o('.comment-text', commentContainer);
  
  commentText.innerHTML = markdown(comment.text);
}
Example #28
0
 on(document.body, '.signInContainer .okButton', 'click', function(e) {
   var container = parents(e.target, '.signInContainer')
   var user = dom(container).select('#username-input').val()
   var pass = dom(container).select('#password-input').val()
   var headers = {authorization: 'Basic ' + btoa(user + ':' + pass)}
   xhr({ uri: state.remote + '/api/session', json: true, headers: headers, cors: true }, function (err, resp, json) {
     if (err) return notify('Login error! ' + err.message)
     if (json.loggedOut) return notify('Invalid username or password')
     notify('Logged in')
     render('controls', '.project-controls', {text: 'Sign out'})
     dialog.hide()
     dialogOverlay.hide()
   })
 })
    updateComponentData: function () {
        var el = this.getDOMNode(),
            baseContainer = closest(el, 'rs-base-container'),
            contentContainer = el,
            baseContainerHeight = baseContainer.clientHeight,
            contentContainerHeight = contentContainer.clientHeight,
            // ==
            onePercent = contentContainerHeight / 100,
            realPercent = (baseContainerHeight / onePercent) * 0.01,
            // ==
            verticalToddleHeight = Math.ceil(realPercent * baseContainerHeight);

        ScrollActions.changeVerticalToggleHeight(verticalToddleHeight, realPercent);
    },
Example #30
0
File: view.js Project: 89berner/app
CommentsView.prototype.onreplyclick = function(ev) {
  ev.preventDefault();

  var target = ev.delegateTarget || closest(ev.target, 'a');
  var commentEl = closest(target,'li[data-id]');
  var id = commentEl.getAttribute('data-id');
  var comment = get(this.comments, 'id === "%id"'.replace('%id', id));
  if (!comment) {
    comment = get(this.myArguments, 'id === "%id"'.replace('%id', id));
  }
  
  var repliesContainer = o('.replies-container', commentEl);
  if (repliesContainer.firstChild) {
    empty(repliesContainer);
    classes(target).remove('no-hide')
  } else {
    var commentsRepliesView = new CommentsRepliesView(comment);
    classes(target).add('no-hide')
    commentsRepliesView.render(repliesContainer);
    commentsRepliesView.on('post', this.newreply.bind(this))
    commentsRepliesView.on('remove', this.removereply.bind(this))
  }
}