1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
(function(d){var g=function(){var k=/^(\/(.*\/)*)([^\/]+\/?)$/;this.splitPathname=function(m){if(m==="/"){return["","/"]}var l=k.exec(m);return[l[1],l[3]]}};var e=function(k,m){var l=this;var n={defaultSortOrder:"C=N;O=A",store:{viewmode:"h5ai.viewmode"},icons:{crumb:"/h5ai/images/crumb.png",ascending:"/h5ai/images/ascending.png",descending:"/h5ai/images/descending.png"},customHeader:"h5ai.header.html",customFooter:"h5ai.footer.html",callbacks:{folderClick:[],fileClick:[]},viewmodes:["details","icons"],showTree:false,folderStatus:{},lang:undefined,useBrowserLang:true,setParentFolderLabels:true};this.config=d.extend({},n,k);this.folderClick=function(o){if(typeof o==="function"){this.config.callbacks.folderClick.push(o)}return this};this.fileClick=function(o){if(typeof o==="function"){this.config.callbacks.fileClick.push(o)}return this};this.init=function(){document.title=document.domain+decodeURI(document.location.pathname);this.applyViewmode();this.initBreadcrumb();this.initTopSpace();this.initViews();this.customize();this.localize(m,this.config.lang,this.config.useBrowserLang)};this.triggerFolderClick=function(o){for(idx in this.config.callbacks.folderClick){this.config.callbacks.folderClick[idx].call(window,o)}};this.triggerFileClick=function(o){for(idx in this.config.callbacks.fileClick){this.config.callbacks.fileClick[idx].call(window,o)}};this.getViewmode=function(){var o=localStorage.getItem(this.config.store.viewmode);return d.inArray(o,this.config.viewmodes)>=0?o:this.config.viewmodes[0]};this.applyViewmode=function(o){if(o!==undefined){localStorage.setItem(this.config.store.viewmode,o)}o=this.getViewmode();d("body > nav li.view").hide().removeClass("current");if(this.config.viewmodes.length>1){if(d.inArray("details",this.config.viewmodes)>=0){d("#viewdetails").show()}if(d.inArray("icons",this.config.viewmodes)>=0){d("#viewicons").show()}}if(o==="details"){d("#viewdetails").closest("li").addClass("current");d("#table").hide();d("#extended").addClass("details-view").removeClass("icons-view").show()}else{if(o==="icons"){d("#viewicons").closest("li").addClass("current");d("#table").hide();d("#extended").removeClass("details-view").addClass("icons-view").show()}else{d("#table").show();d("#extended").hide()}}};this.initBreadcrumb=function(){var t=d("#domain");var p=t.closest("ul");t.find("span").text(document.domain);var s=decodeURI(document.location.pathname).split("/");var r="/";for(idx in s){var o=s[idx];if(o!==""){r+=o+"/";var q=f.getPathForFolder(r);p.append(q.updateCrumbHtml())}}};this.initTopSpace=function(){function o(){var p=d("body > nav").height();var q=p+50;d("body").css("margin-top",""+q+"px");d("#tree").css("top",""+q+"px")}d(window).resize(function(){o()});o()};this.initTableView=function(){d("#table td").removeAttr("align").removeAttr("valign")};this.initExtendedView=function(){var s=d("<ul/>");var t=d("#table th");var q=t.eq(1).find("a");var v=t.eq(2).find("a");var p=t.eq(3).find("a");var u=d("<li class='header' />").appendTo(s);d("<a class='icon'></a>").appendTo(u);d("<a class='label' href='"+q.attr("href")+"'><span class='l10n-columnName'>"+q.text()+"</span></a>").appendTo(u);d("<a class='date' href='"+v.attr("href")+"'><span class='l10n-columnLastModified'>"+v.text()+"</span></a>").appendTo(u);d("<a class='size' href='"+p.attr("href")+"'><span class='l10n-columnSize'>"+p.text()+"</span></a>").appendTo(u);var o=document.location.search;if(o===""){o=this.config.defaultSortOrder}var r;if(o.indexOf("O=A")>=0){r=d("<img src='"+this.config.icons.ascending+"' class='sort' alt='ascending' />")}else{r=d("<img src='"+this.config.icons.descending+"' class='sort' alt='descending' />")}if(o.indexOf("C=N")>=0){u.find("a.label").append(r)}else{if(o.indexOf("C=M")>=0){u.find("a.date").prepend(r)}else{if(o.indexOf("C=S")>=0){u.find("a.size").prepend(r)}}}d("#table td").closest("tr").each(function(){var w=f.getPathForTableRow(decodeURI(document.location.pathname),this);s.append(w.updateExtendedHtml())});d("#extended").append(s);if(s.children(".entry:not(.parentfolder)").size()===0){d("#extended").append(d("<div class='empty'>empty</div>"))}d("#extended").addClass("clearfix")};this.initViews=function(){this.initTableView();this.initExtendedView();d("#viewdetails").closest("li").click(function(){l.applyViewmode("details")});d("#viewicons").closest("li").click(function(){l.applyViewmode("icons")})};this.customize=function(){d.ajax({url:this.config.customHeader,dataType:"html",success:function(o){d("#content > header").append(d(o)).show()}});d.ajax({url:this.config.customFooter,dataType:"html",success:function(o){d("#content > footer").prepend(d(o)).show()}})};this.localize=function(q,r,s){if(s===true){var o=navigator.language;if(q[o]!==undefined){r=o}else{if(o.length>2&&q[o.substr(0,2)]!==undefined){r=o.substr(0,2)}}if(r==="en"){r=undefined}}if(q[r]!==undefined){var p=q[r];for(key in p){d(".l10n-"+key).text(p[key])}}}};var h=function(k){this.cache={};this.getPathForFolder=function(l){return this.getCachedPath(new c(k,l))};this.getPathForTableRow=function(m,l){return this.getCachedPath(new c(k,m,l))};this.getCachedPath=function(m){if(m.isParentFolder){return m}var l=this.cache[m.absHref];if(l!==undefined){console.log("cached path:",l.absHref);return l}console.log("new path:",m.absHref);this.cache[m.absHref]=m;return m}};var c=function(l,o,k){var n=this;if(!/\/$/.test(o)){o+="/"}if(k!==undefined){var q=d(k).find("td");var m=q.eq(0).find("img");var p=q.eq(1).find("a");this.parentFolder=o;this.icon16=m.attr("src");this.alt=m.attr("alt");this.label=p.text();this.href=decodeURI(p.attr("href"));this.date=q.eq(2).text();this.size=q.eq(3).text()}else{var r=l.splitPathname(o);this.parentFolder=r[0];this.label=r[1];this.icon16="/h5ai/icons/16x16/folder.png";this.alt="[DIR]";this.href=this.label;this.date="";this.size="";if(this.label==="/"){this.label=document.domain+"/"}}if(/\/$/.test(this.label)){this.label=this.label.slice(0,-1)}this.icon48=this.icon16.replace("16x16","48x48");this.isFolder=(this.alt==="[DIR]");this.isParentFolder=(this.isFolder&&this.label==="Parent Directory");this.absHref=this.isParentFolder?this.href:this.parentFolder+this.href;this.isCurrentFolder=(decodeURI(document.location.pathname)===this.absHref);if(this.isParentFolder&&a.config.setParentFolderLabels){if(this.absHref==="/"){this.label=decodeURI(document.domain)}else{this.label=l.splitPathname(l.splitPathname(this.parentFolder)[0])[1].slice(0,-1)}}this.status=undefined;this.content=undefined;this.html={$crumb:undefined,$extended:undefined,$tree:undefined};this.isEmpty=function(){if(this.content===undefined){return true}for(var s in this.content){if(this.content.hasOwnProperty(s)){return false}}return true};this.updateHtml=function(){this.updateCrumbHtml();this.updateExtendedHtml();this.updateTreeHtml()};this.updateCrumbHtml=function(){var s=d("<li class='crumb' />").data("path",this);try{var u=d("<a href='"+this.absHref+"'><img src='/h5ai/images/crumb.png' alt='>' />"+this.label+"</a>");s.append(u);if(!isNaN(this.status)){if(this.status===200){d("<img class='hint' src='/h5ai/images/page.png' alt='not listable' />").appendTo(u)}else{d("<span class='hint'>("+this.status+")</span>").appendTo(u)}}if(this.isCurrentFolder){s.addClass("current")}}catch(t){console.log("updateCrumbHtml failed",t);d("<span class='fail'>failed</span>").appendTo(s)}if(this.html.$crumb!==undefined){this.html.$crumb.replaceWith(s)}this.html.$crumb=s;return s};this.updateExtendedHtml=function(){var t=d("<li class='entry' />").data("path",this);try{if(this.isFolder){t.addClass("folder").click(function(){a.triggerFolderClick(n)})}else{t.addClass("file").click(function(){a.triggerFileClick(n)})}var v=d("<a href='"+this.href+"' />").appendTo(t);d("<span class='icon small'><img src='"+this.icon16+"' alt='"+this.alt+"' /></span>").appendTo(v);d("<span class='icon big'><img src='"+this.icon48+"' alt='"+this.alt+"' /></span>").appendTo(v);var s=d("<span class='label'>"+this.label+"</span>").appendTo(v);d("<span class='date'>"+this.date+"</span>").appendTo(v);d("<span class='size'>"+this.size+"</span>").appendTo(v);if(this.isParentFolder){if(!a.config.setParentFolderLabels){s.addClass("l10n-parentDirectory")}t.addClass("parentfolder")}if(!isNaN(this.status)){if(this.status===200){t.addClass("page");v.find(".icon.small img").attr("src","/h5ai/icons/16x16/folder-page.png");v.find(".icon.big img").attr("src","/h5ai/icons/48x48/folder-page.png")}else{t.addClass("error");s.append(" ").append(d("<span class='hint'>"+this.status+"</span>"))}}}catch(u){console.log("updateExtendedHtml failed",u);d("<span class='fail'>failed</span>").appendTo(t)}if(this.html.$extended!==undefined){this.html.$extended.replaceWith(t)}this.html.$extended=t;return t};this.updateTreeHtml=function(){var s=d("<div class='entry' />").data("path",this);var w=d("<span class='blank' />").appendTo(s);try{var v=d("<a href='"+this.absHref+"' />").appendTo(s).append(d("<span class='icon'><img src='"+this.icon16+"' /></span>")).append(d("<span class='label'>"+this.label+"</span>"));if(this.isFolder){s.addClass("folder");if(this.status===undefined||!this.isEmpty()){var x=d("<span class='indicator'><img src='/h5ai/images/tree.png' /></span>");if(this.status===undefined){x.addClass("unknown")}else{x.addClass("open")}x.click(function(y){if(x.hasClass("unknown")){j.fetchPath(n.absHref,function(z){s.replaceWith(z.updateTreeHtml())})}else{if(x.hasClass("open")){x.removeClass("open");s.find("> ul.content").slideUp()}else{x.addClass("open");s.find("> ul.content").slideDown()}}});w.replaceWith(x)}if(this.isCurrentFolder){s.addClass("current");v.find(".icon img").attr("src","/h5ai/icons/16x16/folder-open.png")}if(!this.isEmpty()){var t=d("<ul class='content' />").appendTo(s);for(idx in this.content){d("<li />").append(this.content[idx].updateTreeHtml()).appendTo(t)}}if(!isNaN(this.status)){if(this.status===200){v.find(".icon img").attr("src","/h5ai/icons/16x16/folder-page.png");v.append(d("<span class='hint'><img src='/h5ai/images/page.png' /></span>"))}else{s.addClass("error");v.append(d("<span class='hint'>"+this.status+"</span>"))}}}else{s.addClass("file")}}catch(u){console.log("updateTreeHtml failed",u);d("<span class='fail'>failed</span>").appendTo(s)}if(this.html.$tree!==undefined){this.html.$tree.replaceWith(s)}this.html.$tree=s;return s}};var b=function(m,n){var o=this;var l=/^text\/html;h5ai=/;this.init=function(){if(n.config.showTree){this.updatePaths();this.populateTree()}};this.updatePath=function(p){if(p.isFolder&&!p.isParentFolder&&p.status===undefined){this.fetchStatus(p.absHref,function(q){if(q!=="h5ai"){p.status=q}p.updateHtml()})}};this.updatePaths=function(){for(var p in f.cache){this.updatePath(f.cache[p])}};this.populateTree=function(){var r=d("#tree");var q=d("#extended");var p=function(s){if(r.outerWidth()<q.offset().left||s===true){r.stop().animate({left:0})}else{r.stop().animate({left:18-r.outerWidth()})}};r.hover(function(){p(true)},function(){p()});d(window).resize(function(){p()});this.fetchTree(decodeURI(document.location.pathname),function(s){r.append(s.updateTreeHtml());p()})};this.fetchTree=function(q,r,p){this.fetchPath(q,function(t){if(p!==undefined){t.content[p.absHref]=p}var s=m.splitPathname(q)[0];if(s===""){r(t)}else{o.fetchTree(s,r,t)}})};this.fetchPath=function(p,q){this.fetchStatusAndContent(p,false,function(r,s){var t=f.getPathForFolder(p);t.status=r;t.content=s;q(t)})};this.fetchStatusAndContent=function(q,p,r){this.fetchStatus(q,function(s){if(s!=="h5ai"){r(s,{});return}d.ajax({url:q,type:"GET",dataType:"html",error:function(t){r(t.status,{})},success:function(u,t,w){if(!l.test(w.getResponseHeader("Content-Type"))){r(w.status,{});return}var v={};d(u).find("#table td").closest("tr").each(function(){var x=f.getPathForTableRow(q,this);if(x.isFolder&&(!x.isParentFolder||p)){v[x.absHref]=x;o.updatePath(x)}});r("h5ai",v)}})})};var k={};this.fetchStatus=function(p,q){if(n.config.folderStatus[p]!==undefined){q(n.config.folderStatus[p]);return}else{if(k[p]!==undefined){q(k[p]);return}}d.ajax({url:p,type:"HEAD",complete:function(s){var r=s.status;if(r===200&&l.test(s.getResponseHeader("Content-Type"))){r="h5ai"}k[p]=r;q(r)}})}};var i=new g();var f=new h(i);var a=new e(h5aiOptions,h5aiLangs);var j=new b(i,a);d.h5ai={folderClick:a.folderClick,fileClick:a.fileClick};d(function(){a.init();j.init()})})(jQuery); |