nextcloud-gallery/js/app.js

120 lines
3.8 KiB
JavaScript

/**
* Nextcloud - Gallery
*
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Olivier Paroz <galleryapps@oparoz.com>
*
* @copyright Olivier Paroz 2017
*/
/* global OC, $, _, Gallery, SlideShow */
$(document).ready(function () {
"use strict";
Gallery.utility = new Gallery.Utility();
Gallery.view = new Gallery.View();
Gallery.token = Gallery.utility.getPublicToken();
Gallery.ieVersion = Gallery.utility.getIeVersion();
Gallery.filesClient = new OC.Files.Client({
host: Gallery.utility.getWebdavHost(),
port: OC.getPort(),
root: Gallery.utility.getWebdavRoot(),
useHTTPS: OC.getProtocol() === 'https'
});
// The first thing to do is to detect if we're on IE
if (Gallery.ieVersion === 'unsupportedIe') {
Gallery.utility.showIeWarning(Gallery.ieVersion);
Gallery.view.showEmptyFolder('', null);
} else {
if (Gallery.ieVersion === 'oldIe') {
Gallery.utility.showIeWarning(Gallery.ieVersion);
}
// Get the config, the files and initialise the slideshow
Gallery.view.showLoading();
$.getJSON(Gallery.utility.buildGalleryUrl('config', '', {}))
.then(function (config) {
Gallery.config = new Gallery.Config(config);
var currentLocation = window.location.href.split('#')[1] || '';
Gallery.activeSlideShow = new SlideShow();
$.when(
Gallery.activeSlideShow.init(
false,
null,
Gallery.config.galleryFeatures
))
.then(function () {
Gallery.getFiles(currentLocation).then(function () {
window.onhashchange();
});
});
});
$(document).click(function () {
$('.album-info-container').slideUp();
});
// This block loads new rows
$(window).scroll(function () {
Gallery.view.loadVisibleRows(Gallery.albumMap[Gallery.currentAlbum]);
});
var windowWidth = $(window).width();
var windowHeight = $(window).height();
$(window).resize(_.throttle(function () {
var infoContentContainer = $('.album-info-container');
// This section redraws the photowall and limits the width of dropdowns
if (windowWidth !== $(window).width()) {
if ($('#emptycontent').is(':hidden')) {
Gallery.view.viewAlbum(Gallery.currentAlbum);
infoContentContainer.css('max-width', $(window).width());
}
if (Gallery.currentAlbum) {
Gallery.view.breadcrumb.setMaxWidth($(window).width() - Gallery.buttonsWidth);
}
windowWidth = $(window).width();
}
// This makes sure dropdowns will not be hidden after a window resize
if (windowHeight !== $(window).height()) {
infoContentContainer.css('max-height',
$(window).height() - Gallery.browserToolbarHeight);
windowHeight = $(window).height();
}
}, 250)); // A shorter delay avoids redrawing the view in the middle of a previous request,
// but it may kill baby CPUs
}
});
/**
* Responsible to refresh the view when we detect a change of location via the browser URL
*/
window.onhashchange = function () {
"use strict";
Gallery.view.dimControls();
var currentLocation = window.location.href.split('#')[1] || '';
// The hash location is ALWAYS encoded, despite what the browser shows
var path = decodeURIComponent(currentLocation);
// This section tries to determine if the hash location points to a file or a folder
var albumPath = OC.dirname(path);
if (Gallery.albumMap[path]) {
albumPath = path;
} else if (!Gallery.albumMap[albumPath]) {
albumPath = '';
}
// We need to get new files if we've assessed that we've changed folder
if (Gallery.currentAlbum !== null && Gallery.currentAlbum !== albumPath) {
Gallery.getFiles(currentLocation).done(function () {
Gallery.refresh(path, albumPath);
});
} else {
// When the gallery is first loaded, the files have already been fetched
Gallery.refresh(path, albumPath);
}
};