Files
h5ai/target/h5ai/js/main.js
2011-07-05 01:39:45 +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={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({},j,i);this.folderClick=function(k){if(typeof k==="function"){this.config.callbacks.folderClick.push(k)}return this};this.fileClick=function(k){if(typeof k==="function"){this.config.callbacks.fileClick.push(k)}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(k){for(idx in this.config.callbacks.folderClick){this.config.callbacks.folderClick[idx].call(window,k)}};this.triggerFileClick=function(k){for(idx in this.config.callbacks.fileClick){this.config.callbacks.fileClick[idx].call(window,k)}};this.getViewmode=function(){var k=localStorage.getItem(this.config.store.viewmode);if(g.inArray(k,this.config.viewmodes)>=0){return k}return this.config.viewmodes[0]};this.applyViewmode=function(k){if(k!==undefined){localStorage.setItem(this.config.store.viewmode,k)}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(this.getViewmode()==="details"){g("#viewdetails").closest("li").addClass("current");g("#table").hide();g("#extended").addClass("details-view").removeClass("icons-view").show()}else{if(this.getViewmode()==="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 o=decodeURI(document.location.pathname);var n=o.split("/");var m="/";var l=g("nav ul");for(idx in n){var k=n[idx];if(k!==""){m+=k+"/";l.append(g("<li class='crumb'><a href='"+m+"'><img src='"+this.config.icons.crumb+"' alt='>' />"+k+"</a></li>"))}}g("body > nav .crumb:last").addClass("current");document.title=document.domain+o};this.initTableView=function(){var l=this;function k(m){if(m>=0&&m<l.config.columnClasses.length){return l.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(k(m++))})})};this.initExtendedView=function(){var o=g("<ul/>");var r=g("<li class='header' />").appendTo(o);g("<a class='icon'></a>").appendTo(r);var m=g("th.name a");var q=g("th.date a");var l=g("th.size a");g("<a class='label' href='"+m.attr("href")+"'><span class='l10n-columnName'>"+m.text()+"</span></a>").appendTo(r);g("<a class='date' href='"+q.attr("href")+"'><span class='l10n-columnLastModified'>"+q.text()+"</span></a>").appendTo(r);g("<a class='size' href='"+l.attr("href")+"'><span class='l10n-columnSize'>"+l.text()+"</span></a>").appendTo(r);var k=document.location.search;if(k===""){k=this.config.defaultSortOrder}var n;if(k.indexOf("O=A")>=0){n=g("<img src='"+this.config.icons.ascending+"' class='sort' alt='ascending' />")}else{n=g("<img src='"+this.config.icons.descending+"' class='sort' alt='descending' />")}if(k.indexOf("C=N")>=0){r.find("a.label").append(n)}else{if(k.indexOf("C=M")>=0){r.find("a.date").prepend(n)}else{if(k.indexOf("C=S")>=0){r.find("a.size").prepend(n)}}}g("#table td.name a").closest("tr").each(function(){var z=g(this);var s=z.find("td.icon img");var t=s.attr("src");var v=t.replace("16x16","48x48");var y=s.attr("alt");var A=z.find("td.name a");var C=A.text();var u=A.attr("href");var x=z.find("td.date").text();var D=z.find("td.size").text();var B=g("<li class='entry' />").appendTo(o);if(y==="[DIR]"){B.addClass("folder")}else{B.addClass("file")}var w=g("<a href='"+u+"' />").appendTo(B);g("<span class='icon small'><img src='"+t+"' alt='"+y+"' /></span>").appendTo(w);g("<span class='icon big'><img src='"+v+"' alt='"+y+"' /></span>").appendTo(w);g("<span class='label'>"+C+"</span>").appendTo(w);g("<span class='date'>"+x+"</span>").appendTo(w);g("<span class='size'>"+D+"</span>").appendTo(w)});g("#extended").append(o);$entries=g("#extended .entry");if($entries.size()===0||$entries.size()===1&&$entries.find(".label").text()==="Parent Directory"){g("#extended").append(g("<div class='empty'>empty</div>"))}if($entries.size()>0){$entry0=g($entries.get(0));if($entry0.find(".label").text()==="Parent Directory"){$entry0.find(".label").addClass("l10n-parentDirectory");$entry0.addClass("parentfolder")}}g("#extended").append(g("<div class='clearfix' />"));var p=this;g("#extended .entry.folder").click(function(){p.triggerFolderClick(g(this).find(".label").text())});g("#extended .entry.file").click(function(){p.triggerFileClick(g(this).find(".label").text())})};this.initViews=function(){this.initTableView();this.initExtendedView();var k=this;g("#viewdetails").closest("li").click(function(){k.applyViewmode("details")});g("#viewicons").closest("li").click(function(){k.applyViewmode("icons")})};this.customize=function(){g.ajax({url:this.config.customHeader,dataType:"html",success:function(k){g("#content > header").append(g(k)).show()}});g.ajax({url:this.config.customFooter,dataType:"html",success:function(k){g("#content > footer").prepend(g(k)).show()}})};this.localize=function(m,n,o){if(o===true){var k=navigator.language;if(m[k]!==undefined){n=k}else{if(k.length>2&&m[k.substr(0,2)]!==undefined){n=k.substr(0,2)}}if(n==="en"){n=undefined}}if(m[n]!==undefined){var l=m[n];for(key in l){g(".l10n-"+key).text(l[key])}}}};var c=function(j,l,i){if(!/\/$/.test(l)){l+="/"}if(i!==undefined){var n=g(i).find("td");var k=g(n.get(0)).find("img");var m=g(n.get(1)).find("a");this.parentFolder=l;this.icon16=k.attr("src");this.alt=k.attr("alt");this.label=m.text();this.href=m.attr("href");this.date=g(n.get(2)).text();this.size=g(n.get(3)).text()}else{var o=j.splitPathname(l);this.parentFolder=o[0];this.label=o[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.content=undefined;this.isComplete=function(){if(this.isFolder){if(this.content===undefined){return false}else{if(this.content instanceof Array){for(idx in this.content){if(!this.content[idx].isComplete()){return false}}}}}return true};this.toHtml=function(){var q=g("<div class='entry' />");try{var s=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.absHref===document.location.pathname){s.find(".icon img").attr("src","/h5ai/icons/16x16/folder-open.png");q.addClass("current")}if(this.content instanceof Array){var p=g("<ul class='content' />").appendTo(q);for(idx in this.content){g("<li />").append(this.content[idx].toHtml()).appendTo(p)}}else{if(this.content===undefined){s.append(g("<span class='hint'><img src='/h5ai/images/loading.png' /></span>"))}else{if(this.content===200){s.find(".icon img").attr("src","/h5ai/icons/16x16/folder-page.png");s.append(g("<span class='hint'><img src='/h5ai/images/page.png' /></span>"))}else{s.append(g("<span class='hint error'>"+this.content+"</span>"));q.addClass("notListable")}}}}else{q.addClass("file")}}catch(r){g("<span class='fail'>fail</span>").appendTo(q)}return q}};var h=function(k,m){var j=this;var i=/^text\/html;h5ai=/;this.init=function(){if(m.config.showTree){this.checkCrumb();this.checkCurrentFolder();this.initShifting();this.populateTree()}};this.checkCrumb=function(){g("li.crumb a").each(function(){var n=g(this);var o=n.attr("href");j.checkPathname(o,function(p){if(p!==0){g("<img class='hint' src='/h5ai/images/page.png' alt='not listable' />").appendTo(n);if(p!==200){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");j.checkPathname(p,function(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{if(q!==0){n.addClass("notListable");o.find(".label").append(" ").append(g("<span class='error'>"+q+"</span>"))}}})})};this.shiftTree=function(n){var p=g("#tree");var o=g("#extended");var n=n||false;if(p.outerWidth()<o.offset().left||n){p.stop().animate({left:0})}else{p.stop().animate({left:24-p.outerWidth()})}};this.initShifting=function(){g("#tree").hover(function(){j.shiftTree(true)},function(){j.shiftTree()});g(window).resize(function(){j.shiftTree()})};this.populateTree=function(){var n=g("#tree");n.css({left:-400}).show();this.shiftTree();this.fetchTree(decodeURI(document.location.pathname),function(o){n.empty().append(o.toHtml());j.shiftTree()})};this.fetchTree=function(n,o){this.walkBack(n,function(p){var q=new c(k,p);j.fetchEntriesRecursive(p,function(r){q.content=r;o(q)})})};this.walkBack=function(p,q){var o=k.splitPathname(p);var n=o[0];if(n===""){q(p)}else{this.checkPathname(n,function(r){if(r===0){j.walkBack(n,q)}else{q(p)}})}};this.fetchEntriesRecursive=function(n,o){this.fetchEntries(n,false,function(p){if(p instanceof Array){for(idx in p){(function(q){if(q.isFolder){j.fetchEntriesRecursive(q.absHref,function(r){q.content=r;o(p)})}})(p[idx])}}o(p)})};this.fetchEntries=function(o,n,p){this.checkPathname(o,function(q){console.log("checkPathname",o,q);if(q!==0){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(k,o,this);if(!v.isParentFolder||n){r.push(v)}});p(r)}})})};var l={};this.checkPathname=function(n,o){if(m.config.folderStatus[n]!==undefined){o(m.config.folderStatus[n]);return}if(l[n]!==undefined){o(l[n]);return}g.ajax({url:n,type:"HEAD",complete:function(q){var p=q.status;if(q.status===200&&i.test(q.getResponseHeader("Content-Type"))){p=0}l[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);