lychee/assets/js/contextMenu.js

353 lines
8.6 KiB
JavaScript
Raw Normal View History

/**
* @name ContextMenu Module
* @description This module is used for the context menu.
* @author Tobias Reich
* @copyright 2014 by Tobias Reich
*/
contextMenu = {
fns: null,
show: function(items, mouse_x, mouse_y, orientation) {
2014-01-28 19:44:25 +00:00
contextMenu.close();
$("body")
.css("overflow", "hidden")
.append(build.contextMenu(items));
2014-01-28 19:44:25 +00:00
// Do not leave the screen
if ((mouse_x+$(".contextmenu").outerWidth(true))>$("html").width()) orientation = "left";
2014-02-25 22:37:05 +00:00
if ((mouse_y+$(".contextmenu").outerHeight(true))>$("html").height()) mouse_y -= (mouse_y+$(".contextmenu").outerHeight(true)-$("html").height());
if (mouse_x>$(document).width()) mouse_x = $(document).width();
if (mouse_x<0) mouse_x = 0;
if (mouse_y>$(document).height()) mouse_y = $(document).height();
2014-02-17 15:22:01 +00:00
if (mouse_y<0) mouse_y = 0;
if (orientation==="left") mouse_x -= $(".contextmenu").outerWidth(true);
if (mouse_x===null||
mouse_x===undefined||
2014-02-25 22:37:05 +00:00
isNaN(mouse_x)||
mouse_y===null||
mouse_y===undefined||
2014-02-25 22:37:05 +00:00
isNaN(mouse_y)) {
mouse_x = "10px";
mouse_y = "10px";
}
$(".contextmenu").css({
"top": mouse_y,
"left": mouse_x,
2014-02-25 22:37:05 +00:00
"opacity": 0.98
});
},
add: function(e) {
var mouse_x = e.pageX,
2014-01-28 19:44:25 +00:00
mouse_y = e.pageY - $(document).scrollTop(),
items;
2014-02-17 15:22:01 +00:00
2014-02-04 21:26:06 +00:00
upload.notify();
contextMenu.fns = [
function() { $("#upload_files").click() },
function() { upload.start.url() },
function() { upload.start.dropbox() },
function() { upload.start.server() },
function() { album.add() }
];
items = [
["<a class='icon-picture'></a> Upload Photo", 0],
["separator", -1],
["<a class='icon-link'></a> Import from Link", 1],
["<a class='icon-folder-open'></a> Import from Dropbox", 2],
["<a class='icon-hdd'></a> Import from Server", 3],
["separator", -1],
["<a class='icon-folder-close'></a> New Album", 4]
];
contextMenu.show(items, mouse_x, mouse_y, "left");
},
settings: function(e) {
var mouse_x = e.pageX,
2014-01-28 19:44:25 +00:00
mouse_y = e.pageY - $(document).scrollTop(),
items;
contextMenu.fns = [
function() { settings.setLogin() },
function() { settings.setSorting() },
2014-02-23 21:42:15 +00:00
function() { settings.setDropboxKey() },
2014-02-17 15:22:01 +00:00
function() { window.open(lychee.website, "_newtab"); },
2014-04-22 10:05:43 +00:00
function() { window.open("plugins/check/", "_newtab"); },
function() { lychee.logout() }
];
items = [
["<a class='icon-user'></a> Change Login", 0],
["<a class='icon-sort'></a> Change Sorting", 1],
2014-02-23 21:42:15 +00:00
["<a class='icon-folder-open'></a> Set Dropbox", 2],
["separator", -1],
2014-02-23 21:42:15 +00:00
["<a class='icon-info-sign'></a> About Lychee", 3],
["<a class='icon-dashboard'></a> Diagnostics", 4],
["separator", -1],
["<a class='icon-signout'></a> Sign Out", 5]
];
contextMenu.show(items, mouse_x, mouse_y, "right");
},
album: function(albumID, e) {
var mouse_x = e.pageX,
2014-01-28 19:44:25 +00:00
mouse_y = e.pageY - $(document).scrollTop(),
items;
2014-02-17 15:22:01 +00:00
if (albumID==="0"||albumID==="f"||albumID==="s") return false;
contextMenu.fns = [
function() { album.setTitle([albumID]) },
function() { album.delete([albumID]) }
];
items = [
["<a class='icon-edit'></a> Rename", 0],
["<a class='icon-trash'></a> Delete", 1]
];
contextMenu.show(items, mouse_x, mouse_y, "right");
$(".album[data-id='" + albumID + "']").addClass("active");
},
2014-02-17 15:22:01 +00:00
2014-01-31 20:22:25 +00:00
albumMulti: function(albumIDs, e) {
2014-02-17 15:22:01 +00:00
2014-01-31 20:22:25 +00:00
var mouse_x = e.pageX,
mouse_y = e.pageY - $(document).scrollTop(),
items;
multiselect.stopResize();
contextMenu.fns = [
function() { album.setTitle(albumIDs) },
function() { album.delete(albumIDs) },
];
items = [
["<a class='icon-edit'></a> Rename All", 0],
["<a class='icon-trash'></a> Delete All", 1]
];
contextMenu.show(items, mouse_x, mouse_y, "right");
},
photo: function(photoID, e) {
var mouse_x = e.pageX,
2014-01-28 19:44:25 +00:00
mouse_y = e.pageY - $(document).scrollTop(),
items;
contextMenu.fns = [
2014-01-28 19:44:25 +00:00
function() { photo.setStar([photoID]) },
function() { photo.editTags([photoID]) },
2014-01-28 23:43:06 +00:00
function() { photo.setTitle([photoID]) },
2014-01-28 19:44:25 +00:00
function() { contextMenu.move([photoID], e, "right") },
2014-01-28 23:43:06 +00:00
function() { photo.delete([photoID]) }
];
items = [
["<a class='icon-star'></a> Star", 0],
["<a class='icon-tags'></a> Tags", 1],
["separator", -1],
["<a class='icon-edit'></a> Rename", 2],
["<a class='icon-folder-open'></a> Move", 3],
["<a class='icon-trash'></a> Delete", 4]
];
contextMenu.show(items, mouse_x, mouse_y, "right");
$(".photo[data-id='" + photoID + "']").addClass("active");
},
2014-02-17 15:22:01 +00:00
2014-01-31 19:11:28 +00:00
photoMulti: function(photoIDs, e) {
2014-02-17 15:22:01 +00:00
2014-01-28 19:44:25 +00:00
var mouse_x = e.pageX,
mouse_y = e.pageY - $(document).scrollTop(),
items;
multiselect.stopResize();
contextMenu.fns = [
2014-01-31 19:11:28 +00:00
function() { photo.setStar(photoIDs) },
function() { photo.editTags(photoIDs) },
2014-01-31 19:11:28 +00:00
function() { photo.setTitle(photoIDs) },
function() { contextMenu.move(photoIDs, e, "right") },
function() { photo.delete(photoIDs) }
2014-01-28 19:44:25 +00:00
];
items = [
["<a class='icon-star'></a> Star All", 0],
["<a class='icon-tags'></a> Tag All", 1],
2014-01-28 19:44:25 +00:00
["separator", -1],
["<a class='icon-edit'></a> Rename All", 2],
["<a class='icon-folder-open'></a> Move All", 3],
["<a class='icon-trash'></a> Delete All", 4]
2014-01-28 19:44:25 +00:00
];
contextMenu.show(items, mouse_x, mouse_y, "right");
},
2014-03-26 21:22:25 +00:00
photoMore: function(photoID, e) {
var mouse_x = e.pageX,
mouse_y = e.pageY - $(document).scrollTop(),
items;
contextMenu.fns = [
function() { window.open(photo.getDirectLink(),"_newtab") },
function() { photo.getArchive(photoID) }
];
items = [
["<a class='icon-resize-full'></a> Full Photo", 0],
["<a class='icon-circle-arrow-down'></a> Download", 1]
];
contextMenu.show(items, mouse_x, mouse_y, "right");
},
2014-01-31 19:11:28 +00:00
move: function(photoIDs, e, orientation) {
var mouse_x = e.pageX,
2014-01-28 19:44:25 +00:00
mouse_y = e.pageY - $(document).scrollTop(),
items = [];
2014-01-28 19:44:25 +00:00
contextMenu.close(true);
if (album.getID()!=="0") {
items = [
2014-01-31 19:11:28 +00:00
["Unsorted", 0, "photo.setAlbum([" + photoIDs + "], 0)"],
["separator", -1]
];
}
lychee.api("getAlbums", function(data) {
if (data.num===0) {
items = [["New Album", 0, "album.add()"]];
} else {
$.each(data.content, function(index) {
2014-01-31 19:11:28 +00:00
if (this.id!=album.getID()) items.push([this.title, 0, "photo.setAlbum([" + photoIDs + "], " + this.id + ")"]);
});
}
if (!visible.photo()) contextMenu.show(items, mouse_x, mouse_y, "right");
else contextMenu.show(items, mouse_x, mouse_y, "left");
});
},
sharePhoto: function(photoID, e) {
var mouse_x = e.pageX,
mouse_y = e.pageY,
items;
mouse_y -= $(document).scrollTop();
contextMenu.fns = [
function() { photo.setPublic(photoID) },
function() { photo.share(photoID, 0) },
function() { photo.share(photoID, 1) },
function() { photo.share(photoID, 2) },
function() { photo.share(photoID, 3) },
function() { window.open(photo.getDirectLink(),"_newtab") }
];
2014-02-17 15:22:01 +00:00
link = photo.getViewLink(photoID);
if (photo.json.public==="2") link = location.href;
items = [
["<input readonly id='link' value='" + link + "'>", -1],
["separator", -1],
["<a class='icon-eye-close'></a> Make Private", 0],
["separator", -1],
["<a class='icon-twitter'></a> Twitter", 1],
["<a class='icon-facebook'></a> Facebook", 2],
["<a class='icon-envelope'></a> Mail", 3],
["<a class='icon-hdd'></a> Dropbox", 4],
["<a class='icon-link'></a> Direct Link", 5]
];
contextMenu.show(items, mouse_x, mouse_y, "left");
2014-02-08 21:11:01 +00:00
$(".contextmenu input").focus().select();
},
shareAlbum: function(albumID, e) {
var mouse_x = e.pageX,
mouse_y = e.pageY,
items;
mouse_y -= $(document).scrollTop();
contextMenu.fns = [
function() { album.setPublic(albumID) },
function() { password.set(albumID) },
function() { album.share(0) },
function() { album.share(1) },
function() { album.share(2) },
function() { password.remove(albumID) }
];
items = [
["<input readonly id='link' value='" + location.href + "'>", -1],
["separator", -1],
["<a class='icon-eye-close'></a> Make Private", 0],
["<a class='icon-lock'></a> Set Password", 1],
["separator", -1],
["<a class='icon-twitter'></a> Twitter", 2],
["<a class='icon-facebook'></a> Facebook", 3],
["<a class='icon-envelope'></a> Mail", 4],
];
if (album.json.password==true) items[3] = ["<a class='icon-unlock'></a> Remove Password", 5];
contextMenu.show(items, mouse_x, mouse_y, "left");
2014-02-08 21:11:01 +00:00
$(".contextmenu input").focus().select();
},
2014-01-28 19:44:25 +00:00
close: function(leaveSelection) {
2014-02-17 15:22:01 +00:00
2014-01-28 19:44:25 +00:00
if (!visible.contextMenu()) return false;
2014-02-17 15:22:01 +00:00
2014-01-28 19:44:25 +00:00
contextMenu.fns = [];
2014-02-17 15:22:01 +00:00
$(".contextmenu_bg, .contextmenu").remove();
$("body").css("overflow", "auto");
2014-02-17 15:22:01 +00:00
2014-01-28 19:44:25 +00:00
if (leaveSelection!==true) {
$(".photo.active, .album.active").removeClass("active");
if (visible.multiselect()) multiselect.close();
}
}
2014-02-25 22:37:05 +00:00
};