Skip to content

Commit

Permalink
Merge branch 't/13187b' into major
Browse files Browse the repository at this point in the history
  • Loading branch information
Piotr Jasiun committed Jun 8, 2015
2 parents 2a4748a + 7f221ff commit 0e2ae53
Show file tree
Hide file tree
Showing 3 changed files with 251 additions and 9 deletions.
17 changes: 8 additions & 9 deletions plugins/clipboard/plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
// * simulate 'beforepaste' for non-IEs on editable
// * listen 'onpaste' on editable ('onbeforepaste' for IE)
// * fire 'beforePaste' on editor
// * if ( !canceled && !dataTransfer.getData( 'text/html' ) && !htmlAlwaysInDataTransfer ) getClipboardDataByPastebin
// * if ( !canceled && ( htmlInDataTransfer || !external paste) && dataTransfer is not empty ) getClipboardDataByPastebin
// * fire 'paste' on editor
// * !canceled && fire 'afterPaste' on editor
// -- Copy command
Expand All @@ -52,7 +52,7 @@
// * listen 'onpaste'
// * cancel native event
// * fire 'beforePaste' on editor
// * if ( !canceled && !dataTransfer.getData( 'text/html' ) && !htmlAlwaysInDataTransfer ) getClipboardDataByPastebin
// * if ( !canceled && ( htmlInDataTransfer || !external paste) && dataTransfer is not empty ) getClipboardDataByPastebin
// * execIECommand( 'paste' ) -> this fires another 'paste' event, so cancel it
// * fire 'paste' on editor
// * !canceled && fire 'afterPaste' on editor
Expand Down Expand Up @@ -151,7 +151,7 @@
evt.data.dataTransfer = new CKEDITOR.plugins.clipboard.dataTransfer();
}

// If dataValue is already set do not override it.
// If dataValue is already set (manually or by paste bin), so do not override it.
if ( evt.data.dataValue ) {
return;
}
Expand Down Expand Up @@ -1031,9 +1031,9 @@
method: 'paste',
dataTransfer: clipboard.initPasteDataTransfer( evt )
},
// True if we can fully rely on data from dataTransfer, this means that
// if HTML is available via native paste it is also available via getData.
htmlAlwaysInDataTransfer = CKEDITOR.env.chrome;
// True if data transfer contains HTML data.
htmlInExternalDataTransfer = !CKEDITOR.env.ie && !CKEDITOR.env.safari,
external = eventData.dataTransfer.getTransferType( editor ) === CKEDITOR.DATA_TRANSFER_EXTERNAL;

eventData.dataTransfer.cacheData();

Expand All @@ -1044,9 +1044,8 @@
// after canceling 'beforePaste' event.
var beforePasteNotCanceled = editor.fire( 'beforePaste', eventData ) !== false;

