multiselect.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /**
  2. * @description Select multiple albums or photos.
  3. * @copyright 2015 by Tobias Reich
  4. */
  5. multiselect = {}
  6. multiselect.position = {
  7. top: null,
  8. right: null,
  9. bottom: null,
  10. left: null
  11. }
  12. multiselect.show = function(e) {
  13. if (lychee.publicMode) return false;
  14. if (visible.search()) return false;
  15. if (visible.infobox()) return false;
  16. if (!visible.albums()&&!visible.album) return false;
  17. if ($('.album:hover, .photo:hover').length!==0) return false;
  18. if (visible.multiselect()) $('#multiselect').remove();
  19. multiselect.position.top = e.pageY;
  20. multiselect.position.right = -1 * (e.pageX - $(document).width());
  21. multiselect.position.bottom = -1 * (multiselect.position.top - $(window).height());
  22. multiselect.position.left = e.pageX;
  23. $('body').append(build.multiselect(multiselect.position.top, multiselect.position.left));
  24. $(document).on('mousemove', multiselect.resize);
  25. }
  26. multiselect.selectAll = function() {
  27. var e,
  28. newWidth,
  29. newHeight;
  30. if (lychee.publicMode) return false;
  31. if (visible.search()) return false;
  32. if (visible.infobox()) return false;
  33. if (!visible.albums()&&!visible.album) return false;
  34. if (visible.multiselect()) $('#multiselect').remove();
  35. multiselect.position.top = 70;
  36. multiselect.position.right = 40;
  37. multiselect.position.bottom = 90;
  38. multiselect.position.left = 20;
  39. $('body').append(build.multiselect(multiselect.position.top, multiselect.position.left));
  40. newWidth = $(document).width() - multiselect.position.right + 2;
  41. newHeight = $(document).height() - multiselect.position.bottom;
  42. $('#multiselect').css({
  43. width: newWidth,
  44. height: newHeight
  45. });
  46. e = {
  47. pageX: $(document).width() - (multiselect.position.right / 2),
  48. pageY: $(document).height() - multiselect.position.bottom
  49. };
  50. multiselect.getSelection(e);
  51. }
  52. multiselect.resize = function(e) {
  53. var mouse_x = e.pageX,
  54. mouse_y = e.pageY,
  55. newHeight,
  56. newWidth;
  57. if (multiselect.position.top===null||
  58. multiselect.position.right===null||
  59. multiselect.position.bottom===null||
  60. multiselect.position.left===null) return false;
  61. if (mouse_y>=multiselect.position.top) {
  62. // Do not leave the screen
  63. newHeight = mouse_y - multiselect.position.top;
  64. if ((multiselect.position.top+newHeight)>=$(document).height())
  65. newHeight -= (multiselect.position.top + newHeight) - $(document).height() + 2;
  66. $('#multiselect').css({
  67. top: multiselect.position.top,
  68. bottom: 'inherit',
  69. height: newHeight
  70. });
  71. } else {
  72. $('#multiselect').css({
  73. top: 'inherit',
  74. bottom: multiselect.position.bottom,
  75. height: multiselect.position.top - e.pageY
  76. });
  77. }
  78. if (mouse_x>=multiselect.position.left) {
  79. // Do not leave the screen
  80. newWidth = mouse_x - multiselect.position.left;
  81. if ((multiselect.position.left+newWidth)>=$(document).width())
  82. newWidth -= (multiselect.position.left + newWidth) - $(document).width() + 2;
  83. $('#multiselect').css({
  84. right: 'inherit',
  85. left: multiselect.position.left,
  86. width: newWidth
  87. });
  88. } else {
  89. $('#multiselect').css({
  90. right: multiselect.position.right,
  91. left: 'inherit',
  92. width: multiselect.position.left - e.pageX
  93. });
  94. }
  95. }
  96. multiselect.stopResize = function() {
  97. $(document).off('mousemove');
  98. }
  99. multiselect.getSize = function() {
  100. if (!visible.multiselect()) return false;
  101. return {
  102. top: $('#multiselect').offset().top,
  103. left: $('#multiselect').offset().left,
  104. width: parseInt($('#multiselect').css('width').replace('px', '')),
  105. height: parseInt($('#multiselect').css('height').replace('px', ''))
  106. };
  107. }
  108. multiselect.getSelection = function(e) {
  109. var tolerance = 150,
  110. id,
  111. ids = [],
  112. offset,
  113. size = multiselect.getSize();
  114. if (visible.contextMenu()) return false;
  115. if (!visible.multiselect()) return false;
  116. $('.photo, .album').each(function() {
  117. offset = $(this).offset();
  118. if (offset.top>=(size.top-tolerance)&&
  119. offset.left>=(size.left-tolerance)&&
  120. (offset.top+206)<=(size.top+size.height+tolerance)&&
  121. (offset.left+206)<=(size.left+size.width+tolerance)) {
  122. id = $(this).data('id');
  123. if (id!=='0'&&id!==0&&id!=='f'&&id!=='s'&&id!=='r'&&id!==null&&id!==undefined) {
  124. ids.push(id);
  125. $(this).addClass('active');
  126. }
  127. }
  128. });
  129. if (ids.length!==0&&visible.album()) contextMenu.photoMulti(ids, e);
  130. else if (ids.length!==0&&visible.albums()) contextMenu.albumMulti(ids, e);
  131. else multiselect.close();
  132. }
  133. multiselect.close = function() {
  134. multiselect.stopResize();
  135. multiselect.position.top = null;
  136. multiselect.position.right = null;
  137. multiselect.position.bottom = null;
  138. multiselect.position.left = null;
  139. lychee.animate('#multiselect', 'fadeOut');
  140. setTimeout(function() {
  141. $('#multiselect').remove();
  142. }, 300);
  143. }