@jupyterlab/codemirror-extension
Advanced tools
Comparing version 0.6.0 to 0.7.0
204
lib/index.js
"use strict"; | ||
// Copyright (c) Jupyter Development Team. | ||
// Distributed under the terms of the Modified BSD License. | ||
var __assign = (this && this.__assign) || Object.assign || function(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | ||
t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -9,2 +17,3 @@ var widgets_1 = require("@phosphor/widgets"); | ||
var codemirror_1 = require("@jupyterlab/codemirror"); | ||
var coreutils_1 = require("@jupyterlab/coreutils"); | ||
var fileeditor_1 = require("@jupyterlab/fileeditor"); | ||
@@ -17,4 +26,6 @@ /** | ||
CommandIDs.matchBrackets = 'codemirror:match-brackets'; | ||
CommandIDs.changeKeyMap = 'codemirror:change-keyMap'; | ||
CommandIDs.changeKeyMap = 'codemirror:change-keymap'; | ||
CommandIDs.changeTheme = 'codemirror:change-theme'; | ||
CommandIDs.changeMode = 'codemirror:change-mode'; | ||
CommandIDs.changeTabs = 'codemirror:change-tabs'; | ||
})(CommandIDs || (CommandIDs = {})); | ||
@@ -35,3 +46,3 @@ ; | ||
id: 'jupyter.services.codemirror-commands', | ||
requires: [fileeditor_1.IEditorTracker, apputils_1.IMainMenu, apputils_1.ICommandPalette, apputils_1.IStateDB], | ||
requires: [fileeditor_1.IEditorTracker, apputils_1.IMainMenu, apputils_1.ICommandPalette, coreutils_1.IStateDB, coreutils_1.ISettingRegistry], | ||
activate: activateEditorCommands, | ||
@@ -48,32 +59,50 @@ autoStart: true | ||
*/ | ||
function activateEditorCommands(app, tracker, mainMenu, palette, state) { | ||
var commands = app.commands; | ||
function activateEditorCommands(app, tracker, mainMenu, palette, state, settingRegistry) { | ||
var commands = app.commands, restored = app.restored; | ||
var id = exports.commandsPlugin.id; | ||
var theme = codemirror_1.CodeMirrorEditor.DEFAULT_THEME; | ||
var keyMap = 'default'; | ||
var matchBrackets = false; | ||
var id = 'codemirror:settings'; | ||
// Fetch the initial state of the settings. | ||
state.fetch(id).then(function (settings) { | ||
if (!settings) { | ||
return; | ||
} | ||
if (typeof settings['theme'] === 'string') { | ||
commands.execute(CommandIDs.changeTheme, settings); | ||
} | ||
if (typeof settings['keyMap'] === 'string') { | ||
commands.execute(CommandIDs.changeKeyMap, settings); | ||
} | ||
if (typeof settings['matchBrackets'] === 'boolean') { | ||
if (settings['matchBrackets'] !== matchBrackets) { | ||
commands.execute(CommandIDs.matchBrackets); | ||
} | ||
} | ||
// Annotate the plugin settings. | ||
settingRegistry.annotate(id, '', { | ||
iconClass: 'jp-ImageTextEditor', | ||
iconLabel: 'CodeMirror', | ||
label: 'CodeMirror' | ||
}); | ||
settingRegistry.annotate(id, 'keyMap', { label: 'Key Map' }); | ||
settingRegistry.annotate(id, 'matchBrackets', { label: 'Match Brackets' }); | ||
settingRegistry.annotate(id, 'theme', { label: 'Theme' }); | ||
/** | ||
* Save the codemirror settings state. | ||
* Update the setting values. | ||
*/ | ||
function saveState() { | ||
return state.save(id, { theme: theme, keyMap: keyMap, matchBrackets: matchBrackets }); | ||
function updateSettings(settings) { | ||
var cached = settings.get('matchBrackets'); | ||
matchBrackets = cached === null ? false : !!cached; | ||
keyMap = settings.get('keyMap') || keyMap; | ||
theme = settings.get('theme') || theme; | ||
} | ||
/** | ||
* Update the settings of the current tracker instances. | ||
*/ | ||
function updateTracker() { | ||
tracker.forEach(function (widget) { | ||
if (widget.editor instanceof codemirror_1.CodeMirrorEditor) { | ||
var cm = widget.editor.editor; | ||
cm.setOption('keyMap', keyMap); | ||
cm.setOption('theme', theme); | ||
cm.setOption('matchBrackets', matchBrackets); | ||
} | ||
}); | ||
} | ||
// Fetch the initial state of the settings. | ||
Promise.all([settingRegistry.load(id), restored]).then(function (_a) { | ||
var settings = _a[0]; | ||
updateSettings(settings); | ||
updateTracker(); | ||
settings.changed.connect(function () { | ||
updateSettings(settings); | ||
updateTracker(); | ||
}); | ||
}); | ||
/** | ||
* Handle the settings of new widgets. | ||
@@ -102,16 +131,2 @@ */ | ||
/** | ||
* Toggle editor matching brackets | ||
*/ | ||
function toggleMatchBrackets() { | ||
matchBrackets = !matchBrackets; | ||
tracker.forEach(function (widget) { | ||
var editor = widget.editor; | ||
if (editor instanceof codemirror_1.CodeMirrorEditor) { | ||
var cm = editor.editor; | ||
cm.setOption('matchBrackets', matchBrackets); | ||
} | ||
}); | ||
return saveState(); | ||
} | ||
/** | ||
* Create a menu for the editor. | ||
@@ -123,5 +138,9 @@ */ | ||
var keyMapMenu = new widgets_1.Menu({ commands: commands }); | ||
var modeMenu = new widgets_1.Menu({ commands: commands }); | ||
var tabMenu = new widgets_1.Menu({ commands: commands }); | ||
menu.title.label = 'Editor'; | ||
themeMenu.title.label = 'Theme'; | ||
keyMapMenu.title.label = 'Key Map'; | ||
modeMenu.title.label = 'Language'; | ||
tabMenu.title.label = 'Tabs'; | ||
commands.addCommand(CommandIDs.changeTheme, { | ||
@@ -137,3 +156,3 @@ label: function (args) { return args['theme']; }, | ||
}); | ||
return saveState(); | ||
return settingRegistry.set(id, 'theme', theme); | ||
}, | ||
@@ -156,3 +175,3 @@ isEnabled: hasWidget, | ||
}); | ||
return saveState(); | ||
return settingRegistry.set(id, 'keyMap', keyMap); | ||
}, | ||
@@ -162,2 +181,77 @@ isEnabled: hasWidget, | ||
}); | ||
commands.addCommand(CommandIDs.changeMode, { | ||
label: function (args) { return args['name']; }, | ||
execute: function (args) { | ||
var mode = args['mode']; | ||
if (mode) { | ||
var widget = tracker.currentWidget; | ||
var spec = codemirror_1.Mode.findByName(mode); | ||
if (spec) { | ||
widget.model.mimeType = spec.mime; | ||
} | ||
} | ||
}, | ||
isEnabled: hasWidget, | ||
isToggled: function (args) { | ||
var widget = tracker.currentWidget; | ||
if (!widget) { | ||
return false; | ||
} | ||
var mime = widget.model.mimeType; | ||
var spec = codemirror_1.Mode.findByMIME(mime); | ||
var mode = spec && spec.mode; | ||
return args['mode'] === mode; | ||
} | ||
}); | ||
commands.addCommand(CommandIDs.changeTabs, { | ||
label: function (args) { return args['name']; }, | ||
execute: function (args) { | ||
var widget = tracker.currentWidget; | ||
if (!widget) { | ||
return; | ||
} | ||
var editor = widget.editor; | ||
var size = args['size'] || 4; | ||
var tabs = !!args['tabs']; | ||
editor.editor.setOption('indentWithTabs', tabs); | ||
editor.editor.setOption('indentUnit', size); | ||
}, | ||
isEnabled: hasWidget, | ||
isToggled: function (args) { | ||
var widget = tracker.currentWidget; | ||
if (!widget) { | ||
return false; | ||
} | ||
var tabs = !!args['tabs']; | ||
var size = args['size'] || 4; | ||
var editor = widget.editor; | ||
if (editor.editor.getOption('indentWithTabs') !== tabs) { | ||
return false; | ||
} | ||
return editor.editor.getOption('indentUnit') === size; | ||
} | ||
}); | ||
var args = { tabs: true, size: 4, name: 'Indent with Tab' }; | ||
tabMenu.addItem({ command: CommandIDs.changeTabs, args: args }); | ||
palette.addItem({ | ||
command: CommandIDs.changeTabs, args: args, category: 'Editor' | ||
}); | ||
for (var _i = 0, _a = [1, 2, 4, 8]; _i < _a.length; _i++) { | ||
var size = _a[_i]; | ||
var args_1 = { | ||
tabs: false, size: size, name: "Spaces: " + size + " " | ||
}; | ||
tabMenu.addItem({ command: CommandIDs.changeTabs, args: args_1 }); | ||
palette.addItem({ | ||
command: CommandIDs.changeTabs, args: args_1, category: 'Editor' | ||
}); | ||
} | ||
codemirror_1.Mode.getModeInfo().sort(function (a, b) { | ||
return a.name.localeCompare(b.name); | ||
}).forEach(function (spec) { | ||
modeMenu.addItem({ | ||
command: CommandIDs.changeMode, | ||
args: __assign({}, spec) | ||
}); | ||
}); | ||
[ | ||
@@ -171,12 +265,14 @@ 'jupyter', 'default', 'abcdef', 'base16-dark', 'base16-light', | ||
}); }); | ||
[ | ||
'default', 'sublime', 'vim', 'emacs' | ||
].forEach(function (name) { return keyMapMenu.addItem({ | ||
command: CommandIDs.changeKeyMap, | ||
args: { keyMap: name } | ||
}); }); | ||
['default', 'sublime', 'vim', 'emacs'].forEach(function (name) { | ||
keyMapMenu.addItem({ | ||
command: CommandIDs.changeKeyMap, | ||
args: { keyMap: name } | ||
}); | ||
}); | ||
menu.addItem({ type: 'submenu', submenu: modeMenu }); | ||
menu.addItem({ type: 'submenu', submenu: tabMenu }); | ||
menu.addItem({ type: 'separator' }); | ||
menu.addItem({ command: 'editor:line-numbers' }); | ||
menu.addItem({ command: 'editor:word-wrap' }); | ||
menu.addItem({ command: CommandIDs.matchBrackets }); | ||
menu.addItem({ type: 'separator' }); | ||
menu.addItem({ type: 'submenu', submenu: keyMapMenu }); | ||
@@ -188,6 +284,16 @@ menu.addItem({ type: 'submenu', submenu: themeMenu }); | ||
commands.addCommand(CommandIDs.matchBrackets, { | ||
execute: toggleMatchBrackets, | ||
execute: function () { | ||
matchBrackets = !matchBrackets; | ||
tracker.forEach(function (widget) { | ||
var editor = widget.editor; | ||
if (editor instanceof codemirror_1.CodeMirrorEditor) { | ||
var cm = editor.editor; | ||
cm.setOption('matchBrackets', matchBrackets); | ||
} | ||
}); | ||
return settingRegistry.set(id, 'matchBrackets', matchBrackets); | ||
}, | ||
label: 'Match Brackets', | ||
isEnabled: hasWidget, | ||
isToggled: function () { return !matchBrackets; } | ||
isToggled: function () { return matchBrackets; } | ||
}); | ||
@@ -194,0 +300,0 @@ [ |
{ | ||
"name": "@jupyterlab/codemirror-extension", | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"description": "JupyterLab - CodeMirror Provider Extension", | ||
@@ -15,8 +15,9 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"@jupyterlab/application": "^0.6.0", | ||
"@jupyterlab/apputils": "^0.6.0", | ||
"@jupyterlab/codeeditor": "^0.6.0", | ||
"@jupyterlab/codemirror": "^0.6.0", | ||
"@jupyterlab/fileeditor": "^0.6.0", | ||
"@phosphor/widgets": "^1.2.0" | ||
"@jupyterlab/application": "^0.7.0", | ||
"@jupyterlab/apputils": "^0.7.0", | ||
"@jupyterlab/coreutils": "^0.7.0", | ||
"@jupyterlab/codeeditor": "^0.7.0", | ||
"@jupyterlab/codemirror": "^0.7.0", | ||
"@jupyterlab/fileeditor": "^0.7.0", | ||
"@phosphor/widgets": "^1.3.0" | ||
}, | ||
@@ -23,0 +24,0 @@ "devDependencies": { |
13250
311
7
+ Added@jupyterlab/coreutils@^0.7.0
+ Added@jupyterlab/application@0.7.0(transitive)
+ Added@jupyterlab/apputils@0.7.0(transitive)
+ Added@jupyterlab/codeeditor@0.7.0(transitive)
+ Added@jupyterlab/codemirror@0.7.0(transitive)
+ Added@jupyterlab/coreutils@0.7.1(transitive)
+ Added@jupyterlab/docregistry@0.7.0(transitive)
+ Added@jupyterlab/fileeditor@0.7.0(transitive)
+ Added@jupyterlab/services@0.46.0(transitive)
- Removed@jupyterlab/application@0.6.0(transitive)
- Removed@jupyterlab/apputils@0.6.0(transitive)
- Removed@jupyterlab/codeeditor@0.6.0(transitive)
- Removed@jupyterlab/codemirror@0.6.0(transitive)
- Removed@jupyterlab/coreutils@0.6.0(transitive)
- Removed@jupyterlab/docregistry@0.6.0(transitive)
- Removed@jupyterlab/fileeditor@0.6.0(transitive)
- Removed@jupyterlab/services@0.45.0(transitive)
Updated@jupyterlab/apputils@^0.7.0
Updated@phosphor/widgets@^1.3.0