1
0
mirror of https://github.com/lrsjng/h5ai.git synced 2025-09-04 19:45:31 +02:00

Compare commits

..

6 Commits

Author SHA1 Message Date
Lars Jung
490fe36947 Refactored, minor fixes. 2011-06-16 21:20:18 +02:00
Lars Jung
c045f0dc77 Updated readme. 2011-06-16 14:53:38 +02:00
Lars Jung
657f280826 Updated screenshots. 2011-06-16 14:41:38 +02:00
Lars Jung
bf57f4535c Fixes. 2011-06-16 03:06:46 +02:00
Lars Jung
0e5802f0d7 Fixes. 2011-06-16 01:59:52 +02:00
Lars Jung
9ca2b61a9c Fixes. 2011-06-16 01:53:16 +02:00
6 changed files with 225 additions and 182 deletions

View File

@@ -4,21 +4,13 @@ h5ai - a beautified Apache index
Screenshots Screenshots
----------- -----------
<a href="http://repo.larsjung.de/screens/h5ai.png"><img <a href="http://repo.larsjung.de/screens/h5ai-v0.2.1-details.png" target="_blank" style="float: left">
width="400" <img src="http://repo.larsjung.de/screens/h5ai-v0.2.1-details.png" width="400px" alt="screenshot" title="screenshot"/>
src="http://repo.larsjung.de/screens/h5ai.png" </a>
alt="screenshot" <a href="http://repo.larsjung.de/screens/h5ai-v0.2.1-icons.png" target="_blank" style="float: right">
title="screenshot" <img src="http://repo.larsjung.de/screens/h5ai-v0.2.1-icons.png" width="400px" alt="screenshot" title="screenshot" />
style="border: 1px solid #ccc" </a>
/></a> <div style="clear: both"/>
<a href="http://repo.larsjung.de/screens/h5ai-0.2.png"><img
width="400"
src="http://repo.larsjung.de/screens/h5ai-0.2.png"
alt="screenshot"
title="screenshot"
style="border: 1px solid #ccc"
/></a>
Live example Live example
@@ -34,22 +26,31 @@ Install
1. Copy the `h5ai` folder to the web-root directory of your server or alternativly set an alias `/h5ai/` to 1. Copy the `h5ai` folder to the web-root directory of your server or alternativly set an alias `/h5ai/` to
this folder. this folder.
2. Add the content of file `dot.htaccess` to the `.htaccess` file in the directory 2. Add the content of file `dot.htaccess` to the `.htaccess` file in the directory
you want to be indexed (you might have to create this file). This directory and any subdirectories will be you want to be styled (you might have to create this file). This directory and any subdirectories will be
styled. styled by h5ai.
Changelog Changelog
--------- ---------
### v0.2.2
*2011-06-16*
* refactored a lot, added some comments
* included fixes from [NumEricR](http://github.com/NumEricR/h5ai)
* added top/bottom message support, only basicly styled
### v0.2.1 ### v0.2.1
*2011-06-16* *2011-06-16*
* fixed croped filenames * fixed croped filenames
* fixed missing .png extension in header * fixed missing .png extension in header
* removed .html extension from Header-/ReadmeName references in dot.htaccess
* added some color to the links * added some color to the links
* added changelog * added changelog
### v0.2 ### v0.2
*2011-06-15* *2011-06-15*
@@ -59,9 +60,8 @@ Changelog
Author Author
------ ------
Lars Jung [Lars Jung](http://larsjung.de)
[project site](http://github.com/larrrs/h5ai) [h5ai on github](http://github.com/larrrs/h5ai)
[website](http://larsjung.de)
License License

View File

@@ -16,8 +16,8 @@
# h5ai header and footer # h5ai header and footer
################################ ################################
HeaderName /h5ai/header HeaderName /h5ai/header.html
ReadmeName /h5ai/footer ReadmeName /h5ai/footer.html
################################ ################################

View File

@@ -1,6 +1,7 @@
<!-- generated code ends here --> <!-- generated code ends here -->
<div id="empty">empty</div> </section>
<section id="h5ai-bottom"></section> <section id="icons"></section>
<section id="bottom"></section>
</section> </section>
<footer> <footer>
<a id="html5" href="http://www.w3.org/html/logo/" target="_blank" title="HTML5 semantics, storage & CSS3"> <a id="html5" href="http://www.w3.org/html/logo/" target="_blank" title="HTML5 semantics, storage & CSS3">
@@ -9,7 +10,7 @@
<img class="techclass" src="/h5ai/images/html5-storage.png" alt="html5-storage" /> <img class="techclass" src="/h5ai/images/html5-storage.png" alt="html5-storage" />
<img class="techclass" src="/h5ai/images/html5-css3.png" alt="html5-css3" /> <img class="techclass" src="/h5ai/images/html5-css3.png" alt="html5-css3" />
</a> </a>
<a href="http://github.com/larrrs/h5ai" target="_blank" title="h5ai v0.2.1">h5ai</a> <a href="http://github.com/larrrs/h5ai" target="_blank" title="h5ai v0.2.2">h5ai</a>
using using
<a href="http://html5boilerplate.com" target="_blank" title="a rock-solid default for HTML5 awesome">HTML5 Boilerplate</a> <a href="http://html5boilerplate.com" target="_blank" title="a rock-solid default for HTML5 awesome">HTML5 Boilerplate</a>
and and

View File

@@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Index</title> <title>Index - styled with h5ai</title>
<link rel="shortcut icon" href="/h5ai/icons/folder.png" /> <link rel="shortcut icon" href="/h5ai/icons/folder.png" />
<link rel="apple-touch-icon" href="/h5ai/images/folder.png"> <link rel="apple-touch-icon" href="/h5ai/images/folder.png">
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Ubuntu:regular,italic,bold"> <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Ubuntu:regular,italic,bold">
@@ -12,16 +12,17 @@
<nav> <nav>
<ul> <ul>
<li id="domain" class="crumb"><a href="/"><img src="/h5ai/icons/home.png" alt="domain" /><span>domain</span></a></li> <li id="domain" class="crumb"><a href="/"><img src="/h5ai/icons/home.png" alt="domain" /><span>domain</span></a></li>
<li id="icons" class="view"><a href="#"><img src="/h5ai/icons/view-icons.png" alt="view-icons" />icons</a></li> <li id="viewicons" class="view"><a href="#"><img src="/h5ai/icons/view-icons.png" alt="view-icons" />icons</a></li>
<li id="details" class="view" ><a href="#"><img src="/h5ai/icons/view-details.png" alt="view-details" />details</a></li> <li id="viewdetails" class="view" ><a href="#"><img src="/h5ai/icons/view-details.png" alt="view-details" />details</a></li>
</ul> </ul>
<div class="clearfix"></div> <div class="clearfix"></div>
</nav> </nav>
<section id="content"> <section id="content">
<section id="h5ai-top"></section> <section id="top"></section>
<!-- <section id="details">
The following code was generated by apache's autoindex module. It is not valid HTML 5 for the <!--
reason, that 'align' and 'valign' attributes on the td element are obsolete. Both of them are The following code was generated by apache's autoindex module. It is not valid HTML 5 for the
removed via javascript. The actual page should render as perfect HTML 5, even if the produced reason, that 'align' and 'valign' attributes on the td element are obsolete. Both of them are
source is not valid HTML 5. removed via javascript. The actual page should render as perfect HTML 5, even if the produced
--> source is not valid HTML 5.
-->

View File

@@ -21,15 +21,16 @@ a:hover {
nav { nav {
position: fixed; position: fixed;
z-index: 1;
width: 100%; width: 100%;
left: 0px; left: 0;
top: 0px; top: 0;
font-size: 0.85em; font-size: 0.85em;
background-color: rgb(240,240,240); background-color: rgb(240,240,240);
border-bottom: 1px solid rgb(225,225,225); border-bottom: 1px solid rgb(225,225,225);
-webkit-box-shadow: 0px 0px 30px #555; -webkit-box-shadow: 0 0 30px #555;
-moz-box-shadow: 0px 0px 30px #555; -moz-box-shadow: 0 0 30px #555;
box-shadow: 0px 0px 30px #555; box-shadow: 0 0 30px #555;
} }
nav li { nav li {
cursor: pointer; cursor: pointer;
@@ -45,15 +46,14 @@ nav li:hover, nav li:hover a {
opacity: 1.0; opacity: 1.0;
} }
nav a { nav a {
display: block display: block;
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
padding: 4px 10px; padding: 0 10px;
} }
nav img { nav img {
vertical-align: bottom; vertical-align: bottom;
padding-right: 6px; padding: 0 6px 6px 0;
padding-bottom: 6px;
} }
nav li.crumb { nav li.crumb {
float: left; float: left;
@@ -65,47 +65,46 @@ nav li.view {
} }
section#h5ai-top { #top {
display: none; display: none;
padding: 0px 0px 10px 0px; padding-bottom: 10px;
margin: 0px 0px 80px 0px; margin-bottom: 80px;
border-bottom: 1px solid #999; border-bottom: 2px dashed #ddd;
}
#bottom {
display: none;
padding-top: 10px;
margin-top: 80px;
border-top: 2px dashed #ddd;
} }
section#h5ai-bottom { #content {
display: none;
padding: 10px 0px 0px 0px;
margin: 80px 0px 0px 0px;
border-top: 1px solid #999;
}
section#content {
max-width: 980px; max-width: 980px;
margin: 0px auto; margin: 0 auto;
} }
table { #details {
display: none;
}
#details table {
display: block;
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
} }
table { #details tr.entry:hover, #details tr.entry:hover a {
display: block;
}
table tr.entry:hover, table tr.entry:hover a {
background-color: rgb(235,245,250); background-color: rgb(235,245,250);
background-color: #f0f0f0; background-color: #f0f0f0;
color: #e80; color: #e80;
cursor: pointer; cursor: pointer;
} }
table th, table td { #details th, #details td {
padding: 3px 6px; padding: 3px 6px;
text-align: left; text-align: left;
border: none; border: none;
} }
table th { #details th {
padding-bottom: 18px; padding-bottom: 18px;
opacity: 0.4; opacity: 0.4;
-webkit-transition: all 0.2s ease-in-out; -webkit-transition: all 0.2s ease-in-out;
@@ -113,70 +112,68 @@ table th {
-o-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out;
} }
table th.header:hover, table th.header:hover a { #details th.header:hover, #details th.header:hover a {
color: #555; color: #555;
cursor: pointer; cursor: pointer;
opacity: 0.9; opacity: 0.9;
} }
table th a, table th a:visited { #details th a, #details th a:visited {
color: #555; color: #555;
font-weight: normal; font-weight: normal;
} }
table th a img { #details th a img {
width: 12px; width: 12px;
height: 12px; height: 12px;
padding: 0px 8px; padding: 0 8px;
} }
table td { #details td {
border: 1px solid #ddd; border: 1px solid #ddd;
border-left: 0px; border-left: none;
border-right: 0px; border-right: none;
} }
table .icon { #details .icon {
text-align: center; text-align: center;
width: 16px; width: 16px;
} }
table .icon img { #details .icon img {
width: 16px; width: 16px;
height: 16px; height: 16px;
padding-top: 2px; padding-top: 2px;
} }
table .name { #details .name {
width: 682px; width: 682px;
max-width: 682px; max-width: 682px;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
} }
table .date { #details .date {
text-align: right; text-align: right;
width: 160px; width: 160px;
min-width: 160px; min-width: 160px;
white-space: nowrap; white-space: nowrap;
} }
table .size { #details .size {
text-align: right; text-align: right;
width: 70px; width: 70px;
min-width: 70px; min-width: 70px;
white-space: nowrap; white-space: nowrap;
} }
#details .empty {
div#empty {
display: none;
text-align: center; text-align: center;
margin: 50px 0px; margin: 50px 0;
color: #ddd; color: #ddd;
font-size: 5em; font-size: 5em;
font-weight: bold; font-weight: bold;
} }
#box { #icons {
display: none;
padding: 10px; padding: 10px;
border: 1px solid #eee; border: 1px solid #eee;
border-radius: 15px; border-radius: 15px;
} }
#box .entry { #icons .entry {
margin: 8px; margin: 8px;
padding: 8px; padding: 8px;
width: 100px; width: 100px;
@@ -188,41 +185,35 @@ div#empty {
cursor: pointer; cursor: pointer;
border: 1px solid rgba(0,0,0,0); border: 1px solid rgba(0,0,0,0);
} }
#box .entry:hover { #icons .entry:hover {
color: #e80; color: #e80;
border-color: #eee; border-color: #eee;
-webkit-box-shadow: 0px 0px 20px #555; -webkit-box-shadow: 0 0 20px #555;
-moz-box-shadow: 0px 0px 20px #555; -moz-box-shadow: 0 0 20px #555;
box-shadow: 0px 0px 20px #999; box-shadow: 0 0 20px #999;
} }
#box .entry img { #icons .entry img {
width: 48px; width: 48px;
height: 48px; height: 48px;
margin: 0px 0px 8px 0px; margin-bottom: 8px;
}
section#special {
display: none;
text-align: center;
margin: 50px 0px;
} }
footer { footer {
position: fixed; position: fixed;
z-index: 1;
width: 100%; width: 100%;
left: 0px; left: 0;
bottom: 0px; bottom: 0;
padding: 10px 0px; padding: 10px 0;
border-top: 1px solid rgb(225,225,225); border-top: 1px solid rgb(225,225,225);
background-color: rgb(240,240,240); background-color: rgb(240,240,240);
color: #999; color: #999;
font-size: 0.85em; font-size: 0.85em;
text-align: center; text-align: center;
-webkit-box-shadow: 0px 0px 30px #555; -webkit-box-shadow: 0 0 30px #555;
-moz-box-shadow: 0px 0px 30px #555; -moz-box-shadow: 0 0 30px #555;
box-shadow: 0px 0px 30px #555; box-shadow: 0 0 30px #555;
} }
footer a, footer a:visited { footer a, footer a:visited {
color: #555; color: #555;

View File

@@ -1,35 +1,71 @@
( function( $ ) { ( function( $ ) {
/*******************************
* init after dom load
*******************************/
$( function() {
checkViewmode();
addBreadcrumb();
addTopAndBottom();
initViews();
} );
/*******************************
* config
*******************************/
var columnClasses = [ "icon", "name", "date", "size" ]; var columnClasses = [ "icon", "name", "date", "size" ];
var defaultSortOrder = "C=N;O=A" var defaultSortOrder = "C=N;O=A"
var h5aiPath = "/h5ai" var h5aiPath = "/h5ai"
var views = [ "details", "icons" ]; var viewmodes = [ "details", "icons" ];
$( function() {
init();
} );
function init () { /*******************************
* local stored viewmode
*******************************/
convertToHtml5(); function getViewmode() {
addBreadcrumb();
addColumnClasses(); var viewmode = localStorage.getItem( "h5ai.viewmode" );
initTableRows(); if ( $.inArray( viewmode, viewmodes ) ) {
addSortOrderIcons(); return viewmode;
addTopAndBottom(); };
initViews(); return viewmodes[0];
checkView();
}; };
function convertToHtml5() { function setViewmode( viewmode ) {
$( "td" ).removeAttr( "align" ).removeAttr( "valign" ); localStorage.setItem( "h5ai.viewmode", viewmode );
checkViewmode();
}; };
function checkViewmode() {
if ( getViewmode() === "icons" ) {
$( "#details" ).hide();
$( "#icons" ).show();
} else {
$( "#details" ).show();
$( "#icons" ).hide();
}
};
/*******************************
* breadcrumb
*******************************/
function addBreadcrumb() { function addBreadcrumb() {
@@ -42,7 +78,7 @@
var part = parts[idx]; var part = parts[idx];
if ( part !== "" ) { if ( part !== "" ) {
path += part + "/"; path += part + "/";
$ul.append( $( "<li class=\"crumb\"><a href='" + path + "'><img src='" + h5aiPath + "/icons/crumb.png' alt='>' />" + part + "</a></li>" ) ); $ul.append( $( "<li class='crumb'><a href='" + path + "'><img src='" + h5aiPath + "/icons/crumb.png' alt='>' />" + part + "</a></li>" ) );
} }
} }
@@ -55,6 +91,18 @@
}; };
/*******************************
* details view
*******************************/
function convertToHtml5() {
$( "#details td" ).removeAttr( "align" ).removeAttr( "valign" );
};
function getColumnClass( idx ) { function getColumnClass( idx ) {
if ( idx >= 0 && idx < columnClasses.length ) { if ( idx >= 0 && idx < columnClasses.length ) {
@@ -66,7 +114,7 @@
function addColumnClasses() { function addColumnClasses() {
$( "tr" ).each( function () { $( "#details tr" ).each( function () {
var colIdx = 0; var colIdx = 0;
$( this ).find( "th,td" ).each( function () { $( this ).find( "th,td" ).each( function () {
$( this ).addClass( getColumnClass( colIdx ) ); $( this ).addClass( getColumnClass( colIdx ) );
@@ -78,19 +126,19 @@
function initTableRows() { function initTableRows() {
$( "th a" ).closest( "th" ) $( "#details th a" ).closest( "th" )
.addClass( "header" ) .addClass( "header" )
.click( function () { .click( function () {
document.location.href = $( this ).find( "a" ).attr( "href" ); document.location.href = $( this ).find( "a" ).attr( "href" );
} ); } );
$( "td.name a" ).closest( "tr" ) $( "#details td.name a" ).closest( "tr" )
.addClass( "entry" ) .addClass( "entry" )
.click( function () { .click( function () {
document.location.href = $( this ).find( "td.name a" ).attr( "href" ); document.location.href = $( this ).find( "td.name a" ).attr( "href" );
} ); } );
$dataRows = $( "td" ).closest( "tr" ); $dataRows = $( "#details td" ).closest( "tr" );
if ( $dataRows.size() === 0 || $dataRows.size() === 1 && $dataRows.find( "td.name a" ).text() === "Parent Directory" ) { if ( $dataRows.size() === 0 || $dataRows.size() === 1 && $dataRows.find( "td.name a" ).text() === "Parent Directory" ) {
$( "#empty" ).show(); $( "#details" ).append( $( "<div class='empty'>empty</div>" ) );
} }
}; };
@@ -108,88 +156,90 @@
$icon = $( "<img src='" + h5aiPath + "/icons/descending.png' class='sort' alt='descending' />" ); $icon = $( "<img src='" + h5aiPath + "/icons/descending.png' class='sort' alt='descending' />" );
} }
if ( order.indexOf( "C=N" ) >= 0 ) { if ( order.indexOf( "C=N" ) >= 0 ) {
$( "th.name a" ).append( $icon ); $( "#details th.name a" ).append( $icon );
} else if ( order.indexOf( "C=M" ) >= 0 ) { } else if ( order.indexOf( "C=M" ) >= 0 ) {
$( "th.date a" ).prepend( $icon ); $( "#details th.date a" ).prepend( $icon );
} else if ( order.indexOf( "C=S" ) >= 0 ) { } else if ( order.indexOf( "C=S" ) >= 0 ) {
$( "th.size a" ).prepend( $icon ); $( "#details th.size a" ).prepend( $icon );
} }
}; };
function addTopAndBottom() { function initDetailsView() {
$( "#h5ai-top" ).load( "h5ai.top.html", function( response, status, xhr ) { convertToHtml5();
if (status != "error") { addColumnClasses();
$( "#h5ai-top" ).show(); initTableRows();
} addSortOrderIcons();
} );
$( "#h5ai-bottom" ).load( "h5ai.bottom.html", function( response, status, xhr ) {
if (status != "error") {
$( "#h5ai-bottom" ).show();
}
} );
}; };
function checkView() {
if ( getView() === "icons" ) {
$( "#content table" ).hide();
$( "#content #empty" ).hide();
$( "#content #box" ).show();
} else {
$( "#content table" ).show();
$( "#content #empty" ).show();
$( "#content #box" ).hide();
}
};
function getView() { /*******************************
* icons view
var view = localStorage.getItem( "h5ai.view" ); *******************************/
if ( $.inArray( view, views ) ) {
return view;
};
return views[0];
};
function initIconsView() {
function setView( view ) { var $div = $( "<div></div>" );
$( "#details td.name a" ).closest( "tr" ).each( function () {
localStorage.setItem( "h5ai.view", view );
checkView();
};
function initViews() {
var $box = $( "<div id=\"box\"></div>" );
$( "td.name a" ).closest( "tr" ).each( function () {
var $tr = $( this ); var $tr = $( this );
var icon = $tr.find( "td.icon img" ).attr( "src" ).replace( "icon", "image" ); var icon = $tr.find( "td.icon img" ).attr( "src" ).replace( "icon", "image" );
var name = $tr.find( "td.name a" ).text(); var name = $tr.find( "td.name a" ).text();
$( "<div class=\"entry\"></div>" ) $( "<div class=\"entry\"></div>" )
.append( $( "<img src=\"" + icon + "\" />" ) ) .append( $( "<img src='" + icon + "' />" ) )
.append( $( "<div class=\"label\">" + name + "</div>" ) ) .append( $( "<div class='label'>" + name + "</div>" ) )
.click( function () { .click( function () {
document.location.href = $tr.find( "td.name a" ).attr( "href" ); document.location.href = $tr.find( "td.name a" ).attr( "href" );
} ). } ).
appendTo( $box ); appendTo( $div );
} ); } );
$box.append( $( "<div class=\"clearfix\"></div>" ) ); $div.append( $( "<div class='clearfix'></div>" ) );
$( "#content table" ).after( $box ); $( "#icons" ).append( $div );
};
$( "#details" ).closest( "li" )
/*******************************
* init views
*******************************/
function initViews() {
initDetailsView();
initIconsView();
$( "#viewdetails" ).closest( "li" )
.click( function () { .click( function () {
setView( "details" ); setViewmode( "details" );
} ); } );
$( "#icons" ).closest( "li" ) $( "#viewicons" ).closest( "li" )
.click( function () { .click( function () {
setView( "icons" ); setViewmode( "icons" );
} ); } );
}; };
/*******************************
* top and bottom messages
*******************************/
function addTopAndBottom() {
$( "#top" ).load( "h5ai.top.html", function( response, status, xhr ) {
if (status != "error") {
$( "#top" ).show();
}
} );
$( "#bottom" ).load( "h5ai.bottom.html", function( response, status, xhr ) {
if (status != "error") {
$( "#bottom" ).show();
}
} );
};
} )( jQuery ); } )( jQuery );