58 lines
1.2 KiB
JavaScript
58 lines
1.2 KiB
JavaScript
angular.module("robware").directive('contextMenu', function() {
|
|
return {
|
|
restrict: 'E',
|
|
templateUrl: '/scripts/directives/templates/contextMenu.html',
|
|
scope: {
|
|
actions: '=',
|
|
isChild: '=?'
|
|
},
|
|
link: function(scope, element) {
|
|
scope.isFunction = angular.isFunction;
|
|
scope.show=false;
|
|
scope.selectedElement=null;
|
|
scope.subMenuShowKey="";
|
|
|
|
scope.changeSubMenuShowKey=function(name){
|
|
scope.subMenuShowKey=name;
|
|
};
|
|
|
|
function show(x, y, target){
|
|
scope.changeSubMenuShowKey("");
|
|
scope.menuX=x+"px";
|
|
scope.menuY=y+"px";
|
|
scope.selectedElement=target;
|
|
scope.show=true;
|
|
};
|
|
|
|
function hide(){
|
|
scope.show=false;
|
|
}
|
|
|
|
scope.performAction=function(func){
|
|
if (!angular.isFunction(func))
|
|
return;
|
|
func($(scope.selectedElement).scope());
|
|
hide();
|
|
};
|
|
|
|
$(document).on("click", function(e){
|
|
hide();
|
|
scope.$apply();
|
|
});
|
|
|
|
var parent=element.parent()[0];
|
|
|
|
if (scope.isChild){
|
|
show(parent.clientWidth,parent.clientTop);
|
|
}else
|
|
$(parent).css("position","relative");
|
|
element.parent().on("contextmenu", function(e){
|
|
var offset=$(element).offset();
|
|
show(e.pageX-offset.left, e.pageY-offset.top, e.target);
|
|
scope.$apply();
|
|
e.preventDefault();
|
|
});
|
|
}
|
|
};
|
|
});
|
|
|