otsdaq_utilities  v2_05_02_indev
MacroMakerContextMenu.js
1 (function() {
2 
3  "use strict";
4 
7  //
8  // H E L P E R F U N C T I O N S
9  //
12 
21  function clickInsideElement( e, className ) {
22  var el = e.srcElement || e.target;
23 
24  if ( el.classList.contains(className) ) {
25  return el;
26  } else {
27  while ( el = el.parentNode ) {
28  if ( el.classList && el.classList.contains(className) ) {
29  return el;
30  }
31  }
32  }
33 
34  return false;
35  }
36 
43  function getPosition(e) {
44  var posx = 0;
45  var posy = 0;
46 
47  if (!e) var e = window.event;
48 
49  if (e.pageX || e.pageY) {
50  posx = e.pageX;
51  posy = e.pageY;
52  } else if (e.clientX || e.clientY) {
53  posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
54  posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
55  }
56 
57  return {
58  x: posx,
59  y: posy
60  }
61  }
62 
65  //
66  // C O R E F U N C T I O N S
67  //
70 
74  var contextMenuClassName = "context-menu";
75  var contextMenuItemClassName = "context-menu__item";
76  var contextMenuLinkClassName = "context-menu__link";
77  var contextMenuActive = "context-menu--active";
78 
79  var taskItemClassName = "macroDiv";
80  var taskItemInContext;
81 
82  var clickCoords;
83  var clickCoordsX;
84  var clickCoordsY;
85 
86  var menu = document.querySelector(".context-menu");
87  var menuItems = menu.querySelectorAll(".context-menu__item");
88  var menuState = 0;
89  var menuWidth;
90  var menuHeight;
91  var menuPosition;
92  var menuPositionX;
93  var menuPositionY;
94 
95  var windowWidth;
96  var windowHeight;
97 
101  function initContextMenu() {
102  contextListener();
103  clickListener();
104  keyupListener();
105  resizeListener();
106  }
107 
111  function contextListener() {
112  document.addEventListener( "contextmenu", function(e) {
113  taskItemInContext = clickInsideElement( e, taskItemClassName );
114 
115  if ( taskItemInContext ) {
116  e.preventDefault();
117  toggleMenuOn();
118  positionMenu(e);
119  } else {
120  taskItemInContext = null;
121  toggleMenuOff();
122  }
123  });
124  }
125 
129  function clickListener() {
130  document.addEventListener( "click", function(e) {
131  var clickeElIsLink = clickInsideElement( e, contextMenuLinkClassName );
132 
133  if ( clickeElIsLink ) {
134  e.preventDefault();
135  menuItemListener( clickeElIsLink );
136  } else {
137  var button = e.which || e.button;
138  if ( button === 1 ) {
139  toggleMenuOff();
140  }
141  }
142  });
143  }
144 
148  function keyupListener() {
149  window.onkeyup = function(e) {
150  if ( e.keyCode === 27 ) {
151  toggleMenuOff();
152  }
153  }
154  }
155 
159  function resizeListener() {
160  window.onresize = function(e) {
161  toggleMenuOff();
162  };
163  }
164 
168  function toggleMenuOn() {
169  if ( menuState !== 1 ) {
170  menuState = 1;
171  menu.classList.add( contextMenuActive );
172  }
173  }
174 
178  function toggleMenuOff() {
179  if ( menuState !== 0 ) {
180  menuState = 0;
181  menu.classList.remove( contextMenuActive );
182  }
183  }
184 
190  function positionMenu(e) {
191  clickCoords = getPosition(e);
192  clickCoordsX = clickCoords.x;
193  clickCoordsY = clickCoords.y;
194 
195  menuWidth = menu.offsetWidth + 4;
196  menuHeight = menu.offsetHeight + 4;
197 
198  windowWidth = window.innerWidth;
199  windowHeight = window.innerHeight;
200 
201  if ( (windowWidth - clickCoordsX) < menuWidth ) {
202  menu.style.left = windowWidth - menuWidth + "px";
203  } else {
204  menu.style.left = clickCoordsX + "px";
205  }
206 
207  if ( (windowHeight - clickCoordsY) < menuHeight ) {
208  menu.style.top = windowHeight - menuHeight + "px";
209  } else {
210  menu.style.top = clickCoordsY + "px";
211  }
212  }
213 
219  function menuItemListener( link ) {
220  console.log( "Macro name - " + taskItemInContext.getAttribute("data-id") + ", Macro action - " + link.getAttribute("data-action"));
221  toggleMenuOff();
222  macroActionOnRightClick(taskItemInContext.getAttribute("data-id"), link.getAttribute("data-action"),
223  taskItemInContext.getAttribute("data-sequence"), taskItemInContext.getAttribute("data-notes"),
224  taskItemInContext.getAttribute("data-time"), taskItemInContext.getAttribute("data-LSBF"));
225  }
226 
230  initContextMenu();
231 
232 
233 
234 })();