Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/300845
Change subject: Use innerText for setting clipboard plain text
......................................................................
Use innerText for setting clipboard plain text
jQuery.text has no line breaks so is a poor way to set
clipboard text. innerText by specification is what the
user expects to be wrriten to the clipboard.
Change-Id: I5aabe57bfc2f06687e90f03ba67e8c2776dffe9e
---
M src/ce/ve.ce.Surface.js
M tests/ce/ve.ce.Surface.test.js
2 files changed, 43 insertions(+), 12 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor
refs/changes/45/300845/1
diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index a2a3d9d..eef4942 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -1659,7 +1659,10 @@
clipboardData.setData( 'text/xcustom', clipboardKey );
}
clipboardData.setData( 'text/html', this.$pasteTarget.html() );
- clipboardData.setData( 'text/plain', this.$pasteTarget.text() );
+ // innerText "approximates the text the user would get if they
highlighted the
+ // contents of the element with the cursor and then copied to
the clipboard." - MDN
+ // Use $.text as a fallback for Firefox <= 44
+ clipboardData.setData( 'text/plain', this.$pasteTarget[ 0
].innerText || this.$pasteTarget.text() );
} else {
// Support: IE
// If direct clipboard editing is not allowed, we must use the
pasteTarget to
diff --git a/tests/ce/ve.ce.Surface.test.js b/tests/ce/ve.ce.Surface.test.js
index 100bae0..ff97782 100644
--- a/tests/ce/ve.ce.Surface.test.js
+++ b/tests/ce/ve.ce.Surface.test.js
@@ -1168,6 +1168,7 @@
QUnit.test( 'onCopy', function ( assert ) {
var i, testClipboardData,
+ count = 0,
testEvent = {
originalEvent: {
clipboardData: {
@@ -1198,6 +1199,7 @@
expectedOriginalRange: new ve.Range( 1, 6 ),
expectedBalancedRange: new ve.Range( 1, 6 ),
expectedHtml: '<ol><li><p>g</p></li></ol>',
+ expectedText: 'g\n\n',
msg: 'Copy list item'
},
{
@@ -1213,13 +1215,32 @@
'"datatype":"c","content":"b"}">' +
'Foo' +
'</p>',
+ expectedText: 'Foo\n\n',
msg: 'RDFa attributes encoded into
data-ve-attributes'
+ },
+ {
+ rangeOrSelection: new ve.Range( 0, 61 ),
+ expectedText:
'abc\n\nd\n\ne\n\nf\n\ng\n\nhi\nj\n\nk\n\nl\n\nm\n\n',
+ msg: 'Plain text of entire document'
}
];
- QUnit.expect( cases.length * 5 );
+ for ( i = 0; i < cases.length; i++ ) {
+ count += 3;
+ if ( cases[ i ].expectedData ) {
+ count++;
+ }
+ if ( cases[ i ].expectedHtml ) {
+ count++;
+ }
+ if ( cases[ i ].expectedText ) {
+ count++;
+ }
+ }
- function testRunner( doc, rangeOrSelection, expectedData,
expectedOriginalRange, expectedBalancedRange, expectedHtml, msg ) {
+ QUnit.expect( count );
+
+ function testRunner( doc, rangeOrSelection, expectedData,
expectedOriginalRange, expectedBalancedRange, expectedHtml, expectedText, msg )
{
var clipboardKey, slice,
view = ve.test.utils.createSurfaceViewFromDocument( doc
|| ve.dm.example.createExampleDocument() ),
model = view.getModel();
@@ -1235,14 +1256,21 @@
slice = view.clipboard.slice;
- assert.equalLinearData( slice.data.data, expectedData, msg + ':
data' );
- assert.equalRange( slice.originalRange, expectedOriginalRange,
msg + ': originalRange' );
- assert.equalRange( slice.balancedRange, expectedBalancedRange,
msg + ': balancedRange' );
- assert.equalDomElement(
- $( '<div>' ).html( view.$pasteTarget.html() )[ 0 ],
- $( '<div>' ).html( expectedHtml )[ 0 ],
- msg + ': html'
- );
+ assert.equalRange( slice.originalRange, expectedOriginalRange
|| rangeOrSelection, msg + ': originalRange' );
+ assert.equalRange( slice.balancedRange, expectedBalancedRange
|| rangeOrSelection, msg + ': balancedRange' );
+ if ( expectedData ) {
+ assert.equalLinearData( slice.data.data, expectedData,
msg + ': data' );
+ }
+ if ( expectedHtml ) {
+ assert.equalDomElement(
+ $( '<div>' ).html( testClipboardData[
'text/html' ] )[ 0 ],
+ $( '<div>' ).html( expectedHtml )[ 0 ],
+ msg + ': html'
+ );
+ }
+ if ( expectedText ) {
+ assert.strictEqual( testClipboardData[ 'text/plain' ],
expectedText, msg + ': text' );
+ }
view.destroy();
}
@@ -1251,7 +1279,7 @@
testRunner(
cases[ i ].doc, cases[ i ].rangeOrSelection, cases[ i
].expectedData,
cases[ i ].expectedOriginalRange, cases[ i
].expectedBalancedRange,
- cases[ i ].expectedHtml, cases[ i ].msg
+ cases[ i ].expectedHtml, cases[ i ].expectedText,
cases[ i ].msg
);
}
--
To view, visit https://gerrit.wikimedia.org/r/300845
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5aabe57bfc2f06687e90f03ba67e8c2776dffe9e
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits