contextMenu.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /* global google, angular */
  2. app.directive('contextMenu', function() {
  3. return {
  4. restrict: 'E',
  5. templateUrl: '/scripts/directives/templates/contextMenu.html',
  6. replace:false,
  7. scope: {
  8. actions: '=',
  9. isChild: '=?'
  10. },
  11. link: function(scope, element) {
  12. scope.isFunction = angular.isFunction;
  13. scope.show=false;
  14. scope.selectedElement=null;
  15. scope.subMenuShowKey="";
  16. scope.changeSubMenuShowKey=function(name){
  17. scope.subMenuShowKey=name;
  18. }
  19. function show(x, y, target){
  20. scope.changeSubMenuShowKey("");
  21. scope.menuX=x+"px";
  22. scope.menuY=y+"px";
  23. scope.selectedElement=target
  24. scope.show=true;
  25. }
  26. function hide(){
  27. scope.show=false;
  28. }
  29. scope.performAction=function(func){
  30. if (!angular.isFunction(func))
  31. return;
  32. func(scope.selectedElement);
  33. hide();
  34. }
  35. $(document).on("click", function(e){
  36. hide();
  37. scope.$apply();
  38. });
  39. var parent=element.parent()[0];
  40. if (scope.isChild){
  41. show(parent.clientWidth,parent.clientTop);
  42. }else
  43. $(parent).css("position","relative");
  44. element.parent().on("contextmenu", function(e){
  45. var offset=$(element).offset();
  46. show(e.pageX-offset.left, e.pageY-offset.top, e.target);
  47. scope.$apply();
  48. e.preventDefault();
  49. });
  50. }
  51. };
  52. });