MediaWiki:Common.js: различия между версиями

Материал из melioration.space
 
(не показаны 73 промежуточные версии этого же участника)
Строка 1: Строка 1:
function setup() {
 
    var mathUpdater = new $.Deferred();
 
    if ( mathUpdaterLs ) {
 
        mathUpdater.resolve();
 
    } else {
 
        mw.loader.using(['wikibase.api.RepoApi', 'wikibase.client.getMwApiForRepo'], function(){
 
            var repoApi = new wikibase.api.RepoApi(wikibase.client.getMwApiForRepo());
 
            repoApi.getEntities( wbSpellCheck, 'sitelinks').done( function( data ) {
 
                var currSite = mw.config.get( 'wgDBname' );
 
                if ( data.entities && data.entities.hasOwnProperty( wbSpellCheck ) && data.entities[wbSpellCheck].sitelinks && data.entities[wbSpellCheck].sitelinks.hasOwnProperty( currSite ) ) {
 
                    mispellsList = data.entities[wbSpellCheck].sitelinks[currSite].title;
 
                    try {
 
                        localStorage.mathUpdaterLs = mathUpdaterLs;
 
                    } catch(e) {
 
                        $.cookie( 'mispellsList', mathUpdaterLs );
 
                    }
 
                    mathUpdater.resolve();
 
                } else {
 
                    mw.notify( $( errors.installError.replace('{0}', wbSpellCheck) ) );
 
                    mathUpdater.reject();
 
                }
 
            } );
 
        } );
 
    }
 
    return mathUpdater;
 
};
 
 
mw.hook( 've.activationComplete' ).add( function() {
 
mw.hook( 've.activationComplete' ).add( function() {
    setup().then( function(){
+
if(typeof MathJax !== typeof undefined) { MathJax.typesetPromise(); }
        var view =ve.init.target.getSurface().getView();
+
} );
        var doc = view.getDocument();
+
 
        var model = ve.init.target.getSurface().getModel();
+
mw.loader.using( [ 'ext.visualEditor.core', 'ext.visualEditor.mwtransclusion' ] ).then(function () {
        //while editing - only on current node
+
 
        model.on( 'documentUpdate', function () {
+
// --------- (start of ve.ui.CenterAction definition) -----------------------------------------------
            try
+
// This is based on [lib/ve/src/ui/actions/ve.ui.BlockquoteAction.js] from Extension:VisualEditor.
            {
+
 
                var selection = model.getSelection().getRange(),
+
ve.ui.CenterAction = function VeUiCenterAction() {
                    node = selection && doc.getBranchNodeFromOffset( selection.start ),
+
ve.ui.CenterAction.super.apply( this, arguments );
                    originalSelection;
+
};
                if ( !( node instanceof ve.ce.ContentBranchNode ) ) {
+
OO.inheritClass( ve.ui.CenterAction, ve.ui.Action );
                    return;
+
 
                }
+
ve.ui.CenterAction.static.name = 'center';
                //remove spell errors from current node
+
ve.ui.CenterAction.static.methods = [ 'wrap', 'unwrap', 'toggle' ];
                $( node.$element[0] ).find('.spellError').contents().unwrap();
+
 
                //view.surfaceObserver.disable();
+
ve.ui.CenterAction.prototype.isWrapped = function () {
                checkSpells( $( node.$element[0] ) );
+
var fragment = this.surface.getModel().getFragment();
                //reset selection
+
return fragment.hasMatchingAncestor( 'center' );
                    selection = model.getSelection().getRange();
+
};
                    originalSelection = view.getSelectionState( new ve.Range(selection.to, selection.to) );
+
ve.ui.CenterAction.prototype.toggle = function () {
               
+
return this[ this.isWrapped() ? 'unwrap' : 'wrap' ]();
                setTimeout( function () {
+
};
                    view.showSelectionState( originalSelection );
+
ve.ui.CenterAction.prototype.wrap = function () {
                } );
+
var
            } catch(err){
+
surfaceModel = this.surface.getModel(),
                console.log('Error in Gadget-Rechtschreibpruefung.js:documentUpdate');
+
selection = surfaceModel.getSelection(),
                console.log(err);
+
fragment = surfaceModel.getFragment( null, true ),
            }
+
leaves, leavesRange;
        } );
+
 
 +
if ( !( selection instanceof ve.dm.LinearSelection ) ) {
 +
return false;
 +
}
 +
 
 +
leaves = fragment.getSelectedLeafNodes();
 +
leavesRange = new ve.Range(
 +
leaves[ 0 ].getRange().start,
 +
leaves[ leaves.length - 1 ].getRange().end
 +
);
 +
fragment = surfaceModel.getLinearFragment( leavesRange, true );
 +
 
 +
fragment = fragment.expandLinearSelection( 'siblings' );
 +
 
 +
while (
 +
fragment.getCoveredNodes().some( function ( nodeInfo ) {
 +
return !nodeInfo.node.isAllowedParentNodeType( 'center' ) || nodeInfo.node.isContent();
 +
} )
 +
) {
 +
fragment = fragment.expandLinearSelection( 'parent' );
 +
}
 +
 
 +
// Wrap everything in a <center> tag
 +
fragment.wrapAllNodes( { type: 'center' } );
 +
 
 +
return true;
 +
};
 +
ve.ui.CenterAction.prototype.unwrap = function () {
 +
var
 +
surfaceModel = this.surface.getModel(),
 +
selection = surfaceModel.getSelection(),
 +
fragment = surfaceModel.getFragment( null, true ),
 +
leaves, leavesRange;
 +
 
 +
if ( !( selection instanceof ve.dm.LinearSelection ) ) {
 +
return false;
 +
}
 +
 
 +
if ( !this.isWrapped() ) {
 +
return false;
 +
}
 +
 
 +
leaves = fragment.getSelectedLeafNodes();
 +
leavesRange = new ve.Range(
 +
leaves[ 0 ].getRange().start,
 +
leaves[ leaves.length - 1 ].getRange().end
 +
);
 +
fragment = surfaceModel.getLinearFragment( leavesRange, true );
 +
 
 +
fragment
 +
// Expand to cover entire <center> tag
 +
.expandLinearSelection( 'closest', ve.dm.CenterNode )
 +
// Unwrap it
 +
.unwrapNodes( 0, 1 );
 +
 
 +
return true;
 +
};
 +
ve.ui.actionFactory.register( ve.ui.CenterAction );
 +
 
 +
// --------- (end of ve.ui.CenterAction definition) -------------------------------------------------
 +
 
 +
ve.ui.CenterFormatTool = function VeUiCenterFormatTool() {
 +
ve.ui.CenterFormatTool.super.apply( this, arguments );
 +
};
 +
OO.inheritClass( ve.ui.CenterFormatTool, ve.ui.FormatTool );
 +
 
 +
ve.ui.CenterFormatTool.static.name = 'center';
 +
ve.ui.CenterFormatTool.static.group = 'format';
 +
ve.ui.CenterFormatTool.static.title = 'По центру';
 +
ve.ui.CenterFormatTool.static.format = { type: 'center' };
 +
ve.ui.CenterFormatTool.static.commandName = 'center';
 +
ve.ui.toolFactory.register( ve.ui.CenterFormatTool );
 +
 
 +
ve.ui.commandRegistry.register(
 +
new ve.ui.Command(
 +
'center', 'center', 'toggle',
 +
{ supportedSelections: [ 'linear' ] }
 +
)
 +
);
 
} );
 
} );
});
 

