[fix] ctrl+s and other keyboard fixes (#2012)

This commit is contained in:
Rushabh Mehta 2016-08-26 15:46:26 +05:30 committed by GitHub
parent 88655111a7
commit a2e2c3652b
7 changed files with 105 additions and 81 deletions

View file

@ -76,6 +76,7 @@
"public/js/frappe/ui/modal.html",
"public/js/frappe/dom.js",
"public/js/frappe/ui/messages.js",
"public/js/frappe/ui/keyboard.js",
"public/js/frappe/request.js",
"public/js/frappe/socketio_client.js",

View file

@ -2,7 +2,7 @@
padding: 15px;
}
.result-list {
min-height: 200px;
min-height: 400px;
}
.sort-selector .dropdown:hover {
text-decoration: underline;

View file

@ -27,7 +27,7 @@ frappe.Application = Class.extend({
this.load_bootinfo();
this.make_nav_bar();
this.set_favicon();
this.setup_keyboard_shortcuts();
frappe.ui.keys.setup();
this.set_rtl();
if(frappe.boot) {
@ -253,77 +253,6 @@ frappe.Application = Class.extend({
}
},
setup_keyboard_shortcuts: function() {
var me = this;
$(document)
.keydown("meta+g ctrl+g", function(e) {
$("#navbar-search").focus();
return false;
})
.keydown("meta+s ctrl+s", function(e) {
e.preventDefault();
me.trigger_primary_action();
return false;
})
.keydown("meta+b ctrl+b", function(e) {
e.preventDefault();
var route = frappe.get_route();
if(route[0]==='Form' || route[0]==='List') {
frappe.new_doc(route[1], true);
}
return false;
})
.keydown("esc", function(e) {
// close open grid row
var open_row = $(".grid-row-open");
if(open_row.length) {
var grid_row = open_row.data("grid_row");
grid_row.toggle_view(false);
return false;
}
// close open dialog
if(cur_dialog && !cur_dialog.no_cancel_flag) {
cur_dialog.cancel();
return false;
}
})
.keydown("return", function() {
if(cur_dialog && cur_dialog.confirm_dialog) {
cur_dialog.get_primary_btn().trigger('click');
}
})
.keydown("ctrl+down meta+down", function(e) {
var open_row = $(".grid-row-open");
if(open_row.length) {
var grid_row = open_row.data("grid_row");
grid_row.toggle_view(false, function() { grid_row.open_next() });
return false;
}
})
.keydown("ctrl+up meta+up", function(e) {
var open_row = $(".grid-row-open");
if(open_row.length) {
var grid_row = open_row.data("grid_row");
grid_row.toggle_view(false, function() { grid_row.open_prev() });
return false;
}
})
.keydown("ctrl+n meta+n", function(e) {
var open_row = $(".grid-row-open");
if(open_row.length) {
var grid_row = open_row.data("grid_row");
grid_row.toggle_view(false, function() { grid_row.grid.add_new_row(grid_row.doc.idx, null, true); });
return false;
}
})
.keydown("ctrl+shift+r meta+shift+r", function(e) {
frappe.ui.toolbar.clear_cache();
});
},
set_rtl: function () {
if (["ar", "he"].indexOf(frappe.boot.lang) >= 0) {
$('body').addClass('frappe-rtl')

View file

@ -424,10 +424,6 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({
// somehow this event does not bubble up to document
// after v7, if you can debug, remove this
this.$input.keydown("ctrl+s meta+s", function(e) {
e.preventDefault();
frappe.app && frappe.app.trigger_primary_action();
});
},
set_input_attributes: function() {
this.$input
@ -1319,7 +1315,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
// if remember_selected hook is set, add this value
// to defaults so you do not need to set it again
// unless it is changed.
if(frappe.boot.remember_selected
if(frappe.boot.remember_selected
&& frappe.boot.remember_selected.indexOf(me.df.options)!==-1) {
frappe.boot.user.last_selected_values[me.df.options] = ui.item.value;
}
@ -1438,7 +1434,9 @@ frappe.ui.form.ControlDynamicLink = frappe.ui.form.ControlLink.extend({
frappe.ui.form.ControlCode = frappe.ui.form.ControlText.extend({
make_input: function() {
this._super();
$(this.input_area).find("textarea").css({"height":"400px", "font-family": "Monaco, \"Courier New\", monospace"});
$(this.input_area).find("textarea")
.allowTabs()
.css({"height":"400px", "font-family": "Monaco, \"Courier New\", monospace"});
}
});

View file

@ -1066,7 +1066,7 @@ frappe.ui.form.GridRowForm = Class.extend({
this.wrapper.find(".grid-append-row")
.click(function() {
me.row.toggle_view(false);
me.row.grid.add_new_row(me.doc.idx+1, null, true);
me.row.grid.add_new_row(me.row.doc.idx+1, null, true);
return false;
})
this.wrapper.find(".grid-form-heading, .grid-footer-toolbar").on("click", function() {

View file

@ -0,0 +1,96 @@
frappe.provide('frappe.ui.keys.handlers');
frappe.ui.keys.setup = function() {
$(window).on('keydown', function(e) {
var key = e.key;
if(key.substr(0, 5)==='Arrow') {
// ArrowDown -> down
key = key.substr(5).toLowerCase();
}
if(e.ctrlKey || e.metaKey) {
// add ctrl+ the key
key = 'ctrl+' + key;
}
if(e.shiftKey) {
// add ctrl+ the key
key = 'shift+' + key;
}
if(frappe.ui.keys.handlers[key]) {
var out = null;
for(var i=0, l = frappe.ui.keys.handlers[key].length; i<l; i++) {
var handler = frappe.ui.keys.handlers[key][i];
var _out = handler.apply(this, [e]);
if(_out===false) {
out = _out;
}
}
return out;
}
});
}
frappe.ui.keys.on = function(key, handler) {
if(!frappe.ui.keys.handlers[key]) {
frappe.ui.keys.handlers[key] = [];
}
frappe.ui.keys.handlers[key].push(handler);
}
frappe.ui.keys.on('ctrl+s', function(e) {
frappe.app.trigger_primary_action();
e.preventDefault();
return false;
});
frappe.ui.keys.on('ctrl+g', function(e) {
$("#navbar-search").focus();
e.preventDefault();
return false;
});
frappe.ui.keys.on('ctrl+b', function(e) {
var route = frappe.get_route();
if(route[0]==='Form' || route[0]==='List') {
frappe.new_doc(route[1], true);
e.preventDefault();
return false;
}
});
frappe.ui.keys.on('Escape', function(e) {
// close open grid row
var open_row = $(".grid-row-open");
if(open_row.length) {
var grid_row = open_row.data("grid_row");
grid_row.toggle_view(false);
return false;
}
// close open dialog
if(cur_dialog && !cur_dialog.no_cancel_flag) {
cur_dialog.cancel();
return false;
}
});
frappe.ui.keys.on('Enter', function(e) {
if(cur_dialog && cur_dialog.confirm_dialog) {
cur_dialog.get_primary_btn().trigger('click');
}
});
frappe.ui.keys.on('ctrl+down', function(e) {
var grid_row = frappe.ui.form.get_open_grid_form();
grid_row && grid_row.toggle_view(false, function() { grid_row.open_next() });
});
frappe.ui.keys.on('ctrl+up', function(e) {
var grid_row = frappe.ui.form.get_open_grid_form();
grid_row && grid_row.toggle_view(false, function() { grid_row.open_prev() });
});
frappe.ui.keys.on('shift+ctrl+r', function(e) {
frappe.ui.toolbar.clear_cache();
});

View file

@ -5,7 +5,7 @@
}
.result-list {
min-height: 200px;
min-height: 400px;
}
.sort-selector {