From 5708b2e38eadfcfccd5ff4e8ceeeca2b3728134b Mon Sep 17 00:00:00 2001 From: Lars Jung Date: Sun, 24 Jul 2011 15:25:43 +0200 Subject: [PATCH] * 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) --- README.md | 47 +++----- build.properties | 2 +- src/dot.htaccess | 10 +- src/h5ai/css/inc/tree.less | 16 ++- src/h5ai/footer.html | 2 +- src/h5ai/js/inc/h5ai.js | 19 +-- src/h5ai/js/inc/jquery.mousewheel.min.js | 11 ++ src/h5ai/js/inc/path.js | 30 ++--- src/h5ai/js/inc/tree.js | 140 +++++++++++++++++++++-- src/h5ai/js/main.js | 19 ++- src/h5ai/options.js | 21 ++-- target/dot.htaccess | 14 ++- target/h5ai/css/main.css | 2 +- target/h5ai/footer.html | 2 +- target/h5ai/header.html | 2 +- target/h5ai/js/main.js | 2 +- target/h5ai/options.js | 25 ++-- 17 files changed, 263 insertions(+), 101 deletions(-) create mode 100644 src/h5ai/js/inc/jquery.mousewheel.min.js 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 - - - screenshot - -      - - screenshot - - - -## 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 @@ html5-storage html5-css3 - h5ai %BUILD_VERSION% + h5ai %BUILD_VERSION% using 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 @@ html5-storage html5-css3
- h5ai 0.9 + h5ai 0.10 using 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){$("not listable").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));$(""+this.alt+"").appendTo($a);$(""+this.alt+"").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=$("