mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeMirror
synced 2024-12-24 19:43:16 +00:00
46b7208d13
Move WikiEditor-specific code to ext.CodeMirror.WikiEditor, leaivng only CodeMirror-specific things in ext.CodeMirror, including the logUsage method which was duplicated in the VE plugin and now refactored. Add .env to .gitignore so that selenium tests can be ran more easily This patch leaves the other non-mediawiki modes still using the 'scripts' system instead of 'packageFiles'. These are not used in MediaWiki directly but by some extensions (i.e. PhpTags) and using packageFiles will break that integration. Bug: T272035 Change-Id: I3bafef196c1f713443d7b8e9cb7dc2891b379f5d
96 lines
2.5 KiB
JavaScript
96 lines
2.5 KiB
JavaScript
/**
|
|
* MediaWiki UserInterface CodeMirror tool.
|
|
*
|
|
* @class
|
|
* @abstract
|
|
* @extends ve.ui.Tool
|
|
* @constructor
|
|
* @param {OO.ui.ToolGroup} toolGroup
|
|
* @param {Object} [config] Configuration options
|
|
*/
|
|
ve.ui.CodeMirrorTool = function VeUiCodeMirrorTool() {
|
|
// Parent constructor
|
|
ve.ui.CodeMirrorTool.super.apply( this, arguments );
|
|
|
|
this.extCodeMirror = require( 'ext.CodeMirror' );
|
|
|
|
// Events
|
|
this.toolbar.connect( this, { surfaceChange: 'onSurfaceChange' } );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
OO.inheritClass( ve.ui.CodeMirrorTool, ve.ui.Tool );
|
|
|
|
/* Static properties */
|
|
|
|
ve.ui.CodeMirrorTool.static.name = 'codeMirror';
|
|
ve.ui.CodeMirrorTool.static.autoAddToCatchall = false;
|
|
ve.ui.CodeMirrorTool.static.title = OO.ui.deferMsg( 'codemirror-toggle-label' );
|
|
ve.ui.CodeMirrorTool.static.icon = 'highlight';
|
|
ve.ui.CodeMirrorTool.static.group = 'utility';
|
|
ve.ui.CodeMirrorTool.static.commandName = 'codeMirror';
|
|
ve.ui.CodeMirrorTool.static.deactivateOnSelect = false;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
ve.ui.CodeMirrorTool.prototype.onSelect = function () {
|
|
// Parent method
|
|
ve.ui.CodeMirrorTool.super.prototype.onSelect.apply( this, arguments );
|
|
|
|
var useCodeMirror = !!this.toolbar.surface.mirror;
|
|
this.setActive( useCodeMirror );
|
|
|
|
new mw.Api().saveOption( 'usecodemirror', useCodeMirror ? 1 : 0 );
|
|
mw.user.options.set( 'usecodemirror', useCodeMirror ? 1 : 0 );
|
|
|
|
this.extCodeMirror.logUsage( {
|
|
editor: 'wikitext-2017',
|
|
enabled: useCodeMirror,
|
|
toggled: true,
|
|
// eslint-disable-next-line camelcase
|
|
edit_start_ts_ms: ( this.toolbar.target.startTimeStamp * 1000 ) || 0
|
|
} );
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
ve.ui.CodeMirrorTool.prototype.onSurfaceChange = function ( oldSurface, newSurface ) {
|
|
var isDisabled = newSurface.getMode() !== 'source';
|
|
|
|
this.setDisabled( isDisabled );
|
|
if ( !isDisabled ) {
|
|
var command = this.getCommand();
|
|
var surface = this.toolbar.getSurface();
|
|
var useCodeMirror = mw.user.options.get( 'usecodemirror' ) > 0;
|
|
command.execute( surface, [ useCodeMirror ] );
|
|
this.setActive( useCodeMirror );
|
|
|
|
if ( this.toolbar.target.startTimeStamp ) {
|
|
this.extCodeMirror.logUsage( {
|
|
editor: 'wikitext-2017',
|
|
enabled: useCodeMirror,
|
|
toggled: false,
|
|
// eslint-disable-next-line camelcase
|
|
edit_start_ts_ms: ( this.toolbar.target.startTimeStamp * 1000 ) || 0
|
|
} );
|
|
}
|
|
}
|
|
};
|
|
|
|
ve.ui.CodeMirrorTool.prototype.onUpdateState = function () {};
|
|
|
|
/* Registration */
|
|
|
|
ve.ui.toolFactory.register( ve.ui.CodeMirrorTool );
|
|
|
|
/* Command */
|
|
|
|
ve.ui.commandRegistry.register(
|
|
new ve.ui.Command(
|
|
'codeMirror', 'codeMirror', 'toggle'
|
|
)
|
|
);
|