r112847 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r112846‎ | r112847 | r112848 >
Date:22:27, 1 March 2012
Author:christian
Status:deferred
Tags:
Comment:
adding cut-copy-paste
Modified paths:
  • /trunk/extensions/VisualEditor/modules/ve/ce/ve.es.Surface.js (modified) (history)

Diff [purge]

Index: trunk/extensions/VisualEditor/modules/ve/ce/ve.es.Surface.js
@@ -23,6 +23,7 @@
2424 .addClass( 'es-surfaceView' )
2525 .append( this.documentView.$ );
2626 this.emitUpdateTimeout = undefined;
 27+ this.clipboard = {};
2728
2829 // Events
2930 this.documentView.$.bind( {
@@ -41,6 +42,15 @@
4243 }
4344 } );
4445
 46+
 47+ this.$.on('cut copy', function( e ) {
 48+ _this.onCutCopy( e );
 49+ } );
 50+
 51+ this.$.on('paste', function( e ) {
 52+ _this.onPaste( e );
 53+ } );
 54+
4555 this.$.mousedown( function(e) {
4656 // return _this.onMouseDown( e );
4757 } );
@@ -74,6 +84,62 @@
7585
7686 /* Methods */
7787
 88+ve.es.Surface.prototype.onCutCopy = function( e ) {
 89+ console.log('cut/copy');
 90+ var _this = this,
 91+ rangySel = rangy.getSelection(),
 92+ key = rangySel.getRangeAt(0).toString().replace(/( |\r\n|\n|\r|\t)/gm,"");
 93+
 94+ _this.clipboard[key] = ve.copyArray( _this.documentView.model.getData( _this.getSelection() ) );
 95+
 96+ if ( event.type == 'cut' ) {
 97+ setTimeout( function() {
 98+ document.execCommand('undo', false, false);
 99+ var selection = _this.getSelection();
 100+ var tx = _this.model.getDocument().prepareRemoval( selection );
 101+ _this.model.transact( tx );
 102+ _this.showCursorAt( selection.start );
 103+ }, 1 );
 104+ }
 105+};
 106+
 107+ve.es.Surface.prototype.onPaste = function( e ) {
 108+ var _this = this,
 109+ insertionPoint = _this.getSelection().start,
 110+ node = rangy.getSelection().anchorNode;
 111+
 112+ $('#paste').html('').show().css( 'top', $(window).scrollTop() ).css(' left', $(window).scrollLeft() ).focus();
 113+
 114+ _this.stopPolling();
 115+
 116+ setTimeout( function() {
 117+
 118+ console.log('key is: ');
 119+ console.log(_this.clipboard);
 120+ console.log('paste is: ');
 121+ console.log( $('#paste').hide().text().replace(/( |\r\n|\n|\r|\t)/gm,"") );
 122+
 123+
 124+ var key = $('#paste').hide().text().replace(/( |\r\n|\n|\r|\t)/gm,"");
 125+
 126+ if ( _this.clipboard[key] ) {
 127+ // transact
 128+ var tx = _this.documentView.model.prepareInsertion( insertionPoint, _this.clipboard[key]);
 129+ _this.model.transact( tx );
 130+
 131+ // re-render
 132+ _this.getLeafNode( node ).data( 'view' ).renderContent();
 133+
 134+ // place cursor
 135+ _this.showCursorAt( insertionPoint + _this.clipboard[key].length );
 136+
 137+ _this.startPolling();
 138+ } else {
 139+ alert('i can only handle copy/paste from hybrid surface. sorry. :(');
 140+ }
 141+ }, 1 );
 142+};
 143+
78144 ve.es.Surface.prototype.onCompositionStart = function( e ) {
79145 this.stopPolling();
80146 var rangySel = rangy.getSelection();

Status & tagging log