website/Website/wwwroot/js/directives/contextMenu.js

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();
});
}
};
});