Exemple #1
0
Editor.prototype.oncreateparagraph = function(e){
  e.preventDefault();
  var selection = window.getSelection();
  var range = selection.getRangeAt();

  // if there's a range: Delete the entire selection,
  // and just delete the selected part of the last paragraph,
  // leaving cursor at the beggining of that paragraph.
  if (!range.collapsed) {
    return deleteParagraphsOnEnter.call(this, range);
  }
  
  var currentParagraph = cursorWithin('p');
  
  // get content after range
  var clone = document.createRange();
  clone.selectNodeContents(currentParagraph);
  clone.setStart(range.endContainer, range.endOffset);
  var after = clone.extractContents();
  var txt = after.textContent;
  clone.detach();

  var p = createParagraph.call(this, txt && txt.trim());
  dom(p).insertAfter(currentParagraph);
  selectionRange(p, 0);
  // we need to bind event listener for when user starts typing, and we
  // can then remove our br.
};
Exemple #2
0
function deleteParagraphsOnEnter(range){
  var paragraphs = withinSelection('p');

  // If we have a selection, but not multiple paragraphs,
  // then we need to build a new paragraph out of
  // the text after the selection.

  if (paragraphs.length < 2) {
    var clone = range.cloneRange();
    var within = cursorWithin('p');
    clone.setEndAfter(within.lastChild);
    var after = contentAfterSelection(within, range);
    var p = createParagraph.call(this, after);
    dom(p).insertAfter(within);
    clone.extractContents();
    clone.detach();
    selectionRange(p, 0);
    return;
  }
  
  selectionRange(paragraphs[paragraphs.length - 1], 0);
  var extract = range.extractContents();

  // remove old paragraphs
  for (var i = 1; i < paragraphs.length; i++) {
    var p = dom(paragraphs[i]);
    this.emit('removed paragraph', p.attr('name'), p);
  }
}
Exemple #3
0
Editor.prototype.ontab = function(e){
  var selection = window.getSelection();
  var range = selection.getRangeAt(0);
  if (!range.startOffset && !range.endOffset) {
    var parent = cursorWithin('p');
    dom(parent).addClass('ingredient');
    e.preventDefault();
  }
};
Exemple #4
0
Paragraphs.prototype.current = function(){
  var range = selection.getRangeAt(0);

  var within = function(){
    var p = cursorWithin('p');
    return p ? [this.get(p.getAttribute('name'))] : [];
  }.bind(this);

  console.log(cursorWithin('p'));

  if (range.collapsed) return within();

  var ps = withinSelection('p');
  if (ps.length) {
    return ps.map(function(el){
      return this.get(el.getAttribute('name'));
    }, this);
  } else {
    return within();
  }
}
Exemple #5
0
function deleteParagraph(range){
  var el = cursorWithin('p');
  if (!el) return;
  var $el = dom(el);
  var $previous = $el.previous();
  if (!$previous.length) return;
  var previousTextLength = $previous.text().length;

  // if collapsing 2 paragraphs, combine our html, or ideally we
  // should create a new range and insert our node there.
  var txt = $el.text();
  if (txt) $previous.html($previous.html() + $el.html());

  // destroy our current p
  $el.remove();
  this.emit('removed paragraph', $el.attr('name'), $el);

  // restore cursor
  selectionRange($previous[0], previousTextLength);
  return $el;
}
Exemple #6
0
 var within = function(){
   var p = cursorWithin('p');
   return p ? [this.get(p.getAttribute('name'))] : [];
 }.bind(this);