Bind key handler to save favorite on Enter

This commit is contained in:
Nathan Gray 2014-03-03 18:51:58 +00:00
parent f561e7e7bf
commit e9b5dfde4d

View File

@ -452,82 +452,86 @@ var AppJS = Class.extend(
} }
var buttons = {}; var buttons = {};
buttons[this.egw.lang("save")] = function() { buttons['save'] = {
// Add a new favorite text: this.egw.lang('save'),
var name = $j("#name",this); default: true,
click: function() {
// Add a new favorite
var name = $j("#name",this);
if(name.val()) if(name.val())
{
// Add to the list
name.val(name.val().replace(/(<([^>]+)>)/ig,""));
var safe_name = name.val().replace(/[^A-Za-z0-9-_]/g,"_");
var favorite = {
name: name.val(),
group: (typeof self.favorite_popup.group != "undefined" &&
self.favorite_popup.group.get_value() ? self.favorite_popup.group.get_value() : false),
state: self.favorite_popup.state
};
var favorite_pref = favorite_prefix+safe_name;
// Save to preferences
if(typeof self.favorite_popup.group != "undefined" && self.favorite_popup.group.getValue() != '')
{ {
// Admin stuff - save preference server side // Add to the list
self.egw.jsonq(self.appname+'.egw_framework.ajax_set_favorite.template', name.val(name.val().replace(/(<([^>]+)>)/ig,""));
[ var safe_name = name.val().replace(/[^A-Za-z0-9-_]/g,"_");
self.appname, var favorite = {
name.val(), name: name.val(),
"add", group: (typeof self.favorite_popup.group != "undefined" &&
self.favorite_popup.group.get_value(), self.favorite_popup.group.get_value() ? self.favorite_popup.group.get_value() : false),
self.favorite_popup.state state: self.favorite_popup.state
] };
);
self.favorite_popup.group.set_value('');
}
else
{
// Normal user - just save to preferences client side
self.egw.set_preference(self.appname,favorite_pref,favorite);
}
// Add to list immediately var favorite_pref = favorite_prefix+safe_name;
if(self.sidebox)
{
// Remove any existing with that name
$j('[data-id="'+safe_name+'"]',self.sidebox).remove();
// Create new item // Save to preferences
var html = "<li data-id='"+safe_name+"' data-group='" + favorite.group + "' class='ui-menu-item' role='menuitem'>\n"; if(typeof self.favorite_popup.group != "undefined" && self.favorite_popup.group.getValue() != '')
var href = 'javascript:app.'+self.appname+'.setState('+JSON.stringify(favorite)+');';
html += "<a href='"+href+"' class='ui-corner-all' tabindex='-1'>";
html += "<div class='" + 'sideboxstar' + "'></div>"+
favorite.name;
html += "<div class='ui-icon ui-icon-trash' title='" + egw.lang('Delete') + "'/>";
html += "</a></li>\n";
$j(html).insertBefore($j('li',self.sidebox).last());
self._init_sidebox(self.sidebox);
}
// Try to update nextmatch favorites too
if(etemplate2 && etemplate2.getByApplication)
{
var et2 = etemplate2.getByApplication(self.appname);
for(var i = 0; i < et2.length; i++)
{ {
et2[i].widgetContainer.iterateOver(function(_widget) { // Admin stuff - save preference server side
_widget.stored_filters = _widget.load_favorites(self.appname); self.egw.jsonq(self.appname+'.egw_framework.ajax_set_favorite.template',
_widget.init_filters(_widget); [
}, self, et2_favorites); self.appname,
name.val(),
"add",
self.favorite_popup.group.get_value(),
self.favorite_popup.state
]
);
self.favorite_popup.group.set_value('');
}
else
{
// Normal user - just save to preferences client side
self.egw.set_preference(self.appname,favorite_pref,favorite);
}
// Add to list immediately
if(self.sidebox)
{
// Remove any existing with that name
$j('[data-id="'+safe_name+'"]',self.sidebox).remove();
// Create new item
var html = "<li data-id='"+safe_name+"' data-group='" + favorite.group + "' class='ui-menu-item' role='menuitem'>\n";
var href = 'javascript:app.'+self.appname+'.setState('+JSON.stringify(favorite)+');';
html += "<a href='"+href+"' class='ui-corner-all' tabindex='-1'>";
html += "<div class='" + 'sideboxstar' + "'></div>"+
favorite.name;
html += "<div class='ui-icon ui-icon-trash' title='" + egw.lang('Delete') + "'/>";
html += "</a></li>\n";
$j(html).insertBefore($j('li',self.sidebox).last());
self._init_sidebox(self.sidebox);
}
// Try to update nextmatch favorites too
if(etemplate2 && etemplate2.getByApplication)
{
var et2 = etemplate2.getByApplication(self.appname);
for(var i = 0; i < et2.length; i++)
{
et2[i].widgetContainer.iterateOver(function(_widget) {
_widget.stored_filters = _widget.load_favorites(self.appname);
_widget.init_filters(_widget);
}, self, et2_favorites);
}
} }
} }
} // Reset form
// Reset form delete self.favorite_popup.state;
delete self.favorite_popup.state; name.val("");
name.val(""); $j("#filters",self.favorite_popup).empty();
$j("#filters",self.favorite_popup).empty();
$j(this).dialog("close"); $j(this).dialog("close");
},
}; };
buttons[this.egw.lang("cancel")] = function() { buttons[this.egw.lang("cancel")] = function() {
if(typeof self.favorite_popup.group !== 'undefined' && self.favorite_popup.group.set_value) if(typeof self.favorite_popup.group !== 'undefined' && self.favorite_popup.group.set_value)
@ -545,6 +549,19 @@ var AppJS = Class.extend(
} }
}); });
// Bind handler for enter keypress
this.favorite_popup.off('keydown').on('keydown', jQuery.proxy(function(e) {
var tagName = e.target.tagName.toLowerCase();
tagName = (tagName === 'input' && e.target.type === 'button') ? 'button' : tagName;
if(e.keyCode == jQuery.ui.keyCode.ENTER && tagName !== 'textarea' && tagName !== 'select' && tagName !=='button')
{
e.preventDefault();
$j('button[default]',this.favorite_popup.parent()).trigger('click');
return false;
}
},this));
return false; return false;
}, },