// Do not use paste bin if the browser let us get HTML from dataTranfer
// or we can be sure that no HTML in dataTranfer means no HTML at all.
if ( beforePasteNotCanceled && ( htmlAlwaysInDataTransfer || eventData.dataTransfer.getData( 'text/html' ) ) ) {
// Do not use paste bin if the browser let us get HTML or files from dataTranfer.
if ( beforePasteNotCanceled && ( htmlInExternalDataTransfer || !external ) && !eventData.dataTransfer.isEmpty() ) {
evt.data.preventDefault();
setTimeout( function() {
firePasteEvents( editor, eventData );
Expand Down
223 changes: 223 additions & 0 deletions tests/plugins/clipboard/manual/paste.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
<head>
<link rel="stylesheet" href="/apps/ckeditor/contents.css">
<style type="text/css">
h2 {
margin: 10px 0px 4px 0px;
padding: 0;
font-size: 14px;
}
</style>
</head>
<div>
<h2>Helpers (<a href="javascript:hideshow('helpers');">hide/show</a>)</h2>
<div id="helpers">
<textarea style="width:49%; height:50px; float: left;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. In commodo vulputate tempor. Sed <b>at</b> elit.</textarea>
<div style="width:49%; height:50px; float: right;">
Lorem ipsum <b>dolor</b> sit <i>amet</i>, consectetur adipiscing elit. In commodo vulputate tempor. Sed &lt;b&gt;at elit&lt;/b&gt; vel ligula mollis aliquet a ac odio.
<pre>
Aenean cursus egestas ipsum.
</pre>
</div>
<div style="clear:both;"></div>
</div>
</div>
<div>
<h2>Classic editor (<a href="javascript:hideshow('classic-editor');">hide/show</a>)</h2>
<div id="classic-editor">
<div id="classic">
<h1>Apollo 11</h1>

<p><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. <img height="20" alt="CKEditor logo" src="%BASE_PATH%_assets/logo.png" /> Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>

<figure class="image right"><img alt="CKEditor logo" src="%BASE_PATH%_assets/logo.png" />
<figcaption>CKEditor</figcaption>
</figure>

<p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.</p>

<h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2>

<p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p>

<blockquote>
<p>One small step for [a] man, one giant leap for mankind.</p>
</blockquote>

<p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p>

<blockquote>
<p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p>
</blockquote>

<h2>Technical details <a id="tech-details" name="tech-details"></a></h2>

<table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;">
<caption><strong>Mission crew</strong></caption>
<thead>
<tr>
<th scope="col">Position</th>
<th scope="col">Astronaut</th>
</tr>
</thead>
<tbody>
<tr>
<td>Commander</td>
<td>Neil A. Armstrong</td>
</tr>
<tr>
<td>Command Module Pilot</td>
<td>Michael Collins</td>
</tr>
<tr>
<td>Lunar Module Pilot</td>
<td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td>
</tr>
</tbody>
</table>

<p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA" title="NASA">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:</p>

<ol>
<li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li>
<li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li>
<li><strong>Lunar Module</strong> for landing on the Moon.</li>
</ol>

<p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean">Pacific Ocean</a> on July 24.</p>

<hr />
<p style="text-align: right;"><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small></p>
</div>
</div>
</div>
<div>
<h2>Inline editor (<a href="javascript:hideshow('inline');">hide/show</a>)</h2>
<div id="inline" contenteditable="true">
<h1>Apollo 11</h1>

<p><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. <img height="20" alt="CKEditor logo" src="%BASE_PATH%_assets/logo.png" /> Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>

<figure class="image right"><img alt="CKEditor logo" src="%BASE_PATH%_assets/logo.png" />
<figcaption>CKEditor</figcaption>
</figure>

<p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.</p>

<h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2>

<p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p>

<blockquote>
<p>One small step for [a] man, one giant leap for mankind.</p>
</blockquote>

<p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p>

<blockquote>
<p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p>
</blockquote>

<h2>Technical details <a id="tech-details" name="tech-details"></a></h2>

<table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;">
<caption><strong>Mission crew</strong></caption>
<thead>
<tr>
<th scope="col">Position</th>
<th scope="col">Astronaut</th>
</tr>
</thead>
<tbody>
<tr>
<td>Commander</td>
<td>Neil A. Armstrong</td>
</tr>
<tr>
<td>Command Module Pilot</td>
<td>Michael Collins</td>
</tr>
<tr>
<td>Lunar Module Pilot</td>
<td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td>
</tr>
</tbody>
</table>

<p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA" title="NASA">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:</p>

<ol>
<li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li>
<li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li>
<li><strong>Lunar Module</strong> for landing on the Moon.</li>
</ol>

<p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean">Pacific Ocean</a> on July 24.</p>

<hr />
<p style="text-align: right;"><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small></p>
</div>
</div>
<script>
/* global console */

if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) {
CKEDITOR.tools.enableHtml5Elements( document );
}

CKEDITOR.disableAutoInline = true;

function hideshow( id ) {
var element = CKEDITOR.document.getById( id );

if ( element.getStyle( 'display' ) == 'none' )
element.show();
else
element.hide();
}

function getTransferTypeAsString( evt ) {
var transferType = evt.data.dataTransfer.getTransferType( evt.editor );

switch ( transferType ) {
case CKEDITOR.DATA_TRANSFER_INTERNAL:
return 'internal';
case CKEDITOR.DATA_TRANSFER_EXTERNAL:
return 'external';
case CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:
return 'cross editors';
}
}

var config = {
imageUploadUrl: '%BASE_PATH%'
},
editors = [ CKEDITOR.replace( 'classic', config ), CKEDITOR.inline( 'inline', config ) ];

for ( var i = 0; i < editors.length; i++ ) {
var editor = editors[ i ];

if ( !CKEDITOR.env.ie ) {
editor.on( 'contentDom', function( evt ) {
evt.editor.editable().on( 'paste', function( evt ) {
var clipboardData = evt.data.$.clipboardData,
types = clipboardData.types,
typesString = [].join.call( types, ', ' );

console.log( '------ clipboardData, types: ' + typesString + ' ------' );

for ( var j = 0; j < types.length; j++ ) {
console.log( types[ j ] + ' data:', clipboardData.getData( types[ j ] ) );
}
} );
} );
}

editor.on( 'paste', function( evt ) {
console.log( '*** paste in ' + editor.name + ' editor ' +
'(' + getTransferTypeAsString( evt ) + ', data type: ' + evt.data.type + ') ***' );
console.log( evt.data.dataValue );
console.log( '------------------------------------------------------------------' );
} );
}

</script>
20 changes: 20 additions & 0 deletions tests/plugins/clipboard/manual/paste.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@bender-ui: collapsed
@bender-tags: 4.5.0, tc
@bender-ckeditor-plugins: wysiwygarea, toolbar, undo, basicstyles, image2, font, stylescombo, basicstyles, format, maximize, blockquote, list, table, resize, elementspath, justify, clipboard, floatingspace, sourcearea, htmlwriter, link, uploadimage, image2
@bender-include: ../../uploadwidget/manual/_helpers/xhr.js

* test internal copy&paste in the editor,
* test pasting content from an external source (helpers, MS Word, image editor),
* test copy&paste between editors.

## Scenarios:

* copy and paste simple text (textarea),
* copy and paste HTML content of the webpage,
* copy and paste content from MS Word,
* copy and paste file (works only on Firefox),
* copy and paste part of the image from the image editor,
* copy and paste internal HTML,
* copy and paste text from another editor.

Everything should works as described in [this research](http://dev.ckeditor.com/ticket/11526#comment:7) or better.

0 comments on commit 0e2ae53

Please sign in to comment.