odoo/addons/web/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packe...

133 lines
4.1 KiB
JavaScript

/*
Fork of some unlicensed library found somewhere, don't hesitate to
patch it directly.
*/
(function($) {
var menu,shadow,trigger,content,hash,currentTarget;
var defaults= {
menuStyle: {
listStyle:'none',
padding:'1px',
margin:'0px',
backgroundColor:'#fff',
border:'1px solid #999',
width:'100px'
},
itemStyle: {
margin:'0px',
color:'#000',
display:'block',
cursor:'default',
padding:'3px',
border:'1px solid #fff',
backgroundColor:'transparent'
},
itemHoverStyle: {
border:'1px solid #0a246a',
backgroundColor:'#b6bdd2'
},
eventPosX:'pageX',
eventPosY:'pageY',
shadow:true,
onContextMenu:null,
onShowMenu:null
};
$.fn.contextMenu= function(id,options) {
if(!menu) {
menu=$('<div id="jqContextMenu" class="openerp"></div>').hide().css({
position:'absolute',
zIndex:'2000'
}).appendTo('body').bind('click', function(e) {
e.stopPropagation()
})
}
if(!shadow) {
shadow=$('<div></div>').css({
backgroundColor:'#000',
position:'absolute',
opacity:0.2,
zIndex:499
}).appendTo('body').hide()
}
hash=hash||[];
hash.push({
id:id,
menuStyle:$.extend({},defaults.menuStyle,options.menuStyle|| {}),
itemStyle:$.extend({},defaults.itemStyle,options.itemStyle|| {}),
itemHoverStyle:$.extend({},defaults.itemHoverStyle,options.itemHoverStyle|| {}),
bindings:options.bindings|| {},
shadow:options.shadow||options.shadow===false?options.shadow:defaults.shadow,
onContextMenu:options.onContextMenu||defaults.onContextMenu,
onShowMenu:options.onShowMenu||defaults.onShowMenu,
eventPosX:options.eventPosX||defaults.eventPosX,
eventPosY:options.eventPosY||defaults.eventPosY
});
var index=hash.length-1;
var callback = function(e) {
var bShowContext=(!!hash[index].onContextMenu)?hash[index].onContextMenu(e):true;
if(bShowContext)
display(index,this,e,options);
return false;
};
if (!options.noRightClick) {
$(this).bind('contextmenu', callback);
}
if (options.leftClickToo || options.noRightClick) {
$(this).click(callback);
}
return this
};
function display(index,trigger,e,options) {
var cur=hash[index];
content=$('#'+cur.id).find('ul:first').clone(true);
content.css(cur.menuStyle).find('li').css(cur.itemStyle).hover( function() {
$(this).css(cur.itemHoverStyle)
}, function() {
$(this).css(cur.itemStyle)
}).find('img').css({
verticalAlign:'middle',
paddingRight:'2px'
});
menu.html(content);
if(!!cur.onShowMenu)
menu=cur.onShowMenu(e,menu);
$.each(cur.bindings, function(id,func) {
$('#'+id,menu).bind('click', function(e) {
hide();
func(trigger,currentTarget)
})
});
menu.css({
'left':e[cur.eventPosX],
'top':e[cur.eventPosY]
}).show();
if(cur.shadow)
shadow.css({
width:menu.width(),
height:menu.height(),
left:e.pageX+2,
top:e.pageY+2
}).show();
$(document).one('click',hide)
}
function hide() {
menu.hide();
shadow.hide()
}
$.contextMenu= {
defaults: function(userDefaults) {
$.each(userDefaults, function(i,val) {
if(typeof val=='object'&&defaults[i]) {
$.extend(defaults[i],val)
} else
defaults[i]=val
})
}
}
})(jQuery);
$( function() {
$('div.contextMenu').hide()
});