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