test('delete with option (Mac) or control (Win)  key deletes full word', (assert) => {
  assert.expect(1);
  if (!Browser.isMac() && !Browser.isWin()) {
    assert.ok(true, 'SKIP on non-mac non-win');
    return;
  }

  let done = assert.async();

  let { post } = Helpers.postAbstract.buildFromText("abc def");
  let { post: expected } = Helpers.postAbstract.buildFromText("abc ");
  editor = Helpers.mobiledoc.renderPostInto(editorElement, post);

  editor.selectRange(new Range(editor.post.tailPosition()));

  let altKey, ctrlKey;
  if (Browser.isMac()) {
    /* Mac key codes for navigation by word */
    altKey = true;
    ctrlKey = false;
  } else {
    /* PC key codes for navigation by word */
    altKey = false;
    ctrlKey = true;
  }

  Helpers.wait(() => {
    Helpers.dom.triggerDelete(editor, DIRECTION.BACKWARD, {altKey, ctrlKey});

    Helpers.wait(() => {
      assert.postIsSimilar(editor.post, expected);
      done();
    });
  });
});
  keydown(event) {
    let { editor } = this;
    if (!editor.hasCursor()) { return; }
    if (!editor.isEditable) { return; }

    let key = Key.fromEvent(event);
    this._updateModifiersFromKey(key, {isDown:true});

    if (editor.handleKeyCommand(event)) { return; }

    if (editor.post.isBlank) {
      editor._insertEmptyMarkupSectionAtCursor();
    }

    let range = editor.range;

    switch(true) {
      // FIXME This should be restricted to only card/atom boundaries
      case key.isHorizontalArrowWithoutModifiersOtherThanShift():
        let newRange;
        if (key.isShift()) {
          newRange = range.extend(key.direction * 1);
        } else {
          newRange = range.move(key.direction);
        }

        editor.selectRange(newRange);
        event.preventDefault();
        break;
      case key.isDelete():
        let { direction } = key;
        let unit = 'char';
        if (this.modifierKeys.alt && Browser.isMac()) {
          unit = 'word';
        } else if (this.modifierKeys.ctrl && Browser.isWin()) {
          unit = 'word';
        }
        editor.performDelete({direction, unit});
        event.preventDefault();
        break;
      case key.isEnter():
        editor.handleNewline(event);
        break;
      case key.isTab():
        // Handle tab here because it does not fire a `keypress` event
        event.preventDefault();
        this._textInputHandler.handle(key.toString());
        break;
    }
  }
 precondition: () => Browser.isWin(),
示例#4
0
}, {
    // CMD+ENTER is our keyboard shortcut for putting a selected card into edit mode
    str: 'META+ENTER',
    run(editor, koenig) {
        if (koenig.selectedCard) {
            koenig.editCard(koenig.selectedCard);
            return;
        }

        return false;
    }
}, {
    // CTRL+ENTER is our keyboard shortcut for putting a selected card into edit mode
    str: 'CTRL+ENTER',
    run(editor, koenig) {
        if (Browser.isWin() && koenig.selectedCard) {
            koenig.editCard(koenig.selectedCard);
            return;
        }

        return false;
    }
}, {
    str: 'SHIFT+ENTER',
    run(editor) {
        if (!editor.range.headSection.isMarkerable) {
            return;
        }

        editor.run((postEditor) => {
            let softReturn = postEditor.builder.createAtom('soft-return');