contextMenu.js 8.1 KB

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