%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/src/dm/ |
Current File : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/src/dm/ve.dm.SourceSurfaceFragment.js |
/*! * VisualEditor DataModel SourceSurfaceFragment class. * * @copyright 2011-2016 VisualEditor Team and others; see http://ve.mit-license.org */ /** * Surface fragment for editing surfaces in source mode. * * @class * @extends ve.dm.SurfaceFragment * * @constructor * @param {ve.dm.Document} doc */ ve.dm.SourceSurfaceFragment = function VeDmSourceSurfaceFragment() { // Parent constructors ve.dm.SourceSurfaceFragment.super.apply( this, arguments ); }; /* Inheritance */ OO.inheritClass( ve.dm.SourceSurfaceFragment, ve.dm.SurfaceFragment ); /** * @inheritdoc */ ve.dm.SourceSurfaceFragment.prototype.annotateContent = function () { var fragment, tempDocument, rangeInDocument, tempSurfaceModel, originalDocument = this.getDocument(), coveringRange = this.getSelection().getCoveringRange(); if ( coveringRange ) { tempDocument = originalDocument.shallowCloneFromRange( coveringRange ); rangeInDocument = tempDocument.originalRange; } else { tempDocument = new ve.dm.Document( [ { type: 'paragraph', internal: { generated: 'wrapper' } }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], null, null, null, null, originalDocument.getLang(), originalDocument.getDir() ); rangeInDocument = new ve.Range( 1 ); } tempSurfaceModel = new ve.dm.Surface( tempDocument ); fragment = tempSurfaceModel.getLinearFragment( rangeInDocument ); fragment.annotateContent.apply( fragment, arguments ); this.insertDocument( fragment.getDocument() ); return this; }; /** * @inheritdoc */ ve.dm.SourceSurfaceFragment.prototype.insertContent = function ( content ) { var data; if ( typeof content !== 'string' ) { data = new ve.dm.ElementLinearData( new ve.dm.IndexValueStore(), content ); if ( !data.isPlainText( null, false, [ 'paragraph' ] ) ) { this.insertDocument( new ve.dm.Document( content.concat( [ { type: 'internalList' }, { type: '/internalList' } ] ) ) ); return this; } } // Parent method return ve.dm.SourceSurfaceFragment.super.prototype.insertContent.call( this, content ); }; /** * @inheritdoc */ ve.dm.SourceSurfaceFragment.prototype.insertDocument = function ( doc, newDocRange ) { var conversionPromise, range = this.getSelection().getCoveringRange(), fragment = this; if ( !range ) { return this; } newDocRange = newDocRange || new ve.Range( 0, doc.getInternalList().getListNode().getOuterRange().start ); if ( doc.data.isPlainText( newDocRange, false, [ 'paragraph' ] ) ) { return ve.dm.SourceSurfaceFragment.super.prototype.insertContent.call( this, doc.data.getDataSlice( newDocRange ) ); } conversionPromise = this.convertDocument( doc ) .done( function ( source ) { fragment.removeContent(); if ( source ) { // Parent method ve.dm.SourceSurfaceFragment.super.prototype.insertContent.call( fragment, source.trim() ); } } ) .fail( function () { ve.error( 'Failed to convert document', arguments ); } ); return this; }; /** * Convert sub document to source text * * The default implementation converts to HTML synchronously. * * If the conversion is asynchornous it should lock the surface * until complete. * * @param {ve.dm.Document} doc Document * @return {jQuery.Promise} Promise with resolves with source, or rejects */ ve.dm.SourceSurfaceFragment.prototype.convertDocument = function ( doc ) { if ( !doc.data.hasContent() ) { return $.Deferred().reject().promise(); } else { return $.Deferred().resolve( ve.properInnerHtml( ve.dm.converter.getDomFromModel( doc ).body ) ).promise(); } };