123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- /**
- * @description This module provides the basic functions of Lychee.
- * @copyright 2014 by Tobias Reich
- */
- lychee = {
- title: '',
- version: '2.7.0',
- version_code: '020700',
- api_path: 'php/api.php',
- update_path: 'http://lychee.electerious.com/version/index.php',
- updateURL: 'https://github.com/electerious/Lychee',
- website: 'http://lychee.electerious.com',
- publicMode: false,
- viewMode: false,
- debugMode: false,
- checkForUpdates:false,
- username: '',
- sorting: '',
- location: '',
- dropbox: false,
- dropboxKey: '',
- loadingBar: $('#loading'),
- header: $('header'),
- content: $('#content'),
- imageview: $('#imageview'),
- infobox: $('#infobox')
- }
- lychee.init = function() {
- var params;
- params = 'init&version=' + lychee.version_code;
- lychee.api(params, function(data) {
- if (data.loggedIn!==true) {
- lychee.setMode('public');
- } else {
- lychee.username = data.config.username || '';
- lychee.sorting = data.config.sorting || '';
- lychee.dropboxKey = data.config.dropboxKey || '';
- lychee.location = data.config.location || '';
- }
- // No configuration
- if (data==='Warning: No configuration!') {
- lychee.header.hide();
- lychee.content.hide();
- $('body').append(build.no_content('cog'));
- settings.createConfig();
- return true;
- }
- // No login
- if (data.config.login===false) {
- settings.createLogin();
- }
- lychee.checkForUpdates = data.config.checkForUpdates;
- $(window).bind('popstate', lychee.load);
- lychee.load();
- });
- }
- lychee.api = function(params, callback) {
- loadingBar.show();
- $.ajax({
- type: 'POST',
- url: lychee.api_path,
- data: 'function=' + params,
- dataType: 'text',
- success: function(data) {
- setTimeout(function() { loadingBar.hide() }, 100);
- // Catch errors
- if (typeof data==='string'&&
- data.substring(0, 7)==='Error: ') {
- lychee.error(data.substring(7, data.length), params, data);
- upload.close(true);
- return false;
- }
- // Convert 1 to true and an empty string to false
- if (data==='1') data = true;
- else if (data==='') data = false;
- // Convert to JSON if string start with '{' and ends with '}'
- if (typeof data==='string'&&
- data.substring(0, 1)==='{'&&
- data.substring(data.length-1, data.length)==='}') data = $.parseJSON(data);
- // Output response when debug mode is enabled
- if (lychee.debugMode) console.log(data);
- callback(data);
- },
- error: function(jqXHR, textStatus, errorThrown) {
- lychee.error('Server error or API not found.', params, errorThrown);
- upload.close(true);
- }
- });
- }
- lychee.login = function() {
- var user = $('input#username').val(),
- password = md5($('input#password').val()),
- params;
- params = 'login&user=' + user + '&password=' + password;
- lychee.api(params, function(data) {
- if (data===true) {
- // Use 'try' to catch a thrown error when Safari is in private mode
- try { localStorage.setItem('lychee_username', user); }
- catch (err) {}
- window.location.reload();
- } else {
- // Show error and reactive button
- $('#password').val('').addClass('error').focus();
- $('.message .button.active').removeClass('pressed');
- }
- });
- }
- lychee.loginDialog = function() {
- var local_username;
- $('body').append(build.signInModal());
- $('#username').focus();
- if (localStorage) {
- local_username = localStorage.getItem('lychee_username');
- if (local_username!==null) {
- if (local_username.length>0) $('#username').val(local_username);
- $('#password').focus();
- }
- }
- if (lychee.checkForUpdates==='1') lychee.getUpdate();
- }
- lychee.logout = function() {
- lychee.api('logout', function() {
- window.location.reload();
- });
- }
- lychee.goto = function(url) {
- if (url===undefined) url = '#';
- else url = '#' + url;
- history.pushState(null, null, url);
- lychee.load();
- }
- lychee.load = function() {
- var albumID = '',
- photoID = '',
- hash = document.location.hash.replace('#', '').split('/');
- $('.no_content').remove();
- contextMenu.close();
- multiselect.close();
- if (hash[0]!==undefined) albumID = hash[0];
- if (hash[1]!==undefined) photoID = hash[1];
- if (albumID&&photoID) {
- // Trash data
- photo.json = null;
- // Show Photo
- if (lychee.content.html()===''||
- ($('#search').length&&$('#search').val().length!==0)) {
- lychee.content.hide();
- album.load(albumID, true);
- }
- photo.load(photoID, albumID);
- } else if (albumID) {
- // Trash data
- photo.json = null;
- // Show Album
- if (visible.photo()) view.photo.hide();
- if (album.json&&albumID==album.json.id) view.album.title();
- else album.load(albumID);
- } else {
- // Trash albums.json when filled with search results
- if (search.code!=='') {
- albums.json = null;
- search.code = '';
- }
- // Trash data
- album.json = null;
- photo.json = null;
- // Show Albums
- if (visible.album()) view.album.hide();
- if (visible.photo()) view.photo.hide();
- albums.load();
- }
- }
- lychee.getUpdate = function() {
- $.ajax({
- url: lychee.update_path,
- success: function(data) { if (parseInt(data)>parseInt(lychee.version_code)) $('#version span').show(); }
- });
- }
- lychee.setTitle = function(title, editable) {
- if (lychee.title==='') lychee.title = document.title;
- if (title==='Albums') document.title = lychee.title;
- else document.title = lychee.title + ' - ' + title;
- if (editable) $('#title').addClass('editable');
- else $('#title').removeClass('editable');
- $('#title').html(title);
- }
- lychee.setMode = function(mode) {
- $('#button_settings, #button_settings, #button_search, #search, #button_trash_album, #button_share_album, .button_add, .button_divider').remove();
- $('#button_trash, #button_move, #button_share, #button_star').remove();
- $(document)
- .on('mouseenter', '#title.editable', function() { $(this).removeClass('editable') })
- .off('click', '#title.editable')
- .off('touchend', '#title.editable')
- .off('contextmenu', '.photo')
- .off('contextmenu', '.album')
- .off('drop');
- Mousetrap
- .unbind(['u', 'ctrl+u'])
- .unbind(['s', 'ctrl+s'])
- .unbind(['f', 'ctrl+f'])
- .unbind(['r', 'ctrl+r'])
- .unbind(['d', 'ctrl+d'])
- .unbind(['t', 'ctrl+t'])
- .unbind(['command+backspace', 'ctrl+backspace'])
- .unbind(['command+a', 'ctrl+a']);
- if (mode==='public') {
- $('header #button_signin, header #hostedwith').show();
- lychee.publicMode = true;
- } else if (mode==='view') {
- Mousetrap.unbind('esc');
- $('#button_back, a#next, a#previous').remove();
- $('.no_content').remove();
- lychee.publicMode = true;
- lychee.viewMode = true;
- }
- }
- lychee.animate = function(obj, animation) {
- var animations = [
- ['fadeIn', 'fadeOut'],
- ['contentZoomIn', 'contentZoomOut']
- ];
- if (!obj.jQuery) obj = $(obj);
- for (var 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;
- }
- lychee.escapeHTML = function(s) {
- return s.replace(/&/g, '&')
- .replace(/"/g, '"')
- .replace(/</g, '<')
- .replace(/>/g, '>');
- }
- lychee.loadDropbox = function(callback) {
- if (!lychee.dropbox&&lychee.dropboxKey) {
- loadingBar.show();
- var g = document.createElement('script'),
- s = document.getElementsByTagName('script')[0];
- g.src = 'https://www.dropbox.com/static/api/1/dropins.js';
- g.id = 'dropboxjs';
- g.type = 'text/javascript';
- g.async = 'true';
- g.setAttribute('data-app-key', lychee.dropboxKey);
- g.onload = g.onreadystatechange = function() {
- var rs = this.readyState;
- if (rs&&rs!=='complete'&&rs!=='loaded') return;
- lychee.dropbox = true;
- loadingBar.hide();
- callback();
- };
- s.parentNode.insertBefore(g, s);
- } else if (lychee.dropbox&&lychee.dropboxKey) {
- callback();
- } else {
- settings.setDropboxKey(callback);
- }
- }
- lychee.removeHTML = function(html) {
- var tmp = document.createElement('DIV');
- tmp.innerHTML = html;
- return tmp.textContent || tmp.innerText;
- }
- lychee.error = function(errorThrown, params, data) {
- console.error({
- description: errorThrown,
- params: params,
- response: data
- });
- loadingBar.show('error', errorThrown);
- }
|