diff --git a/README.md b/README.md
index dfe89ca6..6724eb8d 100644
--- a/README.md
+++ b/README.md
@@ -1,36 +1,9 @@
-# h5ai v0.9 · a beautified Apache index
+# h5ai v0.10 · a beautified Apache index
-
-## Screenshots
-
-
-
-
-
-
-
-
-
-
-## 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 `` and `` tags.
+h5ai aims to make browsing files on a Apache HTTP server more comfortable.
+See the [live demo](http://larsjung.de/h5ai/sample).
+For installation instructions and documentation have a look at
+[project page](http://larsjung.de/h5ai).
## License and References
@@ -47,6 +20,16 @@ please respect their rights.
## 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
*2011-07-18*
diff --git a/build.properties b/build.properties
index 6e8dd4ac..3723d87e 100644
--- a/build.properties
+++ b/build.properties
@@ -3,7 +3,7 @@ custom = true
# project
project.name = h5ai
-project.version = 0.9
+project.version = 0.10
# src
diff --git a/src/dot.htaccess b/src/dot.htaccess
index cf8ed1a9..668a6204 100644
--- a/src/dot.htaccess
+++ b/src/dot.htaccess
@@ -8,7 +8,7 @@
# Options +FollowSymLinks
-
+
################################
# cache images for 52 weeks
@@ -25,7 +25,13 @@
# style auto index
################################
-
+################################
+# IMPORTANT FOR XAMPP
+# if you're running XAMPP you might need to replace the
+# following line with
+#
+################################
+
################################
# uncomment the following line to force directory listing
diff --git a/src/h5ai/css/inc/tree.less b/src/h5ai/css/inc/tree.less
index 7ccf94c3..beb81e60 100644
--- a/src/h5ai/css/inc/tree.less
+++ b/src/h5ai/css/inc/tree.less
@@ -1,7 +1,6 @@
#tree {
position: fixed;
- left: -200px;
display: none;
left: 0;
top: 0;
@@ -12,6 +11,21 @@
border: 2px solid rgb(210,210,210);
border-left: none;
.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 {
.blank, .indicator {
diff --git a/src/h5ai/footer.html b/src/h5ai/footer.html
index 14e1afb0..036938cb 100644
--- a/src/h5ai/footer.html
+++ b/src/h5ai/footer.html
@@ -11,7 +11,7 @@
- h5ai %BUILD_VERSION%
+ h5ai %BUILD_VERSION%
Faenza icons
diff --git a/src/h5ai/js/inc/h5ai.js b/src/h5ai/js/inc/h5ai.js
index 31059910..b9096fa2 100644
--- a/src/h5ai/js/inc/h5ai.js
+++ b/src/h5ai/js/inc/h5ai.js
@@ -50,7 +50,7 @@ var H5ai = function ( options, langs, pathCache ) {
this.init = function () {
- document.title = document.domain + decodeURI( document.location.pathname );
+ document.title = decodeURI( document.domain + document.location.pathname );
this.applyViewmode();
this.initBreadcrumb();
@@ -132,7 +132,7 @@ var H5ai = function ( options, langs, pathCache ) {
var path = pathCache.getPathForFolder( pathname );
$ul.append( path.updateCrumbHtml() );
- var pathnameParts = decodeURI( document.location.pathname ).split( "/" );
+ var pathnameParts = document.location.pathname.split( "/" );
for ( idx in pathnameParts ) {
var part = pathnameParts[idx];
if ( part !== "" ) {
@@ -165,7 +165,10 @@ var H5ai = function ( options, langs, pathCache ) {
$( "#tree" )
.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 () {
@@ -227,15 +230,16 @@ var H5ai = function ( options, langs, pathCache ) {
// entries
$( "#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() );
} );
+ $( "#table" ).remove();
$( "#extended" ).append( $ul );
// empty
if ( $ul.children( ".entry:not(.parentfolder)" ).size() === 0 ) {
- $( "#extended" ).append( $( "empty
" ) );
+ $( "#extended" ).append( $( "empty
" ) );
};
// 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 ) {
lang = browserLang.substr( 0, 2 );
};
- if ( lang === "en" ) {
- lang = undefined;
- };
};
- if ( data[ lang ] !== undefined ) {
+ if ( lang !== "en" && data[ lang ] !== undefined ) {
var selected = data[ lang ];
for ( key in selected ) {
$( ".l10n-" + key ).text( selected[key] );
diff --git a/src/h5ai/js/inc/jquery.mousewheel.min.js b/src/h5ai/js/inc/jquery.mousewheel.min.js
new file mode 100644
index 00000000..05ebb0a9
--- /dev/null
+++ b/src/h5ai/js/inc/jquery.mousewheel.min.js
@@ -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);
\ No newline at end of file
diff --git a/src/h5ai/js/inc/path.js b/src/h5ai/js/inc/path.js
index 7e28336c..febb7594 100644
--- a/src/h5ai/js/inc/path.js
+++ b/src/h5ai/js/inc/path.js
@@ -28,7 +28,6 @@ var PathCache = function () {
var path = this.objectToPath( obj );
cache[path.absHref] = path;
};
- console.log( "loaded: ", cache );
return cache;
};
@@ -129,21 +128,21 @@ var Path = function ( pathCache, folder, tableRow ) {
this.icon16 = $img.attr( "src" );
this.alt = $img.attr( "alt" );
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.size = $tds.eq( 3 ).text();
} else {
var splits = pathCache.splitPathname( folder );
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.alt = "[DIR]";
- this.href = this.label;
this.date = "";
this.size = "";
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.isParentFolder = ( this.isFolder && this.label === "Parent Directory" );
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 === "/" );
if ( this.isParentFolder && h5ai.config.setParentFolderLabels ) {
if ( this.isDomain ) {
this.label = decodeURI( document.domain );
} 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 ) {
- console.log( "updateCrumbHtml failed", err );
$( "failed " ).appendTo( $html );
};
@@ -269,7 +267,7 @@ var Path = function ( pathCache, folder, tableRow ) {
try {
$html.addClass( this.isFolder ? "folder" : "file" );
- var $a = $( " " ).appendTo( $html );
+ var $a = $( " " ).appendTo( $html );
$a.click( $.proxy( function() { this.onClick( "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 ) {
- console.log( "updateExtendedHtml failed", err );
$( "failed " ).appendTo( $html );
};
@@ -339,16 +336,22 @@ var Path = function ( pathCache, folder, tableRow ) {
this.status = status;
this.content = content;
this.treeOpen = true;
- this.updateTreeHtml();
+ this.updateTreeHtml( function() {
+ $( "#tree" ).get( 0 ).updateScrollbar();
+ } );
}, this ) );
} else if ( $indicator.hasClass( "open" ) ) {
this.treeOpen = false;
$indicator.removeClass( "open" );
- $html.find( "> ul.content" ).slideUp();
+ $html.find( "> ul.content" ).slideUp( function() {
+ $( "#tree" ).get( 0 ).updateScrollbar();
+ } );
} else {
this.treeOpen = true;
$indicator.addClass( "open" );
- $html.find( "> ul.content" ).slideDown();
+ $html.find( "> ul.content" ).slideDown( function() {
+ $( "#tree" ).get( 0 ).updateScrollbar();
+ } );
};
}, this ) );
$blank.replaceWith( $indicator );
@@ -389,7 +392,6 @@ var Path = function ( pathCache, folder, tableRow ) {
};
};
} catch( err ) {
- console.log( "updateTreeHtml failed", err );
$( "failed " ).appendTo( $html );
};
diff --git a/src/h5ai/js/inc/tree.js b/src/h5ai/js/inc/tree.js
index 6a46eb2b..6fff30a3 100644
--- a/src/h5ai/js/inc/tree.js
+++ b/src/h5ai/js/inc/tree.js
@@ -38,11 +38,19 @@ var Tree = function ( pathCache, h5ai ) {
var $tree = $( "#tree" );
var $extended = $( "#extended" );
- var shiftTree = function ( show ) {
- if ( $tree.outerWidth() < $extended.offset().left || show === true ) {
- $tree.stop().animate( { left: 0 } );
+ var shiftTree = function ( forceVisible, dontAnimate ) {
+ if ( $tree.outerWidth() < $extended.offset().left || forceVisible === true ) {
+ if ( dontAnimate === true ) {
+ $tree.stop().css( { left: 0 } );
+ } else {
+ $tree.stop().animate( { left: 0 } );
+ };
} 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();
} );
- this.fetchTree( decodeURI( document.location.pathname ), function( path ) {
- $tree.append( path.updateTreeHtml() ).show();
- shiftTree();
+ this.fetchTree( document.location.pathname, function( path ) {
+ $tree.append( path.updateTreeHtml() );
+ $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 = $( "
" );
+ var $drag = $( "
" ).appendTo( $scrollbar );
+ $element
+ .wrapInner( "" )
+ .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();
+ };
+
};
diff --git a/src/h5ai/js/main.js b/src/h5ai/js/main.js
index 949b23d5..114bba8f 100644
--- a/src/h5ai/js/main.js
+++ b/src/h5ai/js/main.js
@@ -1,6 +1,7 @@
( function( $ ) {
// @include "inc/jquery.json.min.js"
+ // @include "inc/jquery.mousewheel.min.js"
// @include "inc/path.js"
// @include "inc/h5ai.js"
// @include "inc/tree.js"
@@ -23,15 +24,6 @@
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
*******************************/
@@ -39,6 +31,13 @@
$( function() {
h5ai.init();
tree.init();
- } );
+ // just for testing, resets the local cache /////////
+ $( ".l10n-footerUsing" ).click( function () {
+ pathCache.cache = {};
+ pathCache.storeCache();
+ } );
+ /////////////////////////////////////////////////////
+ } );
+
} )( jQuery );
\ No newline at end of file
diff --git a/src/h5ai/options.js b/src/h5ai/options.js
index 09236459..2523df2b 100644
--- a/src/h5ai/options.js
+++ b/src/h5ai/options.js
@@ -80,7 +80,8 @@ h5aiLangs = {
columnLastModified: "Last modified",
columnSize: "Size",
footerUsing: "using",
- parentDirectory: "Parent Directory"
+ parentDirectory: "Parent Directory",
+ empty: "empty"
},
"de": {
@@ -90,7 +91,8 @@ h5aiLangs = {
columnLastModified: "Geändert",
columnSize: "Größe",
footerUsing: "nutzt",
- parentDirectory: "Übergeordnetes Verzeichnis"
+ parentDirectory: "Übergeordnetes Verzeichnis",
+ empty: "leer"
},
"fr": {
@@ -100,7 +102,8 @@ h5aiLangs = {
columnLastModified: "Dernière modification",
columnSize: "Taille",
footerUsing: "utilise",
- parentDirectory: "Dossier parent"
+ parentDirectory: "Dossier parent",
+ empty: "vide"
},
"nl": {
@@ -110,7 +113,8 @@ h5aiLangs = {
columnLastModified: "Laatste wijziging",
columnSize: "Grootte",
footerUsing: "gebruikt",
- parentDirectory: "Bovenliggende map"
+ parentDirectory: "Bovenliggende map",
+ empty: "lege"
},
"sv": {
@@ -120,7 +124,8 @@ h5aiLangs = {
columnLastModified: "Senast ändrad",
columnSize: "Filstorlek",
footerUsing: "använder",
- parentDirectory: "Till överordnad mapp"
+ parentDirectory: "Till överordnad mapp",
+ empty: "tom"
},
"cs": {
@@ -130,7 +135,8 @@ h5aiLangs = {
columnLastModified: "Upraveno",
columnSize: "Velikost",
footerUsing: "používá",
- parentDirectory: "Nadřazený adresář"
+ parentDirectory: "Nadřazený adresář",
+ empty: "prázdný"
},
"sk": {
@@ -140,7 +146,8 @@ h5aiLangs = {
columnLastModified: "Upravené",
columnSize: "Velkosť",
footerUsing: "používá",
- parentDirectory: "Nadriadený priečinok"
+ parentDirectory: "Nadriadený priečinok",
+ empty: "prázdny"
}
};
diff --git a/target/dot.htaccess b/target/dot.htaccess
index e696f90a..caf25642 100644
--- a/target/dot.htaccess
+++ b/target/dot.htaccess
@@ -1,5 +1,5 @@
################################
-# h5ai 0.9
+# h5ai 0.10
# customized .htaccess
################################
@@ -8,7 +8,7 @@
# Options +FollowSymLinks
-
+
################################
# cache images for 52 weeks
@@ -25,7 +25,13 @@
# style auto index
################################
-
+################################
+# IMPORTANT FOR XAMPP
+# if you're running XAMPP you might need to replace the
+# following line with
+#
+################################
+
################################
# uncomment the following line to force directory listing
@@ -56,7 +62,7 @@
IndexOrderDefault Ascending Name
- IndexOptions Type=text/html;h5ai=0.9
+ IndexOptions Type=text/html;h5ai=0.10
IndexOptions Charset=UTF-8
IndexOptions FancyIndexing
IndexOptions HTMLTable
diff --git a/target/h5ai/css/main.css b/target/h5ai/css/main.css
index b1ebc61b..0d5b2932 100644
--- a/target/h5ai/css/main.css
+++ b/target/h5ai/css/main.css
@@ -1 +1 @@
-html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}ins{background-color:#ff9;color:#000;text-decoration:none}mark{background-color:#ff9;color:#000;font-style:italic;font-weight:bold}del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}table{border-collapse:collapse;border-spacing:0}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}input,select{vertical-align:middle}body{font:13px/1.231 sans-serif;*font-size:small}select,input,textarea,button{font:99% sans-serif}pre,code,kbd,samp{font-family:monospace,sans-serif}a:hover,a:active{outline:0}ul,ol{margin-left:2em}ol{list-style-type:decimal}nav ul,nav li{margin:0;list-style:none;list-style-image:none}small{font-size:85%}strong,th{font-weight:bold}td{vertical-align:top}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-0.5em}sub{bottom:-0.25em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word;padding:15px}textarea{overflow:auto}.ie6 legend,.ie7 legend{margin-left:-7px}input[type="radio"]{vertical-align:text-bottom}input[type="checkbox"]{vertical-align:bottom}.ie7 input[type="checkbox"]{vertical-align:baseline}.ie6 input{vertical-align:text-bottom}label,input[type="button"],input[type="submit"],input[type="image"],button{cursor:pointer}button,input,select,textarea{margin:0}input:invalid,textarea:invalid{border-radius:1px;-moz-box-shadow:0 0 5px red;-webkit-box-shadow:0 0 5px red;box-shadow:0 0 5px red}.no-boxshadow input:invalid,.no-boxshadow textarea:invalid{background-color:#f0dddd}::-moz-selection{background:#ff5e99;color:#fff;text-shadow:none}::selection{background:#ff5e99;color:#fff;text-shadow:none}a:link{-webkit-tap-highlight-color:#ff5e99}button{width:auto;overflow:visible}.ie7 img{-ms-interpolation-mode:bicubic}body,select,input,textarea{color:#444}h1,h2,h3,h4,h5,h6{font-weight:bold}a,a:active,a:visited{color:#607890}a:hover{color:#036}.ir{display:block;text-indent:-999em;overflow:hidden;background-repeat:no-repeat;text-align:left;direction:ltr}.hidden{display:none;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:"\0020";display:block;height:0;overflow:hidden}.clearfix:after{clear:both}.clearfix{zoom:1}@media print{*{background:transparent!important;color:black!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{color:#444!important;text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}html.js .jsDisabledFallback{display:none}html.no-js body>nav ul{display:none}body{font-family:Ubuntu,sans-serif;font-size:16px;color:#555;margin:80px 30px}body>nav{position:fixed;z-index:1;width:100%;left:0;top:0;font-size:.85em;background-color:#f1f1f1;border-bottom:2px solid #d2d2d2}body>nav span.jsDisabledFallback{display:block;height:30px;line-height:30px;padding:0 10px;color:#999}body>nav a,body>nav a:active,body>nav a:visited{color:#555;cursor:pointer;text-decoration:none;opacity:.7;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:block;height:30px;line-height:30px;padding:0 10px}body>nav a:hover,body>nav a:active:hover,body>nav a:visited:hover,body>nav a.hover,body>nav a:active.hover,body>nav a:visited.hover{color:#e80;background-color:rgba(255,255,255,0.5);opacity:1.0}body>nav .current a{background-color:rgba(255,255,255,0.5);opacity:1.0}body>nav img{width:16px;height:16px;vertical-align:bottom;padding:0 6px 6px 0}body>nav .crumb{float:left;border-right:1px solid #e7e7e7}body>nav .crumb .hint{margin-left:8px;font-style:italic;color:#999}body>nav .crumb img.hint{width:10px;height:10px;vertical-align:baseline;padding:0}body>nav .view{float:right;border-left:1px solid #e7e7e7}#content{max-width:960px;margin:0 auto}#content>header{display:none;padding-bottom:10px;margin-bottom:80px;border-bottom:2px dashed #ddd}#content>footer{display:none;padding-top:10px;margin-top:80px;border-top:2px dashed #ddd}#table table{display:block;width:100%;border-collapse:collapse}#table table th,#table table td{padding:3px 6px;text-align:left;border:0}#table table th{padding-bottom:18px;opacity:.4;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#table table th:hover,#table table th:hover a{color:#555;cursor:pointer;opacity:.9}#table table th a,#table table th a:visited{color:#555;font-weight:normal}#table table th a img,#table table th a:visited img{width:12px;height:12px;padding:0 8px}#table table td{border:1px solid #ddd;border-left:none;border-right:0}#table table td:nth-child(1),#table table th:nth-child(1){text-align:center;width:16px}#table table td:nth-child(1) img,#table table th:nth-child(1) img{width:16px;height:16px;padding-top:2px}#table table td:nth-child(2),#table table th:nth-child(2){width:682px;max-width:682px;overflow:hidden;white-space:nowrap}#table table td:nth-child(3),#table table th:nth-child(3){text-align:right;width:160px;min-width:160px;white-space:nowrap}#table table td:nth-child(4),#table table th:nth-child(4){text-align:right;width:70px;min-width:70px;white-space:nowrap}#extended.details-view{display:none}#extended.details-view ul{margin:0;padding:0;list-style:none}#extended.details-view ul li{position:relative;white-space:nowrap;clear:both}#extended.details-view ul li.header a,#extended.details-view ul li.header a:active,#extended.details-view ul li.header a:visited{padding-bottom:18px;color:#555;text-decoration:none;opacity:.4;cursor:pointer;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#extended.details-view ul li.header a:hover,#extended.details-view ul li.header a:active:hover,#extended.details-view ul li.header a:visited:hover{color:#555;opacity:.9}#extended.details-view ul li.header a img,#extended.details-view ul li.header a:active img,#extended.details-view ul li.header a:visited img{width:12px;height:12px;padding:0 8px}#extended.details-view ul li.entry{border-bottom:1px solid #ddd}#extended.details-view ul li.entry a,#extended.details-view ul li.entry a:active,#extended.details-view ul li.entry a:visited{display:block;color:#555;text-decoration:none;cursor:pointer}#extended.details-view ul li.entry a:hover,#extended.details-view ul li.entry a:active:hover,#extended.details-view ul li.entry a:visited:hover,#extended.details-view ul li.entry a.hover,#extended.details-view ul li.entry a:active.hover,#extended.details-view ul li.entry a:visited.hover{background-color:#f6f6f6;color:#e80}#extended.details-view ul li.entry.error a,#extended.details-view ul li.entry.error a:active,#extended.details-view ul li.entry.error a:visited{color:#aaa}#extended.details-view ul li.entry.error a .label .hint,#extended.details-view ul li.entry.error a:active .label .hint,#extended.details-view ul li.entry.error a:visited .label .hint{margin-left:12px;font-size:.9em;color:#c55}#extended.details-view ul li.entry.error a:hover,#extended.details-view ul li.entry.error a:active:hover,#extended.details-view ul li.entry.error a:visited:hover,#extended.details-view ul li.entry.error a.hover,#extended.details-view ul li.entry.error a:active.hover,#extended.details-view ul li.entry.error a:visited.hover{opacity:1;background-color:#f6f6f6;color:#e80}#extended.details-view ul li .icon,#extended.details-view ul li .label,#extended.details-view ul li .date,#extended.details-view ul li .size{padding:6px}#extended.details-view ul li .icon{display:inline-block;position:absolute;left:0;top:2px;width:16px}#extended.details-view ul li .icon img{width:16px;height:16px}#extended.details-view ul li .icon.big{display:none}#extended.details-view ul li .label{display:block;margin:0 270px 0 24px;overflow:hidden;white-space:nowrap;text-align:left}#extended.details-view ul li .date{position:absolute;right:100px;top:0;text-align:right;width:160px;white-space:nowrap}#extended.details-view ul li .size{position:absolute;right:0;top:0;text-align:right;width:80px;white-space:nowrap}#extended.details-view .empty{text-align:center;margin:50px 0;color:#ddd;font-size:5em;font-weight:bold}#extended.icons-view{display:none;padding:3px;border:1px solid #eee;border-radius:15px}#extended.icons-view ul{margin:0;padding:0;list-style:none}#extended.icons-view ul li.header{display:none}#extended.icons-view ul li.entry{float:left}#extended.icons-view ul li.entry a,#extended.icons-view ul li.entry a:active,#extended.icons-view ul li.entry a:visited{display:block;margin:8px;padding:8px;width:100px;height:120px;float:left;text-align:center;text-decoration:none;overflow:hidden;border-radius:5px;color:#555;cursor:pointer;border:2px solid rgba(0,0,0,0)}#extended.icons-view ul li.entry a:hover,#extended.icons-view ul li.entry a:active:hover,#extended.icons-view ul li.entry a:visited:hover,#extended.icons-view ul li.entry a.hover,#extended.icons-view ul li.entry a:active.hover,#extended.icons-view ul li.entry a:visited.hover{color:#e80;border-color:#eee;background-color:#f6f6f6}#extended.icons-view ul li.entry a .icon,#extended.icons-view ul li.entry a:active .icon,#extended.icons-view ul li.entry a:visited .icon{display:block}#extended.icons-view ul li.entry a .icon img,#extended.icons-view ul li.entry a:active .icon img,#extended.icons-view ul li.entry a:visited .icon img{width:48px;height:48px;margin-bottom:8px}#extended.icons-view ul li.entry a .icon.small,#extended.icons-view ul li.entry a:active .icon.small,#extended.icons-view ul li.entry a:visited .icon.small{display:none}#extended.icons-view ul li.entry a .label,#extended.icons-view ul li.entry a:active .label,#extended.icons-view ul li.entry a:visited .label{display:block;word-wrap:break-word}#extended.icons-view ul li.entry a .date,#extended.icons-view ul li.entry a:active .date,#extended.icons-view ul li.entry a:visited .date,#extended.icons-view ul li.entry a .size,#extended.icons-view ul li.entry a:active .size,#extended.icons-view ul li.entry a:visited .size{display:none}#extended.icons-view ul li.entry.error a,#extended.icons-view ul li.entry.error a:active,#extended.icons-view ul li.entry.error a:visited{color:#aaa;text-decoration:none}#extended.icons-view ul li.entry.error a .label .hint,#extended.icons-view ul li.entry.error a:active .label .hint,#extended.icons-view ul li.entry.error a:visited .label .hint{padding:0 6px;font-size:.9em;color:#c55}#extended.icons-view ul li.entry.error a:hover,#extended.icons-view ul li.entry.error a:active:hover,#extended.icons-view ul li.entry.error a:visited:hover,#extended.icons-view ul li.entry.error a.hover,#extended.icons-view ul li.entry.error a:active.hover,#extended.icons-view ul li.entry.error a:visited.hover{color:#e80;border-color:#eee;background-color:#f6f6f6}#extended.icons-view .empty{padding:16px;height:120px;text-align:center;color:#ddd;font-size:5em;font-weight:bold}#tree{position:fixed;left:-200px;display:none;left:0;top:0;overflow:auto;font-size:.85em;padding:16px 32px 16px 16px;background-color:#f1f1f1;border:2px solid #d2d2d2;border-left:none;-moz-border-radius:0 15px 15px 0;-webkit-border-radius:0 15px 15px 0;border-radius:0 15px 15px 0}#tree .entry .blank,#tree .entry .indicator{display:inline-block;width:16px;height:25px;float:left}#tree .entry .indicator{opacity:.7;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;cursor:pointer}#tree .entry .indicator:hover{opacity:1}#tree .entry .indicator img{position:relative;left:0;top:3px;width:12px;height:12px;vertical-align:bottom;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#tree .entry .indicator.open img{-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-webkit-transform:rotate(90deg);transform:rotate(90deg)}#tree .entry .indicator.unknown{opacity:.3}#tree .entry>a,#tree .entry>a:active,#tree .entry>a.visited{margin-left:16px;padding:4px 6px;border:1px solid rgba(0,0,0,0);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;display:block;color:#555;text-decoration:none;opacity:.7}#tree .entry>a:hover,#tree .entry>a:active:hover,#tree .entry>a.visited:hover,#tree .entry>a.hover,#tree .entry>a:active.hover,#tree .entry>a.visited.hover{color:#e80;background-color:rgba(255,255,255,0.5);opacity:1}#tree .entry>a .label,#tree .entry>a:active .label,#tree .entry>a.visited .label{display:inline-block}#tree .entry>a .icon,#tree .entry>a:active .icon,#tree .entry>a.visited .icon{display:inline-block;width:20px}#tree .entry>a .icon img,#tree .entry>a:active .icon img,#tree .entry>a.visited .icon img{width:16px;height:16px;vertical-align:bottom}#tree .entry>a .hint,#tree .entry>a:active .hint,#tree .entry>a.visited .hint{display:inline-block;margin-left:12px;font-size:.9em;color:#ccc}#tree .entry>a .hint img,#tree .entry>a:active .hint img,#tree .entry>a.visited .hint img{width:10px;height:10px;vertical-align:baseline}#tree .entry.file{display:none}#tree .entry.current>a,#tree .entry.current>a:active,#tree .entry.current>a:visited{border:1px solid #ddd;background-color:rgba(255,255,255,0.5);opacity:1}#tree .entry.error>a,#tree .entry.error>a:active,#tree .entry.error>a:visited{color:#999}#tree .entry.error>a:hover,#tree .entry.error>a:active:hover,#tree .entry.error>a:visited:hover,#tree .entry.error>a.hover,#tree .entry.error>a:active.hover,#tree .entry.error>a:visited.hover{color:#e80}#tree .entry.error .hint{color:#c55}#tree .entry .content{list-style:none;margin-left:20px}body>footer{position:fixed;z-index:1;width:100%;left:0;bottom:0;padding:10px 0;background-color:#f1f1f1;border-top:2px solid #d2d2d2;color:#999;font-size:.85em;text-align:center}body>footer a,body>footer a:active,body>footer a:visited{color:#555;text-decoration:none;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}body>footer a:hover,body>footer a:active:hover,body>footer a:visited:hover{color:#e80}#html5{position:absolute;left:6px;bottom:6px;opacity:.4;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#html5 img{width:20px;height:20px}#html5:hover{opacity:.8}
\ No newline at end of file
+html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}ins{background-color:#ff9;color:#000;text-decoration:none}mark{background-color:#ff9;color:#000;font-style:italic;font-weight:bold}del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}table{border-collapse:collapse;border-spacing:0}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}input,select{vertical-align:middle}body{font:13px/1.231 sans-serif;*font-size:small}select,input,textarea,button{font:99% sans-serif}pre,code,kbd,samp{font-family:monospace,sans-serif}a:hover,a:active{outline:0}ul,ol{margin-left:2em}ol{list-style-type:decimal}nav ul,nav li{margin:0;list-style:none;list-style-image:none}small{font-size:85%}strong,th{font-weight:bold}td{vertical-align:top}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-0.5em}sub{bottom:-0.25em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word;padding:15px}textarea{overflow:auto}.ie6 legend,.ie7 legend{margin-left:-7px}input[type="radio"]{vertical-align:text-bottom}input[type="checkbox"]{vertical-align:bottom}.ie7 input[type="checkbox"]{vertical-align:baseline}.ie6 input{vertical-align:text-bottom}label,input[type="button"],input[type="submit"],input[type="image"],button{cursor:pointer}button,input,select,textarea{margin:0}input:invalid,textarea:invalid{border-radius:1px;-moz-box-shadow:0 0 5px red;-webkit-box-shadow:0 0 5px red;box-shadow:0 0 5px red}.no-boxshadow input:invalid,.no-boxshadow textarea:invalid{background-color:#f0dddd}::-moz-selection{background:#ff5e99;color:#fff;text-shadow:none}::selection{background:#ff5e99;color:#fff;text-shadow:none}a:link{-webkit-tap-highlight-color:#ff5e99}button{width:auto;overflow:visible}.ie7 img{-ms-interpolation-mode:bicubic}body,select,input,textarea{color:#444}h1,h2,h3,h4,h5,h6{font-weight:bold}a,a:active,a:visited{color:#607890}a:hover{color:#036}.ir{display:block;text-indent:-999em;overflow:hidden;background-repeat:no-repeat;text-align:left;direction:ltr}.hidden{display:none;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:"\0020";display:block;height:0;overflow:hidden}.clearfix:after{clear:both}.clearfix{zoom:1}@media print{*{background:transparent!important;color:black!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{color:#444!important;text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}html.js .jsDisabledFallback{display:none}html.no-js body>nav ul{display:none}body{font-family:Ubuntu,sans-serif;font-size:16px;color:#555;margin:80px 30px}body>nav{position:fixed;z-index:1;width:100%;left:0;top:0;font-size:.85em;background-color:#f1f1f1;border-bottom:2px solid #d2d2d2}body>nav span.jsDisabledFallback{display:block;height:30px;line-height:30px;padding:0 10px;color:#999}body>nav a,body>nav a:active,body>nav a:visited{color:#555;cursor:pointer;text-decoration:none;opacity:.7;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:block;height:30px;line-height:30px;padding:0 10px}body>nav a:hover,body>nav a:active:hover,body>nav a:visited:hover,body>nav a.hover,body>nav a:active.hover,body>nav a:visited.hover{color:#e80;background-color:rgba(255,255,255,0.5);opacity:1.0}body>nav .current a{background-color:rgba(255,255,255,0.5);opacity:1.0}body>nav img{width:16px;height:16px;vertical-align:bottom;padding:0 6px 6px 0}body>nav .crumb{float:left;border-right:1px solid #e7e7e7}body>nav .crumb .hint{margin-left:8px;font-style:italic;color:#999}body>nav .crumb img.hint{width:10px;height:10px;vertical-align:baseline;padding:0}body>nav .view{float:right;border-left:1px solid #e7e7e7}#content{max-width:960px;margin:0 auto}#content>header{display:none;padding-bottom:10px;margin-bottom:80px;border-bottom:2px dashed #ddd}#content>footer{display:none;padding-top:10px;margin-top:80px;border-top:2px dashed #ddd}#table table{display:block;width:100%;border-collapse:collapse}#table table th,#table table td{padding:3px 6px;text-align:left;border:0}#table table th{padding-bottom:18px;opacity:.4;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#table table th:hover,#table table th:hover a{color:#555;cursor:pointer;opacity:.9}#table table th a,#table table th a:visited{color:#555;font-weight:normal}#table table th a img,#table table th a:visited img{width:12px;height:12px;padding:0 8px}#table table td{border:1px solid #ddd;border-left:none;border-right:0}#table table td:nth-child(1),#table table th:nth-child(1){text-align:center;width:16px}#table table td:nth-child(1) img,#table table th:nth-child(1) img{width:16px;height:16px;padding-top:2px}#table table td:nth-child(2),#table table th:nth-child(2){width:682px;max-width:682px;overflow:hidden;white-space:nowrap}#table table td:nth-child(3),#table table th:nth-child(3){text-align:right;width:160px;min-width:160px;white-space:nowrap}#table table td:nth-child(4),#table table th:nth-child(4){text-align:right;width:70px;min-width:70px;white-space:nowrap}#extended.details-view{display:none}#extended.details-view ul{margin:0;padding:0;list-style:none}#extended.details-view ul li{position:relative;white-space:nowrap;clear:both}#extended.details-view ul li.header a,#extended.details-view ul li.header a:active,#extended.details-view ul li.header a:visited{padding-bottom:18px;color:#555;text-decoration:none;opacity:.4;cursor:pointer;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#extended.details-view ul li.header a:hover,#extended.details-view ul li.header a:active:hover,#extended.details-view ul li.header a:visited:hover{color:#555;opacity:.9}#extended.details-view ul li.header a img,#extended.details-view ul li.header a:active img,#extended.details-view ul li.header a:visited img{width:12px;height:12px;padding:0 8px}#extended.details-view ul li.entry{border-bottom:1px solid #ddd}#extended.details-view ul li.entry a,#extended.details-view ul li.entry a:active,#extended.details-view ul li.entry a:visited{display:block;color:#555;text-decoration:none;cursor:pointer}#extended.details-view ul li.entry a:hover,#extended.details-view ul li.entry a:active:hover,#extended.details-view ul li.entry a:visited:hover,#extended.details-view ul li.entry a.hover,#extended.details-view ul li.entry a:active.hover,#extended.details-view ul li.entry a:visited.hover{background-color:#f6f6f6;color:#e80}#extended.details-view ul li.entry.error a,#extended.details-view ul li.entry.error a:active,#extended.details-view ul li.entry.error a:visited{color:#aaa}#extended.details-view ul li.entry.error a .label .hint,#extended.details-view ul li.entry.error a:active .label .hint,#extended.details-view ul li.entry.error a:visited .label .hint{margin-left:12px;font-size:.9em;color:#c55}#extended.details-view ul li.entry.error a:hover,#extended.details-view ul li.entry.error a:active:hover,#extended.details-view ul li.entry.error a:visited:hover,#extended.details-view ul li.entry.error a.hover,#extended.details-view ul li.entry.error a:active.hover,#extended.details-view ul li.entry.error a:visited.hover{opacity:1;background-color:#f6f6f6;color:#e80}#extended.details-view ul li .icon,#extended.details-view ul li .label,#extended.details-view ul li .date,#extended.details-view ul li .size{padding:6px}#extended.details-view ul li .icon{display:inline-block;position:absolute;left:0;top:2px;width:16px}#extended.details-view ul li .icon img{width:16px;height:16px}#extended.details-view ul li .icon.big{display:none}#extended.details-view ul li .label{display:block;margin:0 270px 0 24px;overflow:hidden;white-space:nowrap;text-align:left}#extended.details-view ul li .date{position:absolute;right:100px;top:0;text-align:right;width:160px;white-space:nowrap}#extended.details-view ul li .size{position:absolute;right:0;top:0;text-align:right;width:80px;white-space:nowrap}#extended.details-view .empty{text-align:center;margin:50px 0;color:#ddd;font-size:5em;font-weight:bold}#extended.icons-view{display:none;padding:3px;border:1px solid #eee;border-radius:15px}#extended.icons-view ul{margin:0;padding:0;list-style:none}#extended.icons-view ul li.header{display:none}#extended.icons-view ul li.entry{float:left}#extended.icons-view ul li.entry a,#extended.icons-view ul li.entry a:active,#extended.icons-view ul li.entry a:visited{display:block;margin:8px;padding:8px;width:100px;height:120px;float:left;text-align:center;text-decoration:none;overflow:hidden;border-radius:5px;color:#555;cursor:pointer;border:2px solid rgba(0,0,0,0)}#extended.icons-view ul li.entry a:hover,#extended.icons-view ul li.entry a:active:hover,#extended.icons-view ul li.entry a:visited:hover,#extended.icons-view ul li.entry a.hover,#extended.icons-view ul li.entry a:active.hover,#extended.icons-view ul li.entry a:visited.hover{color:#e80;border-color:#eee;background-color:#f6f6f6}#extended.icons-view ul li.entry a .icon,#extended.icons-view ul li.entry a:active .icon,#extended.icons-view ul li.entry a:visited .icon{display:block}#extended.icons-view ul li.entry a .icon img,#extended.icons-view ul li.entry a:active .icon img,#extended.icons-view ul li.entry a:visited .icon img{width:48px;height:48px;margin-bottom:8px}#extended.icons-view ul li.entry a .icon.small,#extended.icons-view ul li.entry a:active .icon.small,#extended.icons-view ul li.entry a:visited .icon.small{display:none}#extended.icons-view ul li.entry a .label,#extended.icons-view ul li.entry a:active .label,#extended.icons-view ul li.entry a:visited .label{display:block;word-wrap:break-word}#extended.icons-view ul li.entry a .date,#extended.icons-view ul li.entry a:active .date,#extended.icons-view ul li.entry a:visited .date,#extended.icons-view ul li.entry a .size,#extended.icons-view ul li.entry a:active .size,#extended.icons-view ul li.entry a:visited .size{display:none}#extended.icons-view ul li.entry.error a,#extended.icons-view ul li.entry.error a:active,#extended.icons-view ul li.entry.error a:visited{color:#aaa;text-decoration:none}#extended.icons-view ul li.entry.error a .label .hint,#extended.icons-view ul li.entry.error a:active .label .hint,#extended.icons-view ul li.entry.error a:visited .label .hint{padding:0 6px;font-size:.9em;color:#c55}#extended.icons-view ul li.entry.error a:hover,#extended.icons-view ul li.entry.error a:active:hover,#extended.icons-view ul li.entry.error a:visited:hover,#extended.icons-view ul li.entry.error a.hover,#extended.icons-view ul li.entry.error a:active.hover,#extended.icons-view ul li.entry.error a:visited.hover{color:#e80;border-color:#eee;background-color:#f6f6f6}#extended.icons-view .empty{padding:16px;height:120px;text-align:center;color:#ddd;font-size:5em;font-weight:bold}#tree{position:fixed;display:none;left:0;top:0;overflow:auto;font-size:.85em;padding:16px 32px 16px 16px;background-color:#f1f1f1;border:2px solid #d2d2d2;border-left:none;-moz-border-radius:0 15px 15px 0;-webkit-border-radius:0 15px 15px 0;border-radius:0 15px 15px 0}#tree>.scrollbar{margin:12px;width:6px;background-color:#d2d2d2;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#tree>.scrollbar .drag{background-color:#b4b4b4;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#tree>.scrollbar.dragOn .drag{background-color:#969696}#tree .entry .blank,#tree .entry .indicator{display:inline-block;width:16px;height:25px;float:left}#tree .entry .indicator{opacity:.7;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;cursor:pointer}#tree .entry .indicator:hover{opacity:1}#tree .entry .indicator img{position:relative;left:0;top:3px;width:12px;height:12px;vertical-align:bottom;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#tree .entry .indicator.open img{-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-webkit-transform:rotate(90deg);transform:rotate(90deg)}#tree .entry .indicator.unknown{opacity:.3}#tree .entry>a,#tree .entry>a:active,#tree .entry>a.visited{margin-left:16px;padding:4px 6px;border:1px solid rgba(0,0,0,0);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;display:block;color:#555;text-decoration:none;opacity:.7}#tree .entry>a:hover,#tree .entry>a:active:hover,#tree .entry>a.visited:hover,#tree .entry>a.hover,#tree .entry>a:active.hover,#tree .entry>a.visited.hover{color:#e80;background-color:rgba(255,255,255,0.5);opacity:1}#tree .entry>a .label,#tree .entry>a:active .label,#tree .entry>a.visited .label{display:inline-block}#tree .entry>a .icon,#tree .entry>a:active .icon,#tree .entry>a.visited .icon{display:inline-block;width:20px}#tree .entry>a .icon img,#tree .entry>a:active .icon img,#tree .entry>a.visited .icon img{width:16px;height:16px;vertical-align:bottom}#tree .entry>a .hint,#tree .entry>a:active .hint,#tree .entry>a.visited .hint{display:inline-block;margin-left:12px;font-size:.9em;color:#ccc}#tree .entry>a .hint img,#tree .entry>a:active .hint img,#tree .entry>a.visited .hint img{width:10px;height:10px;vertical-align:baseline}#tree .entry.file{display:none}#tree .entry.current>a,#tree .entry.current>a:active,#tree .entry.current>a:visited{border:1px solid #ddd;background-color:rgba(255,255,255,0.5);opacity:1}#tree .entry.error>a,#tree .entry.error>a:active,#tree .entry.error>a:visited{color:#999}#tree .entry.error>a:hover,#tree .entry.error>a:active:hover,#tree .entry.error>a:visited:hover,#tree .entry.error>a.hover,#tree .entry.error>a:active.hover,#tree .entry.error>a:visited.hover{color:#e80}#tree .entry.error .hint{color:#c55}#tree .entry .content{list-style:none;margin-left:20px}body>footer{position:fixed;z-index:1;width:100%;left:0;bottom:0;padding:10px 0;background-color:#f1f1f1;border-top:2px solid #d2d2d2;color:#999;font-size:.85em;text-align:center}body>footer a,body>footer a:active,body>footer a:visited{color:#555;text-decoration:none;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}body>footer a:hover,body>footer a:active:hover,body>footer a:visited:hover{color:#e80}#html5{position:absolute;left:6px;bottom:6px;opacity:.4;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#html5 img{width:20px;height:20px}#html5:hover{opacity:.8}
\ No newline at end of file
diff --git a/target/h5ai/footer.html b/target/h5ai/footer.html
index 6659c53a..c1b17a54 100644
--- a/target/h5ai/footer.html
+++ b/target/h5ai/footer.html
@@ -11,7 +11,7 @@
- h5ai 0.9
+ h5ai 0.10
Faenza icons
diff --git a/target/h5ai/header.html b/target/h5ai/header.html
index d26e5bb1..d0770b70 100644
--- a/target/h5ai/header.html
+++ b/target/h5ai/header.html
@@ -3,7 +3,7 @@
Directory index · styled with h5ai
-
+
diff --git a/target/h5ai/js/main.js b/target/h5ai/js/main.js
index b615c291..89287a14 100644
--- a/target/h5ai/js/main.js
+++ b/target/h5ai/js/main.js
@@ -1 +1 @@
-(function($){(function($){$.toJSON=function(o){if(typeof(JSON)=="object"&&JSON.stringify){return JSON.stringify(o)}var type=typeof(o);if(o===null){return"null"}if(type=="undefined"){return undefined}if(type=="number"||type=="boolean"){return o+""}if(type=="string"){return $.quoteString(o)}if(type=="object"){if(typeof o.toJSON=="function"){return $.toJSON(o.toJSON())}if(o.constructor===Date){var month=o.getUTCMonth()+1;if(month<10){month="0"+month}var day=o.getUTCDate();if(day<10){day="0"+day}var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10){hours="0"+hours}var minutes=o.getUTCMinutes();if(minutes<10){minutes="0"+minutes}var seconds=o.getUTCSeconds();if(seconds<10){seconds="0"+seconds}var milli=o.getUTCMilliseconds();if(milli<100){milli="0"+milli}if(milli<10){milli="0"+milli}return'"'+year+"-"+month+"-"+day+"T"+hours+":"+minutes+":"+seconds+"."+milli+'Z"'}if(o.constructor===Array){var ret=[];for(var i=0;i a").addClass("hover")}}}};this.onHoverOut=function(){if(h5ai.config.linkHoverStates){for(ref in this.html){$ref=this.html[ref];if($ref!==undefined){$ref.find("> a").removeClass("hover")}}}};this.updateHtml=function(){this.updateCrumbHtml();this.updateExtendedHtml();this.updateTreeHtml()};this.updateCrumbHtml=function(){var $html=$(" ").data("path",this);try{$html.addClass(this.isFolder?"folder":"file");var $a=$(" "+this.label+" ");$a.click($.proxy(function(){this.onClick("crumb")},this));$a.hover($.proxy(function(){this.onHoverIn("crumb")},this),$.proxy(function(){this.onHoverOut("crumb")},this));$html.append($a);if(this.isDomain){$html.addClass("domain");$a.find("img").attr("src","/h5ai/images/home.png")}if(this.isCurrentFolder){$html.addClass("current")}if(!isNaN(this.status)){if(this.status===200){$(" ").appendTo($a)}else{$("("+this.status+") ").appendTo($a)}}}catch(err){console.log("updateCrumbHtml failed",err);$("failed ").appendTo($html)}if(this.html.$crumb!==undefined){this.html.$crumb.replaceWith($html)}this.html.$crumb=$html;return $html};this.updateExtendedHtml=function(){var $html=$(" ").data("path",this);try{$html.addClass(this.isFolder?"folder":"file");var $a=$(" ").appendTo($html);$a.click($.proxy(function(){this.onClick("extended")},this));$a.hover($.proxy(function(){this.onHoverIn("extended")},this),$.proxy(function(){this.onHoverOut("extended")},this));$(" ").appendTo($a);$(" ").appendTo($a);var $label=$(""+this.label+" ").appendTo($a);$(""+this.date+" ").appendTo($a);$(""+this.size+" ").appendTo($a);if(this.isParentFolder){if(!h5ai.config.setParentFolderLabels){$label.addClass("l10n-parentDirectory")}$html.addClass("parentfolder")}if(!isNaN(this.status)){if(this.status===200){$html.addClass("page");$a.find(".icon.small img").attr("src","/h5ai/icons/16x16/folder-page.png");$a.find(".icon.big img").attr("src","/h5ai/icons/48x48/folder-page.png")}else{$html.addClass("error");$label.append($(" "+this.status+" "))}}}catch(err){console.log("updateExtendedHtml failed",err);$("failed ").appendTo($html)}if(this.html.$extended!==undefined){this.html.$extended.replaceWith($html)}this.html.$extended=$html;return $html};this.updateTreeHtml=function(){var $html=$("
").data("path",this);var $blank=$(" ").appendTo($html);try{$html.addClass(this.isFolder?"folder":"file");var $a=$(" ").appendTo($html).append($(" ")).append($(""+this.label+" "));$a.click($.proxy(function(){this.onClick("tree")},this));$a.hover($.proxy(function(){this.onHoverIn("tree")},this),$.proxy(function(){this.onHoverOut("tree")},this));if(this.isFolder){if(this.status===undefined||!this.isEmpty()){var $indicator=$(" ");if(this.status===undefined){$indicator.addClass("unknown")}else{if(this.treeOpen){$indicator.addClass("open")}}$indicator.click($.proxy(function(event){if($indicator.hasClass("unknown")){tree.fetchStatusAndContent(this.absHref,false,$.proxy(function(status,content){this.status=status;this.content=content;this.treeOpen=true;this.updateTreeHtml()},this))}else{if($indicator.hasClass("open")){this.treeOpen=false;$indicator.removeClass("open");$html.find("> ul.content").slideUp()}else{this.treeOpen=true;$indicator.addClass("open");$html.find("> ul.content").slideDown()}}},this));$blank.replaceWith($indicator)}if(this.isDomain){$html.addClass("domain");$a.find(".icon img").attr("src","/h5ai/icons/16x16/folder-home.png")}if(this.isCurrentFolder){$html.addClass("current");$a.find(".icon img").attr("src","/h5ai/icons/16x16/folder-open.png")}if(!this.isEmpty()){var $ul=$("").appendTo($html);for(idx in this.content){$(" ").append(this.content[idx].updateTreeHtml()).appendTo($ul)}if(this.status===undefined||!this.treeOpen){$ul.hide()}}if(!isNaN(this.status)){if(this.status===200){$a.find(".icon img").attr("src","/h5ai/icons/16x16/folder-page.png");$a.append($(" "))}else{$html.addClass("error");$a.append($(""+this.status+" "))}}}}catch(err){console.log("updateTreeHtml failed",err);$("failed ").appendTo($html)}if(this.html.$tree!==undefined){this.html.$tree.replaceWith($html)}this.html.$tree=$html;return $html}};var H5ai=function(options,langs,pathCache){var defaults={defaultSortOrder:"C=N;O=A",store:{viewmode:"h5ai.viewmode"},customHeader:"h5ai.header.html",customFooter:"h5ai.footer.html",callbacks:{pathClick:[]},viewmodes:["details","icons"],showTree:false,folderStatus:{},lang:undefined,useBrowserLang:true,setParentFolderLabels:true,linkHoverStates:true};this.config=$.extend({},defaults,options);this.pathClick=function(fn){if($.isFunction(fn)){this.config.callbacks.pathClick.push(fn)}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(langs,this.config.lang,this.config.useBrowserLang)};this.triggerPathClick=function(path,context){for(idx in this.config.callbacks.pathClick){this.config.callbacks.pathClick[idx].call(window,path,context)}};this.getViewmode=function(){var viewmode=localStorage.getItem(this.config.store.viewmode);return $.inArray(viewmode,this.config.viewmodes)>=0?viewmode:this.config.viewmodes[0]};this.applyViewmode=function(viewmode){if(viewmode!==undefined){localStorage.setItem(this.config.store.viewmode,viewmode)}viewmode=this.getViewmode();$("body > nav li.view").hide().removeClass("current");if(this.config.viewmodes.length>1){if($.inArray("details",this.config.viewmodes)>=0){$("#viewdetails").show()}if($.inArray("icons",this.config.viewmodes)>=0){$("#viewicons").show()}}if(viewmode==="details"){$("#viewdetails").closest("li").addClass("current");$("#table").hide();$("#extended").addClass("details-view").removeClass("icons-view").show()}else{if(viewmode==="icons"){$("#viewicons").closest("li").addClass("current");$("#table").hide();$("#extended").removeClass("details-view").addClass("icons-view").show()}else{$("#table").show();$("#extended").hide()}}};this.initBreadcrumb=function(){var $ul=$("body > nav ul");var pathname="/";var path=pathCache.getPathForFolder(pathname);$ul.append(path.updateCrumbHtml());var pathnameParts=decodeURI(document.location.pathname).split("/");for(idx in pathnameParts){var part=pathnameParts[idx];if(part!==""){pathname+=part+"/";var path=pathCache.getPathForFolder(pathname);$ul.append(path.updateCrumbHtml())}}};this.initTopSpace=function(){function adjustTopSpace(){var winHeight=$(window).height();var navHeight=$("body > nav").outerHeight();var footerHeight=$("body > footer").outerHeight();var contentSpacing=50;var treeSpacing=50;$("body").css("margin-top",""+(navHeight+contentSpacing)+"px").css("margin-bottom",""+(footerHeight+contentSpacing)+"px");$("#tree").css("top",""+(navHeight+treeSpacing)+"px").css("max-height",""+(winHeight-navHeight-footerHeight-36-2*treeSpacing)+"px")}$(window).resize(function(){adjustTopSpace()});adjustTopSpace()};this.initTableView=function(){$("#table td").removeAttr("align").removeAttr("valign")};this.initExtendedView=function(){var $ul=$("");var $ths=$("#table th");var $label=$ths.eq(1).find("a");var $date=$ths.eq(2).find("a");var $size=$ths.eq(3).find("a");var $li=$("").appendTo($ul);$(" ").appendTo($li);$(""+$label.text()+" ").appendTo($li);$(""+$date.text()+" ").appendTo($li);$(""+$size.text()+" ").appendTo($li);var order=document.location.search;if(order===""){order=this.config.defaultSortOrder}var $icon;if(order.indexOf("O=A")>=0){$icon=$(" ")}else{$icon=$(" ")}if(order.indexOf("C=N")>=0){$li.find("a.label").append($icon)}else{if(order.indexOf("C=M")>=0){$li.find("a.date").prepend($icon)}else{if(order.indexOf("C=S")>=0){$li.find("a.size").prepend($icon)}}}$("#table td").closest("tr").each(function(){var path=pathCache.getPathForTableRow(decodeURI(document.location.pathname),this);$ul.append(path.updateExtendedHtml())});$("#extended").append($ul);if($ul.children(".entry:not(.parentfolder)").size()===0){$("#extended").append($("empty
"))}$("#extended").addClass("clearfix")};this.initViews=function(){this.initTableView();this.initExtendedView();$("#viewdetails").closest("li").click($.proxy(function(){this.applyViewmode("details")},this));$("#viewicons").closest("li").click($.proxy(function(){this.applyViewmode("icons")},this))};this.customize=function(){$.ajax({url:this.config.customHeader,dataType:"html",success:function(data){$("#content > header").append($(data)).show()}});$.ajax({url:this.config.customFooter,dataType:"html",success:function(data){$("#content > footer").prepend($(data)).show()}})};this.localize=function(data,lang,useBrowserLang){if(useBrowserLang===true){var browserLang=navigator.language;if(data[browserLang]!==undefined){lang=browserLang}else{if(browserLang.length>2&&data[browserLang.substr(0,2)]!==undefined){lang=browserLang.substr(0,2)}}if(lang==="en"){lang=undefined}}if(data[lang]!==undefined){var selected=data[lang];for(key in selected){$(".l10n-"+key).text(selected[key])}}}};var Tree=function(pathCache,h5ai){var THIS=this;var contentTypeRegEx=/^text\/html;h5ai=/;this.init=function(){if(h5ai.config.showTree){this.updatePaths();this.populateTree()}};this.updatePath=function(path){if(path.isFolder&&!path.isParentFolder&&path.status===undefined){this.fetchStatus(path.absHref,function(status){if(status!=="h5ai"){path.status=status}path.updateHtml()})}};this.updatePaths=function(){for(var ref in pathCache.cache){this.updatePath(pathCache.cache[ref])}};this.populateTree=function(){var $tree=$("#tree");var $extended=$("#extended");var shiftTree=function(show){if($tree.outerWidth()<$extended.offset().left||show===true){$tree.stop().animate({left:0})}else{$tree.stop().animate({left:18-$tree.outerWidth()})}};$tree.hover(function(){shiftTree(true)},function(){shiftTree()});$(window).resize(function(){shiftTree()});this.fetchTree(decodeURI(document.location.pathname),function(path){$tree.append(path.updateTreeHtml()).show();shiftTree()})};this.fetchTree=function(pathname,callback,childPath){this.fetchPath(pathname,$.proxy(function(path){path.treeOpen=true;if(childPath!==undefined){path.content[childPath.absHref]=childPath}var parent=pathCache.splitPathname(pathname)[0];if(parent===""){callback(path)}else{this.fetchTree(parent,callback,path)}},this))};this.fetchPath=function(pathname,callback){this.fetchStatusAndContent(pathname,false,function(status,content){var path=pathCache.getPathForFolder(pathname);path.status=status;path.content=content;callback(path)})};this.fetchStatusAndContent=function(pathname,includeParent,callback){this.fetchStatus(pathname,function(status){if(status!=="h5ai"){callback(status,{});return}$.ajax({url:pathname,type:"GET",dataType:"html",error:function(xhr){callback(xhr.status,{})},success:function(html,status,xhr){if(!contentTypeRegEx.test(xhr.getResponseHeader("Content-Type"))){callback(xhr.status,{});return}var content={};$(html).find("#table td").closest("tr").each(function(){var path=pathCache.getPathForTableRow(pathname,this);if(path.isFolder&&(!path.isParentFolder||includeParent)){content[path.absHref]=path;THIS.updatePath(path)}});callback("h5ai",content)}})})};var pathnameStatusCache={};this.fetchStatus=function(pathname,callback){if(h5ai.config.folderStatus[pathname]!==undefined){callback(h5ai.config.folderStatus[pathname]);return}else{if(pathnameStatusCache[pathname]!==undefined){callback(pathnameStatusCache[pathname]);return}}$.ajax({url:pathname,type:"HEAD",complete:function(xhr){var status=xhr.status;if(status===200&&contentTypeRegEx.test(xhr.getResponseHeader("Content-Type"))){status="h5ai"}pathnameStatusCache[pathname]=status;callback(status)}})}};var pathCache=new PathCache();var h5ai=new H5ai(h5aiOptions,h5aiLangs,pathCache);var tree=new Tree(pathCache,h5ai);$.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())});$(function(){h5ai.init();tree.init()})})(jQuery);
\ No newline at end of file
+(function($){(function($){$.toJSON=function(o){if(typeof(JSON)=="object"&&JSON.stringify){return JSON.stringify(o)}var type=typeof(o);if(o===null){return"null"}if(type=="undefined"){return undefined}if(type=="number"||type=="boolean"){return o+""}if(type=="string"){return $.quoteString(o)}if(type=="object"){if(typeof o.toJSON=="function"){return $.toJSON(o.toJSON())}if(o.constructor===Date){var month=o.getUTCMonth()+1;if(month<10){month="0"+month}var day=o.getUTCDate();if(day<10){day="0"+day}var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10){hours="0"+hours}var minutes=o.getUTCMinutes();if(minutes<10){minutes="0"+minutes}var seconds=o.getUTCSeconds();if(seconds<10){seconds="0"+seconds}var milli=o.getUTCMilliseconds();if(milli<100){milli="0"+milli}if(milli<10){milli="0"+milli}return'"'+year+"-"+month+"-"+day+"T"+hours+":"+minutes+":"+seconds+"."+milli+'Z"'}if(o.constructor===Array){var ret=[];for(var i=0;i a").addClass("hover")}}}};this.onHoverOut=function(){if(h5ai.config.linkHoverStates){for(ref in this.html){$ref=this.html[ref];if($ref!==undefined){$ref.find("> a").removeClass("hover")}}}};this.updateHtml=function(){this.updateCrumbHtml();this.updateExtendedHtml();this.updateTreeHtml()};this.updateCrumbHtml=function(){var $html=$(" ").data("path",this);try{$html.addClass(this.isFolder?"folder":"file");var $a=$(" "+this.label+" ");$a.click($.proxy(function(){this.onClick("crumb")},this));$a.hover($.proxy(function(){this.onHoverIn("crumb")},this),$.proxy(function(){this.onHoverOut("crumb")},this));$html.append($a);if(this.isDomain){$html.addClass("domain");$a.find("img").attr("src","/h5ai/images/home.png")}if(this.isCurrentFolder){$html.addClass("current")}if(!isNaN(this.status)){if(this.status===200){$(" ").appendTo($a)}else{$("("+this.status+") ").appendTo($a)}}}catch(err){$("failed ").appendTo($html)}if(this.html.$crumb!==undefined){this.html.$crumb.replaceWith($html)}this.html.$crumb=$html;return $html};this.updateExtendedHtml=function(){var $html=$(" ").data("path",this);try{$html.addClass(this.isFolder?"folder":"file");var $a=$(" ").appendTo($html);$a.click($.proxy(function(){this.onClick("extended")},this));$a.hover($.proxy(function(){this.onHoverIn("extended")},this),$.proxy(function(){this.onHoverOut("extended")},this));$(" ").appendTo($a);$(" ").appendTo($a);var $label=$(""+this.label+" ").appendTo($a);$(""+this.date+" ").appendTo($a);$(""+this.size+" ").appendTo($a);if(this.isParentFolder){if(!h5ai.config.setParentFolderLabels){$label.addClass("l10n-parentDirectory")}$html.addClass("parentfolder")}if(!isNaN(this.status)){if(this.status===200){$html.addClass("page");$a.find(".icon.small img").attr("src","/h5ai/icons/16x16/folder-page.png");$a.find(".icon.big img").attr("src","/h5ai/icons/48x48/folder-page.png")}else{$html.addClass("error");$label.append($(" "+this.status+" "))}}}catch(err){$("failed ").appendTo($html)}if(this.html.$extended!==undefined){this.html.$extended.replaceWith($html)}this.html.$extended=$html;return $html};this.updateTreeHtml=function(){var $html=$("
").data("path",this);var $blank=$(" ").appendTo($html);try{$html.addClass(this.isFolder?"folder":"file");var $a=$(" ").appendTo($html).append($(" ")).append($(""+this.label+" "));$a.click($.proxy(function(){this.onClick("tree")},this));$a.hover($.proxy(function(){this.onHoverIn("tree")},this),$.proxy(function(){this.onHoverOut("tree")},this));if(this.isFolder){if(this.status===undefined||!this.isEmpty()){var $indicator=$(" ");if(this.status===undefined){$indicator.addClass("unknown")}else{if(this.treeOpen){$indicator.addClass("open")}}$indicator.click($.proxy(function(event){if($indicator.hasClass("unknown")){tree.fetchStatusAndContent(this.absHref,false,$.proxy(function(status,content){this.status=status;this.content=content;this.treeOpen=true;this.updateTreeHtml(function(){$("#tree").get(0).updateScrollbar()})},this))}else{if($indicator.hasClass("open")){this.treeOpen=false;$indicator.removeClass("open");$html.find("> ul.content").slideUp(function(){$("#tree").get(0).updateScrollbar()})}else{this.treeOpen=true;$indicator.addClass("open");$html.find("> ul.content").slideDown(function(){$("#tree").get(0).updateScrollbar()})}}},this));$blank.replaceWith($indicator)}if(this.isDomain){$html.addClass("domain");$a.find(".icon img").attr("src","/h5ai/icons/16x16/folder-home.png")}if(this.isCurrentFolder){$html.addClass("current");$a.find(".icon img").attr("src","/h5ai/icons/16x16/folder-open.png")}if(!this.isEmpty()){var $ul=$("").appendTo($html);for(idx in this.content){$(" ").append(this.content[idx].updateTreeHtml()).appendTo($ul)}if(this.status===undefined||!this.treeOpen){$ul.hide()}}if(!isNaN(this.status)){if(this.status===200){$a.find(".icon img").attr("src","/h5ai/icons/16x16/folder-page.png");$a.append($(" "))}else{$html.addClass("error");$a.append($(""+this.status+" "))}}}}catch(err){$("failed ").appendTo($html)}if(this.html.$tree!==undefined){this.html.$tree.replaceWith($html)}this.html.$tree=$html;return $html}};var H5ai=function(options,langs,pathCache){var defaults={defaultSortOrder:"C=N;O=A",store:{viewmode:"h5ai.viewmode"},customHeader:"h5ai.header.html",customFooter:"h5ai.footer.html",callbacks:{pathClick:[]},viewmodes:["details","icons"],showTree:false,folderStatus:{},lang:undefined,useBrowserLang:true,setParentFolderLabels:true,linkHoverStates:true};this.config=$.extend({},defaults,options);this.pathClick=function(fn){if($.isFunction(fn)){this.config.callbacks.pathClick.push(fn)}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(langs,this.config.lang,this.config.useBrowserLang)};this.triggerPathClick=function(path,context){for(idx in this.config.callbacks.pathClick){this.config.callbacks.pathClick[idx].call(window,path,context)}};this.getViewmode=function(){var viewmode=localStorage.getItem(this.config.store.viewmode);return $.inArray(viewmode,this.config.viewmodes)>=0?viewmode:this.config.viewmodes[0]};this.applyViewmode=function(viewmode){if(viewmode!==undefined){localStorage.setItem(this.config.store.viewmode,viewmode)}viewmode=this.getViewmode();$("body > nav li.view").hide().removeClass("current");if(this.config.viewmodes.length>1){if($.inArray("details",this.config.viewmodes)>=0){$("#viewdetails").show()}if($.inArray("icons",this.config.viewmodes)>=0){$("#viewicons").show()}}if(viewmode==="details"){$("#viewdetails").closest("li").addClass("current");$("#table").hide();$("#extended").addClass("details-view").removeClass("icons-view").show()}else{if(viewmode==="icons"){$("#viewicons").closest("li").addClass("current");$("#table").hide();$("#extended").removeClass("details-view").addClass("icons-view").show()}else{$("#table").show();$("#extended").hide()}}};this.initBreadcrumb=function(){var $ul=$("body > nav ul");var pathname="/";var path=pathCache.getPathForFolder(pathname);$ul.append(path.updateCrumbHtml());var pathnameParts=document.location.pathname.split("/");for(idx in pathnameParts){var part=pathnameParts[idx];if(part!==""){pathname+=part+"/";var path=pathCache.getPathForFolder(pathname);$ul.append(path.updateCrumbHtml())}}};this.initTopSpace=function(){function adjustTopSpace(){var winHeight=$(window).height();var navHeight=$("body > nav").outerHeight();var footerHeight=$("body > footer").outerHeight();var contentSpacing=50;var treeSpacing=50;$("body").css("margin-top",""+(navHeight+contentSpacing)+"px").css("margin-bottom",""+(footerHeight+contentSpacing)+"px");$("#tree").css("top",""+(navHeight+treeSpacing)+"px").css("height",""+(winHeight-navHeight-footerHeight-36-2*treeSpacing)+"px");try{$("#tree").get(0).updateScrollbar()}catch(err){}}$(window).resize(function(){adjustTopSpace()});adjustTopSpace()};this.initTableView=function(){$("#table td").removeAttr("align").removeAttr("valign")};this.initExtendedView=function(){var $ul=$("");var $ths=$("#table th");var $label=$ths.eq(1).find("a");var $date=$ths.eq(2).find("a");var $size=$ths.eq(3).find("a");var $li=$("").appendTo($ul);$(" ").appendTo($li);$(""+$label.text()+" ").appendTo($li);$(""+$date.text()+" ").appendTo($li);$(""+$size.text()+" ").appendTo($li);var order=document.location.search;if(order===""){order=this.config.defaultSortOrder}var $icon;if(order.indexOf("O=A")>=0){$icon=$(" ")}else{$icon=$(" ")}if(order.indexOf("C=N")>=0){$li.find("a.label").append($icon)}else{if(order.indexOf("C=M")>=0){$li.find("a.date").prepend($icon)}else{if(order.indexOf("C=S")>=0){$li.find("a.size").prepend($icon)}}}$("#table td").closest("tr").each(function(){var path=pathCache.getPathForTableRow(document.location.pathname,this);$ul.append(path.updateExtendedHtml())});$("#table").remove();$("#extended").append($ul);if($ul.children(".entry:not(.parentfolder)").size()===0){$("#extended").append($("empty
"))}$("#extended").addClass("clearfix")};this.initViews=function(){this.initTableView();this.initExtendedView();$("#viewdetails").closest("li").click($.proxy(function(){this.applyViewmode("details")},this));$("#viewicons").closest("li").click($.proxy(function(){this.applyViewmode("icons")},this))};this.customize=function(){$.ajax({url:this.config.customHeader,dataType:"html",success:function(data){$("#content > header").append($(data)).show()}});$.ajax({url:this.config.customFooter,dataType:"html",success:function(data){$("#content > footer").prepend($(data)).show()}})};this.localize=function(data,lang,useBrowserLang){if(useBrowserLang===true){var browserLang=navigator.language;if(data[browserLang]!==undefined){lang=browserLang}else{if(browserLang.length>2&&data[browserLang.substr(0,2)]!==undefined){lang=browserLang.substr(0,2)}}}if(lang!=="en"&&data[lang]!==undefined){var selected=data[lang];for(key in selected){$(".l10n-"+key).text(selected[key])}}}};var Tree=function(pathCache,h5ai){var THIS=this;var contentTypeRegEx=/^text\/html;h5ai=/;this.init=function(){if(h5ai.config.showTree){this.updatePaths();this.populateTree()}};this.updatePath=function(path){if(path.isFolder&&!path.isParentFolder&&path.status===undefined){this.fetchStatus(path.absHref,function(status){if(status!=="h5ai"){path.status=status}path.updateHtml()})}};this.updatePaths=function(){for(var ref in pathCache.cache){this.updatePath(pathCache.cache[ref])}};this.populateTree=function(){var $tree=$("#tree");var $extended=$("#extended");var shiftTree=function(forceVisible,dontAnimate){if($tree.outerWidth()<$extended.offset().left||forceVisible===true){if(dontAnimate===true){$tree.stop().css({left:0})}else{$tree.stop().animate({left:0})}}else{if(dontAnimate===true){$tree.stop().css({left:18-$tree.outerWidth()})}else{$tree.stop().animate({left:18-$tree.outerWidth()})}}};$tree.hover(function(){shiftTree(true)},function(){shiftTree()});$(window).resize(function(){shiftTree()});this.fetchTree(document.location.pathname,function(path){$tree.append(path.updateTreeHtml());$tree.show();scrollpanel($tree);shiftTree(false,true)})};this.fetchTree=function(pathname,callback,childPath){this.fetchPath(pathname,$.proxy(function(path){path.treeOpen=true;if(childPath!==undefined){path.content[childPath.absHref]=childPath}var parent=pathCache.splitPathname(pathname)[0];if(parent===""){callback(path)}else{this.fetchTree(parent,callback,path)}},this))};this.fetchPath=function(pathname,callback){this.fetchStatusAndContent(pathname,false,function(status,content){var path=pathCache.getPathForFolder(pathname);path.status=status;path.content=content;callback(path)})};this.fetchStatusAndContent=function(pathname,includeParent,callback){this.fetchStatus(pathname,function(status){if(status!=="h5ai"){callback(status,{});return}$.ajax({url:pathname,type:"GET",dataType:"html",error:function(xhr){callback(xhr.status,{})},success:function(html,status,xhr){if(!contentTypeRegEx.test(xhr.getResponseHeader("Content-Type"))){callback(xhr.status,{});return}var content={};$(html).find("#table td").closest("tr").each(function(){var path=pathCache.getPathForTableRow(pathname,this);if(path.isFolder&&(!path.isParentFolder||includeParent)){content[path.absHref]=path;THIS.updatePath(path)}});callback("h5ai",content)}})})};var pathnameStatusCache={};this.fetchStatus=function(pathname,callback){if(h5ai.config.folderStatus[pathname]!==undefined){callback(h5ai.config.folderStatus[pathname]);return}else{if(pathnameStatusCache[pathname]!==undefined){callback(pathnameStatusCache[pathname]);return}}$.ajax({url:pathname,type:"HEAD",complete:function(xhr){var status=xhr.status;if(status===200&&contentTypeRegEx.test(xhr.getResponseHeader("Content-Type"))){status="h5ai"}pathnameStatusCache[pathname]=status;callback(status)}})};var scrollpanel=function(htmlElement){var $element=$(htmlElement);if($element.css("position")===undefined||$element.css("position")==="static"){$element.css("position","relative")}var $scrollbar=$("
");var $drag=$("
").appendTo($scrollbar);$element.wrapInner("").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()}};var pathCache=new PathCache();var h5ai=new H5ai(h5aiOptions,h5aiLangs,pathCache);var tree=new Tree(pathCache,h5ai);$.h5ai={click:$.proxy(h5ai.pathClick,h5ai)};$(function(){h5ai.init();tree.init();$(".l10n-footerUsing").click(function(){pathCache.cache={};pathCache.storeCache()})})})(jQuery);
\ No newline at end of file
diff --git a/target/h5ai/options.js b/target/h5ai/options.js
index c88fa0de..37e99440 100644
--- a/target/h5ai/options.js
+++ b/target/h5ai/options.js
@@ -1,5 +1,5 @@
/*
- * h5ai 0.9
+ * h5ai 0.10
* Options and localization
*/
@@ -80,7 +80,8 @@ h5aiLangs = {
columnLastModified: "Last modified",
columnSize: "Size",
footerUsing: "using",
- parentDirectory: "Parent Directory"
+ parentDirectory: "Parent Directory",
+ empty: "empty"
},
"de": {
@@ -90,7 +91,8 @@ h5aiLangs = {
columnLastModified: "Geändert",
columnSize: "Größe",
footerUsing: "nutzt",
- parentDirectory: "Übergeordnetes Verzeichnis"
+ parentDirectory: "Übergeordnetes Verzeichnis",
+ empty: "leer"
},
"fr": {
@@ -100,7 +102,8 @@ h5aiLangs = {
columnLastModified: "Dernière modification",
columnSize: "Taille",
footerUsing: "utilise",
- parentDirectory: "Dossier parent"
+ parentDirectory: "Dossier parent",
+ empty: "vide"
},
"nl": {
@@ -110,7 +113,8 @@ h5aiLangs = {
columnLastModified: "Laatste wijziging",
columnSize: "Grootte",
footerUsing: "gebruikt",
- parentDirectory: "Bovenliggende map"
+ parentDirectory: "Bovenliggende map",
+ empty: "lege"
},
"sv": {
@@ -120,7 +124,8 @@ h5aiLangs = {
columnLastModified: "Senast ändrad",
columnSize: "Filstorlek",
footerUsing: "använder",
- parentDirectory: "Till överordnad mapp"
+ parentDirectory: "Till överordnad mapp",
+ empty: "tom"
},
"cs": {
@@ -130,7 +135,8 @@ h5aiLangs = {
columnLastModified: "Upraveno",
columnSize: "Velikost",
footerUsing: "používá",
- parentDirectory: "Nadřazený adresář"
+ parentDirectory: "Nadřazený adresář",
+ empty: "prázdný"
},
"sk": {
@@ -140,7 +146,8 @@ h5aiLangs = {
columnLastModified: "Upravené",
columnSize: "Velkosť",
footerUsing: "používá",
- parentDirectory: "Nadriadený priečinok"
+ parentDirectory: "Nadriadený priečinok",
+ empty: "prázdny"
}
-
+
};