2011-07-07 02:26:07 +02:00

1 line
11 KiB
JavaScript

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