contextMenu.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. /**
  2. * @name ContextMenu Module
  3. * @description This module is used for the context menu.
  4. * @author Tobias Reich
  5. * @copyright 2014 by Tobias Reich
  6. */
  7. contextMenu = {
  8. fns: null,
  9. show: function(items, mouse_x, mouse_y, orientation) {
  10. contextMenu.close();
  11. $("body")
  12. .css("overflow", "hidden")
  13. .append(build.contextMenu(items));
  14. // Do not leave the screen
  15. if ((mouse_x+$(".contextmenu").outerWidth(true))>$("html").width()) orientation = "left";
  16. if ((mouse_y+$(".contextmenu").outerHeight(true))>$("html").height()) mouse_y -= (mouse_y+$(".contextmenu").outerHeight(true)-$("html").height())
  17. if (orientation==="left") mouse_x -= $(".contextmenu").outerWidth(true);
  18. if (!mouse_x||!mouse_y) {
  19. mouse_x = "10px";
  20. mouse_y = "10px";
  21. }
  22. $(".contextmenu").css({
  23. "top": mouse_y,
  24. "left": mouse_x,
  25. "opacity": .98
  26. });
  27. },
  28. add: function(e) {
  29. var mouse_x = e.pageX,
  30. mouse_y = e.pageY - $(document).scrollTop(),
  31. items;
  32. contextMenu.fns = [
  33. function() { $("#upload_files").click() },
  34. function() { upload.start.url() },
  35. function() { upload.start.dropbox() },
  36. function() { upload.start.server() },
  37. function() { album.add() }
  38. ];
  39. items = [
  40. ["<a class='icon-picture'></a> Upload Photo", 0],
  41. ["separator", -1],
  42. ["<a class='icon-link'></a> Import from Link", 1],
  43. ["<a class='icon-folder-open'></a> Import from Dropbox", 2],
  44. ["<a class='icon-hdd'></a> Import from Server", 3],
  45. ["separator", -1],
  46. ["<a class='icon-folder-close'></a> New Album", 4]
  47. ];
  48. contextMenu.show(items, mouse_x, mouse_y, "left");
  49. },
  50. settings: function(e) {
  51. var mouse_x = e.pageX,
  52. mouse_y = e.pageY - $(document).scrollTop(),
  53. items;
  54. contextMenu.fns = [
  55. function() { settings.setLogin() },
  56. function() { settings.setSorting() },
  57. function() { window.open(lychee.website,"_newtab"); },
  58. function() { lychee.logout() }
  59. ];
  60. items = [
  61. ["<a class='icon-user'></a> Change Login", 0],
  62. ["<a class='icon-sort'></a> Change Sorting", 1],
  63. ["<a class='icon-info-sign'></a> About Lychee", 2],
  64. ["separator", -1],
  65. ["<a class='icon-signout'></a> Sign Out", 3]
  66. ];
  67. contextMenu.show(items, mouse_x, mouse_y, "right");
  68. },
  69. album: function(albumID, e) {
  70. var mouse_x = e.pageX,
  71. mouse_y = e.pageY - $(document).scrollTop(),
  72. items;
  73. if (albumID==="0"||albumID==="f"||albumID==="s") return false;
  74. contextMenu.fns = [
  75. function() { album.setTitle(albumID) },
  76. function() { album.delete(albumID) }
  77. ];
  78. items = [
  79. ["<a class='icon-edit'></a> Rename", 0],
  80. ["<a class='icon-trash'></a> Delete", 1]
  81. ];
  82. contextMenu.show(items, mouse_x, mouse_y, "right");
  83. $(".album[data-id='" + albumID + "']").addClass("active");
  84. },
  85. albumMulti: function(albumIDs, e) {
  86. var mouse_x = e.pageX,
  87. mouse_y = e.pageY - $(document).scrollTop(),
  88. items;
  89. multiselect.stopResize();
  90. contextMenu.fns = [
  91. function() { album.setTitle(albumIDs) },
  92. function() { album.delete(albumIDs) },
  93. ];
  94. items = [
  95. ["<a class='icon-edit'></a> Rename All", 0],
  96. ["<a class='icon-trash'></a> Delete All", 1]
  97. ];
  98. contextMenu.show(items, mouse_x, mouse_y, "right");
  99. },
  100. photo: function(photoID, e) {
  101. var mouse_x = e.pageX,
  102. mouse_y = e.pageY - $(document).scrollTop(),
  103. items;
  104. contextMenu.fns = [
  105. function() { photo.setStar([photoID]) },
  106. function() { photo.setTitle([photoID]) },
  107. function() { contextMenu.move([photoID], e, "right") },
  108. function() { photo.delete([photoID]) }
  109. ];
  110. items = [
  111. ["<a class='icon-star'></a> Star", 0],
  112. ["separator", -1],
  113. ["<a class='icon-edit'></a> Rename", 1],
  114. ["<a class='icon-folder-open'></a> Move", 2],
  115. ["<a class='icon-trash'></a> Delete", 3]
  116. ];
  117. contextMenu.show(items, mouse_x, mouse_y, "right");
  118. $(".photo[data-id='" + photoID + "']").addClass("active");
  119. },
  120. photoMulti: function(photoIDs, e) {
  121. var mouse_x = e.pageX,
  122. mouse_y = e.pageY - $(document).scrollTop(),
  123. items;
  124. multiselect.stopResize();
  125. contextMenu.fns = [
  126. function() { photo.setStar(photoIDs) },
  127. function() { photo.setTitle(photoIDs) },
  128. function() { contextMenu.move(photoIDs, e, "right") },
  129. function() { photo.delete(photoIDs) }
  130. ];
  131. items = [
  132. ["<a class='icon-star'></a> Star All", 0],
  133. ["separator", -1],
  134. ["<a class='icon-edit'></a> Rename All", 1],
  135. ["<a class='icon-folder-open'></a> Move All", 2],
  136. ["<a class='icon-trash'></a> Delete All", 3]
  137. ];
  138. contextMenu.show(items, mouse_x, mouse_y, "right");
  139. },
  140. move: function(photoIDs, e, orientation) {
  141. var mouse_x = e.pageX,
  142. mouse_y = e.pageY - $(document).scrollTop(),
  143. items = [];
  144. contextMenu.close(true);
  145. if (album.getID()!=="0") {
  146. items = [
  147. ["Unsorted", 0, "photo.setAlbum([" + photoIDs + "], 0)"],
  148. ["separator", -1]
  149. ];
  150. }
  151. lychee.api("getAlbums", function(data) {
  152. if (!data.albums) {
  153. items = [["New Album", 0, "album.add()"]];
  154. } else {
  155. $.each(data.content, function(index) {
  156. if (this.id!=album.getID()) items.push([this.title, 0, "photo.setAlbum([" + photoIDs + "], " + this.id + ")"]);
  157. });
  158. }
  159. if (!visible.photo()) contextMenu.show(items, mouse_x, mouse_y, "right");
  160. else contextMenu.show(items, mouse_x, mouse_y, "left");
  161. });
  162. },
  163. sharePhoto: function(photoID, e) {
  164. var mouse_x = e.pageX,
  165. mouse_y = e.pageY,
  166. items;
  167. mouse_y -= $(document).scrollTop();
  168. contextMenu.fns = [
  169. function() { photo.setPublic(photoID) },
  170. function() { photo.share(photoID, 0) },
  171. function() { photo.share(photoID, 1) },
  172. function() { photo.share(photoID, 2) },
  173. function() { photo.share(photoID, 3) },
  174. function() { window.open(photo.getDirectLink(),"_newtab") }
  175. ];
  176. link = photo.getViewLink(photoID);
  177. if (photo.json.public==="2") link = location.href;
  178. items = [
  179. ["<input readonly id='link' value='" + link + "'>", -1],
  180. ["separator", -1],
  181. ["<a class='icon-eye-close'></a> Make Private", 0],
  182. ["separator", -1],
  183. ["<a class='icon-twitter'></a> Twitter", 1],
  184. ["<a class='icon-facebook'></a> Facebook", 2],
  185. ["<a class='icon-envelope'></a> Mail", 3],
  186. ["<a class='icon-hdd'></a> Dropbox", 4],
  187. ["<a class='icon-link'></a> Direct Link", 5]
  188. ];
  189. contextMenu.show(items, mouse_x, mouse_y, "left");
  190. $(".contextmenu input").focus();
  191. },
  192. shareAlbum: function(albumID, e) {
  193. var mouse_x = e.pageX,
  194. mouse_y = e.pageY,
  195. items;
  196. mouse_y -= $(document).scrollTop();
  197. contextMenu.fns = [
  198. function() { album.setPublic(albumID) },
  199. function() { password.set(albumID) },
  200. function() { album.share(0) },
  201. function() { album.share(1) },
  202. function() { album.share(2) },
  203. function() { password.remove(albumID) }
  204. ];
  205. items = [
  206. ["<input readonly id='link' value='" + location.href + "'>", -1],
  207. ["separator", -1],
  208. ["<a class='icon-eye-close'></a> Make Private", 0],
  209. ["<a class='icon-lock'></a> Set Password", 1],
  210. ["separator", -1],
  211. ["<a class='icon-twitter'></a> Twitter", 2],
  212. ["<a class='icon-facebook'></a> Facebook", 3],
  213. ["<a class='icon-envelope'></a> Mail", 4],
  214. ];
  215. if (album.json.password==true) items[3] = ["<a class='icon-unlock'></a> Remove Password", 5];
  216. contextMenu.show(items, mouse_x, mouse_y, "left");
  217. $(".contextmenu input").focus();
  218. },
  219. close: function(leaveSelection) {
  220. if (!visible.contextMenu()) return false;
  221. contextMenu.fns = [];
  222. $(".contextmenu_bg, .contextmenu").remove();
  223. $("body").css("overflow", "auto");
  224. if (leaveSelection!==true) {
  225. $(".photo.active, .album.active").removeClass("active");
  226. if (visible.multiselect()) multiselect.close();
  227. }
  228. }
  229. }