@@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json | |||||
from .exceptions import * | from .exceptions import * | ||||
from .utils.jinja import get_jenv, get_template, render_template | from .utils.jinja import get_jenv, get_template, render_template | ||||
__version__ = "7.0.29" | |||||
__version__ = "7.0.30" | |||||
local = Local() | local = Local() | ||||
@@ -76,6 +76,7 @@ | |||||
"public/js/frappe/ui/modal.html", | "public/js/frappe/ui/modal.html", | ||||
"public/js/frappe/dom.js", | "public/js/frappe/dom.js", | ||||
"public/js/frappe/ui/messages.js", | "public/js/frappe/ui/messages.js", | ||||
"public/js/frappe/ui/keyboard.js", | |||||
"public/js/frappe/request.js", | "public/js/frappe/request.js", | ||||
"public/js/frappe/socketio_client.js", | "public/js/frappe/socketio_client.js", | ||||
@@ -2,7 +2,7 @@ | |||||
padding: 15px; | padding: 15px; | ||||
} | } | ||||
.result-list { | .result-list { | ||||
min-height: 200px; | |||||
min-height: 400px; | |||||
} | } | ||||
.sort-selector .dropdown:hover { | .sort-selector .dropdown:hover { | ||||
text-decoration: underline; | text-decoration: underline; | ||||
@@ -27,7 +27,7 @@ frappe.Application = Class.extend({ | |||||
this.load_bootinfo(); | this.load_bootinfo(); | ||||
this.make_nav_bar(); | this.make_nav_bar(); | ||||
this.set_favicon(); | this.set_favicon(); | ||||
this.setup_keyboard_shortcuts(); | |||||
frappe.ui.keys.setup(); | |||||
this.set_rtl(); | this.set_rtl(); | ||||
if(frappe.boot) { | 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 () { | set_rtl: function () { | ||||
if (["ar", "he"].indexOf(frappe.boot.lang) >= 0) { | if (["ar", "he"].indexOf(frappe.boot.lang) >= 0) { | ||||
$('body').addClass('frappe-rtl') | $('body').addClass('frappe-rtl') | ||||
@@ -424,10 +424,6 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({ | |||||
// somehow this event does not bubble up to document | // somehow this event does not bubble up to document | ||||
// after v7, if you can debug, remove this | // 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() { | set_input_attributes: function() { | ||||
this.$input | this.$input | ||||
@@ -1319,7 +1315,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({ | |||||
// if remember_selected hook is set, add this value | // if remember_selected hook is set, add this value | ||||
// to defaults so you do not need to set it again | // to defaults so you do not need to set it again | ||||
// unless it is changed. | // 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.remember_selected.indexOf(me.df.options)!==-1) { | ||||
frappe.boot.user.last_selected_values[me.df.options] = ui.item.value; | 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({ | frappe.ui.form.ControlCode = frappe.ui.form.ControlText.extend({ | ||||
make_input: function() { | make_input: function() { | ||||
this._super(); | 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"}); | |||||
} | } | ||||
}); | }); | ||||
@@ -1066,7 +1066,7 @@ frappe.ui.form.GridRowForm = Class.extend({ | |||||
this.wrapper.find(".grid-append-row") | this.wrapper.find(".grid-append-row") | ||||
.click(function() { | .click(function() { | ||||
me.row.toggle_view(false); | 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; | return false; | ||||
}) | }) | ||||
this.wrapper.find(".grid-form-heading, .grid-footer-toolbar").on("click", function() { | this.wrapper.find(".grid-form-heading, .grid-footer-toolbar").on("click", function() { | ||||
@@ -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(); | |||||
}); |
@@ -5,7 +5,7 @@ | |||||
} | } | ||||
.result-list { | .result-list { | ||||
min-height: 200px; | |||||
min-height: 400px; | |||||
} | } | ||||
.sort-selector { | .sort-selector { | ||||
@@ -67,8 +67,8 @@ | |||||
width: 100%; | width: 100%; | ||||
height: 0; | height: 0; | ||||
padding: 50% 0; | padding: 50% 0; | ||||
/*background-size: contain;*/ | |||||
background-size: cover; | |||||
background-size: contain; | |||||
/*background-size: cover;*/ | |||||
background-repeat: no-repeat; | background-repeat: no-repeat; | ||||
background-position: center center; | background-position: center center; | ||||
border-radius: 4px; | border-radius: 4px; | ||||
@@ -49,7 +49,7 @@ def prepare_options(html, options): | |||||
'background': None, | 'background': None, | ||||
'images': None, | 'images': None, | ||||
'quiet': None, | 'quiet': None, | ||||
'no-outline': None, | |||||
# 'no-outline': None, | |||||
'encoding': "UTF-8", | 'encoding': "UTF-8", | ||||
# defaults | # defaults | ||||