init.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /**
  2. * @name Init Module
  3. * @copyright 2014 by Tobias Reich
  4. */
  5. $(document).ready(function(){
  6. /* Event Name */
  7. var event_name = (mobileBrowser()) ? "touchend" : "click";
  8. /* Disable ContextMenu */
  9. $(document).bind("contextmenu", function(e) { e.preventDefault() });
  10. /* Tooltips */
  11. if (!mobileBrowser()) $(".tools").tipsy({gravity: 'n', fade: false, delayIn: 0, opacity: 1});
  12. /* Multiselect */
  13. $("#content").on("mousedown", multiselect.show);
  14. $(document).on("mouseup", multiselect.getSelection);
  15. /* Header */
  16. $("#hostedwith").on(event_name, function() { window.open(lychee.website) });
  17. $("#button_signin").on(event_name, lychee.loginDialog);
  18. $("#button_settings").on("click", contextMenu.settings);
  19. $("#button_share").on(event_name, function(e) {
  20. if (photo.json.public==1||photo.json.public==2) contextMenu.sharePhoto(photo.getID(), e);
  21. else photo.setPublic(photo.getID(), e);
  22. });
  23. $("#button_share_album").on(event_name, function(e) {
  24. if (album.json.public==1) contextMenu.shareAlbum(album.getID(), e);
  25. else album.setPublic(album.getID(), e);
  26. });
  27. $("#button_more").on(event_name, function(e) { contextMenu.photoMore(photo.getID(), e) });
  28. $("#button_trash_album").on(event_name, function() { album.delete([album.getID()]) });
  29. $("#button_move").on(event_name, function(e) { contextMenu.move([photo.getID()], e) });
  30. $("#button_trash").on(event_name, function() { photo.delete([photo.getID()]) });
  31. $("#button_info_album").on(event_name, function() { view.infobox.show() });
  32. $("#button_info").on(event_name, function() { view.infobox.show() });
  33. $("#button_archive").on(event_name, function() { album.getArchive(album.getID()) });
  34. $("#button_star").on(event_name, function() { photo.setStar([photo.getID()]) });
  35. /* Search */
  36. $("#search").on("keyup click", function() { search.find($(this).val()) });
  37. /* Clear Search */
  38. $("#clearSearch").on(event_name, function () {
  39. $("#search").focus();
  40. search.reset();
  41. });
  42. /* Back Buttons */
  43. $("#button_back_home").on(event_name, function() { lychee.goto("") });
  44. $("#button_back").on(event_name, function() { lychee.goto(album.getID()) });
  45. /* Image View */
  46. lychee.imageview
  47. .on(event_name, ".arrow_wrapper.previous", photo.previous)
  48. .on(event_name, ".arrow_wrapper.next", photo.next);
  49. /* Infobox */
  50. $("#infobox")
  51. .on(event_name, ".header a", function() { view.infobox.hide() })
  52. .on(event_name, "#edit_title_album", function() { album.setTitle([album.getID()]) })
  53. .on(event_name, "#edit_description_album", function() { album.setDescription(album.getID()) })
  54. .on(event_name, "#edit_title", function() { photo.setTitle([photo.getID()]) })
  55. .on(event_name, "#edit_description", function() { photo.setDescription(photo.getID()) })
  56. .on(event_name, "#edit_tags", function() { photo.editTags([photo.getID()]) })
  57. .on(event_name, "#tags .tag span", function() { photo.deleteTag(photo.getID(), $(this).data('index')) });
  58. /* Keyboard */
  59. Mousetrap
  60. .bind('left', function() { if (visible.photo()) $("#imageview a#previous").click() })
  61. .bind('right', function() { if (visible.photo()) $("#imageview a#next").click() })
  62. .bind(['u', 'ctrl+u'], function() { $("#upload_files").click() })
  63. .bind(['s', 'ctrl+s', 'f', 'ctrl+f'], function(e) {
  64. if (visible.photo()) {
  65. $("#button_star").click();
  66. } else if (visible.albums()) {
  67. e.preventDefault();
  68. $("#search").focus();
  69. }
  70. })
  71. .bind(['r', 'ctrl+r'], function(e) {
  72. e.preventDefault();
  73. if (visible.album()) album.setTitle(album.getID());
  74. else if (visible.photo()) photo.setTitle([photo.getID()]);
  75. })
  76. .bind(['d', 'ctrl+d'], function(e) {
  77. e.preventDefault();
  78. if (visible.photo()) photo.setDescription(photo.getID());
  79. else if (visible.album()) album.setDescription(album.getID());
  80. })
  81. .bind(['t', 'ctrl+t'], function(e) {
  82. if (visible.photo()) {
  83. e.preventDefault();
  84. photo.editTags([photo.getID()]);
  85. }
  86. })
  87. .bind(['i', 'ctrl+i'], function() {
  88. if (visible.infobox()) view.infobox.hide();
  89. else if (visible.multiselect()) return false;
  90. else if (visible.infoboxbutton()) view.infobox.show();
  91. })
  92. .bind(['command+backspace', 'ctrl+backspace'], function() {
  93. if (visible.photo()&&!visible.message()) photo.delete([photo.getID()]);
  94. else if (visible.album()&&!visible.message()) album.delete([album.getID()]);
  95. })
  96. .bind(['command+a', 'ctrl+a'], function() {
  97. if (visible.album()&&!visible.message()) multiselect.selectAll();
  98. else if (visible.albums()&&!visible.message()) multiselect.selectAll();
  99. });
  100. Mousetrap.bindGlobal('enter', function() {
  101. if ($(".message .button.active").length) $(".message .button.active").addClass("pressed").click()
  102. });
  103. Mousetrap.bindGlobal(['esc', 'command+up'], function(e) {
  104. e.preventDefault();
  105. if (visible.message()&&$(".message .close").length>0) modal.close();
  106. else if (visible.contextMenu()) contextMenu.close();
  107. else if (visible.infobox()) view.infobox.hide();
  108. else if (visible.photo()) lychee.goto(album.getID());
  109. else if (visible.album()) lychee.goto("");
  110. else if (visible.albums()&&$("#search").val().length!==0) search.reset();
  111. });
  112. if (mobileBrowser()) {
  113. $(document)
  114. /* Fullscreen on mobile */
  115. .on('touchend', '#image', function(e) {
  116. if (swipe.obj===null||(swipe.offset>=-5&&swipe.offset<=5)) {
  117. if (visible.controls()) view.header.hide(e, 0);
  118. else view.header.show();
  119. }
  120. })
  121. /* Swipe on mobile */
  122. .swipe().on('swipeStart', function() { if (visible.photo()) swipe.start($("#image")) })
  123. .swipe().on('swipeMove', function(e) { if (visible.photo()) swipe.move(e.swipe) })
  124. .swipe().on('swipeEnd', function(e) { if (visible.photo()) swipe.stop(e.swipe, photo.previous, photo.next) });
  125. }
  126. /* Document */
  127. $(document)
  128. /* Login */
  129. .on("keyup", "#password", function() { if ($(this).val().length>0) $(this).removeClass("error") })
  130. /* Header */
  131. .on(event_name, "#title.editable", function() {
  132. if (visible.photo()) photo.setTitle([photo.getID()]);
  133. else album.setTitle([album.getID()]);
  134. })
  135. /* Navigation */
  136. .on("click", ".album", function() { lychee.goto($(this).attr("data-id")) })
  137. .on("click", ".photo", function() { lychee.goto(album.getID() + "/" + $(this).attr("data-id")) })
  138. /* Modal */
  139. .on(event_name, ".message .close", modal.close)
  140. .on(event_name, ".message .button:first", function() { if (modal.fns!==null) modal.fns[0](); if (!visible.signin()) modal.close() })
  141. .on(event_name, ".message .button:last", function() { if (modal.fns!==null) modal.fns[1](); if (!visible.signin()) modal.close() })
  142. /* Add Dialog */
  143. .on(event_name, ".button_add", function(e) { contextMenu.add(e) })
  144. /* Context Menu */
  145. .on("contextmenu", ".photo", function(e) { contextMenu.photo(photo.getID(), e) })
  146. .on("contextmenu", ".album", function(e) { contextMenu.album(album.getID(), e) })
  147. .on(event_name, ".contextmenu_bg", contextMenu.close)
  148. .on("contextmenu", ".contextmenu_bg", contextMenu.close)
  149. /* Infobox */
  150. .on(event_name, "#infobox_overlay", view.infobox.hide)
  151. /* Upload */
  152. .on("change", "#upload_files", function() { modal.close(); upload.start.local(this.files) })
  153. .on(event_name, ".upload_message a.close", upload.close)
  154. .on("dragover", function(e) { e.preventDefault(); }, false)
  155. .on("drop", function(e) {
  156. e.stopPropagation();
  157. e.preventDefault();
  158. // Close open overlays or views which are correlating with the upload
  159. if (visible.photo()) lychee.goto(album.getID());
  160. if (visible.contextMenu()) contextMenu.close();
  161. // Detect if dropped item is a file or a link
  162. if (e.originalEvent.dataTransfer.files.length>0) upload.start.local(e.originalEvent.dataTransfer.files);
  163. else if (e.originalEvent.dataTransfer.getData('Text').length>3) upload.start.url(e.originalEvent.dataTransfer.getData('Text'));
  164. return true;
  165. });
  166. /* Init */
  167. lychee.init();
  168. });