Текущая версия на 16:38, 27 марта 2021

mw.hook( 've.activationComplete' ).add( function() {
	if(typeof MathJax !== typeof undefined) { MathJax.typesetPromise(); }
} );

mw.loader.using( [ 'ext.visualEditor.core', 'ext.visualEditor.mwtransclusion' ] ).then(function () {

// --------- (start of ve.ui.CenterAction definition) -----------------------------------------------
// This is based on [lib/ve/src/ui/actions/ve.ui.BlockquoteAction.js] from Extension:VisualEditor.

	ve.ui.CenterAction = function VeUiCenterAction() {
		ve.ui.CenterAction.super.apply( this, arguments );
	};
	OO.inheritClass( ve.ui.CenterAction, ve.ui.Action );

	ve.ui.CenterAction.static.name = 'center';
	ve.ui.CenterAction.static.methods = [ 'wrap', 'unwrap', 'toggle' ];

	ve.ui.CenterAction.prototype.isWrapped = function () {
		var fragment = this.surface.getModel().getFragment();
		return fragment.hasMatchingAncestor( 'center' );
	};
	ve.ui.CenterAction.prototype.toggle = function () {
		return this[ this.isWrapped() ? 'unwrap' : 'wrap' ]();
	};
	ve.ui.CenterAction.prototype.wrap = function () {
		var
			surfaceModel = this.surface.getModel(),
			selection = surfaceModel.getSelection(),
			fragment = surfaceModel.getFragment( null, true ),
			leaves, leavesRange;

		if ( !( selection instanceof ve.dm.LinearSelection ) ) {
			return false;
		}

		leaves = fragment.getSelectedLeafNodes();
		leavesRange = new ve.Range(
			leaves[ 0 ].getRange().start,
			leaves[ leaves.length - 1 ].getRange().end
		);
		fragment = surfaceModel.getLinearFragment( leavesRange, true );

		fragment = fragment.expandLinearSelection( 'siblings' );

		while (
			fragment.getCoveredNodes().some( function ( nodeInfo ) {
				return !nodeInfo.node.isAllowedParentNodeType( 'center' ) || nodeInfo.node.isContent();
			} )
		) {
			fragment = fragment.expandLinearSelection( 'parent' );
		}

		// Wrap everything in a <center> tag
		fragment.wrapAllNodes( { type: 'center' } );

		return true;
	};
	ve.ui.CenterAction.prototype.unwrap = function () {
		var
			surfaceModel = this.surface.getModel(),
			selection = surfaceModel.getSelection(),
			fragment = surfaceModel.getFragment( null, true ),
			leaves, leavesRange;

		if ( !( selection instanceof ve.dm.LinearSelection ) ) {
			return false;
		}

		if ( !this.isWrapped() ) {
			return false;
		}

		leaves = fragment.getSelectedLeafNodes();
		leavesRange = new ve.Range(
			leaves[ 0 ].getRange().start,
			leaves[ leaves.length - 1 ].getRange().end
		);
		fragment = surfaceModel.getLinearFragment( leavesRange, true );

		fragment
			// Expand to cover entire <center> tag
			.expandLinearSelection( 'closest', ve.dm.CenterNode )
			// Unwrap it
			.unwrapNodes( 0, 1 );

		return true;
	};
	ve.ui.actionFactory.register( ve.ui.CenterAction );

// --------- (end of ve.ui.CenterAction definition) -------------------------------------------------

	ve.ui.CenterFormatTool = function VeUiCenterFormatTool() {
		ve.ui.CenterFormatTool.super.apply( this, arguments );
	};
	OO.inheritClass( ve.ui.CenterFormatTool, ve.ui.FormatTool );

	ve.ui.CenterFormatTool.static.name = 'center';
	ve.ui.CenterFormatTool.static.group = 'format';
	ve.ui.CenterFormatTool.static.title = 'По центру';
	ve.ui.CenterFormatTool.static.format = { type: 'center' };
	ve.ui.CenterFormatTool.static.commandName = 'center';
	ve.ui.toolFactory.register( ve.ui.CenterFormatTool );

	ve.ui.commandRegistry.register(
		new ve.ui.Command(
			'center', 'center', 'toggle',
			{ supportedSelections: [ 'linear' ] }
		)
	);
} );