(function (window, $, H5AI, config) { H5AI.core = (function () { var $window = $(window), defaults = { store: { viewmode: "h5ai.pref.viewmode", lang: "h5ai.pref.lang" }, callbacks: { pathClick: [] }, rootAbsHref: "/", h5aiAbsHref: "/_h5ai/", customHeader: null, customFooter: null, viewmodes: ["details", "icons"], sortorder: "na", showTree: true, slideTree: true, folderStatus: {}, lang: "en", useBrowserLang: true, setParentFolderLabels: true, linkHoverStates: true, dateFormat: "yyyy-MM-dd HH:mm", showThumbs: false, thumbTypes: ["bmp", "gif", "ico", "image", "jpg", "png", "tiff"], zippedDownload: false, qrCodesSize: null, showFilter: false }, settings = $.extend({}, defaults, config.options), currentDateFormat = settings.dateFormat, extToFileType = (function (types) { var map = {}; $.each(types, function (type, exts) { $.each(exts, function (idx, ext) { map[ext] = type; }); }); return map; }(config.types)), api = function () { return settings.h5aiAbsHref + "php/api.php"; }, image = function (id, noPngExt) { return settings.h5aiAbsHref + "images/" + id + (noPngExt ? "" : ".png"); }, icon = function (id, big) { return settings.h5aiAbsHref + "icons/" + (big ? "48x48" : "16x16") + "/" + id + ".png"; }, viewmode = function (viewmode) { var $viewDetails = $("#viewdetails"), $viewIcons = $("#viewicons"), $extended = $("#extended"); if (viewmode) { amplify.store(settings.store.viewmode, viewmode); } else { viewmode = amplify.store(settings.store.viewmode); } viewmode = $.inArray(viewmode, settings.viewmodes) >= 0 ? viewmode : settings.viewmodes[0]; $viewDetails.add($viewIcons).removeClass("current"); if (viewmode === "details") { $viewDetails.addClass("current"); $extended.addClass("details-view").removeClass("icons-view").show(); } else if (viewmode === "icons") { $viewIcons.addClass("current"); $extended.removeClass("details-view").addClass("icons-view").show(); } else { $extended.hide(); } }, initTopSpace = function () { var $body = $("body"), $tree = $("#tree"), adjustTopSpace = function () { var winHeight = $window.height(), navHeight = $("body > nav").outerHeight(), footerHeight = $("body > footer").outerHeight(), contentSpacing = 50, treeSpacing = 30; $body.css({ "margin-top": navHeight + contentSpacing, "margin-bottom": footerHeight + contentSpacing }); $tree.css({ top: navHeight + treeSpacing, height: winHeight - navHeight - footerHeight - 18 - 2 * treeSpacing }); try { $tree.get(0).updateScrollbar(); } catch (err) {} }; $window.resize(function () { adjustTopSpace(); }); adjustTopSpace(); }, initViews = function () { var $navbar = $("#navbar"), $extended = $("#extended"); $("#table").remove(); if (settings.viewmodes.length > 1) { if ($.inArray("icons", settings.viewmodes) >= 0) { $("
  • view-iconsicons
  • ") .find("img").attr("src", image("view-icons")).end() .click(function () { viewmode("icons"); }) .appendTo($navbar); } if ($.inArray("details", settings.viewmodes) >= 0) { $("
  • view-detailsdetails
  • ") .find("img").attr("src", image("view-details")).end() .click(function () { viewmode("details"); }) .appendTo($navbar); } } // status update $extended.find(".entry a").hover( function () { if ($extended.hasClass("icons-view")) { var $this = $(this); $(".status.default").hide(); $(".status.dynamic") .empty() .append($this.find(".label").clone()) .append($("·")) .append($this.find(".date").clone()) .show(); if (!$this.closest(".entry").hasClass("folder")) { $(".status.dynamic") .append($("·")) .append($this.find(".size").clone()); } } }, function () { $(".status.default").show(); $(".status.dynamic").empty().hide(); } ); }, shiftTree = function (forceVisible, dontAnimate) { var $tree = $("#tree"), $extended = $("#extended"); if ((settings.slideTree && $tree.outerWidth() < $extended.offset().left) || forceVisible) { if (dontAnimate) { $tree.stop().css({ left: 0 }); } else { $tree.stop().animate({ left: 0 }); } } else { if (dontAnimate) { $tree.stop().css({ left: 18 - $tree.outerWidth() }); } else { $tree.stop().animate({ left: 18 - $tree.outerWidth() }); } } }, initTree = function () { $("#tree").hover( function () { shiftTree(true); }, function () { shiftTree(); } ); $window.resize(function () { shiftTree(); }); shiftTree(false, true); }, selectLinks = function (href) { var elements = []; $("a[href^='/']").each(function () { if ($(this).attr("href") === href) { elements.push(this); } }); return $(elements); }, linkHoverStates = function () { if (settings.linkHoverStates) { $("a[href^='/']:not(.linkedHoverStates)").each(function () { var $a = $(this).addClass("linkedHoverStates"), href = $a.attr("href"); $a.hover( function () { selectLinks(href).addClass("hover"); }, function () { selectLinks(href).removeClass("hover"); } ); }); } }, formatDates = function (dateFormat) { if (dateFormat) { currentDateFormat = dateFormat; } $("#extended .entry .date").each(function () { var $this = $(this), time = $this.data("time"), formattedDate = time ? new Date(time).toString(currentDateFormat) : ""; $this.text(formattedDate); }); }, localize = function (langs, lang, useBrowserLang) { var storedLang = amplify.store(settings.store.lang), browserLang, selected, key; if (langs[storedLang]) { lang = storedLang; } else if (useBrowserLang) { browserLang = navigator.language; if (langs[browserLang]) { lang = browserLang; } else if (browserLang.length > 2 && langs[browserLang.substr(0, 2)]) { lang = browserLang.substr(0, 2); } } if (!langs[lang]) { lang = "en"; } selected = langs[lang]; if (selected) { $.each(selected, function (key, value) { $(".l10n-" + key).text(value); }); $(".lang").text(lang); $(".langOption").removeClass("current"); $(".langOption." + lang).addClass("current"); } formatDates(selected.dateFormat || settings.dateFormat); }, initLangSelector = function (langs) { var $langOptions = $("#langSelector .langOptions"), sortedLangsKeys = [], $ul; $.each(langs, function (lang) { sortedLangsKeys.push(lang); }); sortedLangsKeys.sort(); $ul = $("