123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- /**
- * @name lychee.js
- * @author Philipp Maurer
- * @author Tobias Reich
- * @copyright 2013 by Philipp Maurer, Tobias Reich
- *
- * Lychee Module
- * This module provides the basic functions of Lychee.
- */
- lychee = {
- init: function(api_path, upload_path) {
- this.version = "1.2";
- this.api_path = api_path;
- this.upload_path = upload_path;
- this.update_path = "http://lychee.electerious.com/version/index.php";
- this.updateURL = "https://github.com/electerious/Lychee";
- this.publicMode = false;
- this.checkForUpdates = false;
- this.bitlyUsername = "";
- this.loadingBar = $("#loading");
- this.header = $("header");
- this.headerTitle = $("#title");
- this.content = $("#content");
- this.image_view = $("#image_view");
- this.infobox = $("#infobox");
- },
- ready: function() {
- if (!mobileBrowser()) $(".tools").tipsy({gravity: 'n'});
- if (window.webkitNotifications) window.webkitNotifications.requestPermission();
- lychee.api("init", "json", function(data) {
- lychee.checkForUpdates = data.config.checkForUpdates;
- lychee.bitlyUsername = data.config.bitlyUsername;
- if (!data.loggedIn) lychee.setPublicMode();
- $(window).bind("popstate", lychee.load);
- lychee.load();
- });
- },
- setPublicMode: function() {
- this.publicMode = true;
- $("#button_signout, #search, #button_trash_album, #button_share_album, #button_edit_album, .button_add, #button_archive, .button_divider").remove();
- $("#button_trash, #button_move, #button_edit, #button_share, #button_star").remove();
- $(document)
- .on("mouseenter", "#title.editable", function() { $(this).removeClass("editable") })
- .off(event_name, "#title.editable")
- .off("contextmenu", ".photo")
- .off("contextmenu", ".album")
- .off("drop");
- $("#button_signin").show();
- },
- api: function(params, type, callback, loading) {
- if (loading==undefined) loadingBar.show();
- $.ajax({
- type: "POST",
- url: lychee.api_path,
- data: "function=" + params,
- dataType: type,
- success:
- function(data) {
- $.timer(100, function(){ loadingBar.hide() });
- callback(data);
- },
- error: lychee.error
- });
- },
- showLogin: function() {
- $("body").append(build.signInModal());
- $("#username").focus();
- if (localStorage) {
- local_username = localStorage.getItem("username");
- if (local_username==null) return false;
- if (local_username.length>0) $("#username").val(local_username);
- $("#password").focus();
- }
- if (lychee.checkForUpdates) lychee.update();
- },
- login: function() {
- user = $("input#username").val();
- password = hex_md5($("input#password").val());
- params = "login&user=" + user + "&password=" + password;
- lychee.api(params, "text", function(data) {
- if (data) {
- localStorage.setItem("username", user);
- window.location.reload();
- } else {
- $("#password").val("").addClass("error");
- $(".message .button.active").removeClass("pressed");
- }
- });
- },
- logout: function() {
- lychee.api("logout", "text", function(data) {
- window.location.reload();
- });
- },
- update: function() {
- $.ajax({
- url: lychee.update_path,
- success: function(data) { if (data!=lychee.version) $("#version span").show(); }
- });
- },
- upload: function(files) {
- pre_progress = 0;
- $(".upload_overlay").remove();
- $("body").append(build.uploadModal());
- var formData = new FormData();
- for (var i = 0; i < files.length; i++) formData.append(i, files[i]);
- formData.append("function", "upload");
- if (lychee.content.attr("data-id")=="") formData.append("albumID", 0);
- else formData.append("albumID", lychee.content.attr("data-id"));
- var xhr = new XMLHttpRequest();
- xhr.open('POST', lychee.api_path);
- xhr.onload = function () {
- if (xhr.status===200) {
- $(".progressbar div").css("width", "100%");
- $(".upload_overlay").removeClass("fadeIn").css("opacity", 0);
- $.timer(300,function(){ $(".upload_overlay").remove() });
- if (window.webkitNotifications&&BrowserDetect.browser=="Safari") {
- var popup = window.webkitNotifications.createNotification("", "Upload complete", "You can now manage your new photos.");
- popup.show();
- }
- if (lychee.content.attr("data-id")=="") lychee.goto("a0");
- else photos.load(lychee.content.attr("data-id"));
- }
- };
- xhr.upload.onprogress = function (event) {
- if (event.lengthComputable) {
- var progress = (event.loaded / event.total * 100 | 0);
- if (progress>pre_progress) {
- $(".progressbar div").css("width", progress + "%");
- pre_progress = progress;
- }
- if (progress>=100) $(".progressbar div").css("opacity", 0.2);
- }
- };
- $("#upload_files").val("");
- xhr.send(formData);
- },
- importUrl: function() {
- link = prompt("Please enter the direct link to a photo to import it:", "");
- if (lychee.content.attr("data-id")=="") albumID = 0;
- else albumID = lychee.content.attr("data-id");
- lychee.closeModal();
- if (link.length>3) {
- params = "importUrl&url=" + escape(link) + "&albumID=" + albumID;
- lychee.api(params, "text", function(data) {
- if (data) {
- if (lychee.content.attr("data-id")=="") lychee.goto("a0");
- else photos.load(lychee.content.attr("data-id"));
- } else loadingBar.show("error");
- });
- } else if (link.length>0) loadingBar.show("error", "Error", "Link to short or too long. Please try another one!");
- },
- load: function() {
- contextMenu.close();
- hash = document.location.hash.replace("#", "");
- albumID = "";
- photoID = "";
- if (hash.indexOf("a")!=-1) albumID = hash.split("p")[0].replace("a", ""); else albumID = "";
- if (hash.indexOf("p")!=-1) photoID = hash.split("p")[1]; else photoID = "";
- lychee.content.attr("data-id", albumID);
- lychee.image_view.attr("data-id", photoID);
- if (albumID&&photoID) {
- // Show ImageView
- if (lychee.content.html()==""||($("#search").length&&$("#search").val().length!=0)) {
- lychee.content.hide();
- photos.load(albumID, true);
- }
- photos.loadInfo(photoID, albumID);
- } else if (albumID) {
- // Show Album
- if (visible.infobox) photos.hideInfobox();
- if (!visible.controls()) lychee.showControls();
- if (visible.imageview()) photos.hideView();
- else photos.load(albumID, false);
- } else {
- // Show Albums
- if (visible.infobox) photos.hideInfobox();
- if (!visible.controls()) lychee.showControls();
- if (visible.imageview()) photos.hideView();
- albums.load();
- }
- },
- goto: function(url) {
- document.location.hash = url;
- },
- title: function() {
- return lychee.headerTitle.html().replace($("#title span").html(), "").replace("<span></span>", "");
- },
- showControls: function() {
- clearTimeout($(window).data("timeout"));
- if (visible.imageview()) {
- lychee.image_view.removeClass("full");
- lychee.loadingBar.css("opacity", 1);
- lychee.header.css("margin-Top", "0px");
- if ($("#image_view #image.small").length>0) {
- $("#image_view #image").css({
- marginTop: -1*($("#image_view #image").height()/2)+20
- });
- } else {
- $("#image_view #image").css({
- top: 70,
- right: 30,
- bottom: 30,
- left: 30
- });
- }
- }
- },
- hideControls: function() {
- if (visible.imageview()&&!visible.infobox()) {
- clearTimeout($(window).data("timeout"));
- $(window).data("timeout", setTimeout(function() {
- lychee.image_view.addClass("full");
- lychee.loadingBar.css("opacity", 0);
- lychee.header.css("margin-Top", "-45px");
- if ($("#image_view #image.small").length>0) {
- $("#image_view #image").css({
- marginTop: -1*($("#image_view #image").height()/2)
- });
- } else {
- $("#image_view #image").css({
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- });
- }
- }, 500));
- }
- },
- closeModal: function() {
- $(".message_overlay").removeClass("fadeIn").css("opacity", 0);
- $.timer(300,function(){ $(".message_overlay").remove() });
- },
- animate: function(obj, animation) {
- animations = [
- ["fadeIn", "fadeOut"],
- ["contentZoomIn", "contentZoomOut"]
- ];
- if (!obj.jQuery) obj = $(obj);
- for (i = 0; i < animations.length; i++) {
- for (var x = 0; x < animations[i].length; x++) {
- if (animations[i][x]==animation) {
- obj.removeClass(animations[i][0] + " " + animations[i][1]).addClass(animation);
- return true;
- }
- }
- }
- return false;
- },
- error: function(jqXHR, textStatus, errorThrown) {
- console.log(jqXHR);
- console.log(textStatus);
- console.log(errorThrown);
- loadingBar.show("error", textStatus, errorThrown);
- }
- }
|