contextMenu.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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, orientation));
  14. if (orientation==="left") mouse_x -= $(".contextmenu").outerWidth(true);
  15. if (!mouse_x||!mouse_y) {
  16. mouse_x = "10px";
  17. mouse_y = "10px";
  18. }
  19. $(".contextmenu").css({
  20. "top": mouse_y,
  21. "left": mouse_x
  22. });
  23. },
  24. add: function(e) {
  25. var mouse_x = e.pageX,
  26. mouse_y = e.pageY,
  27. items;
  28. mouse_y -= $(document).scrollTop();
  29. contextMenu.fns = [
  30. function() { $("#upload_files").click() },
  31. function() { upload.start.url() },
  32. function() { upload.start.dropbox() },
  33. function() { upload.start.server() },
  34. function() { album.add() }
  35. ];
  36. items = [
  37. ["<a class='icon-picture'></a> Upload Photo", 0],
  38. ["separator", -1],
  39. ["<a class='icon-link'></a> Import from Link", 1],
  40. ["<a class='icon-folder-open'></a> Import from Dropbox", 2],
  41. ["<a class='icon-hdd'></a> Import from Server", 3],
  42. ["separator", -1],
  43. ["<a class='icon-folder-close'></a> New Album", 4]
  44. ];
  45. contextMenu.show(items, mouse_x, mouse_y, "left");
  46. },
  47. settings: function(e) {
  48. var mouse_x = e.pageX,
  49. mouse_y = e.pageY,
  50. items;
  51. mouse_y -= $(document).scrollTop();
  52. contextMenu.fns = [
  53. function() { settings.setLogin() },
  54. function() { settings.setSorting() },
  55. function() { window.open(lychee.website,"_newtab"); },
  56. function() { lychee.logout() }
  57. ];
  58. items = [
  59. ["<a class='icon-user'></a> Change Login", 0],
  60. ["<a class='icon-sort'></a> Change Sorting", 1],
  61. ["<a class='icon-info-sign'></a> About Lychee", 2],
  62. ["separator", -1],
  63. ["<a class='icon-signout'></a> Sign Out", 3]
  64. ];
  65. contextMenu.show(items, mouse_x, mouse_y, "right");
  66. },
  67. album: function(albumID, e) {
  68. e.preventDefault();
  69. var mouse_x = e.pageX,
  70. mouse_y = e.pageY,
  71. items;
  72. if (albumID==="0"||albumID==="f"||albumID==="s") return false;
  73. mouse_y -= $(document).scrollTop();
  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. photo: function(photoID, e) {
  86. e.preventDefault();
  87. var mouse_x = e.pageX,
  88. mouse_y = e.pageY,
  89. items;
  90. mouse_y -= $(document).scrollTop();
  91. contextMenu.fns = [
  92. function() { photo.setStar(photoID) },
  93. function() { photo.setTitle(photoID) },
  94. function() { contextMenu.move(photoID, e, "right") },
  95. function() { photo.delete(photoID) }
  96. ];
  97. items = [
  98. ["<a class='icon-star'></a> Star", 0],
  99. ["separator", -1],
  100. ["<a class='icon-edit'></a> Rename", 1],
  101. ["<a class='icon-folder-open'></a> Move", 2],
  102. ["<a class='icon-trash'></a> Delete", 3]
  103. ];
  104. contextMenu.show(items, mouse_x, mouse_y, "right");
  105. $(".photo[data-id='" + photoID + "']").addClass("active");
  106. },
  107. move: function(photoID, e, orientation) {
  108. var mouse_x = e.pageX,
  109. mouse_y = e.pageY,
  110. items = [];
  111. contextMenu.fns = [];
  112. mouse_y -= $(document).scrollTop();
  113. if (orientation===undefined) orientation = "left";
  114. if (!mouse_x||!mouse_y) {
  115. mouse_x = "10px";
  116. mouse_y = "10px";
  117. }
  118. if (album.getID()!=="0") {
  119. items = [
  120. ["Unsorted", 0, "photo.setAlbum(0, " + photoID + ")"],
  121. ["separator", -1]
  122. ];
  123. }
  124. lychee.api("getAlbums", function(data) {
  125. if (!data.albums) {
  126. items = [["New Album", 0, "album.add()"]];
  127. } else {
  128. $.each(data.content, function(index) {
  129. if (this.id!=album.getID()) items.push([this.title, 0, "photo.setAlbum(" + this.id + ", " + photoID + ")"]);
  130. });
  131. }
  132. contextMenu.close();
  133. $(".photo[data-id='" + photoID + "']").addClass("active");
  134. $("body")
  135. .css("overflow", "hidden")
  136. .append(build.contextMenu(items, orientation));
  137. if (!visible.photo()) mouse_x += $(".contextmenu").width();
  138. $(".contextmenu").css({
  139. "top": mouse_y,
  140. "left": mouse_x-$(".contextmenu").width()
  141. });
  142. });
  143. },
  144. sharePhoto: function(photoID, e) {
  145. var mouse_x = e.pageX,
  146. mouse_y = e.pageY,
  147. items;
  148. mouse_y -= $(document).scrollTop();
  149. contextMenu.fns = [
  150. function() { photo.setPublic(photoID) },
  151. function() { photo.share(photoID, 0) },
  152. function() { photo.share(photoID, 1) },
  153. function() { photo.share(photoID, 2) },
  154. function() { photo.share(photoID, 3) }
  155. ];
  156. items = [
  157. ["<input readonly id='link' value='" + photo.getViewLink(photoID) + "'>", -1],
  158. ["separator", -1],
  159. ["<a class='icon-eye-close'></a> Make Private", 0],
  160. ["separator", -1],
  161. ["<a class='icon-twitter'></a> Twitter", 1],
  162. ["<a class='icon-facebook'></a> Facebook", 2],
  163. ["<a class='icon-envelope'></a> Mail", 3],
  164. ["<a class='icon-hdd'></a> Dropbox", 4]
  165. ];
  166. contextMenu.show(items, mouse_x, mouse_y, "left");
  167. $(".contextmenu input").focus();
  168. },
  169. shareAlbum: function(albumID, e) {
  170. var mouse_x = e.pageX,
  171. mouse_y = e.pageY,
  172. items;
  173. mouse_y -= $(document).scrollTop();
  174. contextMenu.fns = [
  175. function() { album.setPublic(albumID) },
  176. function() { password.set(albumID) },
  177. function() { album.share(0) },
  178. function() { album.share(1) },
  179. function() { album.share(2) },
  180. function() { password.remove(albumID) }
  181. ];
  182. items = [
  183. ["<input readonly id='link' value='" + location.href + "'>", -1],
  184. ["separator", -1],
  185. ["<a class='icon-eye-close'></a> Make Private", 0],
  186. ["<a class='icon-lock'></a> Set Password", 1],
  187. ["separator", -1],
  188. ["<a class='icon-twitter'></a> Twitter", 2],
  189. ["<a class='icon-facebook'></a> Facebook", 3],
  190. ["<a class='icon-envelope'></a> Mail", 4],
  191. ];
  192. if (album.json.password==true) items[3] = ["<a class='icon-unlock'></a> Remove Password", 5];
  193. contextMenu.show(items, mouse_x, mouse_y, "left");
  194. $(".contextmenu input").focus();
  195. },
  196. close: function() {
  197. contextMenu.js = null;
  198. $(".contextmenu_bg, .contextmenu").remove();
  199. $(".photo.active, .album.active").removeClass("active");
  200. $("body").css("overflow", "scroll");
  201. }
  202. }