init.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /**
  2. * @name Init Module
  3. * @author Tobias Reich
  4. * @copyright 2014 by Tobias Reich
  5. */
  6. $(document).ready(function(){
  7. /* Event Name */
  8. var event_name = (mobileBrowser()) ? "touchend" : "click";
  9. /* Notifications */
  10. if (window.webkitNotifications) window.webkitNotifications.requestPermission();
  11. /* Disable ContextMenu */
  12. $(document).bind("contextmenu", function(e) { e.preventDefault() });
  13. /* Tooltips */
  14. if (!mobileBrowser()) $(".tools").tipsy({gravity: 'n', fade: false, delayIn: 0, opacity: 1});
  15. /* Multiselect */
  16. $("#content").on("mousedown", multiselect.show);
  17. $(document).on("mouseup", multiselect.getSelection);
  18. /* Header */
  19. $("#hostedwith").on(event_name, function() { window.open(lychee.website,"_newtab") });
  20. $("#button_signin").on(event_name, lychee.loginDialog);
  21. $("#button_settings").on(event_name, contextMenu.settings);
  22. $("#button_share").on(event_name, function(e) {
  23. if (photo.json.public==1||photo.json.public==2) contextMenu.sharePhoto(photo.getID(), e);
  24. else photo.setPublic(photo.getID(), e);
  25. });
  26. $("#button_share_album").on(event_name, function(e) {
  27. if (album.json.public==1) contextMenu.shareAlbum(album.getID(), e);
  28. else modal.show("Share Album", "All photos inside this album will be public and visible for everyone. Existing public photos will have the same sharing permission as this album. Are your sure you want to share this album? <input class='text' type='password' placeholder='password (optional)' value=''>", [["Share Album", function() { album.setPublic(album.getID(), e) }], ["Cancel", function() {}]]);
  29. });
  30. $("#button_download").on(event_name, function() { photo.getArchive(photo.getID()) });
  31. $("#button_trash_album").on(event_name, function() { album.delete([album.getID()]) });
  32. $("#button_move").on(event_name, function(e) { contextMenu.move([photo.getID()], e) });
  33. $("#button_trash").on(event_name, function() { photo.delete([photo.getID()]) });
  34. $("#button_info_album").on(event_name, function() { view.infobox.show() });
  35. $("#button_info").on(event_name, function() { view.infobox.show() });
  36. $("#button_archive").on(event_name, function() { album.getArchive(album.getID()) });
  37. $("#button_star").on(event_name, function() { photo.setStar([photo.getID()]) });
  38. /* Search */
  39. $("#search").on("keyup click", function() { search.find($(this).val()) });
  40. /* Clear Search */
  41. $("#clearSearch").on(event_name, function () {
  42. $("#search").focus();
  43. search.reset();
  44. });
  45. /* Back Buttons */
  46. $("#button_back_home").on(event_name, function() { lychee.goto("") });
  47. $("#button_back").on(event_name, function() { lychee.goto(album.getID()) });
  48. /* Image View */
  49. lychee.imageview
  50. .on(event_name, ".arrow_wrapper.previous", function() {
  51. if (album.json&&album.json.content[photo.getID()]&&album.json.content[photo.getID()].previousPhoto!=="") lychee.goto(album.getID() + "/" + album.json.content[photo.getID()].previousPhoto)
  52. })
  53. .on(event_name, ".arrow_wrapper.next", function() {
  54. if (album.json&&album.json.content[photo.getID()]&&album.json.content[photo.getID()].nextPhoto!=="") lychee.goto(album.getID() + "/" + album.json.content[photo.getID()].nextPhoto)
  55. });
  56. /* Infobox */
  57. $("#infobox")
  58. .on(event_name, ".header a", function() { view.infobox.hide() })
  59. .on(event_name, "#edit_title_album", function() { album.setTitle([album.getID()]) })
  60. .on(event_name, "#edit_description_album", function() { album.setDescription(album.getID()) })
  61. .on(event_name, "#edit_title", function() { photo.setTitle([photo.getID()]) })
  62. .on(event_name, "#edit_description", function() { photo.setDescription(photo.getID()) })
  63. .on(event_name, "#edit_tags", function() { photo.editTags([photo.getID()]) })
  64. .on(event_name, "#tags .tag span", function() { photo.deleteTag(photo.getID(), $(this).data('index')) });
  65. /* Keyboard */
  66. Mousetrap
  67. .bind('u', function() { $("#upload_files").click() })
  68. .bind('s', function() { if (visible.photo()) $("#button_star").click() })
  69. .bind('command+backspace', function() { if (visible.photo()&&!visible.message()) photo.delete([photo.getID()]) })
  70. .bind('left', function() { if (visible.photo()) $("#imageview a#previous").click() })
  71. .bind('right', function() { if (visible.photo()) $("#imageview a#next").click() })
  72. .bind('i', function() {
  73. if (visible.infobox()) view.infobox.hide();
  74. else if (!visible.albums()) view.infobox.show();
  75. });
  76. Mousetrap.bindGlobal('enter', function() {
  77. if ($(".message .button.active").length) $(".message .button.active").addClass("pressed").click()
  78. });
  79. Mousetrap.bindGlobal(['esc', 'command+up'], function(e) {
  80. e.preventDefault();
  81. if (visible.message()&&$(".message .close").length>0) modal.close();
  82. else if (visible.contextMenu()) contextMenu.close();
  83. else if (visible.infobox()) view.infobox.hide();
  84. else if (visible.photo()) lychee.goto(album.getID());
  85. else if (visible.album()) lychee.goto("");
  86. else if (visible.albums()&&$("#search").val().length!==0) search.reset();
  87. });
  88. /* Document */
  89. $(document)
  90. /* Login */
  91. .on("keyup", "#password", function() { if ($(this).val().length>0) $(this).removeClass("error") })
  92. /* Header */
  93. .on(event_name, "#title.editable", function() {
  94. if (visible.photo()) photo.setTitle([photo.getID()]);
  95. else album.setTitle([album.getID()]);
  96. })
  97. /* Navigation */
  98. .on("click", ".album", function() { lychee.goto($(this).attr("data-id")) })
  99. .on("click", ".photo", function() { lychee.goto(album.getID() + "/" + $(this).attr("data-id")) })
  100. /* Modal */
  101. .on(event_name, ".message .close", modal.close)
  102. .on(event_name, ".message .button:first", function() { if (modal.fns!=null) modal.fns[0](); if (!visible.signin()) modal.close() })
  103. .on(event_name, ".message .button:last", function() { if (modal.fns!=null) modal.fns[1](); if (!visible.signin()) modal.close() })
  104. /* Add Dialog */
  105. .on(event_name, ".button_add", function(e) { contextMenu.add(e) })
  106. /* Upload */
  107. .on("change", "#upload_files", function() { modal.close(); upload.start.local(this.files) })
  108. /* Context Menu */
  109. .on("contextmenu", ".photo", function(e) { contextMenu.photo(photo.getID(), e) })
  110. .on("contextmenu", ".album", function(e) { contextMenu.album(album.getID(), e) })
  111. .on(event_name, ".contextmenu_bg", contextMenu.close)
  112. .on("contextmenu", ".contextmenu_bg", contextMenu.close)
  113. /* Infobox */
  114. .on(event_name, "#infobox_overlay", view.infobox.hide)
  115. /* Upload */
  116. .on("dragover", function(e) { e.preventDefault(); }, false)
  117. .on("drop", function(e) {
  118. e.stopPropagation();
  119. e.preventDefault();
  120. if (e.originalEvent.dataTransfer.files.length>0) upload.start.local(e.originalEvent.dataTransfer.files);
  121. else if (e.originalEvent.dataTransfer.getData('Text').length>3) upload.start.url(e.originalEvent.dataTransfer.getData('Text'));
  122. return true;
  123. });
  124. /* Init */
  125. lychee.init();
  126. });