Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2015
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.38 KB | None | 0 0
  1. 'use strict';
  2.  
  3. angular.module('ironridge')
  4. .controller('ArrayCtrl', function($scope, $rootScope, $timeout, $document) {
  5.  
  6. /***************start init*********************/
  7.  
  8. //panels may contain many panel
  9. var panels = $rootScope.panels = [];
  10. var panelsMetadata = $rootScope.panelsMetadata = [];
  11. var panel = [];
  12. var rect = {
  13. width: 16,
  14. height: 24
  15. };
  16. $scope.hover = {
  17. row: 0,
  18. col: 0
  19. };
  20. $scope.rect = rect;
  21. $scope.active = false;
  22. $scope.scroll = 0;
  23. var prevPanelData = {};
  24. $scope.iconPos = {};
  25. window.panelZindex = 0;
  26.  
  27. /***************end init*********************/
  28.  
  29. /*****utility functions*****/
  30. $scope.range = function(n) {
  31. return new Array(n);
  32. };
  33. $scope.hovered = function(i, j) {
  34. $scope.hover.row = i + 1;
  35. $scope.hover.col = j + 1;
  36. };
  37.  
  38. /*****drawing panel from number of rows and columns*****/
  39. $scope.draw = function(row, col) {
  40.  
  41. if (row < 1 || col < 1) {
  42. //return for empty row & col
  43. return;
  44. }
  45.  
  46.  
  47.  
  48. var pos = panels.length;
  49. var metadata = {};
  50. $scope.rect = {
  51. width: rect.width,
  52. height: rect.height
  53. };
  54. metadata = {
  55. row: row,
  56. col: col,
  57. width: (row + 1) * (rect.width + 2),
  58. height: (col + 1) * (rect.height + 2)
  59. };
  60.  
  61. /***** GET THE POSITION AND WIDTH OF PREVIOUS PANEL *****/
  62.  
  63. if (panels.length) {
  64. //previous panel
  65. var prevPanel = document.querySelector('#panel' + (panels.length - 1));
  66. //panels view width
  67. var parentPanelWidth = document.querySelector('#panels').getBoundingClientRect().width;
  68. prevPanelData = {
  69. top: Number(prevPanel.style.top.replace(/[^\d.-]/g, '')),
  70. left: Number(prevPanel.style.left.replace(/[^\d.-]/g, '')),
  71. width: prevPanel.getBoundingClientRect().width / window.zoom
  72. };
  73. //if the panel will be outside the panels view than replace it to the begin of new line
  74. if (prevPanelData.left + prevPanelData.width + metadata.width > parentPanelWidth) {
  75. prevPanelData = {
  76. left: 0,
  77. top: 200 * panels.length / 4, //top position increment in each 4 panels
  78. width: 0
  79. };
  80. }
  81.  
  82. } else {
  83. prevPanelData = {
  84. left: 0,
  85. top: 0,
  86. width: 0
  87. };
  88. }
  89.  
  90. /*****start panel painting *****/
  91. panel = [];
  92. $scope.show = false;
  93. for (var i = 0; i <= row; i += 1) {
  94. for (var j = 0; j <= col; j += 1) {
  95. panel.push({
  96. x: i * (rect.width + 2) + 1,
  97. y: j * (rect.height + 2) + 1,
  98. active: true,
  99. color: '#4A90E2'
  100. });
  101. }
  102. }
  103. /*****end panel painting *****/
  104.  
  105. // $scope.panel = panel;
  106. panelsMetadata[pos] = metadata;
  107. panels[pos] = panel;
  108.  
  109.  
  110. /***** panel placing *****/
  111. // if (panels.length > 1) {
  112. $timeout(function() {
  113. var thisPanel = document.querySelector('#panel' + (panels.length - 1));
  114. thisPanel.style.left = (prevPanelData.left + prevPanelData.width + 10) + 'px';
  115. thisPanel.style.top = prevPanelData.top + 'px';
  116. }, 30);
  117. //}
  118.  
  119. };
  120.  
  121. /*****rotate clicked panel*****/
  122. $scope.rotate = function(i) {
  123. console.log('rotate fired');
  124. var target = document.querySelector('#panel' + i);
  125. target.classList.toggle('rotate');
  126. };
  127.  
  128. /*****delete clicked panel*****/
  129. $scope.remove = function(i) {
  130. var target = document.querySelector('#panel' + i);
  131. target.classList.add('leave');
  132. //console.log('remove fired');
  133. panels.splice(i, 1);
  134. panelsMetadata.splice(i, 1);
  135. };
  136. /*****active or deactive the cells in the panel*****/
  137. $scope.toggle = function(panelId, i, event) {
  138.  
  139. //console.log('toggle fired');
  140. if (window.moving) {
  141. return;
  142. }
  143. $scope.panels[panelId][i].active = !$scope.panels[panelId][i].active;
  144. if ($scope.panels[panelId][i].active) {
  145. $scope.panels[panelId][i].color = '#4A90E2';
  146. } else {
  147. $scope.panels[panelId][i].color = 'white';
  148. }
  149. event.stopPropagation();
  150. // console.log($scope.panel);
  151. };
  152.  
  153. /*****activate the clicked panel*****/
  154. $scope.activate = function(index, event) {
  155. if (window.moving) {
  156. return;
  157. }
  158. var i = 0,
  159. length = $scope.panelsMetadata.length;
  160. for (; i < length; i += 1) {
  161. $scope.panelsMetadata[i].active = false;
  162. }
  163. $scope.panelsMetadata[index].active = true;
  164. event.stopPropagation();
  165. };
  166.  
  167. /*****deactivate all the panels*****/
  168. $scope.deactivate = function() {
  169. if (window.moving) {
  170. return;
  171. }
  172. var i = 0,
  173. length = $scope.panelsMetadata.length;
  174. for (; i < length; i += 1) {
  175. $scope.panelsMetadata[i].active = false;
  176. }
  177. };
  178.  
  179. /***** watcher*****/
  180. // Window.on('scroll', $scope.$apply.bind($scope, $scope.iconPosition));
  181.  
  182. //deativate all panels when clicking outside
  183. $document.on('click', $scope.$apply.bind($scope, $scope.deactivate));
  184.  
  185. // $document.on('mousemove', $scope.$apply.bind($scope, $scope.iconPosition));
  186.  
  187. /*****zoom in and out controle*****/
  188. var target = document.querySelector('#panels'),
  189. zoom = {
  190. step: 0.5,
  191. max: 4,
  192. min: 0.5,
  193. now: 1
  194. };
  195. window.zoom = zoom.now;
  196.  
  197. $scope.zoomin = function() {
  198. // console.log('zoomin fired');
  199. if (target && zoom.now < zoom.max) {
  200. zoom.now += zoom.step;
  201. // console.log('zoom.now', zoom.now);
  202.  
  203. var cssValue = 'scale(' + zoom.now + ')';
  204. target.style.transform = cssValue;
  205. target.style.webkitTransform = cssValue;
  206. target.style.mozTransform = cssValue;
  207. target.style.msTransform = cssValue;
  208. target.style.msTransform = cssValue;
  209. target.style.oTransform = cssValue;
  210.  
  211. window.zoom = zoom.now;
  212. }
  213. };
  214. $scope.zoomout = function() {
  215. // console.log('zoomout fired');
  216. if (target && zoom.now > zoom.min) {
  217. zoom.now -= zoom.step;
  218. // console.log('zoom.now', zoom.now);
  219.  
  220. var cssValue = 'scale(' + zoom.now + ')';
  221. target.style.transform = cssValue;
  222. target.style.webkitTransform = cssValue;
  223. target.style.mozTransform = cssValue;
  224. target.style.msTransform = cssValue;
  225. target.style.oTransform = cssValue;
  226.  
  227. window.zoom = zoom.now;
  228. }
  229. };
  230.  
  231. })
  232. .directive('draggable', ['$document', function($document) {
  233. return function(scope, element) {
  234.  
  235. var startX = 0,
  236. startY = 0,
  237. x = element.position().left,
  238. y = element.position().top;
  239.  
  240. // element.css({
  241. // cursor: 'pointer'
  242. // });
  243.  
  244. element.on('mousedown', function(event) {
  245.  
  246. x = element.position().left;
  247. y = element.position().top;
  248.  
  249. window.moving = false;
  250. event.preventDefault();
  251. startX = event.pageX - x;
  252. startY = event.pageY - y;
  253.  
  254. $document.on('mousemove', mousemove);
  255. $document.on('mouseup', mouseup);
  256. window.panelZindex += 1;
  257. element.css({
  258. zIndex: window.panelZindex
  259. });
  260. });
  261.  
  262. function mousemove(event) {
  263. // console.log('drag mousemove fired');
  264. window.moving = true;
  265. event.preventDefault();
  266.  
  267. y = (event.pageY - startY) / window.zoom;
  268. x = (event.pageX - startX) / window.zoom;
  269.  
  270. element.css({
  271. top: y + 'px',
  272. left: x + 'px'
  273. });
  274. }
  275.  
  276. function mouseup() {
  277. $document.off('mousemove', mousemove);
  278. $document.off('mouseup', mouseup);
  279. }
  280. };
  281. }]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement