mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-08-18 11:41:18 +02:00
* fixed problems with XAMPP on Windows (see dot.htaccess comments for instructions)
* fixed tree fade-in-fade-out effect for small displays ([issue #6](http://github.com/lrsjng/h5ai/issues/6)) * added custom scrollbar to tree ([issue #6](http://github.com/lrsjng/h5ai/issues/6)) * fixed broken links caused by URI encoding/decoding ([issue #9](http://github.com/lrsjng/h5ai/issues/9)) * added "empty" to localization (hope Google Translate did a good job here)
This commit is contained in:
47
README.md
47
README.md
@@ -1,36 +1,9 @@
|
|||||||
# h5ai v0.9   ·   a beautified Apache index
|
# h5ai v0.10   ·   a beautified Apache index
|
||||||
|
|
||||||
|
h5ai aims to make browsing files on a Apache HTTP server more comfortable.
|
||||||
## Screenshots
|
See the [live demo](http://larsjung.de/h5ai/sample).
|
||||||
|
For installation instructions and documentation have a look at
|
||||||
<a href="http://larsjung.de/h5ai/sample/screenshots/h5ai-v0.7-details.png" target="_blank">
|
[project page](http://larsjung.de/h5ai).
|
||||||
<img src="http://larsjung.de/h5ai/sample/screenshots/h5ai-v0.7-details.png" width="400px" alt="screenshot" title="details view" style="display: inline" />
|
|
||||||
</a>
|
|
||||||
     
|
|
||||||
<a href="http://larsjung.de/h5ai/sample/screenshots/h5ai-v0.7-icons.png" target="_blank">
|
|
||||||
<img src="http://larsjung.de/h5ai/sample/screenshots/h5ai-v0.7-icons.png" width="400px" alt="screenshot" title="icons view" style="display: inline" />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
|
|
||||||
## Live example
|
|
||||||
|
|
||||||
View a [sample folder](http://larsjung.de/h5ai/sample)
|
|
||||||
*(the files are all empty to save webspace)*
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
Everything you need is located in folder `target`.
|
|
||||||
|
|
||||||
* Copy folder `h5ai` to the web-root directory of your server or alternativly set an alias `/h5ai/` to
|
|
||||||
this folder.
|
|
||||||
* Add the content of file `dot.htaccess` to the `.htaccess` file inside the directory you want to be
|
|
||||||
styled (you might have to create this file). This directory and any subdirectories will be styled by h5ai.
|
|
||||||
* Adjust `options.js` inside the `h5ai` folder to your needs. Defaults will be fine for a start.
|
|
||||||
|
|
||||||
Optionally add `h5ai.header.html` and/or `h5ai.footer.html` files to any of the styled folders to [display
|
|
||||||
custom top or bottom sections](http://larsjung.de/h5ai/sample/customize). The content of those files
|
|
||||||
will be wrapped by `<header>` and `<footer>` tags.
|
|
||||||
|
|
||||||
|
|
||||||
## License and References
|
## License and References
|
||||||
@@ -47,6 +20,16 @@ please respect their rights.
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
### v0.10
|
||||||
|
*2011-07-24*
|
||||||
|
|
||||||
|
* fixed problems with XAMPP on Windows (see dot.htaccess comments for instructions)
|
||||||
|
* fixed tree fade-in-fade-out effect for small displays ([issue #6](http://github.com/lrsjng/h5ai/issues/6))
|
||||||
|
* added custom scrollbar to tree ([issue #6](http://github.com/lrsjng/h5ai/issues/6))
|
||||||
|
* fixed broken links caused by URI encoding/decoding ([issue #9](http://github.com/lrsjng/h5ai/issues/9))
|
||||||
|
* added "empty" to localization (hope Google Translate did a good job here)
|
||||||
|
|
||||||
|
|
||||||
### v0.9
|
### v0.9
|
||||||
*2011-07-18*
|
*2011-07-18*
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@ custom = true
|
|||||||
|
|
||||||
# project
|
# project
|
||||||
project.name = h5ai
|
project.name = h5ai
|
||||||
project.version = 0.9
|
project.version = 0.10
|
||||||
|
|
||||||
|
|
||||||
# src
|
# src
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
# Options +FollowSymLinks
|
# Options +FollowSymLinks
|
||||||
|
|
||||||
|
|
||||||
<IfModule mod_headers.c>
|
<IfModule headers_module>
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# cache images for 52 weeks
|
# cache images for 52 weeks
|
||||||
@@ -25,7 +25,13 @@
|
|||||||
# style auto index
|
# style auto index
|
||||||
################################
|
################################
|
||||||
|
|
||||||
<IfModule mod_autoindex.c>
|
################################
|
||||||
|
# IMPORTANT FOR XAMPP
|
||||||
|
# if you're running XAMPP you might need to replace the
|
||||||
|
# following line with
|
||||||
|
# <IfModule autoindex_color_module>
|
||||||
|
################################
|
||||||
|
<IfModule autoindex_module>
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# uncomment the following line to force directory listing
|
# uncomment the following line to force directory listing
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
#tree {
|
#tree {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: -200px;
|
|
||||||
display: none;
|
display: none;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -12,6 +11,21 @@
|
|||||||
border: 2px solid rgb(210,210,210);
|
border: 2px solid rgb(210,210,210);
|
||||||
border-left: none;
|
border-left: none;
|
||||||
.border-radius ( 0 15px 15px 0 );
|
.border-radius ( 0 15px 15px 0 );
|
||||||
|
|
||||||
|
> .scrollbar {
|
||||||
|
margin: 12px;
|
||||||
|
width: 6px;
|
||||||
|
background-color: rgb(210,210,210);
|
||||||
|
.border-radius( 3px );
|
||||||
|
|
||||||
|
.drag {
|
||||||
|
background-color: rgb(180,180,180);
|
||||||
|
.border-radius( 3px );
|
||||||
|
}
|
||||||
|
&.dragOn .drag {
|
||||||
|
background-color: rgb(150,150,150);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.entry {
|
.entry {
|
||||||
.blank, .indicator {
|
.blank, .indicator {
|
||||||
|
@@ -11,7 +11,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://larsjung.de/h5ai" target="_blank" title="h5ai %BUILD_VERSION%">h5ai %BUILD_VERSION%</a>
|
<a href="http://larsjung.de/h5ai" target="_blank" title="h5ai project page">h5ai %BUILD_VERSION%</a>
|
||||||
<span class="l10n-footerUsing">using</span>
|
<span class="l10n-footerUsing">using</span>
|
||||||
<a href="http://tiheum.deviantart.com/art/Faenza-Icons-173323228" target="_blank" title="icon theme for Gnome">Faenza icons</a>
|
<a href="http://tiheum.deviantart.com/art/Faenza-Icons-173323228" target="_blank" title="icon theme for Gnome">Faenza icons</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
@@ -50,7 +50,7 @@ var H5ai = function ( options, langs, pathCache ) {
|
|||||||
|
|
||||||
this.init = function () {
|
this.init = function () {
|
||||||
|
|
||||||
document.title = document.domain + decodeURI( document.location.pathname );
|
document.title = decodeURI( document.domain + document.location.pathname );
|
||||||
|
|
||||||
this.applyViewmode();
|
this.applyViewmode();
|
||||||
this.initBreadcrumb();
|
this.initBreadcrumb();
|
||||||
@@ -132,7 +132,7 @@ var H5ai = function ( options, langs, pathCache ) {
|
|||||||
var path = pathCache.getPathForFolder( pathname );
|
var path = pathCache.getPathForFolder( pathname );
|
||||||
$ul.append( path.updateCrumbHtml() );
|
$ul.append( path.updateCrumbHtml() );
|
||||||
|
|
||||||
var pathnameParts = decodeURI( document.location.pathname ).split( "/" );
|
var pathnameParts = document.location.pathname.split( "/" );
|
||||||
for ( idx in pathnameParts ) {
|
for ( idx in pathnameParts ) {
|
||||||
var part = pathnameParts[idx];
|
var part = pathnameParts[idx];
|
||||||
if ( part !== "" ) {
|
if ( part !== "" ) {
|
||||||
@@ -165,7 +165,10 @@ var H5ai = function ( options, langs, pathCache ) {
|
|||||||
|
|
||||||
$( "#tree" )
|
$( "#tree" )
|
||||||
.css( "top", "" + ( navHeight + treeSpacing ) + "px" )
|
.css( "top", "" + ( navHeight + treeSpacing ) + "px" )
|
||||||
.css( "max-height", "" + ( winHeight - navHeight - footerHeight - 36 - 2 * treeSpacing ) + "px" );
|
.css( "height", "" + ( winHeight - navHeight - footerHeight - 36 - 2 * treeSpacing ) + "px" );
|
||||||
|
try {
|
||||||
|
$( "#tree" ).get( 0 ).updateScrollbar();
|
||||||
|
} catch ( err ) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
$( window ).resize( function () {
|
$( window ).resize( function () {
|
||||||
@@ -227,15 +230,16 @@ var H5ai = function ( options, langs, pathCache ) {
|
|||||||
|
|
||||||
// entries
|
// entries
|
||||||
$( "#table td" ).closest( "tr" ).each( function () {
|
$( "#table td" ).closest( "tr" ).each( function () {
|
||||||
var path = pathCache.getPathForTableRow( decodeURI( document.location.pathname ), this );
|
var path = pathCache.getPathForTableRow( document.location.pathname, this );
|
||||||
$ul.append( path.updateExtendedHtml() );
|
$ul.append( path.updateExtendedHtml() );
|
||||||
} );
|
} );
|
||||||
|
$( "#table" ).remove();
|
||||||
|
|
||||||
$( "#extended" ).append( $ul );
|
$( "#extended" ).append( $ul );
|
||||||
|
|
||||||
// empty
|
// empty
|
||||||
if ( $ul.children( ".entry:not(.parentfolder)" ).size() === 0 ) {
|
if ( $ul.children( ".entry:not(.parentfolder)" ).size() === 0 ) {
|
||||||
$( "#extended" ).append( $( "<div class='empty'>empty</div>" ) );
|
$( "#extended" ).append( $( "<div class='empty l10n-empty'>empty</div>" ) );
|
||||||
};
|
};
|
||||||
|
|
||||||
// in case of floats
|
// in case of floats
|
||||||
@@ -303,12 +307,9 @@ var H5ai = function ( options, langs, pathCache ) {
|
|||||||
} else if ( browserLang.length > 2 && data[ browserLang.substr( 0, 2 ) ] !== undefined ) {
|
} else if ( browserLang.length > 2 && data[ browserLang.substr( 0, 2 ) ] !== undefined ) {
|
||||||
lang = browserLang.substr( 0, 2 );
|
lang = browserLang.substr( 0, 2 );
|
||||||
};
|
};
|
||||||
if ( lang === "en" ) {
|
|
||||||
lang = undefined;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if ( data[ lang ] !== undefined ) {
|
if ( lang !== "en" && data[ lang ] !== undefined ) {
|
||||||
var selected = data[ lang ];
|
var selected = data[ lang ];
|
||||||
for ( key in selected ) {
|
for ( key in selected ) {
|
||||||
$( ".l10n-" + key ).text( selected[key] );
|
$( ".l10n-" + key ).text( selected[key] );
|
||||||
|
11
src/h5ai/js/inc/jquery.mousewheel.min.js
vendored
Normal file
11
src/h5ai/js/inc/jquery.mousewheel.min.js
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
|
||||||
|
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||||
|
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||||
|
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
|
||||||
|
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
|
||||||
|
*
|
||||||
|
* Version: 3.0.2
|
||||||
|
*
|
||||||
|
* Requires: 1.2.2+
|
||||||
|
*/
|
||||||
|
(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);
|
@@ -28,7 +28,6 @@ var PathCache = function () {
|
|||||||
var path = this.objectToPath( obj );
|
var path = this.objectToPath( obj );
|
||||||
cache[path.absHref] = path;
|
cache[path.absHref] = path;
|
||||||
};
|
};
|
||||||
console.log( "loaded: ", cache );
|
|
||||||
return cache;
|
return cache;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -129,21 +128,21 @@ var Path = function ( pathCache, folder, tableRow ) {
|
|||||||
this.icon16 = $img.attr( "src" );
|
this.icon16 = $img.attr( "src" );
|
||||||
this.alt = $img.attr( "alt" );
|
this.alt = $img.attr( "alt" );
|
||||||
this.label = $a.text();
|
this.label = $a.text();
|
||||||
this.href = decodeURI( $a.attr("href") );
|
this.href = $a.attr("href"); //decodeURI( $a.attr("href") );
|
||||||
this.date = $tds.eq( 2 ).text();
|
this.date = $tds.eq( 2 ).text();
|
||||||
this.size = $tds.eq( 3 ).text();
|
this.size = $tds.eq( 3 ).text();
|
||||||
} else {
|
} else {
|
||||||
var splits = pathCache.splitPathname( folder );
|
var splits = pathCache.splitPathname( folder );
|
||||||
|
|
||||||
this.parentFolder = splits[0];
|
this.parentFolder = splits[0];
|
||||||
this.label = splits[1];
|
this.href = splits[1];
|
||||||
|
this.label = decodeURI( splits[1] );
|
||||||
this.icon16 = "/h5ai/icons/16x16/folder.png";
|
this.icon16 = "/h5ai/icons/16x16/folder.png";
|
||||||
this.alt = "[DIR]";
|
this.alt = "[DIR]";
|
||||||
this.href = this.label;
|
|
||||||
this.date = "";
|
this.date = "";
|
||||||
this.size = "";
|
this.size = "";
|
||||||
if ( this.label === "/" ) {
|
if ( this.label === "/" ) {
|
||||||
this.label = document.domain + "/";
|
this.label = decodeURI( document.domain ) + "/";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -155,14 +154,14 @@ var Path = function ( pathCache, folder, tableRow ) {
|
|||||||
this.isFolder = ( this.alt === "[DIR]" );
|
this.isFolder = ( this.alt === "[DIR]" );
|
||||||
this.isParentFolder = ( this.isFolder && this.label === "Parent Directory" );
|
this.isParentFolder = ( this.isFolder && this.label === "Parent Directory" );
|
||||||
this.absHref = this.isParentFolder ? this.href : this.parentFolder + this.href;
|
this.absHref = this.isParentFolder ? this.href : this.parentFolder + this.href;
|
||||||
this.isCurrentFolder = ( this.absHref === decodeURI( document.location.pathname ) );
|
this.isCurrentFolder = ( this.absHref === document.location.pathname );
|
||||||
this.isDomain = ( this.absHref === "/" );
|
this.isDomain = ( this.absHref === "/" );
|
||||||
|
|
||||||
if ( this.isParentFolder && h5ai.config.setParentFolderLabels ) {
|
if ( this.isParentFolder && h5ai.config.setParentFolderLabels ) {
|
||||||
if ( this.isDomain ) {
|
if ( this.isDomain ) {
|
||||||
this.label = decodeURI( document.domain );
|
this.label = decodeURI( document.domain );
|
||||||
} else {
|
} else {
|
||||||
this.label = pathCache.splitPathname( pathCache.splitPathname( this.parentFolder )[0] )[1].slice( 0, -1 );
|
this.label = decodeURI( pathCache.splitPathname( pathCache.splitPathname( this.parentFolder )[0] )[1].slice( 0, -1 ) );
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -250,7 +249,6 @@ var Path = function ( pathCache, folder, tableRow ) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
} catch( err ) {
|
} catch( err ) {
|
||||||
console.log( "updateCrumbHtml failed", err );
|
|
||||||
$( "<span class='fail'>failed</span>" ).appendTo( $html );
|
$( "<span class='fail'>failed</span>" ).appendTo( $html );
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -269,7 +267,7 @@ var Path = function ( pathCache, folder, tableRow ) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$html.addClass( this.isFolder ? "folder" : "file" );
|
$html.addClass( this.isFolder ? "folder" : "file" );
|
||||||
var $a = $( "<a href='" + this.href + "' />" ).appendTo( $html );
|
var $a = $( "<a href='" + this.absHref + "' />" ).appendTo( $html );
|
||||||
$a.click( $.proxy( function() { this.onClick( "extended" ); }, this ) );
|
$a.click( $.proxy( function() { this.onClick( "extended" ); }, this ) );
|
||||||
$a.hover( $.proxy( function() { this.onHoverIn( "extended" ); }, this ), $.proxy( function() { this.onHoverOut( "extended" ); }, this ) );
|
$a.hover( $.proxy( function() { this.onHoverIn( "extended" ); }, this ), $.proxy( function() { this.onHoverOut( "extended" ); }, this ) );
|
||||||
|
|
||||||
@@ -297,7 +295,6 @@ var Path = function ( pathCache, folder, tableRow ) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
} catch( err ) {
|
} catch( err ) {
|
||||||
console.log( "updateExtendedHtml failed", err );
|
|
||||||
$( "<span class='fail'>failed</span>" ).appendTo( $html );
|
$( "<span class='fail'>failed</span>" ).appendTo( $html );
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -339,16 +336,22 @@ var Path = function ( pathCache, folder, tableRow ) {
|
|||||||
this.status = status;
|
this.status = status;
|
||||||
this.content = content;
|
this.content = content;
|
||||||
this.treeOpen = true;
|
this.treeOpen = true;
|
||||||
this.updateTreeHtml();
|
this.updateTreeHtml( function() {
|
||||||
|
$( "#tree" ).get( 0 ).updateScrollbar();
|
||||||
|
} );
|
||||||
}, this ) );
|
}, this ) );
|
||||||
} else if ( $indicator.hasClass( "open" ) ) {
|
} else if ( $indicator.hasClass( "open" ) ) {
|
||||||
this.treeOpen = false;
|
this.treeOpen = false;
|
||||||
$indicator.removeClass( "open" );
|
$indicator.removeClass( "open" );
|
||||||
$html.find( "> ul.content" ).slideUp();
|
$html.find( "> ul.content" ).slideUp( function() {
|
||||||
|
$( "#tree" ).get( 0 ).updateScrollbar();
|
||||||
|
} );
|
||||||
} else {
|
} else {
|
||||||
this.treeOpen = true;
|
this.treeOpen = true;
|
||||||
$indicator.addClass( "open" );
|
$indicator.addClass( "open" );
|
||||||
$html.find( "> ul.content" ).slideDown();
|
$html.find( "> ul.content" ).slideDown( function() {
|
||||||
|
$( "#tree" ).get( 0 ).updateScrollbar();
|
||||||
|
} );
|
||||||
};
|
};
|
||||||
}, this ) );
|
}, this ) );
|
||||||
$blank.replaceWith( $indicator );
|
$blank.replaceWith( $indicator );
|
||||||
@@ -389,7 +392,6 @@ var Path = function ( pathCache, folder, tableRow ) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
} catch( err ) {
|
} catch( err ) {
|
||||||
console.log( "updateTreeHtml failed", err );
|
|
||||||
$( "<span class='fail'>failed</span>" ).appendTo( $html );
|
$( "<span class='fail'>failed</span>" ).appendTo( $html );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -38,11 +38,19 @@ var Tree = function ( pathCache, h5ai ) {
|
|||||||
|
|
||||||
var $tree = $( "#tree" );
|
var $tree = $( "#tree" );
|
||||||
var $extended = $( "#extended" );
|
var $extended = $( "#extended" );
|
||||||
var shiftTree = function ( show ) {
|
var shiftTree = function ( forceVisible, dontAnimate ) {
|
||||||
if ( $tree.outerWidth() < $extended.offset().left || show === true ) {
|
if ( $tree.outerWidth() < $extended.offset().left || forceVisible === true ) {
|
||||||
$tree.stop().animate( { left: 0 } );
|
if ( dontAnimate === true ) {
|
||||||
|
$tree.stop().css( { left: 0 } );
|
||||||
|
} else {
|
||||||
|
$tree.stop().animate( { left: 0 } );
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
$tree.stop().animate( { left: 18 - $tree.outerWidth() } );
|
if ( dontAnimate === true ) {
|
||||||
|
$tree.stop().css( { left: 18 - $tree.outerWidth() } );
|
||||||
|
} else {
|
||||||
|
$tree.stop().animate( { left: 18 - $tree.outerWidth() } );
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -51,9 +59,11 @@ var Tree = function ( pathCache, h5ai ) {
|
|||||||
shiftTree();
|
shiftTree();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
this.fetchTree( decodeURI( document.location.pathname ), function( path ) {
|
this.fetchTree( document.location.pathname, function( path ) {
|
||||||
$tree.append( path.updateTreeHtml() ).show();
|
$tree.append( path.updateTreeHtml() );
|
||||||
shiftTree();
|
$tree.show();
|
||||||
|
scrollpanel( $tree );
|
||||||
|
shiftTree( false, true );
|
||||||
} );
|
} );
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -151,4 +161,120 @@ var Tree = function ( pathCache, h5ai ) {
|
|||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var scrollpanel = function ( htmlElement ) {
|
||||||
|
|
||||||
|
var $element = $( htmlElement );
|
||||||
|
|
||||||
|
if ( $element.css( "position" ) === undefined || $element.css( "position" ) === "static" ) {
|
||||||
|
$element.css( "position", "relative" );
|
||||||
|
};
|
||||||
|
|
||||||
|
var $scrollbar = $( "<div class='scrollbar' />" );
|
||||||
|
var $drag = $( "<div class='drag' />" ).appendTo( $scrollbar );
|
||||||
|
$element
|
||||||
|
.wrapInner( "<div class='wrapper'><div class='content' /></div>" )
|
||||||
|
.append( $scrollbar );
|
||||||
|
var $wrapper = $element.find( "> .wrapper" );
|
||||||
|
var $content = $wrapper.find( "> .content" );
|
||||||
|
var mouseOffsetY = 0;
|
||||||
|
|
||||||
|
var update = function () {
|
||||||
|
$wrapper.css( "height", $element.height() );
|
||||||
|
var visibleHeight = $element.height();
|
||||||
|
var contentHeight = $content.outerHeight();
|
||||||
|
var scrollTop = $wrapper.scrollTop();
|
||||||
|
var scrollTopFrac = scrollTop / contentHeight;
|
||||||
|
var visVertFrac = Math.min( visibleHeight / contentHeight, 1 );
|
||||||
|
|
||||||
|
if ( visVertFrac < 1 ) {
|
||||||
|
$wrapper.css( "padding-right", $scrollbar.outerWidth( true ) );
|
||||||
|
$scrollbar
|
||||||
|
.show()
|
||||||
|
.css( {
|
||||||
|
height: $element.innerHeight() + $scrollbar.height() - $scrollbar.outerHeight( true )
|
||||||
|
} );
|
||||||
|
$drag
|
||||||
|
.css( {
|
||||||
|
top: $scrollbar.height() * scrollTopFrac,
|
||||||
|
height: $scrollbar.height() * visVertFrac
|
||||||
|
} );
|
||||||
|
} else {
|
||||||
|
$wrapper.css( "padding-right", 0 );
|
||||||
|
$scrollbar.hide()
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var scroll = function ( event ) {
|
||||||
|
var clickFrac = ( event.pageY - $scrollbar.offset().top - mouseOffsetY ) / $scrollbar.height();
|
||||||
|
$wrapper.scrollTop( $content.outerHeight() * clickFrac );
|
||||||
|
update();
|
||||||
|
};
|
||||||
|
|
||||||
|
$element
|
||||||
|
.mousewheel( function ( event, delta) {
|
||||||
|
$wrapper.scrollTop( $wrapper.scrollTop() - 50 * delta );
|
||||||
|
update();
|
||||||
|
event.stopPropagation();
|
||||||
|
event.preventDefault();
|
||||||
|
} )
|
||||||
|
.scroll( update );
|
||||||
|
$element.get( 0 ).updateScrollbar = update;
|
||||||
|
$wrapper
|
||||||
|
.css( {
|
||||||
|
height: $element.height(),
|
||||||
|
overflow: "hidden"
|
||||||
|
} );
|
||||||
|
$scrollbar
|
||||||
|
.css( {
|
||||||
|
position: "absolute",
|
||||||
|
top: 0,
|
||||||
|
right: 0,
|
||||||
|
overflow: "hidden"
|
||||||
|
} )
|
||||||
|
.mousedown( function ( event ) {
|
||||||
|
mouseOffsetY = $drag.outerHeight() / 2;
|
||||||
|
scroll( event );
|
||||||
|
$scrollbar.addClass( "dragOn" );
|
||||||
|
$( window )
|
||||||
|
.bind( "mousemove", scroll )
|
||||||
|
.one( "mouseup", function ( event ) {
|
||||||
|
$scrollbar.removeClass( "dragOn" );
|
||||||
|
$( window ).unbind( "mousemove", scroll );
|
||||||
|
scroll( event );
|
||||||
|
event.stopPropagation();
|
||||||
|
} );
|
||||||
|
event.stopPropagation();
|
||||||
|
} )
|
||||||
|
.attr( "unselectable", "on" )
|
||||||
|
.css( "-moz-user-select", "none" )
|
||||||
|
.each( function () {
|
||||||
|
this.onselectstart = function () {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
} );
|
||||||
|
$drag
|
||||||
|
.css( {
|
||||||
|
position: "absolute",
|
||||||
|
left: 0,
|
||||||
|
width: "100%"
|
||||||
|
} )
|
||||||
|
.mousedown( function ( event ) {
|
||||||
|
mouseOffsetY = event.pageY - $drag.offset().top;
|
||||||
|
scroll( event );
|
||||||
|
$scrollbar.addClass( "dragOn" );
|
||||||
|
$( window )
|
||||||
|
.bind( "mousemove", scroll )
|
||||||
|
.one( "mouseup", function ( event ) {
|
||||||
|
$scrollbar.removeClass( "dragOn" );
|
||||||
|
$( window ).unbind( "mousemove", scroll );
|
||||||
|
scroll( event );
|
||||||
|
event.stopPropagation();
|
||||||
|
} );
|
||||||
|
event.stopPropagation();
|
||||||
|
} );
|
||||||
|
|
||||||
|
update();
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
( function( $ ) {
|
( function( $ ) {
|
||||||
|
|
||||||
// @include "inc/jquery.json.min.js"
|
// @include "inc/jquery.json.min.js"
|
||||||
|
// @include "inc/jquery.mousewheel.min.js"
|
||||||
// @include "inc/path.js"
|
// @include "inc/path.js"
|
||||||
// @include "inc/h5ai.js"
|
// @include "inc/h5ai.js"
|
||||||
// @include "inc/tree.js"
|
// @include "inc/tree.js"
|
||||||
@@ -23,15 +24,6 @@
|
|||||||
click: $.proxy( h5ai.pathClick, h5ai )
|
click: $.proxy( h5ai.pathClick, h5ai )
|
||||||
};
|
};
|
||||||
|
|
||||||
$( ".l10n-footerUsing" ).click( function () {
|
|
||||||
console.log( "clean" );
|
|
||||||
pathCache.cache = {};
|
|
||||||
console.log( "store" );
|
|
||||||
pathCache.storeCache();
|
|
||||||
console.log( "load", pathCache.loadCache() );
|
|
||||||
} );
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
* init after dom load
|
* init after dom load
|
||||||
*******************************/
|
*******************************/
|
||||||
@@ -39,6 +31,13 @@
|
|||||||
$( function() {
|
$( function() {
|
||||||
h5ai.init();
|
h5ai.init();
|
||||||
tree.init();
|
tree.init();
|
||||||
} );
|
|
||||||
|
|
||||||
|
// just for testing, resets the local cache /////////
|
||||||
|
$( ".l10n-footerUsing" ).click( function () {
|
||||||
|
pathCache.cache = {};
|
||||||
|
pathCache.storeCache();
|
||||||
|
} );
|
||||||
|
/////////////////////////////////////////////////////
|
||||||
|
} );
|
||||||
|
|
||||||
} )( jQuery );
|
} )( jQuery );
|
@@ -80,7 +80,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Last modified",
|
columnLastModified: "Last modified",
|
||||||
columnSize: "Size",
|
columnSize: "Size",
|
||||||
footerUsing: "using",
|
footerUsing: "using",
|
||||||
parentDirectory: "Parent Directory"
|
parentDirectory: "Parent Directory",
|
||||||
|
empty: "empty"
|
||||||
},
|
},
|
||||||
|
|
||||||
"de": {
|
"de": {
|
||||||
@@ -90,7 +91,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Geändert",
|
columnLastModified: "Geändert",
|
||||||
columnSize: "Größe",
|
columnSize: "Größe",
|
||||||
footerUsing: "nutzt",
|
footerUsing: "nutzt",
|
||||||
parentDirectory: "Übergeordnetes Verzeichnis"
|
parentDirectory: "Übergeordnetes Verzeichnis",
|
||||||
|
empty: "leer"
|
||||||
},
|
},
|
||||||
|
|
||||||
"fr": {
|
"fr": {
|
||||||
@@ -100,7 +102,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Dernière modification",
|
columnLastModified: "Dernière modification",
|
||||||
columnSize: "Taille",
|
columnSize: "Taille",
|
||||||
footerUsing: "utilise",
|
footerUsing: "utilise",
|
||||||
parentDirectory: "Dossier parent"
|
parentDirectory: "Dossier parent",
|
||||||
|
empty: "vide"
|
||||||
},
|
},
|
||||||
|
|
||||||
"nl": {
|
"nl": {
|
||||||
@@ -110,7 +113,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Laatste wijziging",
|
columnLastModified: "Laatste wijziging",
|
||||||
columnSize: "Grootte",
|
columnSize: "Grootte",
|
||||||
footerUsing: "gebruikt",
|
footerUsing: "gebruikt",
|
||||||
parentDirectory: "Bovenliggende map"
|
parentDirectory: "Bovenliggende map",
|
||||||
|
empty: "lege"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sv": {
|
"sv": {
|
||||||
@@ -120,7 +124,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Senast ändrad",
|
columnLastModified: "Senast ändrad",
|
||||||
columnSize: "Filstorlek",
|
columnSize: "Filstorlek",
|
||||||
footerUsing: "använder",
|
footerUsing: "använder",
|
||||||
parentDirectory: "Till överordnad mapp"
|
parentDirectory: "Till överordnad mapp",
|
||||||
|
empty: "tom"
|
||||||
},
|
},
|
||||||
|
|
||||||
"cs": {
|
"cs": {
|
||||||
@@ -130,7 +135,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Upraveno",
|
columnLastModified: "Upraveno",
|
||||||
columnSize: "Velikost",
|
columnSize: "Velikost",
|
||||||
footerUsing: "používá",
|
footerUsing: "používá",
|
||||||
parentDirectory: "Nadřazený adresář"
|
parentDirectory: "Nadřazený adresář",
|
||||||
|
empty: "prázdný"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sk": {
|
"sk": {
|
||||||
@@ -140,7 +146,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Upravené",
|
columnLastModified: "Upravené",
|
||||||
columnSize: "Velkosť",
|
columnSize: "Velkosť",
|
||||||
footerUsing: "používá",
|
footerUsing: "používá",
|
||||||
parentDirectory: "Nadriadený priečinok"
|
parentDirectory: "Nadriadený priečinok",
|
||||||
|
empty: "prázdny"
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
################################
|
################################
|
||||||
# h5ai 0.9
|
# h5ai 0.10
|
||||||
# customized .htaccess
|
# customized .htaccess
|
||||||
################################
|
################################
|
||||||
|
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
# Options +FollowSymLinks
|
# Options +FollowSymLinks
|
||||||
|
|
||||||
|
|
||||||
<IfModule mod_headers.c>
|
<IfModule headers_module>
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# cache images for 52 weeks
|
# cache images for 52 weeks
|
||||||
@@ -25,7 +25,13 @@
|
|||||||
# style auto index
|
# style auto index
|
||||||
################################
|
################################
|
||||||
|
|
||||||
<IfModule mod_autoindex.c>
|
################################
|
||||||
|
# IMPORTANT FOR XAMPP
|
||||||
|
# if you're running XAMPP you might need to replace the
|
||||||
|
# following line with
|
||||||
|
# <IfModule autoindex_color_module>
|
||||||
|
################################
|
||||||
|
<IfModule autoindex_module>
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# uncomment the following line to force directory listing
|
# uncomment the following line to force directory listing
|
||||||
@@ -56,7 +62,7 @@
|
|||||||
|
|
||||||
IndexOrderDefault Ascending Name
|
IndexOrderDefault Ascending Name
|
||||||
|
|
||||||
IndexOptions Type=text/html;h5ai=0.9
|
IndexOptions Type=text/html;h5ai=0.10
|
||||||
IndexOptions Charset=UTF-8
|
IndexOptions Charset=UTF-8
|
||||||
IndexOptions FancyIndexing
|
IndexOptions FancyIndexing
|
||||||
IndexOptions HTMLTable
|
IndexOptions HTMLTable
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -11,7 +11,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://larsjung.de/h5ai" target="_blank" title="h5ai 0.9">h5ai 0.9</a>
|
<a href="http://larsjung.de/h5ai" target="_blank" title="h5ai project page">h5ai 0.10</a>
|
||||||
<span class="l10n-footerUsing">using</span>
|
<span class="l10n-footerUsing">using</span>
|
||||||
<a href="http://tiheum.deviantart.com/art/Faenza-Icons-173323228" target="_blank" title="icon theme for Gnome">Faenza icons</a>
|
<a href="http://tiheum.deviantart.com/art/Faenza-Icons-173323228" target="_blank" title="icon theme for Gnome">Faenza icons</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Directory index · styled with h5ai</title>
|
<title>Directory index · styled with h5ai</title>
|
||||||
<meta name="h5ai-version" content="h5ai 0.9">
|
<meta name="h5ai-version" content="h5ai 0.10">
|
||||||
<meta name="description" content="Directory index styled with h5ai (http://larsjung.de/h5ai)">
|
<meta name="description" content="Directory index styled with h5ai (http://larsjung.de/h5ai)">
|
||||||
<meta name="keywords" content="directory, index, autoindex, h5ai">
|
<meta name="keywords" content="directory, index, autoindex, h5ai">
|
||||||
<link rel="shortcut icon" type="image/png" href="/h5ai/images/h5ai-16x16.png">
|
<link rel="shortcut icon" type="image/png" href="/h5ai/images/h5ai-16x16.png">
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* h5ai 0.9
|
* h5ai 0.10
|
||||||
* Options and localization
|
* Options and localization
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -80,7 +80,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Last modified",
|
columnLastModified: "Last modified",
|
||||||
columnSize: "Size",
|
columnSize: "Size",
|
||||||
footerUsing: "using",
|
footerUsing: "using",
|
||||||
parentDirectory: "Parent Directory"
|
parentDirectory: "Parent Directory",
|
||||||
|
empty: "empty"
|
||||||
},
|
},
|
||||||
|
|
||||||
"de": {
|
"de": {
|
||||||
@@ -90,7 +91,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Geändert",
|
columnLastModified: "Geändert",
|
||||||
columnSize: "Größe",
|
columnSize: "Größe",
|
||||||
footerUsing: "nutzt",
|
footerUsing: "nutzt",
|
||||||
parentDirectory: "Übergeordnetes Verzeichnis"
|
parentDirectory: "Übergeordnetes Verzeichnis",
|
||||||
|
empty: "leer"
|
||||||
},
|
},
|
||||||
|
|
||||||
"fr": {
|
"fr": {
|
||||||
@@ -100,7 +102,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Dernière modification",
|
columnLastModified: "Dernière modification",
|
||||||
columnSize: "Taille",
|
columnSize: "Taille",
|
||||||
footerUsing: "utilise",
|
footerUsing: "utilise",
|
||||||
parentDirectory: "Dossier parent"
|
parentDirectory: "Dossier parent",
|
||||||
|
empty: "vide"
|
||||||
},
|
},
|
||||||
|
|
||||||
"nl": {
|
"nl": {
|
||||||
@@ -110,7 +113,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Laatste wijziging",
|
columnLastModified: "Laatste wijziging",
|
||||||
columnSize: "Grootte",
|
columnSize: "Grootte",
|
||||||
footerUsing: "gebruikt",
|
footerUsing: "gebruikt",
|
||||||
parentDirectory: "Bovenliggende map"
|
parentDirectory: "Bovenliggende map",
|
||||||
|
empty: "lege"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sv": {
|
"sv": {
|
||||||
@@ -120,7 +124,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Senast ändrad",
|
columnLastModified: "Senast ändrad",
|
||||||
columnSize: "Filstorlek",
|
columnSize: "Filstorlek",
|
||||||
footerUsing: "använder",
|
footerUsing: "använder",
|
||||||
parentDirectory: "Till överordnad mapp"
|
parentDirectory: "Till överordnad mapp",
|
||||||
|
empty: "tom"
|
||||||
},
|
},
|
||||||
|
|
||||||
"cs": {
|
"cs": {
|
||||||
@@ -130,7 +135,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Upraveno",
|
columnLastModified: "Upraveno",
|
||||||
columnSize: "Velikost",
|
columnSize: "Velikost",
|
||||||
footerUsing: "používá",
|
footerUsing: "používá",
|
||||||
parentDirectory: "Nadřazený adresář"
|
parentDirectory: "Nadřazený adresář",
|
||||||
|
empty: "prázdný"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sk": {
|
"sk": {
|
||||||
@@ -140,7 +146,8 @@ h5aiLangs = {
|
|||||||
columnLastModified: "Upravené",
|
columnLastModified: "Upravené",
|
||||||
columnSize: "Velkosť",
|
columnSize: "Velkosť",
|
||||||
footerUsing: "používá",
|
footerUsing: "používá",
|
||||||
parentDirectory: "Nadriadený priečinok"
|
parentDirectory: "Nadriadený priečinok",
|
||||||
|
empty: "prázdny"
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user