Skip to content

Commit

Permalink
Merge pull request #314 from bustlelabs/hit-enter-with-atom-313
Browse files Browse the repository at this point in the history
Hitting enter when atom is first in markupSection/listItem inserts newline
  • Loading branch information
bantic committed Feb 4, 2016
2 parents 68d9182 + 1307b90 commit aa48042
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/js/models/atom.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import assert from '../utils/assert';

const ATOM_LENGTH = 1;

export default class Atom extends LinkedItem {
class Atom extends LinkedItem {
constructor(name, value, payload, markups=[]) {
super();
this.name = name;
Expand Down Expand Up @@ -40,7 +40,7 @@ export default class Atom extends LinkedItem {
return false;
}

split(offset=0, endOffset=1) {
split(offset=0, endOffset=offset) {
let markers = [];

if (endOffset === 0) {
Expand All @@ -66,9 +66,9 @@ export default class Atom extends LinkedItem {
let pre, post;

if (offset === 0) {
([pre, post] = [clone, blankMarker]);
} else if (offset === ATOM_LENGTH) {
([pre, post] = [blankMarker, clone]);
} else if (offset === ATOM_LENGTH) {
([pre, post] = [clone, blankMarker]);
} else {
assert(`Invalid offset given to Atom#splitAtOffset: "${offset}"`, false);
}
Expand All @@ -82,3 +82,5 @@ export default class Atom extends LinkedItem {
}

mixin(Atom, MarkuperableMixin);

export default Atom;
50 changes: 50 additions & 0 deletions tests/acceptance/editor-atoms-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,56 @@ test('keystroke of enter before atom and after marker creates new section', (ass
}));
});

// see https://github.com/bustlelabs/mobiledoc-kit/issues/313
test('keystroke of enter at markup section head before atom creates new section', (assert) => {
let expected;
editor = Helpers.mobiledoc.renderInto(editorElement, ({post, markupSection, atom}) => {
expected = post([
markupSection('p'), markupSection('p', [atom('simple-atom')])
]);
return post([markupSection('p', [atom('simple-atom')])]);
}, editorOptions);

editor.run(postEditor => {
postEditor.setRange(new Range(editor.post.headPosition()));
});
Helpers.dom.triggerEnter(editor);

assert.postIsSimilar(editor.post, expected);
assert.renderTreeIsEqual(editor._renderTree, expected);
assert.positionIsEqual(editor.range.head,
editor.post.sections.tail.headPosition());
});

// see https://github.com/bustlelabs/mobiledoc-kit/issues/313
test('keystroke of enter at list item head before atom creates new section', (assert) => {
let expected;
editor = Helpers.mobiledoc.renderInto(editorElement, ({post, listSection, listItem, atom, marker}) => {
let blankMarker = marker();
expected = post([
listSection('ul', [
listItem([blankMarker]),
listItem([atom('simple-atom', 'X')])
])
]);
return post([listSection('ul', [listItem([atom('simple-atom', 'X')])])]);
}, editorOptions);

editor.run(postEditor => {
postEditor.setRange(new Range(editor.post.headPosition()));
});
Helpers.dom.triggerEnter(editor);

assert.postIsSimilar(editor.post, expected);
// FIXME the render tree does not have the blank marker render node
// because ListItem#isBlank is true, so it simply renders a cursor-positioning
// `<br>` tag instead of an empy marker, so the following render tree check
// is not accurate:
// assert.renderTreeIsEqual(editor._renderTree, expected);
assert.positionIsEqual(editor.range.head,
editor.post.sections.head.items.tail.headPosition());
});

test('marking atom with markup adds markup', (assert) => {
editor = new Editor({mobiledoc: mobiledocWithAtom, atoms: [simpleAtom]});
editor.render(editorElement);
Expand Down

0 comments on commit aa48042

Please sign in to comment.