mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeMirror
synced 2024-12-12 14:25:06 +00:00
94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
|
/**
|
||
|
* VisualEditor 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.v6' );
|
||
|
|
||
|
// 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 );
|
||
|
|
||
|
const useCodeMirror = !!this.toolbar.surface.mirror;
|
||
|
this.setActive( useCodeMirror );
|
||
|
|
||
|
this.extCodeMirror.setCodeMirrorPreference( useCodeMirror );
|
||
|
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 ) {
|
||
|
const isDisabled = newSurface.getMode() !== 'source';
|
||
|
|
||
|
this.setDisabled( isDisabled );
|
||
|
if ( !isDisabled ) {
|
||
|
const command = this.getCommand();
|
||
|
const surface = this.toolbar.getSurface();
|
||
|
const 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'
|
||
|
)
|
||
|
);
|