Skip to content

Commit

Permalink
Preserve list indentation from one DraftEditor to another on paste
Browse files Browse the repository at this point in the history
Summary:
**Summary**

When pasting from one editor to another we lose list indentation.  By inspecting the classList of each list item contained in HTML pasted we can preserve this state.

**Test Plan**
I validated behavior manually:

- Rebuild
- Open two tabs to rich text example
- In one create indented list
- Select all
- Paste into other
- Styling is preserved

I also added some snapshot testing for regression testing.
Closes facebookarchive/draft-js#1605

Reviewed By: flarnie

Differential Revision: D6702583

Pulled By: flarnie

fbshipit-source-id: 071cecc786e2aaef11af9bd21cc03f9b2544a2b4
  • Loading branch information
aforismesen authored and facebook-github-bot committed Jan 11, 2018
1 parent 6516078 commit d42e51e
Show file tree
Hide file tree
Showing 3 changed files with 420 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,365 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Should import recognised draft li depths 1`] = `
Array [
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"data": Object {},
"depth": 0,
"key": "key0",
"text": "depth0",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"data": Object {},
"depth": 1,
"key": "key2",
"text": "depth1",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"data": Object {},
"depth": 2,
"key": "key4",
"text": "depth2",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"data": Object {},
"depth": 3,
"key": "key6",
"text": "depth3",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"data": Object {},
"depth": 4,
"key": "key8",
"text": "depth4",
"type": "unordered-list-item",
},
]
`;

exports[`Should import recognised draft li depths when nesting enabled 1`] = `
Array [
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"children": Array [],
"data": Object {},
"depth": 0,
"key": "key0",
"nextSibling": "key1",
"parent": null,
"prevSibling": null,
"text": "depth0",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"children": Array [],
"data": Object {},
"depth": 0,
"key": "key1",
"nextSibling": "key2",
"parent": null,
"prevSibling": "key0",
"text": "depth1",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"children": Array [],
"data": Object {},
"depth": 0,
"key": "key2",
"nextSibling": "key3",
"parent": null,
"prevSibling": "key1",
"text": "depth2",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"children": Array [],
"data": Object {},
"depth": 0,
"key": "key3",
"nextSibling": "key4",
"parent": null,
"prevSibling": "key2",
"text": "depth3",
"type": "unordered-list-item",
},
Object {
"characterList": Array [
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
Object {
"entity": null,
"style": Array [],
},
],
"children": Array [],
"data": Object {},
"depth": 0,
"key": "key4",
"nextSibling": null,
"parent": null,
"prevSibling": "key3",
"text": "depth4",
"type": "unordered-list-item",
},
]
`;

exports[`Should not create empty container blocks around ol and their list items 1`] = `
Array [
Object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,3 +279,33 @@ test('Should preserve entities for whitespace-only content', () => {
experimentalTreeDataSupport: false,
});
});

test('Should import recognised draft li depths', () => {
const html_string = `
<ul>
<li class="public-DraftStyleDefault-depth0">depth0</li>
<li class="public-DraftStyleDefault-depth1">depth1</li>
<li class="public-DraftStyleDefault-depth2">depth2</li>
<li class="public-DraftStyleDefault-depth3">depth3</li>
<li class="public-DraftStyleDefault-depth4">depth4</li>
</ul>
`;
assertConvertFromHTMLToContentBlocks(html_string, {
experimentalTreeDataSupport: false,
});
});

test('Should import recognised draft li depths when nesting enabled', () => {
const html_string = `
<ul>
<li class="public-DraftStyleDefault-depth0">depth0</li>
<li class="public-DraftStyleDefault-depth1">depth1</li>
<li class="public-DraftStyleDefault-depth2">depth2</li>
<li class="public-DraftStyleDefault-depth3">depth3</li>
<li class="public-DraftStyleDefault-depth4">depth4</li>
</ul>
`;
assertConvertFromHTMLToContentBlocks(html_string, {
experimentalTreeDataSupport: true,
});
});
Loading

0 comments on commit d42e51e

Please sign in to comment.