humanize shortcut, plus toolbar action

This commit is contained in:
Matthias Bussonnier 2015-08-10 19:08:09 -07:00
parent 5d009768dc
commit a6d2fb253b
5 changed files with 50 additions and 19 deletions

View File

@ -333,7 +333,9 @@ define(function(require){
} }
}, },
'command-palette': { 'command-palette': {
help_index : 'aa', help_index : 'aa',
help: 'open the command palette',
icon: 'fa-search',
handler : function(env){ handler : function(env){
env.notebook.show_command_palette(); env.notebook.show_command_palette();
} }

View File

@ -4,6 +4,7 @@
define(function(require){ define(function(require){
"use strict"; "use strict";
var QH = require("notebook/js/quickhelp");
var $ = require("jquery"); var $ = require("jquery");
var dialog = require("base/js/dialog"); var dialog = require("base/js/dialog");
var CommandPalette = function(notebook) { var CommandPalette = function(notebook) {
@ -25,6 +26,23 @@ define(function(require){
container.append(field); container.append(field);
form.append(container); form.append(container);
var before_close = function () {
// littel trick to trigger early in onSubmit
// when the action called pop-up a dialog
if(before_close.ok){
return;
}
if (notebook) {
var cell = notebook.get_selected_cell();
if (cell) cell.select();
}
if (notebook.keyboard_manager) {
notebook.keyboard_manager.enable();
notebook.keyboard_manager.command_mode();
}
before_close.ok = true; // avoid double call.
}
var mod = $('<div/>').addClass('modal').append( var mod = $('<div/>').addClass('modal').append(
$('<div/>').addClass('modal-dialog') $('<div/>').addClass('modal-dialog')
@ -43,17 +61,12 @@ define(function(require){
.modal({show: false, backdrop:true}) .modal({show: false, backdrop:true})
.on('shown.bs.modal', function () { .on('shown.bs.modal', function () {
input.focus(); input.focus();
// click on button trigger de-focus on mouse up.
// or somethign like that.
setTimeout(function(){ input.focus()},100);
}) })
.on("hidden.bs.modal", function () { .on("hide.bs.modal", before_close);
if (notebook) {
var cell = notebook.get_selected_cell();
if (cell) cell.select();
}
if (notebook.keyboard_manager) {
notebook.keyboard_manager.enable();
notebook.keyboard_manager.command_mode();
}
});
notebook.keyboard_manager.disable(); notebook.keyboard_manager.disable();
@ -61,6 +74,7 @@ define(function(require){
var onSubmit = function (node, query, result, resultCount) { var onSubmit = function (node, query, result, resultCount) {
console.log(node, query, result, resultCount); console.log(node, query, result, resultCount);
if (actions.indexOf(result.key) >= 0) { if (actions.indexOf(result.key) >= 0) {
before_close();
IPython.notebook.keyboard_manager.actions.call(result.key); IPython.notebook.keyboard_manager.actions.call(result.key);
} else { } else {
console.log("No command " + result.key) console.log("No command " + result.key)
@ -95,9 +109,13 @@ define(function(require){
group = 'built-in'; group = 'built-in';
} }
src[group] = src[group] || {data:[], display:'display'}; src[group] = src[group] || {data:[], display:'display'};
var short = IPython.keyboard_manager.command_shortcuts.get_shortcut_for_action_name(actions[i])
|| IPython.keyboard_manager.edit_shortcuts.get_shortcut_for_action_name(actions[i]);
if(short){
short = QH.humanize_shortcut( short)
}
src[group].data.push({ display: hum(actions[i]), src[group].data.push({ display: hum(actions[i]),
shortcut:IPython.keyboard_manager.command_shortcuts.get_shortcut_for_action_name(actions[i]) shortcut:short,
|| IPython.keyboard_manager.edit_shortcuts.get_shortcut_for_action_name(actions[i]),
key:actions[i], key:actions[i],
modesht: mode(actions[i]), modesht: mode(actions[i]),
group:group, group:group,
@ -106,8 +124,8 @@ define(function(require){
}) })
} }
input.typeahead({ input.typeahead({
emptyTemplate: "No results found for {{query}}", emptyTemplate: "No results found for <pre>{{query}}</pre>",
maxItem: 15, maxItem: 1e3,
minLength: 0, minLength: 0,
hint: true, hint: true,
group: ["group", "{{group}} extension"], group: ["group", "{{group}} extension"],
@ -120,7 +138,8 @@ define(function(require){
onInit: function () {console.log('this is init') }, onInit: function () {console.log('this is init') },
onSubmit: onSubmit , onSubmit: onSubmit ,
onClickAfter: onSubmit onClickAfter: onSubmit
} },
debug: false,
}) })
mod.modal('show') mod.modal('show')

View File

@ -55,7 +55,8 @@ define([
], ],
'run_int'], 'run_int'],
['<add_celltype_list>'], ['<add_celltype_list>'],
['<add_celltoolbar_list>'] ['<add_celltoolbar_list>'],
[['ipython.command-palette']]
]; ];
this.construct(grps); this.construct(grps);
}; };

View File

@ -70,6 +70,7 @@ define([
// these are the standard symbol that are used in MacOS native menus // these are the standard symbol that are used in MacOS native menus
// cf http://apple.stackexchange.com/questions/55727/ // cf http://apple.stackexchange.com/questions/55727/
// for htmlentities and/or unicode value // for htmlentities and/or unicode value
'meta':'⌘',
'cmd':'⌘', 'cmd':'⌘',
'shift':'⇧', 'shift':'⇧',
'alt':'⌥', 'alt':'⌥',
@ -98,6 +99,7 @@ define([
var default_humanize_map = { var default_humanize_map = {
'shift':'Shift', 'shift':'Shift',
'alt':'Alt', 'alt':'Alt',
'meta': 'Alt',
'up':'Up', 'up':'Up',
'down':'Down', 'down':'Down',
'left':'Left', 'left':'Left',
@ -144,7 +146,7 @@ define([
var sh = _.map(shortcut.split('-'), humanize_key ).join(joinchar); var sh = _.map(shortcut.split('-'), humanize_key ).join(joinchar);
return sh; return sh;
} }
QuickHelp.prototype.show_keyboard_shortcuts = function () { QuickHelp.prototype.show_keyboard_shortcuts = function () {
/** /**
@ -292,5 +294,7 @@ define([
return div; return div;
}; };
return {'QuickHelp': QuickHelp}; return {'QuickHelp': QuickHelp,
humanize_shortcut: humanize_shortcut
};
}); });

View File

@ -135,3 +135,8 @@ ul.typeahead-list i{
width: 18px; width: 18px;
border: thin solid transparent; border: thin solid transparent;
} }
ul.typeahead-list {
max-height: 80vh;
overflow:auto;
}