From: Lu Weitao luweitaobe@163.com
[Why] Optimize result page style to make it more modern
[Example] http://124.90.34.227:11300/result/iperf/2020-12-08/vm-2p8g/openeuler-20.03-a...
Signed-off-by: Lu Weitao luweitaobe@163.com --- .../root/etc/nginx/conf.d/default.conf | 5 +- container/srv-http/root/srv/.htaccess | 165 +++++ container/srv-http/root/srv/_h5ai/.htaccess | 165 +++++ .../srv-http/root/srv/_h5ai/CHANGELOG.md | 598 ++++++++++++++++++ container/srv-http/root/srv/_h5ai/README.md | 72 +++ .../root/srv/_h5ai/private/cache/README.md | 9 + .../root/srv/_h5ai/private/conf/l10n/af.json | 18 + .../root/srv/_h5ai/private/conf/l10n/bg.json | 18 + .../root/srv/_h5ai/private/conf/l10n/cs.json | 18 + .../root/srv/_h5ai/private/conf/l10n/da.json | 18 + .../root/srv/_h5ai/private/conf/l10n/de.json | 22 + .../root/srv/_h5ai/private/conf/l10n/el.json | 18 + .../root/srv/_h5ai/private/conf/l10n/en.json | 23 + .../root/srv/_h5ai/private/conf/l10n/es.json | 22 + .../root/srv/_h5ai/private/conf/l10n/et.json | 22 + .../root/srv/_h5ai/private/conf/l10n/fi.json | 18 + .../root/srv/_h5ai/private/conf/l10n/fr.json | 22 + .../root/srv/_h5ai/private/conf/l10n/he.json | 17 + .../root/srv/_h5ai/private/conf/l10n/hi.json | 18 + .../root/srv/_h5ai/private/conf/l10n/hr.json | 18 + .../root/srv/_h5ai/private/conf/l10n/hu.json | 16 + .../root/srv/_h5ai/private/conf/l10n/it.json | 18 + .../root/srv/_h5ai/private/conf/l10n/ja.json | 20 + .../root/srv/_h5ai/private/conf/l10n/ko.json | 22 + .../root/srv/_h5ai/private/conf/l10n/lv.json | 22 + .../root/srv/_h5ai/private/conf/l10n/nb.json | 15 + .../root/srv/_h5ai/private/conf/l10n/nl.json | 22 + .../root/srv/_h5ai/private/conf/l10n/pl.json | 22 + .../root/srv/_h5ai/private/conf/l10n/pt.json | 18 + .../root/srv/_h5ai/private/conf/l10n/ro.json | 15 + .../root/srv/_h5ai/private/conf/l10n/ru.json | 20 + .../root/srv/_h5ai/private/conf/l10n/sk.json | 13 + .../root/srv/_h5ai/private/conf/l10n/sl.json | 18 + .../root/srv/_h5ai/private/conf/l10n/sr.json | 15 + .../root/srv/_h5ai/private/conf/l10n/sv.json | 16 + .../root/srv/_h5ai/private/conf/l10n/tr.json | 14 + .../root/srv/_h5ai/private/conf/l10n/uk.json | 18 + .../srv/_h5ai/private/conf/l10n/zh-cn.json | 23 + .../srv/_h5ai/private/conf/l10n/zh-tw.json | 23 + .../root/srv/_h5ai/private/conf/options.json | 392 ++++++++++++ .../root/srv/_h5ai/private/conf/types.json | 76 +++ .../srv/_h5ai/private/php/class-bootstrap.php | 45 ++ .../srv/_h5ai/private/php/core/class-api.php | 109 ++++ .../_h5ai/private/php/core/class-context.php | 294 +++++++++ .../_h5ai/private/php/core/class-fallback.php | 54 ++ .../_h5ai/private/php/core/class-filesize.php | 96 +++ .../srv/_h5ai/private/php/core/class-item.php | 91 +++ .../srv/_h5ai/private/php/core/class-json.php | 65 ++ .../_h5ai/private/php/core/class-logger.php | 28 + .../_h5ai/private/php/core/class-request.php | 38 ++ .../_h5ai/private/php/core/class-session.php | 20 + .../_h5ai/private/php/core/class-setup.php | 185 ++++++ .../_h5ai/private/php/core/class-theme.php | 32 + .../srv/_h5ai/private/php/core/class-util.php | 89 +++ .../_h5ai/private/php/ext/class-archive.php | 183 ++++++ .../_h5ai/private/php/ext/class-custom.php | 65 ++ .../_h5ai/private/php/ext/class-search.php | 40 ++ .../srv/_h5ai/private/php/ext/class-thumb.php | 253 ++++++++ .../srv/_h5ai/private/php/pages/index.php | 2 + .../root/srv/_h5ai/private/php/pages/info.php | 2 + .../srv-http/root/srv/_h5ai/public/.htaccess | 13 + .../root/srv/_h5ai/public/cache/README.md | 9 + .../root/srv/_h5ai/public/css/styles.css | 2 + .../root/srv/_h5ai/public/ext/README.md | 4 + .../srv/_h5ai/public/images/fallback/file.png | Bin 0 -> 118 bytes .../public/images/fallback/folder-parent.png | Bin 0 -> 108 bytes .../_h5ai/public/images/fallback/folder.png | Bin 0 -> 99 bytes .../public/images/favicon/favicon-152.png | Bin 0 -> 219 bytes .../public/images/favicon/favicon-16-32.ico | Bin 0 -> 5430 bytes .../public/images/favicon/favicon-16.png | Bin 0 -> 96 bytes .../public/images/favicon/favicon-32.png | Bin 0 -> 120 bytes .../_h5ai/public/images/favicon/favicon.svg | 3 + .../srv/_h5ai/public/images/themes/README.md | 9 + .../public/images/themes/comity/ar-apk.svg | 3 + .../public/images/themes/comity/ar-deb.svg | 16 + .../public/images/themes/comity/ar-rpm.svg | 11 + .../public/images/themes/comity/txt-css.svg | 13 + .../public/images/themes/comity/txt-go.svg | 29 + .../public/images/themes/comity/txt-html.svg | 10 + .../public/images/themes/comity/txt-js.svg | 3 + .../public/images/themes/comity/txt-less.svg | 8 + .../public/images/themes/comity/txt-md.svg | 3 + .../public/images/themes/comity/txt-php.svg | 3 + .../public/images/themes/comity/txt-py.svg | 8 + .../public/images/themes/comity/txt-rb.svg | 3 + .../public/images/themes/comity/txt-rust.svg | 3 + .../images/themes/comity/txt-script.svg | 3 + .../public/images/themes/comity/x-pdf.svg | 3 + .../_h5ai/public/images/themes/default/ar.svg | 3 + .../public/images/themes/default/aud.svg | 3 + .../public/images/themes/default/bin.svg | 3 + .../public/images/themes/default/file.svg | 3 + .../images/themes/default/folder-page.svg | 3 + .../images/themes/default/folder-parent.svg | 3 + .../public/images/themes/default/folder.svg | 3 + .../public/images/themes/default/img.svg | 3 + .../public/images/themes/default/txt.svg | 3 + .../public/images/themes/default/vid.svg | 3 + .../_h5ai/public/images/themes/default/x.svg | 3 + .../root/srv/_h5ai/public/images/ui/back.svg | 3 + .../root/srv/_h5ai/public/images/ui/crumb.svg | 3 + .../srv/_h5ai/public/images/ui/download.svg | 3 + .../srv/_h5ai/public/images/ui/filter.svg | 5 + .../_h5ai/public/images/ui/info-toggle.svg | 3 + .../srv/_h5ai/public/images/ui/paypal.svg | 6 + .../_h5ai/public/images/ui/preview-close.svg | 3 + .../public/images/ui/preview-fullscreen.svg | 3 + .../_h5ai/public/images/ui/preview-next.svg | 3 + .../images/ui/preview-no-fullscreen.svg | 3 + .../_h5ai/public/images/ui/preview-prev.svg | 3 + .../_h5ai/public/images/ui/preview-raw.svg | 3 + .../srv/_h5ai/public/images/ui/search.svg | 5 + .../srv/_h5ai/public/images/ui/selected.svg | 3 + .../srv/_h5ai/public/images/ui/sidebar.svg | 3 + .../root/srv/_h5ai/public/images/ui/sort.svg | 3 + .../srv/_h5ai/public/images/ui/spinner.svg | 6 + .../_h5ai/public/images/ui/tree-indicator.svg | 3 + .../_h5ai/public/images/ui/tree-toggle.svg | 3 + .../_h5ai/public/images/ui/view-details.svg | 3 + .../srv/_h5ai/public/images/ui/view-grid.svg | 3 + .../srv/_h5ai/public/images/ui/view-icons.svg | 3 + .../srv-http/root/srv/_h5ai/public/index.php | 17 + .../root/srv/_h5ai/public/js/scripts.js | 5 + 123 files changed, 4082 insertions(+), 3 deletions(-) create mode 100644 container/srv-http/root/srv/.htaccess create mode 100644 container/srv-http/root/srv/_h5ai/.htaccess create mode 100644 container/srv-http/root/srv/_h5ai/CHANGELOG.md create mode 100644 container/srv-http/root/srv/_h5ai/README.md create mode 100755 container/srv-http/root/srv/_h5ai/private/cache/README.md create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/options.json create mode 100755 container/srv-http/root/srv/_h5ai/private/conf/types.json create mode 100755 container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-api.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-context.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-item.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-json.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-request.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-session.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/core/class-util.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/pages/index.php create mode 100755 container/srv-http/root/srv/_h5ai/private/php/pages/info.php create mode 100755 container/srv-http/root/srv/_h5ai/public/.htaccess create mode 100755 container/srv-http/root/srv/_h5ai/public/cache/README.md create mode 100755 container/srv-http/root/srv/_h5ai/public/css/styles.css create mode 100755 container/srv-http/root/srv/_h5ai/public/ext/README.md create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/file.png create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png create mode 100755 container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png create mode 100755 container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/README.md create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/back.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/download.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/search.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg create mode 100755 container/srv-http/root/srv/_h5ai/public/index.php create mode 100755 container/srv-http/root/srv/_h5ai/public/js/scripts.js
diff --git a/container/srv-http/root/etc/nginx/conf.d/default.conf b/container/srv-http/root/etc/nginx/conf.d/default.conf index 676418a..646eee3 100644 --- a/container/srv-http/root/etc/nginx/conf.d/default.conf +++ b/container/srv-http/root/etc/nginx/conf.d/default.conf @@ -3,8 +3,8 @@ server { server_name "srv-http"; server_tokens off;
- root /usr/share/nginx/html; - index index.html; + root /srv; + index index.html index.php /_h5ai/public/index.php;
charset utf-8,gbk;
@@ -24,7 +24,6 @@ server { autoindex on; autoindex_localtime on; allow all; - root /srv; location ~* /[-_a-z]+$ { add_header Content-Type text/plain; } diff --git a/container/srv-http/root/srv/.htaccess b/container/srv-http/root/srv/.htaccess new file mode 100644 index 0000000..95e775b --- /dev/null +++ b/container/srv-http/root/srv/.htaccess @@ -0,0 +1,165 @@ +## details here: https://github.com/h5bp/server-configs-apache + + + +## SECURITY ################################################################### + +DirectoryIndex disabled +FileETag None +ServerSignature Off + +# Apache < 2.3 +<IfModule !mod_authz_core.c> + Order allow,deny + Deny from all + Satisfy All +</IfModule> + +# Apache ≥ 2.3 +<IfModule mod_authz_core.c> + Require all denied +</IfModule> + +<IfModule mod_headers.c> + Header set X-Content-Type-Options "nosniff" + Header unset ETag + Header unset X-Powered-By +</IfModule> + +<IfModule mod_autoindex.c> + Options -Indexes +</IfModule> + + + +## COMPAT ##################################################################### + +AddDefaultCharset utf-8 + +<IfModule mod_mime.c> + AddCharset utf-8 .css .html .js .json .php .svg + + AddType application/font-woff woff + AddType application/font-woff2 woff2 + AddType application/json json + AddType application/javascript js + AddType application/vnd.ms-fontobject eot + AddType application/x-font-ttf ttc ttf + AddType image/jpeg jpeg jpg + AddType image/png png + AddType image/svg+xml svg svgz + AddType image/x-icon ico + AddType font/opentype otf + AddType text/css css + AddType text/html html +</IfModule> + + + +## SPEED ###################################################################### + +<IfModule mod_expires.c> + ExpiresActive on + ExpiresDefault "access plus 1 month" + + ExpiresByType application/json "access plus 0 seconds" + + ExpiresByType text/html "access plus 1 minute" + + ExpiresByType image/x-icon "access plus 1 week" + + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType image/jpeg "access plus 1 year" + ExpiresByType image/png "access plus 1 year" + ExpiresByType image/svg+xml "access plus 1 year" + ExpiresByType text/css "access plus 1 year" +</IfModule> + +<IfModule mod_deflate.c> + <IfModule mod_setenvif.c> + <IfModule mod_headers.c> + SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding + RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding + </IfModule> + </IfModule> + + # Apache ≥ 2.3 + <IfModule mod_authz_core.c> + # mod_filter as module only available for Apache ≥ 2.3.7 + <IfModule mod_filter.c> + AddOutputFilterByType DEFLATE "application/atom+xml" \ + "application/javascript" \ + "application/json" \ + "application/ld+json" \ + "application/manifest+json" \ + "application/rdf+xml" \ + "application/rss+xml" \ + "application/schema+json" \ + "application/vnd.geo+json" \ + "application/vnd.ms-fontobject" \ + "application/x-font-ttf" \ + "application/x-javascript" \ + "application/x-web-app-manifest+json" \ + "application/xhtml+xml" \ + "application/xml" \ + "font/eot" \ + "font/opentype" \ + "image/bmp" \ + "image/svg+xml" \ + "image/vnd.microsoft.icon" \ + "image/x-icon" \ + "text/cache-manifest" \ + "text/css" \ + "text/html" \ + "text/javascript" \ + "text/plain" \ + "text/vcard" \ + "text/vnd.rim.location.xloc" \ + "text/vtt" \ + "text/x-component" \ + "text/x-cross-domain-policy" \ + "text/xml" + </IfModule> + </IfModule> + + # Apache < 2.3 + <IfModule !mod_authz_core.c> + AddOutputFilterByType DEFLATE "application/atom+xml" \ + "application/javascript" \ + "application/json" \ + "application/ld+json" \ + "application/manifest+json" \ + "application/rdf+xml" \ + "application/rss+xml" \ + "application/schema+json" \ + "application/vnd.geo+json" \ + "application/vnd.ms-fontobject" \ + "application/x-font-ttf" \ + "application/x-javascript" \ + "application/x-web-app-manifest+json" \ + "application/xhtml+xml" \ + "application/xml" \ + "font/eot" \ + "font/opentype" \ + "image/bmp" \ + "image/svg+xml" \ + "image/vnd.microsoft.icon" \ + "image/x-icon" \ + "text/cache-manifest" \ + "text/css" \ + "text/html" \ + "text/javascript" \ + "text/plain" \ + "text/vcard" \ + "text/vnd.rim.location.xloc" \ + "text/vtt" \ + "text/x-component" \ + "text/x-cross-domain-policy" \ + "text/xml" + </IfModule> + + <IfModule mod_mime.c> + AddEncoding gzip gz + AddEncoding gzip svgz + </IfModule> +</IfModule> diff --git a/container/srv-http/root/srv/_h5ai/.htaccess b/container/srv-http/root/srv/_h5ai/.htaccess new file mode 100644 index 0000000..95e775b --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/.htaccess @@ -0,0 +1,165 @@ +## details here: https://github.com/h5bp/server-configs-apache + + + +## SECURITY ################################################################### + +DirectoryIndex disabled +FileETag None +ServerSignature Off + +# Apache < 2.3 +<IfModule !mod_authz_core.c> + Order allow,deny + Deny from all + Satisfy All +</IfModule> + +# Apache ≥ 2.3 +<IfModule mod_authz_core.c> + Require all denied +</IfModule> + +<IfModule mod_headers.c> + Header set X-Content-Type-Options "nosniff" + Header unset ETag + Header unset X-Powered-By +</IfModule> + +<IfModule mod_autoindex.c> + Options -Indexes +</IfModule> + + + +## COMPAT ##################################################################### + +AddDefaultCharset utf-8 + +<IfModule mod_mime.c> + AddCharset utf-8 .css .html .js .json .php .svg + + AddType application/font-woff woff + AddType application/font-woff2 woff2 + AddType application/json json + AddType application/javascript js + AddType application/vnd.ms-fontobject eot + AddType application/x-font-ttf ttc ttf + AddType image/jpeg jpeg jpg + AddType image/png png + AddType image/svg+xml svg svgz + AddType image/x-icon ico + AddType font/opentype otf + AddType text/css css + AddType text/html html +</IfModule> + + + +## SPEED ###################################################################### + +<IfModule mod_expires.c> + ExpiresActive on + ExpiresDefault "access plus 1 month" + + ExpiresByType application/json "access plus 0 seconds" + + ExpiresByType text/html "access plus 1 minute" + + ExpiresByType image/x-icon "access plus 1 week" + + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType image/jpeg "access plus 1 year" + ExpiresByType image/png "access plus 1 year" + ExpiresByType image/svg+xml "access plus 1 year" + ExpiresByType text/css "access plus 1 year" +</IfModule> + +<IfModule mod_deflate.c> + <IfModule mod_setenvif.c> + <IfModule mod_headers.c> + SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding + RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding + </IfModule> + </IfModule> + + # Apache ≥ 2.3 + <IfModule mod_authz_core.c> + # mod_filter as module only available for Apache ≥ 2.3.7 + <IfModule mod_filter.c> + AddOutputFilterByType DEFLATE "application/atom+xml" \ + "application/javascript" \ + "application/json" \ + "application/ld+json" \ + "application/manifest+json" \ + "application/rdf+xml" \ + "application/rss+xml" \ + "application/schema+json" \ + "application/vnd.geo+json" \ + "application/vnd.ms-fontobject" \ + "application/x-font-ttf" \ + "application/x-javascript" \ + "application/x-web-app-manifest+json" \ + "application/xhtml+xml" \ + "application/xml" \ + "font/eot" \ + "font/opentype" \ + "image/bmp" \ + "image/svg+xml" \ + "image/vnd.microsoft.icon" \ + "image/x-icon" \ + "text/cache-manifest" \ + "text/css" \ + "text/html" \ + "text/javascript" \ + "text/plain" \ + "text/vcard" \ + "text/vnd.rim.location.xloc" \ + "text/vtt" \ + "text/x-component" \ + "text/x-cross-domain-policy" \ + "text/xml" + </IfModule> + </IfModule> + + # Apache < 2.3 + <IfModule !mod_authz_core.c> + AddOutputFilterByType DEFLATE "application/atom+xml" \ + "application/javascript" \ + "application/json" \ + "application/ld+json" \ + "application/manifest+json" \ + "application/rdf+xml" \ + "application/rss+xml" \ + "application/schema+json" \ + "application/vnd.geo+json" \ + "application/vnd.ms-fontobject" \ + "application/x-font-ttf" \ + "application/x-javascript" \ + "application/x-web-app-manifest+json" \ + "application/xhtml+xml" \ + "application/xml" \ + "font/eot" \ + "font/opentype" \ + "image/bmp" \ + "image/svg+xml" \ + "image/vnd.microsoft.icon" \ + "image/x-icon" \ + "text/cache-manifest" \ + "text/css" \ + "text/html" \ + "text/javascript" \ + "text/plain" \ + "text/vcard" \ + "text/vnd.rim.location.xloc" \ + "text/vtt" \ + "text/x-component" \ + "text/x-cross-domain-policy" \ + "text/xml" + </IfModule> + + <IfModule mod_mime.c> + AddEncoding gzip gz + AddEncoding gzip svgz + </IfModule> +</IfModule> diff --git a/container/srv-http/root/srv/_h5ai/CHANGELOG.md b/container/srv-http/root/srv/_h5ai/CHANGELOG.md new file mode 100644 index 0000000..b575191 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/CHANGELOG.md @@ -0,0 +1,598 @@ +# Changelog + + +## v0.29.2 - *2019-03-22* + +* update `babel-loader` to 7.1.1 +* update `eslint` to 5.15.3 +* update `ghu` to 0.13.0 +* update `jsdom` to 14.0.0 +* update `kjua` to 0.2.0 +* update `lolight` to 1.0.0 +* update `scar` to 1.2.0 + + +## v0.29.1 - *2019-01-20* + +* replace `babel-preset-es2015` with `babel-preset-env` +* update `eslint` to 5.14.1 +* update `ghu` to 0.12.0 +* update `jsdom` to 9.2.0 +* update `kjua` to 0.1.2 +* update `lolight` to 0.6.0 +* update `marked` to 0.6.1 +* update `normalize.css` to 8.0.1 +* update `scar` to 1.0.0 + + +## v0.29.0 - *2016-08-12* + +* back to cleaner visual experience +* add option to disable sidebar +* add options to filter/search ignore case +* replace PHP `getenv` calls with `$_SERVER` lookups +* add `view.fallbackMode` option to generally serve only fallback mode +* serve fallback mode for text browsers (`curl`, `links`, `lynx`, `w3m`) +* change type `txt-svg` to `img-svg`, no thumbs but preview +* fix a tree indentation glitch +* fix shell command detection on Windows +* fix Piwik anayltics +* fix `.htaccess` auth issues +* fix drag-select on scrollable content +* fix download-all function +* fix audio and video preview loading +* fix thumbnail request issues +* add `rust` type and icon +* add `autoplay` option to audio and video preview +* add `--dereference` to `shell-du` to follow sym links +* remove *Install* section from `README.md`, causes too much trouble +* remove peer5 support +* update build process to use `node 6.0+`, no need for babel now +* replace `jquery-qrcode` with [`kjua`](https://larsjung.de/kjua/) +* replace `prism` with [`lolight`](https://larsjung.de/lolight/) +* move deps to `package.json` (`normalize.css`, `kjua`, `lolight` and `marked`) +* remove `jQuery` +* remove `lodash` +* remove [`modulejs`](https://larsjung.de/modulejs/) for now +* reduce JS code by 60% (~250kb -> ~100kb) +* update languages (`et`, `nl`, `pl`) + + +## v0.28.0 - *2015-12-19* + +* now require PHP 5.5.0+ +* change index path to `/_h5ai/public/index.php` +* now only `/_h5ai/public/` needs to be web-accessible +* add support for custom script and style additions +* add options to set font families +* add search +* add ignorecase sorting option to tree +* add wide links in tree view +* add IE edge mode +* add frontend tests +* fix some styles in IE10 +* fix preview bottom bar for small screen widths +* lots of code cleanup and refactorings +* change API +* update build process, now uses [`ghu`](https://larsjung.de/ghu/) +* switch from jshint and jscs to [`eslint`](http://eslint.org/) +* update `jQuery` to 2.1.4 +* update `lodash` to 3.9.3 (add debounce and trim) +* update `marked` to 0.3.5 +* update `modulejs` to 1.13.0 +* update `prism` to 2015-12-19 +* update h5bp styles to 5.2.0 +* update `normalize.css` to 3.0.3 +* remove `Moment.js` + + +## v0.27.0 - *2015-04-06* + +* new layout +* add editorconfig +* drop support for IE9 (gets fallback) +* update sidebar settings +* add info sidebar +* add opt-out for click'n'drag selection +* add package name option for single selections +* add initial support for Peer5 +* add option to down-sample images for preview +* add option for natural sorting in tree sidebar +* fix problems with files/folders named `0` +* change font from `Ubuntu` to `Roboto` (smaller footprint, clearer for small sizes) +* switch back to Google Fonts +* improve PDF thumbnail quality +* improve drag-select +* improve image preview +* prevent listing `_h5ai` folder and subfolders +* update build process, now uses [`mkr`](https://larsjung.de/mkr/) and [`fQuery`](https://larsjung.de/fquery/) +* update `jQuery` to 2.1.3 +* update `jQuery.qrcode` to 0.11.0 +* update `Lo-Dash` to 3.6.0 +* update `Modernizr` to 2.8.3 +* update `modulejs` to 1.4.0 +* update `Moment.js` to 2.9.0 +* update `Prism` to 2015-04-05 +* remove deprecated Google Analytics code +* remove `jQuery.fracs` +* remove `jQuery.scrollpanel` +* remove `jQuery.mousewheel` +* update languages (`af`, `es`, `ja`, `ko`, `ru`, `zh-cn`) + + +## v0.26.1 - *2014-08-17* + +* fix links + + +## v0.26.0 - *2014-08-16* + +* remove True Type fonts +* outsource themes to [h5ai-themes](https://github.com/lrsjng/h5ai-themes) +* add filesize fallback for large files and 32bit PHP +* fix server detection +* add config file tests to info page +* remove JSON shim +* add caching of command checks +* update `jQuery.mousewheel` to 3.1.12 +* update `jQuery.qrcode` to 0.8.0 +* replace `markdown` with [`marked`](https://github.com/chjj/marked) 0.3.2 +* update `modulejs` to 0.4.5 +* update `Moment.js` to 2.8.1 +* replace `underscore` with [`Lo-Dash`](https://github.com/lodash/lodash) 2.4.1 +* replace `SyntaxHighlighter` with [`Prism`](http://prismjs.com) 2014-08-04 + + +## v0.25.2 - *2014-07-01* + +* add optional info page protection +* fix `short_open_tag` issues for PHP < 5.4.0 +* fix default folder download (`alwaysVisible` option) +* minor fixes + + +## v0.25.1 - *2014-06-25* + +* fix broken paths for filenames containing '+' characters +* fix Google Universal Analytics +* fix file type check + + +## v0.25.0 - *2014-06-22* + +* add sidebar +* add initial theme support +* add icons from [Evolvere Icon Theme](http://franksouza183.deviantart.com/art/Evolvere-Icon-theme-440718295) +* add PHP variant to calc folder sizes +* add scroll position reset on location change (issue [#279](https://github.com/lrsjng/h5ai/issues/279)) +* add option to hide unreadable files +* add option where to place folders (top, inplace, bottom) +* add markdown support for custom header and footer files +* add video and audio preview via HTML5 elements (no fallback, works best in Chrome) +* add filter reset on location change +* add option to make download button always visible +* add Google UA support +* extend selectable icon sizes (add 128px, 192px, 256px, 384px) +* improve preview GUI +* disable thumbs in `cache` folder +* fix QR code URI origin (issue [#287](https://github.com/lrsjng/h5ai/issues/287)) +* replace PHP backtick operator with `exec` +* remove server side file manipulation extensions `dropbox`, `delete` and `rename` +* update `H5BP` to 4.3.0 +* update `jQuery` to 2.1.1 +* update `json2.js` to 2014-02-04 +* update `markdown-js` to 0.5.0 +* update `Modernizr` to 2.8.2 +* update `Moment.js` to 2.6.0 +* update `Underscore.js` to 1.6.0 +* update languages (`bg`, `ko`, `pt`, `sl`, `sv`, `zh-cn`) + + +## v0.24.1 - *2014-04-09* + +* security fixes! (issues [#268](https://github.com/lrsjng/h5ai/issues/268), [#269](https://github.com/lrsjng/h5ai/issues/269)) +* fix WinOS command detection +* update languages (`fi`, `fr`, `hi`, `it`, `zh-tw`) + + +## v0.24.0 - *2013-09-04* + +* updates image and text preview +* adds variable icon sizes +* adds optional natural sort of items +* adds optional checkboxes to select items +* adds text preview modes: none, fixed, markdown +* optionally hide folders in main view +* makes use of EXIF thumbnails optional +* fixes file deletion of multiple files +* fixes `setParentFolderLabels = false` +* fixes shell-arg and RegExp escape issues +* cleans code +* updates info page `/_h5ai` +* adds `aiff` to `audio` types +* adds `da` translation by Ronnie Milbo +* updates to `pl` translation by Mark + + +## v0.23.0 - *2013-07-21* + +* removes `aai` mode! +* drops support for IE7+8 (simple fallback, same as no javascript) +* uses History API if available (way faster browsing) +* faster thumbnail generation if EXIF thumbnails available +* adds optional custom headers/footers that are propageted to all subfolders +* optional hide parent folder links +* some fixes on previews +* speeds up packaged downloads +* add line wrap and line highlighting (on hover) to text preview +* new design (colors, images) +* now uses scalable images for the interface +* fixes filter (ignore parent folder, display of `no match`) +* lots of small fixes +* updates `H5BP` to 4.2.0 +* updates `jQuery` to 2.0.3 +* updates `jQuery.mousewheel` to 3.1.3 +* updates `Moment.js` to 2.1.0 +* updates `markdown-js` to 0.4.0-9c21acdf08 +* updates `json2.js` to 2013-05-26 +* adds `uk` translation by Viktor Matveenko +* updates to `pl` translation by Mark + + +## v0.22.1 - *2012-10-16* + +* bug fix concerning API requests in PHP mode +* minor changes in responsive styles + + +## v0.22 - *2012-10-14* + +* general changes h5ai directory layout and configuration +* splits configuration file (`config.json`) into files `options.json`, `types.json` and `langs.json` +* localization now in separate files +* adds auto-refresh +* adds drag'n'drop upload (PHP, experimental) +* adds file deletion (PHP, experimental) +* cleans and improves PHP code +* PHP no longer respects htaccess restrictions (so be careful) +* PHP ignore patterns might include paths now +* improves separation between aai and php mode +* improves performance in aai mode +* adds optional binary prefixes for file sizes +* improves filter: autofocus on keypress, clear on `ESC` +* download packages now packaged relative to current folder +* download package name changable +* splits type `js` into `js` and `json` +* prevents some errors with files > 2GB on 32bit OS +* adds max subfolder size in tree view +* adds ctrl-click file selection +* adds Piwik analytics extension +* temp download packages are now stored in the `cache`-folder and deleted as soon as possible +* updates translations +* adds `he` translation by [Tomer Cohen](https://github.com/tomer) +* updates 3rd party libs + + +## v0.21 - *2012-08-06* + +* fixes misaligned image previews +* adds no JavaScript fallback to PHP version +* fixes duplicate tree entries and empty main views +* adds Google Analytics support (async) +* improves filter (now ignorecase, now only checks if chars in right order) +* adds keyboard support to image preview (space, enter, backspace, left, right, up, down, f, esc) +* adds text file preview and highlighting with [SyntaxHighlighter](http://alexgorbatchev.com/SyntaxHighlighter/) (same keys as img preview) +* adds Markdown preview with [markdown-js](https://github.com/evilstreak/markdown-js) +* adds new type `markdown` +* changes language code `gr` to `el` +* adds localization for filter placeholder +* adds `hu` translation by [Rodolffo](https://github.com/Rodolffo) +* updates to [jQuery.qrcode](https://larsjung.de/qrcode/) 0.2 +* updates to [jQuery.scrollpanel](https://larsjung.de/scrollpanel/) 0.1 +* updates to [modulejs](https://larsjung.de/modulejs/) 0.2 +* updates to [Moment.js](http://momentjs.com) 1.7.0 +* updates to [Underscore.js](http://underscorejs.org) 1.3.3 + + +## v0.20 - *2012-05-11* + +* adds image preview +* adds thumbnails for video and pdf +* adds support for lighttpd, nginx and cherokee and maybe other webservers with PHP +* adds folder size in PHP version via shell `du` +* fixes some localization problems +* updates info page at `/_h5ai/` +* switches to JSHint + + +## v0.19 - *2012-04-19* + +* adds lots of config options +* changes in `config.js` and `h5ai.htaccess` +* fixes js problems in IE 7+8 +* hides broken tree view in IE < 9, adds a message to the footer +* removes hash changes since they break logical browser history +* fixes thumbnail size for portrait images in icon view +* fixes problems with file type recognition +* adds an info page at `/_h5ai/` +* sort order is preserved while browsing +* removes PHP error messages on thumbnail generation +* fixes PHP some problems with packed download +* adds support for tarred downloads +* changes crumb image for folders with an index file +* adds `index.php` to use h5ai in non-Apache environments +* switches from [Datejs](http://www.datejs.com) to [Moment.js](http://momentjs.com) +* adds [underscore.js](http://underscorejs.org) +* fixes mousewheel problems, updates [jQuery.mousewheel](https://github.com/brandonaaron/jquery-mousewheel) to 3.0.6 +* updates `lv` translation +* adds `ro` translation by [Jakob Cosoroabă](https://github.com/midday) +* adds `ja` translation by [metasta](https://github.com/metasta) +* adds `nb` translation by [Sindre Sorhus](https://github.com/sindresorhus) +* adds `sr` translation by [vBm](https://github.com/vBm) +* adds `gr` translation by [xhmikosr](https://github.com/xhmikosr) + + +## v0.18 - *2012-02-24* + +* adds optional QRCode display +* adds optional filtering for displayed files and folders +* updates design +* improves zipped download +* adds support for zipped download of htaccess restricted files +* changes h5ai.htaccess +* custom headers/footers are now optional and disabled by default +* fixes problems with folder recognition in the JS version +* fixes include problems in PHP version +* fixes path problems on servers running on Windows in PHP version +* fixes broken links in custom headers/footers while zipped download enabled +* fixes problems with thumbnails for files with single or double quotes in filename +* improves url hashes +* updates year in `LICENSE.TXT` +* updates es translation +* adds `zh-tw` translation by [Yao Wei](https://github.com/medicalwei) +* updates `zh-cn` translation + + +## v0.17 - *2011-11-28* + +* h5ai is now located in `_h5ai` to reduce collisions +* switches from HTML5 Boilerplate reset to normalization +* adds some style changes for small devices +* configuration (options, types, translations) now via `config.js` +* icons for JS version are now configured via `config.js` +* sort order configuration changed +* sorting is now done without page reload +* adds `customHeader` and `customFooter` to `config.js` +* supports restricted folders to some extent +* some style changes on tree and language menu +* fixes total file/folder count in status bar +* adds support for use with userdir (requires some manual changes) + + +## v0.16 - *2011-11-02* + +* sorts translations in `options.js` +* improves HTML head sections +* refactors JavaScript and PHP a lot +* improves/fixes file selection for zipped download +* fixes scrollbar and header/footer link issues (didn't work when zipped download enabled) +* adds support for ctrl-select +* `dateFormat` in `options.js` changed, now affecting JS and PHP version +* `dateFormat` is localizable by adding it to a translation in `options.js` +* PHP version is now configurable via `php/config.php` (set custom doc root and other PHP related things) +* image thumbs and zipped download is disabled by default now, but works fine if PHP is configured + + +## v0.15.2 - *2011-09-18* + +* adds `it` translation by [Salvo Gentile](https://github.com/SalvoGentile) and [Marco Patriarca](https://github.com/Fexys) +* switches build process from scripp to wepp + + +## v0.15.1 - *2011-09-06* + +* fixes security issues with the zipped download feature +* makes zipped download optional (but enabled by default) + + +## v0.15 - *2011-09-04* + +* adds zipped download for selected files +* cleans and refactores + + +## v0.14.1 - *2011-09-01* + +* display meta information in bottom bar (icon view) +* adds `zh-cn` translation by [Dongsheng Cai](https://github.com/dongsheng) +* adds `pl` translation by Radosław Zając +* adds `ru` translation by Богдан Илюхин + + +## v0.14 - *2011-08-16* + +* adds image thumbnails for PHP version +* new option `slideTree` to turn off auto slide in + + +## v0.13.2 - *2011-08-12* + +* changes in `/h5ai/.htaccess` ... PHP configuration ... + + +## v0.13.1 - *2011-08-12* + +* fixes initial tree display +* adds sort order option +* adds/fixes some translations +* adds `lv` translation by Sandis Veinbergs + + +## v0.13 - *2011-08-06* + +* adds PHP implementation! (should work with PHP 5.2+) +* adds new options +* changes layout of the bottom bar to display status information +* adds language selector to the bottom bar +* quotes keys in `options.js` to make it valid json +* changes value of option `lang` from `undefined` to `null` +* adds some new keys to `h5aiLangs` +* adds browser caching rules for css and js +* adds `pt` translation by [Jonnathan](https://github.com/jonnsl) +* adds `bg` translation by George Andonov + + +## v0.12.3 - *2011-07-30* + +* adds `tr` translation by [Batuhan Icoz](https://github.com/batuhanicoz) + + +## v0.12.2 - *2011-07-30* + +* adds `es` translation by Jose David Calderon Serrano + + +## v0.12.1 - *2011-07-29* + +* fixes unchecked use of console.log + + +## v0.12 - *2011-07-28* + +* improves performance + + +## v0.11 - *2011-07-27* + +* changes license to MIT license, see `LICENSE.txt` + + +## v0.10.2 - *2011-07-26* + +* improves tree scrollbar + + +## v0.10.1 - *2011-07-24* + +* fixes problems with ' in links + + +## v0.10 - *2011-07-24* + +* fixes problems with XAMPP on Windows (see `dot.htaccess` comments for instructions) +* fixes tree fade-in-fade-out effect for small displays ([issue #6](https://github.com/lrsjng/h5ai/issues/6)) +* adds custom scrollbar to tree ([issue #6](https://github.com/lrsjng/h5ai/issues/6)) +* fixes broken links caused by URI encoding/decoding ([issue #9](https://github.com/lrsjng/h5ai/issues/9)) +* adds "empty" to localization (hope Google Translate did a good job here) + + +## v0.9 - *2011-07-18* + +* links hover states between crumb, extended view and tree +* fixes size of tree view (now there's a ugly scrollbar, hopefully will be fixed) +* refactores js to improve performance and cleaned code +* adds caching for folder status codes and content +* adds `fr` translation by [Nicolas](https://github.com/Nicosmos) +* adds `nl` translation by [Stefan de Konink](https://github.com/skinkie) +* adds `sv` translation by Oscar Carlsson + + +## v0.8 - *2011-07-08* + +* removes slashes from folder labels +* optionally rename parent folder entries to real folder names, see `options.js` +* long breadcrumbs (multiple rows) no longer hide content +* error folder icons are opaque now +* refactores js a lot (again...) + + +## v0.7 - *2011-07-07* + +* removes shadows +* smarter tree side bar + + +## v0.6 - *2011-07-05* + +* refactores js +* adds localization, see `options.js` + + +## v0.5.3 - *2011-07-04* + +* refactores js +* adds basic options support via `options.js` +* adds comments to `options.js` +* adds optional tree sidebar + + +## v0.5.2 - *2011-07-02* + +* details view adjusts to window width +* links icon for *.gz and *.bz2 + + +## v0.5.1 - *2011-07-01* + +* disables tree sidebar for now, since it had unwanted side effects + + +## v0.5 - *2011-07-01* + +* adds tree sidebar +* some refactorings + + +## v0.4 - *2011-06-27* + +* adds better fallback, in case JavaScript is disabled +* rewrites js, fixed middle-button click etc. problems +* refactors css +* sorts, adds and moves icons and images +* updates dot.access + + +## v0.3.2 - *2011-06-24* + +* removes lib versions from file names +* adds 'empty' indicator for icons view + + +## v0.3.1 - *2011-06-24* + +* refactores js +* adds `folderClick` and `fileClick` callback hooks +* fixes .emtpy style + + +## v0.3 - *2011-06-23* + +* includes build stuff, files previously found in the base directory are now located in folder `target` +* styles and scripts are now minified +* adds Modernizr 2.0.4 for future use +* updates jQuery to version 1.6.1 + + +## v0.2.3 - *2011-06-17* + +* more refactoring in main.js + + +## v0.2.2 - *2011-06-16* + +* refactores a lot, adds some comments +* includes fixes from [NumEricR](https://github.com/NumEricR) +* adds top/bottom message support, only basicly styled + + +## v0.2.1 - *2011-06-16* + +* fixes croped filenames +* fixes missing .png extension in header +* adds some color to the links +* adds changelog + + +## v0.2 - *2011-06-15* + +* adds icon view diff --git a/container/srv-http/root/srv/_h5ai/README.md b/container/srv-http/root/srv/_h5ai/README.md new file mode 100644 index 0000000..66eb547 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/README.md @@ -0,0 +1,72 @@ +# h5ai + +[![license][license-img]][github] [![web][web-img]][web] [![github][github-img]][github] + +A modern HTTP web server index for Apache httpd, lighttpd, nginx and Cherokee. + + +## Important + +* Do **not** install any files from the `src` folder, they need to be + preprocessed to work correctly! +* Find a preprocessed package and detailed install instructions on the + [project page][web]. +* For bug reports and feature requests please use [issues][github-issues]. + + +## Build + +There are installation ready packages for the latest [releases][release] and +[dev builds][develop]. But to build **h5ai** yourself either `git clone` or +download the repository. From within the root folder run the following +commands to find a fresh zipball in folder `build` (tested on linux only, +requires [`node 6.0+`][node] to be installed). + +~~~sh +> npm install +> npm run build +~~~ + + +## License + +The MIT License (MIT) + +Copyright (c) 2019 Lars Jung (https://larsjung.de) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## References + +**h5ai** profits from other projects, all of them licensed under the MIT license +too. Exceptions are some [Material Design icons][material-design-icons] (CC BY 4.0). + + +[web]: https://larsjung.de/h5ai/ +[github]: https://github.com/lrsjng/h5ai +[github-issues]: https://github.com/lrsjng/h5ai/issues +[release]: https://release.larsjung.de/h5ai/ +[develop]: https://release.larsjung.de/h5ai/develop/ +[node]: https://nodejs.org +[material-design-icons]: https://github.com/google/material-design-icons + +[license-img]: https://img.shields.io/badge/license-MIT-a0a060.svg?style=flat-square +[web-img]: https://img.shields.io/badge/web-larsjung.de/h5ai-a0a060.svg?style=flat-squa... +[github-img]: https://img.shields.io/badge/github-lrsjng/h5ai-a0a060.svg?style=flat-square diff --git a/container/srv-http/root/srv/_h5ai/private/cache/README.md b/container/srv-http/root/srv/_h5ai/private/cache/README.md new file mode 100755 index 0000000..60bc416 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/cache/README.md @@ -0,0 +1,9 @@ +# Cache + +Private cache. + +This directory is used for server side caching. To use caching make this +directory writable for your webserver. + +There is no critical data in here. You can savely remove any content. This +will clear the cache. diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json new file mode 100755 index 0000000..5150c7b --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/af.json @@ -0,0 +1,18 @@ +{ + "lang": "afrikaans", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "besonderhede", + "download": "aflaai", + "empty": "leeg", + "files": "lêers", + "filter": "filter", + "folders": "gidse", + "grid": "rooster", + "icons": "ikone", + "lastModified": "Laas verander", + "name": "Naam", + "noMatch": "geen resultaat", + "parentDirectory": "Hoër Vlak", + "size": "Grootte" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json new file mode 100755 index 0000000..6808e62 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/bg.json @@ -0,0 +1,18 @@ +{ + "lang": "български", + + "dateFormat": "DD-MM-YYYY HH:mm", + "details": "детайли", + "download": "изтегляне", + "empty": "празна", + "files": "файлове", + "filter": "филтър", + "folders": "директории", + "grid": "мрежа", + "icons": "икони", + "lastModified": "Последна промяна", + "name": "Име", + "noMatch": "няма съвпадение", + "parentDirectory": "Предходна директория", + "size": "Размер" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json new file mode 100755 index 0000000..1e34e61 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/cs.json @@ -0,0 +1,18 @@ +{ + "lang": "čeština", + + "dateFormat": "DD.MM.YYYY HH:mm", + "details": "Podrobnosti", + "download": "Stáhnout", + "empty": "Prázdná složka", + "files": "souborů", + "filter": "Filtr", + "folders": "složek", + "grid": "Seznam", + "icons": "Velké ikony", + "lastModified": "Datum změny", + "name": "Název", + "noMatch": "Žádná shoda", + "parentDirectory": "Nadřazený adresář", + "size": "Velikost" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json new file mode 100755 index 0000000..3b8fa06 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/da.json @@ -0,0 +1,18 @@ +{ + "lang": "dansk", + + "dateFormat": "DD-MM-YYYY HH:mm", + "details": "detaljer", + "download": "download", + "empty": "tom", + "files": "filer", + "filter": "filter", + "folders": "mapper", + "grid": "grid", + "icons": "ikoner", + "lastModified": "Sidst ændret", + "name": "Navn", + "noMatch": "ingen match", + "parentDirectory": "Overordnet mappe", + "size": "Størrelse" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json new file mode 100755 index 0000000..6d8c613 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/de.json @@ -0,0 +1,22 @@ +{ + "lang": "deutsch", + + "dateFormat": "DD.MM.YYYY HH:mm", + "details": "Details", + "download": "Download", + "empty": "leer", + "files": "Dateien", + "filter": "filtern", + "folders": "Ordner", + "grid": "Gitter", + "icons": "Icons", + "language": "Sprache", + "lastModified": "Geändert", + "name": "Name", + "noMatch": "keine Treffer", + "parentDirectory": "Übergeordnetes Verzeichnis", + "search": "suchen", + "size": "Größe", + "tree": "Baum", + "view": "Ansicht" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json new file mode 100755 index 0000000..2d9c00d --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/el.json @@ -0,0 +1,18 @@ +{ + "lang": "ελληνικά", + + "dateFormat": "DD/MM/YYYY HH:mm", + "details": "λεπτομέρειες", + "download": "μεταμόρφωση", + "empty": "κενό", + "files": "αρχεία", + "filter": "φίλτρο", + "folders": "φάκελοι", + "grid": "πλέγμα", + "icons": "εικονίδια", + "lastModified": "Τελευταία τροποποίηση", + "name": "Όνομα", + "noMatch": "κανένα αποτέλεσμα", + "parentDirectory": "Προηγούμενος Κατάλογος", + "size": "Μέγεθος" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json new file mode 100755 index 0000000..05e9b4e --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/en.json @@ -0,0 +1,23 @@ +/* only here as a reference, these values are the hardcoded defaults */ +{ + "lang": "english", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "details", + "download": "download", + "empty": "empty", + "files": "files", + "filter": "filter", + "folders": "folders", + "grid": "grid", + "icons": "icons", + "language": "Language", + "lastModified": "Last modified", + "name": "Name", + "noMatch": "no match", + "parentDirectory": "Parent Directory", + "search": "search", + "size": "Size", + "tree": "Tree", + "view": "View" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json new file mode 100755 index 0000000..e42a5b9 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/es.json @@ -0,0 +1,22 @@ +{ + "lang": "español", + + "dateFormat": "DD/MM/YYYY HH:mm", + "details": "Detalles", + "download": "Descargar", + "empty": "vacío", + "files": "Archivos", + "filter": "Filtrar", + "folders": "Directorios", + "grid": "Cuadrícula", + "icons": "Íconos", + "language": "Idioma", + "lastModified": "Última modificación", + "name": "Nombre", + "noMatch": "Sin coincidencias", + "parentDirectory": "Directorio superior", + "search": "buscar", + "size": "Tamaño", + "tree": "Arbol", + "view": "Vista" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json new file mode 100755 index 0000000..8f3d1dc --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/et.json @@ -0,0 +1,22 @@ +{ + "lang": "estonian", + + "dateFormat": "DD-MM-YYYY HH.mm", + "details": "täpsem info", + "download": "laadi alla", + "empty": "tühi", + "files": "failid", + "filter": "filter", + "folders": "kataloogid", + "grid": "võre", + "icons": "ikoonid", + "language": "Keel", + "lastModified": "Viimati muudetud", + "name": "Nimi", + "noMatch": "ei leitud sobivat", + "parentDirectory": "Emakataloog", + "search": "otsi", + "size": "Suurus", + "tree": "Puu", + "view": "Vaade" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json new file mode 100755 index 0000000..c19c0ed --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fi.json @@ -0,0 +1,18 @@ +{ + "lang": "finnish", + + "dateFormat": "DD.MM.YYYY HH:mm", + "details": "tiedot", + "download": "lataa", + "empty": "tyhjä", + "files": "tiedostoa", + "filter": "suodata", + "folders": "hakemistoa", + "grid": "ruudukko", + "icons": "ikonit", + "lastModified": "Viimeksi muokattu", + "name": "Nimi", + "noMatch": "ei osumia", + "parentDirectory": "Ylähakemisto", + "size": "Koko" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json new file mode 100755 index 0000000..9a4ac45 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/fr.json @@ -0,0 +1,22 @@ +{ + "lang": "français", + + "dateFormat": "DD/MM/YYYY HH:mm", + "details": "détails", + "download": "télécharger", + "empty": "vide", + "files": "Fichiers", + "filter": "filtrer", + "folders": "Répertoires", + "grid": "grille", + "icons": "icônes", + "language": "Langue", + "lastModified": "Dernière modification", + "name": "Nom", + "noMatch": "rien trouvé", + "parentDirectory": "Dossier parent", + "search": "rechercher", + "size": "Taille", + "tree": "Arborescence", + "view": "Disposition" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json new file mode 100755 index 0000000..bb37f7f --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/he.json @@ -0,0 +1,17 @@ +{ + "lang": "עברית", + + "dateFormat": "DD.MM.YYYY HH:mm", + "details": "פרטים", + "download": "הורדה", + "empty": "ריק", + "files": "קבצים", + "filter": "סינון", + "folders": "תיקיות", + "icons": "צלמיות", + "lastModified": "שינוי אחרון", + "name": "שם", + "noMatch": "אין תוצאות", + "parentDirectory": "תיקיית הורה", + "size": "גודל" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json new file mode 100755 index 0000000..5941733 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hi.json @@ -0,0 +1,18 @@ +{ + "lang": "हिंदी", + + "dateFormat": "DD.MM.YYYY HH:mm", + "details": "विस्तार", + "download": "डाउनलोड", + "empty": "खाली", + "files": "फ़ाइलें", + "filter": "फ़िल्टर", + "folders": "फोल्डर", + "grid": "ग्रिड", + "icons": "आइकॉन", + "lastModified": "पिछला परिवर्तन", + "name": "नाम", + "noMatch": "कोई समानता नहीं", + "parentDirectory": "मूल डायरेक्टरी", + "size": "माप" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json new file mode 100755 index 0000000..c044db4 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hr.json @@ -0,0 +1,18 @@ +{ + "lang": "hrvatski", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "detalji", + "download": "preuzmi", + "empty": "prazno", + "files": "datoteka", + "filter": "filter", + "folders": "direktorij(a)", + "grid": "mreža", + "icons": "ikone", + "lastModified": "Posljednja izmjena", + "name": "Naziv", + "noMatch": "nema rezultata", + "parentDirectory": "Natrag", + "size": "Veličina" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json new file mode 100755 index 0000000..b2c1b34 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/hu.json @@ -0,0 +1,16 @@ +{ + "lang": "magyar", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "részletek", + "download": "letöltés", + "empty": "üres", + "files": "fájlok", + "folders": "mappák", + "icons": "ikonok", + "lastModified": "Utoljára módosítva", + "name": "Név", + "noMatch": "nincs találat", + "parentDirectory": "Szülő könyvtár", + "size": "Méret" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json new file mode 100755 index 0000000..cd83337 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/it.json @@ -0,0 +1,18 @@ +{ + "lang": "italiano", + + "dateFormat": "DD-MM-YYYY HH:mm", + "details": "dettagli", + "download": "download", + "empty": "vuota", + "files": "file", + "filter": "filtra", + "folders": "cartelle", + "grid": "griglia", + "icons": "icone", + "lastModified": "Ultima modifica", + "name": "Nome", + "noMatch": "nessun risultato", + "parentDirectory": "Cartella Superiore", + "size": "Dimensione" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json new file mode 100755 index 0000000..88266e7 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ja.json @@ -0,0 +1,20 @@ +{ + "lang": "日本語", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "詳細", + "download": "ダウンロード", + "empty": "(空)", + "files": "ファイル", + "filter": "フィルター", + "folders": "フォルダー", + "grid": "グリッド", + "icons": "アイコン", + "language": "言語", + "lastModified": "最終変更日時", + "name": "名前", + "noMatch": "一致する項目が見つかりません", + "parentDirectory": "親ディレクトリへ", + "size": "サイズ", + "view": "ビュー" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json new file mode 100755 index 0000000..8c48cdb --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ko.json @@ -0,0 +1,22 @@ +{ + "lang": "한국어", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "자세히", + "download": "다운로드", + "empty": "빈 폴더", + "files": "파일", + "filter": "필터", + "folders": "폴더", + "grid": "그리드", + "icons": "아이콘", + "language": "언어", + "lastModified": "최근 수정일", + "name": "파일명", + "noMatch": "해당파일이 없습니다.", + "parentDirectory": "상위폴더", + "search": "검색", + "size": "크기", + "tree": "트리", + "view": "보기" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json new file mode 100755 index 0000000..fa672ce --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/lv.json @@ -0,0 +1,22 @@ +{ + "lang": "latviešu", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "detaļas", + "download": "lejupielādēt", + "empty": "tukšs", + "files": "faili", + "filter": "filtrēt", + "folders": "mapes", + "grid": "režģis", + "icons": "ikonas", + "language": "Valoda", + "lastModified": "Pēdējoreiz modificēts", + "name": "Nosaukums", + "noMatch": "nav sakritības", + "parentDirectory": "Vecākdirektorijs", + "search": "meklēt", + "size": "Izmērs", + "tree": "Koks", + "view": "Skats" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json new file mode 100755 index 0000000..44a1797 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nb.json @@ -0,0 +1,15 @@ +{ + "lang": "norwegian", + + "details": "detaljer", + "download": "last ned", + "empty": "tom", + "files": "filer", + "folders": "mapper", + "icons": "ikoner", + "lastModified": "Sist endret", + "name": "Navn", + "noMatch": "ingen treff", + "parentDirectory": "Overordnet mappe", + "size": "Størrelse" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json new file mode 100755 index 0000000..8310f05 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/nl.json @@ -0,0 +1,22 @@ +{ + "lang": "nederlands", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "details", + "download": "download", + "empty": "leeg", + "files": "bestanden", + "filter": "filter", + "folders": "mappen", + "grid": "grid", + "icons": "iconen", + "language": "Taal", + "lastModified": "Laatste wijziging", + "name": "Naam", + "noMatch": "geen overeenkomst", + "parentDirectory": "Bovenliggende map", + "search": "zoeken", + "size": "Grootte", + "tree": "Boom", + "view": "Bekijk" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json new file mode 100755 index 0000000..da56967 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pl.json @@ -0,0 +1,22 @@ +{ + "lang": "polski", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "szczegóły", + "download": "pobierz", + "empty": "pusty", + "files": "plików", + "filter": "filtr", + "folders": "folderów", + "grid": "kafelki", + "icons": "ikony", + "language": "Język", + "lastModified": "Ostatnia modyfikacja", + "name": "Nazwa", + "noMatch": "nie znaleziono", + "parentDirectory": "Katalog nadrzędny", + "search": "szukaj", + "size": "Rozmiar", + "tree": "Drzewo", + "view": "Układ" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json new file mode 100755 index 0000000..acd7fea --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/pt.json @@ -0,0 +1,18 @@ +{ + "lang": "português", + + "dateFormat": "DD-MM-YYYY HH:mm", + "details": "detalhes", + "download": "descarregar", + "empty": "vazio", + "files": "arquivos", + "filter": "filtro", + "folders": "pastas", + "grid": "grelha", + "icons": "ícones", + "lastModified": "última modificação", + "name": "Nome", + "noMatch": "sem resultados", + "parentDirectory": "diretório acima", + "size": "Tamanho" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json new file mode 100755 index 0000000..4981dfe --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ro.json @@ -0,0 +1,15 @@ +{ + "lang": "română", + + "details": "detalii", + "download": "descarcă", + "empty": "gol", + "files": "fişiere", + "folders": "dosar", + "icons": "pictograme", + "lastModified": "ultima modificare", + "name": "nume", + "noMatch": "0 rezultate", + "parentDirectory": "dosar părinte", + "size": "mărime" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json new file mode 100755 index 0000000..8056a0d --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/ru.json @@ -0,0 +1,20 @@ +{ + "lang": "русский", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "Детали", + "download": "Скачать", + "empty": "Пусто", + "files": "Файлы", + "filter": "Фильтр", + "folders": "Папки", + "grid": "Сетка", + "icons": "Иконки", + "language": "Язык", + "lastModified": "Последние изменения", + "name": "Имя", + "noMatch": "Нет совпадений", + "parentDirectory": "Главная директория", + "size": "Размер", + "view": "Вид" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json new file mode 100755 index 0000000..cfc9e45 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sk.json @@ -0,0 +1,13 @@ +{ + "lang": "slovenčina", + + "details": "podrobnosti", + "empty": "prázdny", + "files": "súborov", + "folders": "priečinkov", + "icons": "ikony", + "lastModified": "Upravené", + "name": "Názov", + "parentDirectory": "Nadriadený priečinok", + "size": "Velkosť" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json new file mode 100755 index 0000000..5cdda21 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sl.json @@ -0,0 +1,18 @@ +{ + "lang": "slovenščina", + + "dateFormat": "DD. MM. YYYY HH:mm", + "details": "podrobnosti", + "download": "prenesi", + "empty": "prazno", + "files": "datoteke", + "filter": "filter", + "folders": "mape", + "grid": "mreža", + "icons": "ikone", + "lastModified": "Zadnja sprememba", + "name": "Ime", + "noMatch": "ni zadetkov", + "parentDirectory": "Nadrejena mapa", + "size": "Velikost" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json new file mode 100755 index 0000000..845eeab --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sr.json @@ -0,0 +1,15 @@ +{ + "lang": "srpski", + + "details": "detalji", + "download": "download", + "empty": "prazno", + "files": "fajlovi", + "folders": "direktorijum", + "icons": "ikone", + "lastModified": "Poslednja modifikacija", + "name": "Ime", + "noMatch": "bez poklapanja", + "parentDirectory": "Roditeljski direktorijum", + "size": "Veličina" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json new file mode 100755 index 0000000..75638e5 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/sv.json @@ -0,0 +1,16 @@ +{ + "lang": "svenska", + + "details": "detaljerad", + "download": "ladda ner", + "empty": "tom", + "files": "filer", + "folders": "kataloger", + "grid": "rutnät", + "icons": "ikoner", + "lastModified": "Senast ändrad", + "name": "Filnamn", + "noMatch": "ingen matchning", + "parentDirectory": "Till överordnad mapp", + "size": "Filstorlek" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json new file mode 100755 index 0000000..45cfc92 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/tr.json @@ -0,0 +1,14 @@ +{ + "lang": "türkçe", + + "details": "detaylar", + "download": "indir", + "empty": "boş", + "files": "dosyalar", + "folders": "klasörler", + "icons": "ikonlar", + "lastModified": "Son Düzenleme", + "name": "İsim", + "parentDirectory": "Üst Dizin", + "size": "Boyut" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json new file mode 100755 index 0000000..62908f5 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/uk.json @@ -0,0 +1,18 @@ +{ + "lang": "українська", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "Деталі", + "download": "Завантажити", + "empty": "Порожньо", + "files": "Файли(ів)", + "filter": "Фільтр", + "folders": "Тек(и)", + "grid": "Гратка", + "icons": "Піктограми", + "lastModified": "Останні зміни", + "name": "Ім'я", + "noMatch": "Немає співпадінь", + "parentDirectory": "Головна тека", + "size": "Розмір" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json new file mode 100755 index 0000000..7cdba51 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-cn.json @@ -0,0 +1,23 @@ +{ + "lang": "简体中文", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "详情", + "download": "下载", + "empty": "空文件夹", + "files": "文件", + "filter": "过滤", + "folders": "文件夹", + "grid": "网格", + "icons": "图标", + "language": "语言", + "lastModified": "修改时间", + "name": "文件名", + "noMatch": "无匹配项", + "parentDirectory": "父文件夹", + "search": "搜索", + "size": "大小", + "tree": "树形目录", + "view": "视图", + "info": "信息" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json new file mode 100755 index 0000000..7567f0d --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/l10n/zh-tw.json @@ -0,0 +1,23 @@ +{ + "lang": "正體中文", + + "dateFormat": "YYYY-MM-DD HH:mm", + "details": "詳細資料", + "download": "下載", + "empty": "空資料夾", + "files": "檔案", + "filter": "過濾", + "folders": "資料夾", + "grid": "網格", + "icons": "圖示", + "language": "語言", + "lastModified": "上次修改", + "name": "檔名", + "noMatch": "沒有符合的檔案", + "parentDirectory": "上層目錄", + "search": "搜尋", + "size": "大小", + "tree": "樹形目錄", + "view": "檢視", + "info": "資訊" +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/options.json b/container/srv-http/root/srv/_h5ai/private/conf/options.json new file mode 100755 index 0000000..69a7add --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/options.json @@ -0,0 +1,392 @@ +/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */ +{ + /* + Password hash. + + SHA512 hash of the info page password, the preset password is the empty string. + Online hash generator: http://md5hashing.net/hashing/sha512 + */ + "passhash": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", + + + + /* + Resources. + + Additional script and style tags added to all pages. Paths not beginning + with "http://", "https://" or "/" will be looked up relative to + "_h5ai/public/ext/" (no check for existence). + + - scripts: array of strings + - styles: array of strings + */ + "resources": { + "scripts": [], + "styles": [ + "//fonts.googleapis.com/css?family=Ubuntu:300,400,700%7CUbuntu+Mono:400,700" + ] + }, + + + + /* + General view options. + + - binaryPrefix: boolean, set to true uses 1024B=1KiB when formatting file sizes (see http://en.wikipedia.org/wiki/Binary_prefix) + - disableSidebar: boolean, hides sidebar and toggle button + - fallbackMode: boolean, serve fallback mode + - fastBrowsing: boolean, use History API if available (no need to reload the whole page) + - fonts: array of strings, fonts to use in regular context + - fontsMono: array of strings, fonts to use in monopspaced context + - hidden: array of strings, don't list items matching these regular expressions + - hideFolders: boolean, hide all folders in the main view + - hideIf403: boolean, hide files and folders that are not readable by the server + - hideParentFolder: boolean, hide parent folder links in the main view + - maxIconSize: number, max size for icons in the main view + - modes: array of strings, subset of ["details", "grid", "icons"] + the first value indicates the default view mode. If only one value + is given the view mode is fixed and the selector buttons are hidden. + The user selected view mode is also stored local in modern browsers + so that it will be persistent. + - modeToggle: boolean, show a view mode toggle in the toolbar, or "next" + - setParentFolderLabels: boolean, set parent folder labels to real folder names + - sizes: array of numbers + the first value indicates the default view size. If only one value + is given the view size is fixed and the selector buttons are hidden. + The user selected view size is also stored local in modern browsers + so that it will be persistent. + - theme: string, name of one of the folders in "_h5ai/images/themes", defaults to "default" + - unmanaged: array of strings, don't manage folders containing one of those files + - unmanagedInNewWindow: boolean, open unmanaged links in new window/tab + */ + "view": { + "binaryPrefix": false, + "disableSidebar": false, + "fallbackMode": false, + "fastBrowsing": true, + "fonts": ["Ubuntu", "Roboto", "Helvetica", "Arial", "sans-serif"], + "fontsMono": ["Ubuntu Mono", "Monaco", "Lucida Sans Typewriter", "monospace"], + "hidden": ["^\.", "^_h5ai"], + "hideFolders": false, + "hideIf403": true, + "hideParentFolder": false, + "maxIconSize": 40, + "modes": ["details", "grid", "icons"], + "modeToggle": false, + "setParentFolderLabels": true, + "sizes": [20, 40, 60, 80, 100, 140, 180, 220, 260, 300], + "theme": "comity", + "unmanaged": ["index.html", "index.htm", "index.php"], + "unmanagedInNewWindow": false + }, + + + + /*** Extensions (in alphabetical order) ***/ + + /* + Watch and update current folder content. + + - interval: number, update interval in milliseconds, at least 1000 + */ + "autorefresh": { + "enabled": false, + "interval": 5000 + }, + + /* + Show a clickable breadcrumb. + */ + "crumb": { + "enabled": true + }, + + /* + Allow customized header and footer files. + First checks for files "_h5ai.header.html" and "_h5ai.footer.html" in the current directory. + If not successful it checks all parent directories (starting in the current directory) for + files "_h5ai.headers.html" and "_h5ai.footers.html". + Note the different filenames: "header" (only current) - "headers" (current and sub directories)! + The file's content will be placed inside a <div/> tag above/below the main content. + If a file's extension is ".md" instead of ".html" its content will be interpreted as markdown. + */ + "custom": { + "enabled": true + }, + + /* + Enable packaged download of selected entries. + To select files the "select"-extension needs to be enabled. + + - type: string, "php-tar", "shell-tar" or "shell-zip" + - packageName: string, basename of the download package, null for current filename or foldername + - alwaysVisible: boolean, always show download button (defaults to download the current folder) + */ + "download": { + "enabled": true, + "type": "php-tar", + "packageName": null, + "alwaysVisible": false + }, + + /* + Allow filtering the displayed files and folders in current folder. + Checks for substrings. + + If advanced is enabled it checks entries for right order of characters, + i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated + sequences get OR-ed. Searches will be treated as JavaScript regular + expressions if you prefix them with "re:". + + - advanced: boolean, use advanced pattern parsing + - debounceTime: number, debounce wait time in milliseconds + - ignorecase: boolean, ignore case + */ + "filter": { + "enabled": false, + "advanced": true, + "debounceTime": 100, + "ignorecase": true + }, + + /* + Calc the size of folders. + This operation is real slow. The calculated sizes differ slightly for both + calculation types since "php" only adds the file size, while "shell-du" + also adds the sizes for the actual folder files. + + - type: string, "php" (sloooow) or "shell-du" (sloow) + */ + "foldersize": { + "enabled": true, + "type": "php" + }, + + /* + Adds Google Universial Analytics asynchronous tracking code. + see: https://developers.google.com/analytics/devguides/collection/analyticsjs/ + + - id: string, account ID + */ + "google-analytics-ua": { + "enabled": false, + "id": "UA-000000-0" + }, + + /* + Enable a generic info side bar. + + - show: boolean, initial visible to first time users + - qrcode: boolean, show a QR-Code + - qrColor: string, QR-Code fill color + */ + "info": { + "enabled": true, + "show": false, + "qrcode": true, + "qrFill": "#999", + "qrBack": "#fff" + }, + + /* + Localization, for example "en", "de" etc. - see "_h5ai/conf/l10n" folder for + possible values. Adjust it to your needs. If lang is not found + it defaults to "en". + + - lang: string, default language + - useBroserLang: boolean, try to use browser language + */ + "l10n": { + "enabled": true, + "lang": "en", + "useBrowserLang": true + }, + + /* + Adds Piwik tracker javascript code. + + - baseURL: string, do not include the protocol, e.g. "mydomain.tld/piwik" + - idSite: number + */ + "piwik-analytics": { + "enabled": false, + "baseURL": "some/url", + "idSite": 1 + }, + + /* + Play a audio preview on click. + + - autoplay: start playing as soon as ready + - types: array of strings + */ + "preview-aud": { + "enabled": true, + "autoplay": true, + "types": ["aud"] + }, + + /* + Show an image preview on click. + + - types: array of strings + - size: number, sample size, or false for original size + */ + "preview-img": { + "enabled": true, + "size": false, + "types": ["img", "img-bmp", "img-gif", "img-ico", "img-jpg", "img-png", "img-raw", "img-svg"] + }, + + /* + Show text file preview on click. + + Available styles are: + 0: floating text + 1: fixed width text + 2: markdown + 3: syntax highlighting + + - styles: dict string to int, maps types to styles + */ + "preview-txt": { + "enabled": true, + "styles": { + "txt": 1, + "txt-authors": 1, + "txt-c": 3, + "txt-cpp": 3, + "txt-css": 3, + "txt-diff": 1, + "txt-go": 3, + "txt-h": 3, + "txt-hpp": 3, + "txt-install": 1, + "txt-js": 3, + "txt-json": 3, + "txt-less": 3, + "txt-license": 1, + "txt-log": 1, + "txt-makefile": 1, + "txt-md": 2, + "txt-py": 3, + "txt-rb": 3, + "txt-readme": 1, + "txt-rtf": 1, + "txt-rust": 3, + "txt-script": 3, + "txt-xml": 1 + } + }, + + /* + Play a video preview on click. + + - autoplay: start playing as soon as ready + - types: array of strings + */ + "preview-vid": { + "enabled": true, + "autoplay": true, + "types": ["vid-avi", "vid-flv", "vid-mkv", "vid-mov", "vid-mp4", "vid-mpg", "vid-webm"] + }, + + /* + Allow searching files and folders in and below current folder. + Checks for substrings. + + If advanced is enabled it checks entries for right order of characters, + i.e. "ab" matches "ab", "axb", "xaxbx" but not "ba". Space separated + sequences get OR-ed. Searches will be treated as JavaScript regular + expressions if you prefix them with "re:". + + - advanced: boolean, use advanced pattern parsing + - debounceTime: number, debounce wait time in milliseconds + - ignorecase: boolean, ignore case + */ + "search": { + "enabled": false, + "advanced": true, + "debounceTime": 300, + "ignorecase": true + }, + + /* + Make entries selectable. + At the moment only needed for packaged download. + + - clickndrag: boolean, allow first mouse button + drag selection + - checkboxes: boolean, show a checkbox on mouse over item + */ + "select": { + "enabled": true, + "clickndrag": true, + "checkboxes": true + }, + + /* + Default sort order. + "column" and "reverse" are locally stored. + + - column: number, 0 for "Name", 1 for "Date", 2 for "Size" + - reverse: boolean, false for ascending, true for descending + - ignorecase: boolean, compare ignorecase + - natural: boolean, use natural sort order + - folders: number, where to place folders, 0 for "top", 1 for "in place", 2 for "bottom" + */ + "sort": { + "enabled": true, + "column": 0, + "reverse": false, + "ignorecase": true, + "natural": true, + "folders": 0 + }, + + /* + Show thumbnails for image files. Needs the "/_h5ai/cache" folder to be + writable for the web Server. + + - img: array of strings + - mov: array of strings + - doc: array of strings + - delay: number, delay in milliseconds after "dom-ready" before thumb-requesting starts + - size: number, size in pixel of the generated thumbnails + - exif: boolean, use included EXIF thumbs if possible + - chunksize: int, number of thumbs per request + */ + "thumbnails": { + "enabled": true, + "img": ["img-bmp", "img-gif", "img-ico", "img-jpg", "img-png"], + "mov": ["vid-avi", "vid-flv", "vid-mkv", "vid-mov", "vid-mp4", "vid-mpg", "vid-webm"], + "doc": ["x-pdf", "x-ps"], + "delay": 1, + "size": 240, + "exif": false, + "chunksize": 20 + }, + + /* + Replace window title with current breadcrumb. + */ + "title": { + "enabled": true + }, + + /* + Show a folder tree. + Note that this might affect performance significantly. + + - show: boolean, initial visible to first time users + - maxSubfolders: number, max number of subfolders to show in tree + - naturalSort: boolean, use natural sort order for folders + - ignorecase: boolean, sort ignorecase + */ + "tree": { + "enabled": true, + "show": true, + "maxSubfolders": 50, + "naturalSort": true, + "ignorecase": true + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/conf/types.json b/container/srv-http/root/srv/_h5ai/private/conf/types.json new file mode 100755 index 0000000..0b83a3e --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/conf/types.json @@ -0,0 +1,76 @@ +/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */ +{ + "ar": ["*.tar.bz2", "*.crx"], + "ar-apk": ["*.apk"], + "ar-deb": ["*.deb"], + "ar-gz": ["*.gz", "*.tar.gz", "*.tgz"], + "ar-rar": ["*.rar"], + "ar-rpm": ["*.rpm"], + "ar-tar": ["*.tar"], + "ar-zip": ["*.7z", "*.bz2", "*.jar", "*.lzma", "*.war", "*.z", "*.Z", "*.zip"], + "aud": ["*.aif", "*.aiff", "*.flac", "*.m4a", "*.mid", "*.mp3", "*.mpa", "*.ra", "*.ogg", "*.wav", "*.wma"], + "aud-pls": ["*.m3u", "*.m3u8", "*.pls"], + "bin": ["*.class", "*.o", "*.so"], + "bin-exe": ["*.bat", "*.cmd", "*.exe"], + "img": ["*.xpm"], + "img-bmp": ["*.bmp"], + "img-gif": ["*.gif"], + "img-ico": ["*.ico"], + "img-jpg": ["*.jpg", "*.jpeg"], + "img-png": ["*.png"], + "img-raw": ["*.cr2", "*.nef"], + "img-svg": ["*.svg"], + "img-tiff": ["*.tiff"], + "txt": ["*.text", "*.txt"], + "txt-build": ["*.pom", "build.xml", "pom.xml"], + "txt-c": ["*.c"], + "txt-cpp": ["*.cpp"], + "txt-css": ["*.css"], + "txt-diff": ["*.diff", "*.patch"], + "txt-go": ["*.go"], + "txt-h": ["*.h"], + "txt-html": ["*.htm", "*.html", "*.shtml", "*.xhtml"], + "txt-hpp": ["*.hpp"], + "txt-java": ["*.java"], + "txt-scala": ["*.scala"], + "txt-js": ["*.js"], + "txt-json": ["*.json"], + "txt-less": ["*.less"], + "txt-log": ["*.log", "changelog*"], + "txt-md": ["*.markdown", "*.md"], + "txt-php": ["*.php"], + "txt-py": ["*.py"], + "txt-rb": ["*.rb"], + "txt-rss": ["*.rss"], + "txt-rtf": ["*.rtf"], + "txt-rust": ["*.rs", "*.rlib"], + "txt-script": ["*.conf", "*.bsh", "*.csh", "*.ini", "*.ksh", "*.sh", "*.shar", "*.tcl", "*.zsh"], + "txt-source": [], + "txt-tex": ["*.tex"], + "txt-vcal": ["*.vcal"], + "txt-xml": ["*.xml"], + "vid": [], + "vid-avi": ["*.avi"], + "vid-flv": ["*.flv"], + "vid-mkv": ["*.mkv"], + "vid-mov": ["*.mov"], + "vid-mp4": ["*.mp4", "*.m4v"], + "vid-mpg": ["*.mpg"], + "vid-rm": ["*.rm"], + "vid-swf": ["*.swf"], + "vid-ts": ["*.ts"], + "vid-vob": ["*.vob"], + "vid-webm": ["*.webm"], + "vid-wmv": ["*.wmv"], + "x": [], + "x-bak": ["*.bak", "*~"], + "x-calc": ["*.ods", "*.ots", "*.xlr", "*.xls", "*.xlsx"], + "x-disc": ["*.cue", "*.iso"], + "x-doc": ["*.doc", "*.docx", "*.odm", "*.odt", "*.ott"], + "x-draw": ["*.drw"], + "x-eps": ["*.eps"], + "x-pdf": ["*.pdf"], + "x-pres": ["*.odp", "*.otp", "*.pps", "*.ppt", "*.pptx"], + "x-ps": ["*.ps"], + "x-psd": ["*.psd"] +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php b/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php new file mode 100755 index 0000000..4356523 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/class-bootstrap.php @@ -0,0 +1,45 @@ +<?php + +class Bootstrap { + private static $autopaths = ['core', 'ext']; + + public static function run() { + spl_autoload_register(['Bootstrap', 'autoload']); + putenv('LANG=en_US.UTF-8'); + setlocale(LC_CTYPE, 'en_US.UTF-8'); + date_default_timezone_set(@date_default_timezone_get()); + session_start(); + + $session = new Session($_SESSION); + $request = new Request($_REQUEST, file_get_contents('php://input')); + $setup = new Setup($request->query_boolean('refresh', false)); + $context = new Context($session, $request, $setup); + + if ($context->is_api_request()) { + (new Api($context))->apply(); + } elseif ($context->is_info_request()) { + $public_href = $setup->get('PUBLIC_HREF'); + $x_head_tags = $context->get_x_head_html(); + $fallback_mode = false; + require __DIR__ . '/pages/info.php'; + } else { + $public_href = $setup->get('PUBLIC_HREF'); + $x_head_tags = $context->get_x_head_html(); + $fallback_mode = $context->is_fallback_mode(); + $fallback_html = (new Fallback($context))->get_html(); + require __DIR__ . '/pages/index.php'; + } + } + + public static function autoload($class_name) { + $filename = 'class-' . strtolower($class_name) . '.php'; + + foreach (Bootstrap::$autopaths as $path) { + $file = __DIR__ . '/' . $path . '/' . $filename; + if (file_exists($file)) { + require_once $file; + return true; + } + } + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php new file mode 100755 index 0000000..30eadd1 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-api.php @@ -0,0 +1,109 @@ +<?php + +class Api { + private $context; + private $request; + private $setup; + + public function __construct($context) { + $this->context = $context; + $this->request = $context->get_request(); + $this->setup = $context->get_setup(); + } + + public function apply() { + $action = $this->request->query('action'); + $supported = ['download', 'get', 'login', 'logout']; + Util::json_fail(Util::ERR_UNSUPPORTED, 'unsupported action', !in_array($action, $supported)); + + $methodname = 'on_' . $action; + $this->$methodname(); + } + + private function on_download() { + Util::json_fail(Util::ERR_DISABLED, 'download disabled', !$this->context->query_option('download.enabled', false)); + + $as = $this->request->query('as'); + $type = $this->request->query('type'); + $base_href = $this->request->query('baseHref'); + $hrefs = $this->request->query('hrefs', ''); + + $archive = new Archive($this->context); + + set_time_limit(0); + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="' . $as . '"'); + header('Connection: close'); + $ok = $archive->output($type, $base_href, $hrefs); + + Util::json_fail(Util::ERR_FAILED, 'packaging failed', !$ok); + exit; + } + + private function on_get() { + $response = []; + + foreach (['langs', 'options', 'types'] as $name) { + if ($this->request->query_boolean($name, false)) { + $methodname = 'get_' . $name; + $response[$name] = $this->context->$methodname(); + } + } + + if ($this->request->query_boolean('setup', false)) { + $response['setup'] = $this->setup->to_jsono($this->context->is_admin()); + } + + if ($this->request->query_boolean('theme', false)) { + $theme = new Theme($this->context); + $response['theme'] = $theme->get_icons(); + } + + if ($this->request->query('items', false)) { + $href = $this->request->query('items.href'); + $what = $this->request->query_numeric('items.what'); + $response['items'] = $this->context->get_items($href, $what); + } + + if ($this->request->query('custom', false)) { + Util::json_fail(Util::ERR_DISABLED, 'custom disabled', !$this->context->query_option('custom.enabled', false)); + $href = $this->request->query('custom'); + $custom = new Custom($this->context); + $response['custom'] = $custom->get_customizations($href); + } + + if ($this->request->query('l10n', false)) { + Util::json_fail(Util::ERR_DISABLED, 'l10n disabled', !$this->context->query_option('l10n.enabled', false)); + $iso_codes = $this->request->query_array('l10n'); + $iso_codes = array_filter($iso_codes); + $response['l10n'] = $this->context->get_l10n($iso_codes); + } + + if ($this->request->query('search', false)) { + Util::json_fail(Util::ERR_DISABLED, 'search disabled', !$this->context->query_option('search.enabled', false)); + $href = $this->request->query('search.href'); + $pattern = $this->request->query('search.pattern'); + $ignorecase = $this->request->query_boolean('search.ignorecase', false); + $search = new Search($this->context); + $response['search'] = $search->get_items($href, $pattern, $ignorecase); + } + + if ($this->request->query('thumbs', false)) { + Util::json_fail(Util::ERR_DISABLED, 'thumbnails disabled', !$this->context->query_option('thumbnails.enabled', false)); + Util::json_fail(Util::ERR_UNSUPPORTED, 'thumbnails not supported', !$this->setup->get('HAS_PHP_JPEG')); + $thumbs = $this->request->query_array('thumbs'); + $response['thumbs'] = $this->context->get_thumbs($thumbs); + } + + Util::json_exit($response); + } + + private function on_login() { + $pass = $this->request->query('pass'); + Util::json_exit(['asAdmin' => $this->context->login_admin($pass)]); + } + + private function on_logout() { + Util::json_exit(['asAdmin' => $this->context->logout_admin()]); + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php new file mode 100755 index 0000000..5484f8f --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-context.php @@ -0,0 +1,294 @@ +<?php + +class Context { + private static $DEFAULT_PASSHASH = 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e'; + private static $AS_ADMIN_SESSION_KEY = 'AS_ADMIN'; + + private $session; + private $request; + private $setup; + private $options; + private $passhash; + + public function __construct($session, $request, $setup) { + $this->session = $session; + $this->request = $request; + $this->setup = $setup; + + $this->options = Json::load($this->setup->get('CONF_PATH') . '/options.json'); + + $this->passhash = $this->query_option('passhash', ''); + $this->options['hasCustomPasshash'] = strcasecmp($this->passhash, Context::$DEFAULT_PASSHASH) !== 0; + unset($this->options['passhash']); + } + + public function get_session() { + return $this->session; + } + + public function get_request() { + return $this->request; + } + + public function get_setup() { + return $this->setup; + } + + public function get_options() { + return $this->options; + } + + public function query_option($keypath = '', $default = null) { + return Util::array_query($this->options, $keypath, $default); + } + + public function get_types() { + return Json::load($this->setup->get('CONF_PATH') . '/types.json'); + } + + public function login_admin($pass) { + $this->session->set(Context::$AS_ADMIN_SESSION_KEY, strcasecmp(hash('sha512', $pass), $this->passhash) === 0); + return $this->session->get(Context::$AS_ADMIN_SESSION_KEY); + } + + public function logout_admin() { + $this->session->set(Context::$AS_ADMIN_SESSION_KEY, false); + return $this->session->get(Context::$AS_ADMIN_SESSION_KEY); + } + + public function is_admin() { + return $this->session->get(Context::$AS_ADMIN_SESSION_KEY); + } + + public function is_api_request() { + return strtolower($this->setup->get('REQUEST_METHOD')) === 'post'; + } + + public function is_info_request() { + return Util::starts_with($this->setup->get('REQUEST_HREF') . '/', $this->setup->get('PUBLIC_HREF')); + } + + public function is_text_browser() { + return preg_match('/curl|links|lynx|w3m/i', $this->setup->get('HTTP_USER_AGENT')) === 1; + } + + public function is_fallback_mode() { + return $this->query_option('view.fallbackMode', false) || $this->is_text_browser(); + } + + public function to_href($path, $trailing_slash = true) { + $rel_path = substr($path, strlen($this->setup->get('ROOT_PATH'))); + $parts = explode('/', $rel_path); + $encoded_parts = []; + foreach ($parts as $part) { + if ($part != '') { + $encoded_parts[] = rawurlencode($part); + } + } + + return Util::normalize_path($this->setup->get('ROOT_HREF') . implode('/', $encoded_parts), $trailing_slash); + } + + public function to_path($href) { + $rel_href = substr($href, strlen($this->setup->get('ROOT_HREF'))); + return Util::normalize_path($this->setup->get('ROOT_PATH') . '/' . rawurldecode($rel_href)); + } + + public function is_hidden($name) { + // always hide + if ($name === '.' || $name === '..') { + return true; + } + + foreach ($this->query_option('view.hidden', []) as $re) { + $re = Util::wrap_pattern($re); + if (preg_match($re, $name)) { + return true; + } + } + + return false; + } + + public function read_dir($path) { + $names = []; + if (is_dir($path)) { + foreach (scandir($path) as $name) { + if ( + $this->is_hidden($name) + || $this->is_hidden($this->to_href($path) . $name) + || (!is_readable($path . '/' . $name) && $this->query_option('view.hideIf403', false)) + ) { + continue; + } + $names[] = $name; + } + } + return $names; + } + + public function is_managed_href($href) { + return $this->is_managed_path($this->to_path($href)); + } + + public function is_managed_path($path) { + if (!is_dir($path) || strpos($path, '../') !== false || strpos($path, '/..') !== false || $path === '..') { + return false; + } + + if (strpos($path, $this->setup->get('PUBLIC_PATH')) === 0) { + return false; + } + + if (strpos($path, $this->setup->get('PRIVATE_PATH')) === 0) { + return false; + } + + foreach ($this->query_option('view.unmanaged', []) as $name) { + if (file_exists($path . '/' . $name)) { + return false; + } + } + + while ($path !== $this->setup->get('ROOT_PATH')) { + if (@is_dir($path . '/_h5ai/private/conf')) { + return false; + } + $parent_path = Util::normalize_path(dirname($path)); + if ($parent_path === $path) { + return false; + } + $path = $parent_path; + } + return true; + } + + public function get_current_path() { + $current_href = Util::normalize_path($this->setup->get('REQUEST_HREF'), true); + $current_path = $this->to_path($current_href); + + if (!is_dir($current_path)) { + $current_path = Util::normalize_path(dirname($current_path), false); + } + + return $current_path; + } + + public function get_items($href, $what) { + if (!$this->is_managed_href($href)) { + return []; + } + + $cache = []; + $folder = Item::get($this, $this->to_path($href), $cache); + + // add content of subfolders + if ($what >= 2 && $folder !== null) { + foreach ($folder->get_content($cache) as $item) { + $item->get_content($cache); + } + $folder = $folder->get_parent($cache); + } + + // add content of this folder and all parent folders + while ($what >= 1 && $folder !== null) { + $folder->get_content($cache); + $folder = $folder->get_parent($cache); + } + + uasort($cache, ['Item', 'cmp']); + $result = []; + foreach ($cache as $p => $item) { + $result[] = $item->to_json_object(); + } + + return $result; + } + + public function get_langs() { + $langs = []; + $l10n_path = $this->setup->get('CONF_PATH') . '/l10n'; + if (is_dir($l10n_path)) { + if ($dir = opendir($l10n_path)) { + while (($file = readdir($dir)) !== false) { + if (Util::ends_with($file, '.json')) { + $translations = Json::load($l10n_path . '/' . $file); + $langs[basename($file, '.json')] = $translations['lang']; + } + } + closedir($dir); + } + } + ksort($langs); + return $langs; + } + + public function get_l10n($iso_codes) { + $results = []; + + foreach ($iso_codes as $iso_code) { + $file = $this->setup->get('CONF_PATH') . '/l10n/' . $iso_code . '.json'; + $results[$iso_code] = Json::load($file); + $results[$iso_code]['isoCode'] = $iso_code; + } + + return $results; + } + + public function get_thumbs($requests) { + $hrefs = []; + + foreach ($requests as $req) { + $thumb = new Thumb($this); + $hrefs[] = $thumb->thumb($req['type'], $req['href'], $req['width'], $req['height']); + } + + return $hrefs; + } + + private function prefix_x_head_href($href) { + if (preg_match('@^(https?://|/)@i', $href)) { + return $href; + } + + return $this->setup->get('PUBLIC_HREF') . 'ext/' . $href; + } + + private function get_fonts_html() { + $fonts = $this->query_option('view.fonts', []); + $fonts_mono = $this->query_option('view.fontsMono', []); + + $html = '<style class="x-head">'; + + if (sizeof($fonts) > 0) { + $html .= '#root,input,select{font-family:"' . implode('","', $fonts) . '"!important}'; + } + + if (sizeof($fonts_mono) > 0) { + $html .= 'pre,code{font-family:"' . implode('","', $fonts_mono) . '"!important}'; + } + + $html .= '</style>'; + + return $html; + } + + public function get_x_head_html() { + $scripts = $this->query_option('resources.scripts', []); + $styles = $this->query_option('resources.styles', []); + + $html = ''; + + foreach ($styles as $href) { + $html .= '<link rel="stylesheet" href="' . $this->prefix_x_head_href($href) . '" class="x-head">'; + } + + foreach ($scripts as $href) { + $html .= '<script src="' . $this->prefix_x_head_href($href) . '" class="x-head"></script>'; + } + + $html .= $this->get_fonts_html(); + + return $html; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php new file mode 100755 index 0000000..7bd317f --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-fallback.php @@ -0,0 +1,54 @@ +<?php + +class Fallback { + private $context; + + public function __construct($context) { + $this->context = $context; + } + + public function get_html($path = null) { + if (!$path) { + $path = $this->context->get_current_path(); + } + $fallback_images_href = $this->context->get_setup()->get('PUBLIC_HREF') . 'images/fallback/'; + + $cache = []; + $folder = Item::get($this->context, $path, $cache); + $items = $folder->get_content($cache); + uasort($items, ['Item', 'cmp']); + + $html = '<table>'; + + $html .= '<tr>'; + $html .= '<th class="fb-i"></th>'; + $html .= '<th class="fb-n"><span>Name</span></th>'; + $html .= '<th class="fb-d"><span>Last modified</span></th>'; + $html .= '<th class="fb-s"><span>Size</span></th>'; + $html .= '</tr>'; + + if ($folder->get_parent($cache)) { + $html .= '<tr>'; + $html .= '<td class="fb-i"><img src="' . $fallback_images_href . 'folder-parent.png" alt="folder-parent"/></td>'; + $html .= '<td class="fb-n"><a href="..">Parent Directory</a></td>'; + $html .= '<td class="fb-d"></td>'; + $html .= '<td class="fb-s"></td>'; + $html .= '</tr>'; + } + + foreach ($items as $item) { + $type = $item->is_folder ? 'folder' : 'file'; + + $html .= '<tr>'; + $html .= '<td class="fb-i"><img src="' . $fallback_images_href . $type . '.png" alt="' . $type . '"/></td>'; + $html .= '<td class="fb-n"><a href="' . $item->href . '">' . basename($item->path) . '</a></td>'; + $html .= '<td class="fb-d">' . date('Y-m-d H:i', $item->date) . '</td>'; + $html .= '<td class="fb-s">' . ($item->size !== null ? intval($item->size / 1000) . ' KB' : '' ) . '</td>'; + $html .= '</tr>'; + } + + $html .= '</table>'; + + return $html; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php new file mode 100755 index 0000000..477f9e2 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-filesize.php @@ -0,0 +1,96 @@ +<?php + +class Filesize { + private static $cache = []; + + public static function getSize($path, $withFoldersize, $withDu) { + $fs = new Filesize(); + return $fs->size($path, $withFoldersize, $withDu); + } + + public static function getCachedSize($path, $withFoldersize, $withDu) { + if (array_key_exists($path, Filesize::$cache)) { + return Filesize::$cache[$path]; + } + + $size = Filesize::getSize($path, $withFoldersize, $withDu); + + Filesize::$cache[$path] = $size; + return $size; + } + + + private function __construct() {} + + private function read_dir($path) { + $paths = []; + if (is_dir($path)) { + foreach (scandir($path) as $name) { + if ($name !== '.' && $name !== '..') { + $paths[] = $path . '/' . $name; + } + } + } + return $paths; + } + + private function php_filesize($path, $recursive = false) { + // if (PHP_INT_SIZE < 8) { + // } + $size = @filesize($path); + + if (!is_dir($path) || !$recursive) { + return $size; + } + + foreach ($this->read_dir($path) as $p) { + $size += $this->php_filesize($p, true); + } + return $size; + } + + + private function exec($cmdv) { + $cmd = implode(' ', array_map('escapeshellarg', $cmdv)); + $lines = []; + $rc = null; + exec($cmd, $lines, $rc); + return $lines; + } + + private function exec_du_all($paths) { + $cmdv = array_merge(['du', '-sbL'], $paths); + $lines = $this->exec($cmdv); + + $sizes = []; + foreach ($lines as $line) { + $parts = preg_split('/[\s]+/', $line, 2); + $size = intval($parts[0], 10); + $path = $parts[1]; + $sizes[$path] = $size; + } + return $sizes; + } + + private function exec_du($path) { + $sizes = $this->exec_du_all([$path]); + return $sizes[$path]; + } + + + private function size($path, $withFoldersize = false, $withDu = false) { + if (is_file($path)) { + return $this->php_filesize($path); + } + + if (is_dir($path) && $withFoldersize) { + if ($withDu) { + return $this->exec_du($path); + } + + return $this->php_filesize($path, true); + } + + return null; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php new file mode 100755 index 0000000..2b9ce34 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-item.php @@ -0,0 +1,91 @@ +<?php + +class Item { + public static function cmp($item1, $item2) { + if ($item1->is_folder && !$item2->is_folder) { + return -1; + } + if (!$item1->is_folder && $item2->is_folder) { + return 1; + } + + return strcasecmp($item1->path, $item2->path); + } + + public static function get($context, $path, &$cache) { + if (!Util::starts_with($path, $context->get_setup()->get('ROOT_PATH'))) { + return null; + } + + if (is_array($cache) && array_key_exists($path, $cache)) { + return $cache[$path]; + } + + $item = new Item($context, $path); + + if (is_array($cache)) { + $cache[$path] = $item; + } + return $item; + } + + public $context; + public $path; + public $href; + public $date; + public $size; + public $is_folder; + public $is_content_fetched; + + private function __construct($context, $path) { + $this->context = $context; + + $this->path = Util::normalize_path($path, false); + $this->is_folder = is_dir($this->path); + $this->href = $context->to_href($this->path, $this->is_folder); + $this->date = @filemtime($this->path); + $this->size = Util::filesize($context, $this->path); + $this->is_content_fetched = false; + } + + public function to_json_object() { + $obj = [ + 'href' => $this->href, + 'time' => $this->date * 1000, // seconds (PHP) to milliseconds (JavaScript) + 'size' => $this->size + ]; + + if ($this->is_folder) { + $obj['managed'] = $this->context->is_managed_href($this->href); + $obj['fetched'] = $this->is_content_fetched; + } + + return $obj; + } + + public function get_parent(&$cache) { + $parent_path = Util::normalize_path(dirname($this->path), false); + if ($parent_path !== $this->path && Util::starts_with($parent_path, $this->context->get_setup()->get('ROOT_PATH'))) { + return Item::get($this->context, $parent_path, $cache); + } + return null; + } + + public function get_content(&$cache) { + $items = []; + + if (!$this->context->is_managed_href($this->href)) { + return $items; + } + + $files = $this->context->read_dir($this->path); + foreach ($files as $file) { + $item = Item::get($this->context, $this->path . '/' . $file, $cache); + $items[$item->path] = $item; + } + + $this->is_content_fetched = true; + + return $items; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php new file mode 100755 index 0000000..f662b9f --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-json.php @@ -0,0 +1,65 @@ +<?php + +class Json { + const SINGLE = 1; + const MULTI = 2; + + public static function load($path) { + if (!is_readable($path)) { + return []; + } + + $json = file_get_contents($path); + return Json::decode($json); + } + + public static function save($path, $obj) { + $json = json_encode($obj); + return file_put_contents($path, $json) !== false; + } + + private static function decode($json) { + $json = Json::strip($json); + return json_decode($json, true); + } + + private static function strip($commented_json) { + $insideString = false; + $insideComment = false; + $json = ''; + + for ($i = 0, $len = strlen($commented_json); $i < $len; $i += 1) { + $char = $commented_json[$i]; + $charchar = $char . @$commented_json[$i + 1]; + $prevChar = @$commented_json[$i - 1]; + + if (!$insideComment && $char === '"' && $prevChar !== "\\") { + $insideString = !$insideString; + } + + if ($insideString) { + $json .= $char; + } elseif (!$insideComment && $charchar === '//') { + $insideComment = Json::SINGLE; + $i += 1; + } elseif (!$insideComment && $charchar === '/*') { + $insideComment = Json::MULTI; + $i += 1; + } elseif (!$insideComment) { + $json .= $char; + } elseif ($insideComment === Json::SINGLE && $charchar === "\r\n") { + $insideComment = false; + $json .= $charchar; + $i += 1; + } elseif ($insideComment === Json::SINGLE && $char === "\n") { + $insideComment = false; + $json .= $char; + } elseif ($insideComment === Json::MULTI && $charchar === '*/') { + $insideComment = false; + $i += 1; + } + } + + return $json; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php new file mode 100755 index 0000000..504bb3c --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-logger.php @@ -0,0 +1,28 @@ +<?php + +class Logger { + private static $start; + private static $prev; + + private static function time() { + return microtime(true) * 1000; // sec * 1000 = ms + } + + public static function init() { + self::$start = self::time(); + self::$prev = self::$start; + register_shutdown_function(function () { Logger::log('shutdown'); }); + Logger::log('--------------------------------'); + } + + public static function log($message=null, $obj=null) { + $now = self::time(); + $message = number_format($now - self::$start, 3) . ' ' . number_format($now - self::$prev, 3) . ' ' . $message; + + @error_log($message . ' ' . var_export($obj, true)); + + self::$prev = $now; + } +} + +Logger::init(); diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php new file mode 100755 index 0000000..95bae09 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-request.php @@ -0,0 +1,38 @@ +<?php + +class Request { + private $params; + + public function __construct($params, $body) { + $data = json_decode($body, true); + $this->params = $data !== null ? $data : $params; + } + + public function query($keypath = '', $default = Util::NO_DEFAULT) { + $value = Util::array_query($this->params, $keypath, Util::NO_DEFAULT); + + if ($value === Util::NO_DEFAULT) { + Util::json_fail(Util::ERR_MISSING_PARAM, 'parameter \'' . $keypath . '\' is missing', $default === Util::NO_DEFAULT); + return $default; + } + + return $value; + } + + public function query_boolean($keypath = '', $default = Util::NO_DEFAULT) { + $value = $this->query($keypath, $default); + return filter_var($value, FILTER_VALIDATE_BOOLEAN); + } + + public function query_numeric($keypath = '', $default = Util::NO_DEFAULT) { + $value = $this->query($keypath, $default); + Util::json_fail(Util::ERR_ILLIGAL_PARAM, 'parameter \'' . $keypath . '\' is not numeric', !is_numeric($value)); + return intval($value, 10); + } + + public function query_array($keypath = '', $default = Util::NO_DEFAULT) { + $value = $this->query($keypath, $default); + Util::json_fail(Util::ERR_ILLIGAL_PARAM, 'parameter \'' . $keypath . '\' is no array', !is_array($value)); + return $value; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php new file mode 100755 index 0000000..630d78f --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-session.php @@ -0,0 +1,20 @@ +<?php + +class Session { + private static $KEY_PREFIX = '__H5AI__'; + private $store; + + public function __construct(&$store) { + $this->store = &$store; + } + + public function set($key, $value) { + $key = Session::$KEY_PREFIX . $key; + $this->store[$key] = $value; + } + + public function get($key, $default = null) { + $key = Session::$KEY_PREFIX . $key; + return array_key_exists($key, $this->store) ? $this->store[$key] : $default; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php new file mode 100755 index 0000000..d0c3fb2 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-setup.php @@ -0,0 +1,185 @@ +<?php + +class Setup { + private $store; + private $refresh; + + public function __construct($refresh = false) { + $this->store = []; + $this->refresh = $refresh; + + $this->add_globals_and_envs(); + $this->add_php_checks(); + $this->add_app_metadata(); + $this->add_server_metadata_and_check(); + $this->add_paths(); + $this->add_sys_cmd_checks(); + } + + private function set($key, $value) { + if (array_key_exists($key, $this->store)) { + Logger::log('setup key already taken', [ + 'key' => $key, + 'value' => $value, + 'found' => $this->store[$key] + ]); + exit; + } + if (!is_string($value) && !is_bool($value)) { + Logger::log('setup value neither string nor boolean', [ + 'key' => $key, + 'value' => $value + ]); + exit; + } + + $this->store[$key] = $value; + } + + public function get($key) { + if (!array_key_exists($key, $this->store)) { + Logger::log('setup key not found', ['key' => $key]); + exit; + } + + return $this->store[$key]; + } + + private function add_globals_and_envs() { + $this->set('PHP_VERSION', PHP_VERSION); + $this->set('MIN_PHP_VERSION', MIN_PHP_VERSION); + $this->set('PHP_ARCH', (PHP_INT_SIZE * 8) . '-bit'); + + $this->set('REQUEST_METHOD', $_SERVER['REQUEST_METHOD']); + $this->set('REQUEST_HREF', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); + $this->set('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']); + $this->set('SERVER_SOFTWARE', $_SERVER['SERVER_SOFTWARE']); + $this->set('HTTP_USER_AGENT', $_SERVER['HTTP_USER_AGENT']); + } + + private function add_php_checks() { + $this->set('HAS_PHP_EXIF', function_exists('exif_thumbnail')); + + $has_php_jpeg = false; + if (function_exists('gd_info')) { + $infos = gd_info(); + $has_php_jpeg = array_key_exists('JPEG Support', $infos) && $infos['JPEG Support']; + } + $this->set('HAS_PHP_JPEG', $has_php_jpeg); + } + + private function add_app_metadata() { + $this->set('NAME', 'h5ai'); + $this->set('VERSION', H5AI_VERSION); + $this->set('FILE_PREFIX', '_h5ai'); + } + + private function add_server_metadata_and_check() { + $server_software = $this->get('SERVER_SOFTWARE'); + $server_name = null; + $server_version = null; + + if ($server_software && preg_match('#^(.*?)(?:/(.*?))?(?: |$)#', strtolower($server_software), $matches)) { + $server_name = $matches[1]; + $server_version = count($matches) > 2 ? $matches[2] : ''; + } + + $this->set('SERVER_NAME', $server_name); + $this->set('SERVER_VERSION', $server_version); + $this->set('HAS_SERVER', in_array($server_name, ['apache', 'lighttpd', 'nginx', 'cherokee'])); + } + + private function add_paths() { + $script_name = $this->get('SCRIPT_NAME'); + if ($this->get('SERVER_NAME') === 'lighttpd') { + $script_name = preg_replace('#^.*?//#', '/', $script_name); + } + + $this->set('H5AI_HREF', Util::normalize_path(dirname(dirname($script_name)), true)); + $this->set('H5AI_PATH', Util::normalize_path(dirname(dirname(dirname(dirname(__FILE__)))), false)); + + $this->set('ROOT_HREF', Util::normalize_path(dirname($this->get('H5AI_HREF')), true)); + $this->set('ROOT_PATH', Util::normalize_path(dirname($this->get('H5AI_PATH')), false)); + + $this->set('PUBLIC_HREF', Util::normalize_path($this->get('H5AI_HREF') . '/public/', true)); + $this->set('PUBLIC_PATH', Util::normalize_path($this->get('H5AI_PATH') . '/public/', false)); + + $this->set('INDEX_HREF', Util::normalize_path($this->get('PUBLIC_HREF') . '/index.php', false)); + $this->set('CACHE_PUB_HREF', Util::normalize_path($this->get('PUBLIC_HREF') . '/cache', true)); + $this->set('CACHE_PUB_PATH', Util::normalize_path($this->get('PUBLIC_PATH') . '/cache', false)); + $this->set('HAS_WRITABLE_CACHE_PUB', @is_writable($this->get('CACHE_PUB_PATH'))); + + $this->set('PRIVATE_PATH', Util::normalize_path($this->get('H5AI_PATH') . '/private', false)); + $this->set('CONF_PATH', Util::normalize_path($this->get('PRIVATE_PATH') . '/conf', false)); + $this->set('CACHE_PRV_PATH', Util::normalize_path($this->get('PRIVATE_PATH') . '/cache', false)); + $this->set('HAS_WRITABLE_CACHE_PRV', @is_writable($this->get('CACHE_PRV_PATH'))); + } + + private function add_sys_cmd_checks() { + $cmds_cache_path = Util::normalize_path($this->get('CACHE_PRV_PATH') . '/cmds.json', false); + + $cmds = Json::load($cmds_cache_path); + if (sizeof($cmds) === 0 || $this->refresh) { + $cmds['command'] = Util::exec_0('command -v command'); + $cmds['which'] = Util::exec_0('which which') || Util::exec_0('which which.exe'); + + $cmd = false; + if ($cmds['command']) { + $cmd = 'command -v'; + } elseif ($cmds['which']) { + $cmd = 'which'; + } + + foreach (['avconv', 'convert', 'du', 'ffmpeg', 'gm', 'tar', 'zip'] as $c) { + $cmds[$c] = ($cmd !== false) && (Util::exec_0($cmd . ' ' . $c) || Util::exec_0($cmd . ' ' . $c . '.exe')); + } + + Json::save($cmds_cache_path, $cmds); + } + foreach ($cmds as $c => $has) { + $this->set('HAS_CMD_' . strtoupper($c), $has); + } + } + + public function to_jsono($as_admin = false) { + $keys = [ + 'PUBLIC_HREF', + 'ROOT_HREF' + ]; + + if ($as_admin) { + $keys = array_merge($keys, [ + 'VERSION', + + 'PHP_VERSION', + 'MIN_PHP_VERSION', + 'PHP_ARCH', + 'HAS_PHP_EXIF', + 'HAS_PHP_JPEG', + + 'SERVER_NAME', + 'SERVER_VERSION', + 'HAS_SERVER', + + 'INDEX_HREF', + + 'HAS_WRITABLE_CACHE_PUB', + 'HAS_WRITABLE_CACHE_PRV', + + 'HAS_CMD_AVCONV', + 'HAS_CMD_CONVERT', + 'HAS_CMD_DU', + 'HAS_CMD_FFMPEG', + 'HAS_CMD_GM', + 'HAS_CMD_TAR', + 'HAS_CMD_ZIP' + ]); + } + + $jsono = ['AS_ADMIN' => $as_admin]; + foreach ($keys as $key) { + $jsono[$key] = $this->get($key); + } + return $jsono; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php new file mode 100755 index 0000000..8fcaddd --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-theme.php @@ -0,0 +1,32 @@ +<?php + +class Theme { + private static $EXTENSIONS = ['svg', 'png', 'jpg']; + private $context; + + public function __construct($context) { + $this->context = $context; + } + + public function get_icons() { + $public_path = $this->context->get_setup()->get('PUBLIC_PATH'); + $theme = $this->context->query_option('view.theme', '-NONE-'); + $theme_path = $public_path . '/images/themes/' . $theme; + + $icons = []; + + if (is_dir($theme_path)) { + if ($dir = opendir($theme_path)) { + while (($name = readdir($dir)) !== false) { + $path_parts = pathinfo($name); + if (in_array(@$path_parts['extension'], Theme::$EXTENSIONS)) { + $icons[$path_parts['filename']] = $theme . '/' . $name; + } + } + closedir($dir); + } + } + + return $icons; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php b/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php new file mode 100755 index 0000000..ce6c802 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/core/class-util.php @@ -0,0 +1,89 @@ +<?php + +class Util { + const ERR_MISSING_PARAM = 'ERR_MISSING_PARAM'; + const ERR_ILLIGAL_PARAM = 'ERR_ILLIGAL_PARAM'; + const ERR_FAILED = 'ERR_FAILED'; + const ERR_DISABLED = 'ERR_DISABLED'; + const ERR_UNSUPPORTED = 'ERR_UNSUPPORTED'; + const NO_DEFAULT = 'NO_*@+#?!_DEFAULT'; + const RE_DELIMITER = '@'; + + public static function normalize_path($path, $trailing_slash = false) { + $path = preg_replace('#[\\\\/]+#', '/', $path); + return preg_match('#^(\w:)?/$#', $path) ? $path : (rtrim($path, '/') . ($trailing_slash ? '/' : '')); + } + + public static function json_exit($obj = []) { + header('Content-type: application/json;charset=utf-8'); + echo json_encode($obj); + exit; + } + + public static function json_fail($err, $msg = '', $cond = true) { + if ($cond) { + Util::json_exit(['err' => $err, 'msg' => $msg]); + } + } + + public static function array_query($array, $keypath = '', $default = Util::NO_DEFAULT) { + $value = $array; + + $keys = array_filter(explode('.', $keypath)); + foreach ($keys as $key) { + if (!is_array($value) || !array_key_exists($key, $value)) { + return $default; + } + $value = $value[$key]; + } + + return $value; + } + + public static function starts_with($sequence, $head) { + return substr($sequence, 0, strlen($head)) === $head; + } + + public static function ends_with($sequence, $tail) { + $len = strlen($tail); + return $len === 0 ? true : substr($sequence, -$len) === $tail; + } + + public static function wrap_pattern($pattern) { + return Util::RE_DELIMITER . str_replace(Util::RE_DELIMITER, '\\' . Util::RE_DELIMITER, $pattern) . Util::RE_DELIMITER; + } + + public static function passthru_cmd($cmd) { + $rc = null; + passthru($cmd, $rc); + return $rc; + } + + public static function exec_cmdv($cmdv) { + if (!is_array($cmdv)) { + $cmdv = func_get_args(); + } + $cmd = implode(' ', array_map('escapeshellarg', $cmdv)); + + $lines = []; + $rc = null; + exec($cmd, $lines, $rc); + return implode("\n", $lines); + } + + public static function exec_0($cmd) { + $lines = []; + $rc = null; + try { + @exec($cmd, $lines, $rc); + return $rc === 0; + } catch (Exception $e) {} + return false; + } + + public static function filesize($context, $path) { + $withFoldersize = $context->query_option('foldersize.enabled', false); + $withDu = $context->get_setup()->get('HAS_CMD_DU') && $context->query_option('foldersize.type', null) === 'shell-du'; + return Filesize::getCachedSize($path, $withFoldersize, $withDu); + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php new file mode 100755 index 0000000..fec07de --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-archive.php @@ -0,0 +1,183 @@ +<?php + +class Archive { + const NULL_BYTE = "\0"; + + private static $SEGMENT_SIZE = 16777216; // 1024 * 1024 * 16 = 16MiB + private static $TAR_PASSTHRU_CMD = 'cd [ROOTDIR] && tar --no-recursion -c -- [DIRS] [FILES]'; + private static $ZIP_PASSTHRU_CMD = 'cd [ROOTDIR] && zip - -- [FILES]'; + + private $context; + private $base_path; + private $dirs; + private $files; + + public function __construct($context) { + $this->context = $context; + } + + public function output($type, $base_href, $hrefs) { + $this->base_path = $this->context->to_path($base_href); + if (!$this->context->is_managed_path($this->base_path)) { + return false; + } + + $this->dirs = []; + $this->files = []; + + $this->add_hrefs($hrefs); + + if (count($this->dirs) === 0 && count($this->files) === 0) { + if ($type === 'php-tar') { + $this->add_dir($this->base_path, '/'); + } else { + $this->add_dir($this->base_path, '.'); + } + } + + if ($type === 'php-tar') { + return $this->php_tar($this->dirs, $this->files); + } elseif ($type === 'shell-tar') { + return $this->shell_cmd(Archive::$TAR_PASSTHRU_CMD); + } elseif ($type === 'shell-zip') { + return $this->shell_cmd(Archive::$ZIP_PASSTHRU_CMD); + } + return false; + } + + private function shell_cmd($cmd) { + $cmd = str_replace('[ROOTDIR]', escapeshellarg($this->base_path), $cmd); + $cmd = str_replace('[DIRS]', count($this->dirs) ? implode(' ', array_map('escapeshellarg', $this->dirs)) : '', $cmd); + $cmd = str_replace('[FILES]', count($this->files) ? implode(' ', array_map('escapeshellarg', $this->files)) : '', $cmd); + try { + Util::passthru_cmd($cmd); + } catch (Exeption $err) { + return false; + } + return true; + } + + private function php_tar($dirs, $files) { + $filesizes = []; + $total_size = 512 * count($dirs); + foreach (array_keys($files) as $real_file) { + $size = filesize($real_file); + + $filesizes[$real_file] = $size; + $total_size += 512 + $size; + if ($size % 512 != 0) { + $total_size += 512 - ($size % 512); + } + } + + header('Content-Length: ' . $total_size); + + foreach ($dirs as $real_dir => $archived_dir) { + echo $this->php_tar_header($archived_dir, 0, @filemtime($real_dir . DIRECTORY_SEPARATOR . '.'), 5); + } + + foreach ($files as $real_file => $archived_file) { + $size = $filesizes[$real_file]; + + echo $this->php_tar_header($archived_file, $size, @filemtime($real_file), 0); + $this->print_file($real_file); + + if ($size % 512 != 0) { + echo str_repeat(Archive::NULL_BYTE, 512 - ($size % 512)); + } + } + + return true; + } + + private function php_tar_header($filename, $size, $mtime, $type) { + $name = substr(basename($filename), -99); + $prefix = substr(Util::normalize_path(dirname($filename)), -154); + if ($prefix === '.') { + $prefix = ''; + } + + $header = + str_pad($name, 100, Archive::NULL_BYTE) // filename [100] + . '0000755' . Archive::NULL_BYTE // file mode [8] + . '0000000' . Archive::NULL_BYTE // uid [8] + . '0000000' . Archive::NULL_BYTE // gid [8] + . str_pad(decoct($size), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file size [12] + . str_pad(decoct($mtime), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file modification time [12] + . ' ' // checksum [8] + . str_pad($type, 1) // file type [1] + . str_repeat(Archive::NULL_BYTE, 100) // linkname [100] + . 'ustar' . Archive::NULL_BYTE // magic [6] + . '00' // version [2] + . str_repeat(Archive::NULL_BYTE, 80) // uname, gname, defmajor, devminor [32 + 32 + 8 + 8] + . str_pad($prefix, 155, Archive::NULL_BYTE) // filename [155] + . str_repeat(Archive::NULL_BYTE, 12); // fill [12] + assert(strlen($header) === 512); + + // checksum + $checksum = array_sum(array_map('ord', str_split($header))); + $checksum = str_pad(decoct($checksum), 6, '0', STR_PAD_LEFT) . Archive::NULL_BYTE . ' '; + $header = substr_replace($header, $checksum, 148, 8); + + return $header; + } + + private function print_file($file) { + // Send file content in segments to not hit PHP's memory limit (default: 128M) + if ($fd = fopen($file, 'rb')) { + while (!feof($fd)) { + print fread($fd, Archive::$SEGMENT_SIZE); + @ob_flush(); + @flush(); + } + fclose($fd); + } + } + + private function add_hrefs($hrefs) { + foreach ($hrefs as $href) { + if (trim($href) === '') { + continue; + } + + $d = Util::normalize_path(dirname($href), true); + $n = basename($href); + + if ($this->context->is_managed_href($d) && !$this->context->is_hidden($n)) { + + $real_file = $this->context->to_path($href); + $archived_file = preg_replace('!^' . preg_quote(Util::normalize_path($this->base_path, true)) . '!', '', $real_file); + + if (is_dir($real_file)) { + $this->add_dir($real_file, $archived_file); + } else { + $this->add_file($real_file, $archived_file); + } + } + } + } + + private function add_file($real_file, $archived_file) { + if (is_readable($real_file)) { + $this->files[$real_file] = $archived_file; + } + } + + private function add_dir($real_dir, $archived_dir) { + if ($this->context->is_managed_path($real_dir)) { + $this->dirs[$real_dir] = $archived_dir; + + $files = $this->context->read_dir($real_dir); + foreach ($files as $file) { + $real_file = $real_dir . '/' . $file; + $archived_file = $archived_dir . '/' . $file; + + if (is_dir($real_file)) { + $this->add_dir($real_file, $archived_file); + } else { + $this->add_file($real_file, $archived_file); + } + } + } + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php new file mode 100755 index 0000000..ab1628e --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-custom.php @@ -0,0 +1,65 @@ +<?php + +class Custom { + private static $EXTENSIONS = ['html', 'md']; + private $context; + + public function __construct($context) { + $this->context = $context; + } + + private function read_custom_file($path, $name, &$content, &$type) { + $file_prefix = $this->context->get_setup()->get('FILE_PREFIX'); + + foreach (Custom::$EXTENSIONS as $ext) { + $file = $path . '/' . $file_prefix . '.' . $name . '.' . $ext; + if (is_readable($file)) { + $content = file_get_contents($file); + $type = $ext; + return; + } + } + } + + public function get_customizations($href) { + if (!$this->context->query_option('custom.enabled', false)) { + return [ + 'header' => ['content' => null, 'type' => null], + 'footer' => ['content' => null, 'type' => null] + ]; + } + + $root_path = $this->context->get_setup()->get('FILE_PREFIX'); + $path = $this->context->to_path($href); + + $header = null; + $header_type = null; + $footer = null; + $footer_type = null; + + $this->read_custom_file($path, 'header', $header, $header_type); + $this->read_custom_file($path, 'footer', $footer, $footer_type); + + while ($header === null || $footer === null) { + if ($header === null) { + $this->read_custom_file($path, 'headers', $header, $header_type); + } + if ($footer === null) { + $this->read_custom_file($path, 'footers', $footer, $footer_type); + } + if ($path === $root_path) { + break; + } + $parent_path = Util::normalize_path(dirname($path)); + if ($parent_path === $path) { + break; + } + $path = $parent_path; + } + + return [ + 'header' => ['content' => $header, 'type' => $header_type], + 'footer' => ['content' => $footer, 'type' => $footer_type] + ]; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php new file mode 100755 index 0000000..124954d --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-search.php @@ -0,0 +1,40 @@ +<?php + +class Search { + private $context; + + public function __construct($context) { + $this->context = $context; + } + + public function get_paths($root, $pattern = null, $ignorecase = false) { + $paths = []; + if ($pattern && $this->context->is_managed_path($root)) { + $re = Util::wrap_pattern($pattern); + if ($ignorecase) { + $re .= 'i'; + } + $names = $this->context->read_dir($root); + foreach ($names as $name) { + $path = $root . '/' . $name; + if (preg_match($re, @basename($path))) { + $paths[] = $path; + } + if (@is_dir($path)) { + $paths = array_merge($paths, $this->get_paths($path, $pattern, $ignorecase)); + } + } + } + return $paths; + } + + public function get_items($href, $pattern = null, $ignorecase = false) { + $cache = []; + $root = $this->context->to_path($href); + $paths = $this->get_paths($root, $pattern, $ignorecase); + $items = array_map(function ($path) { + return Item::get($this->context, $path, $cache)->to_json_object(); + }, $paths); + return $items; + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php b/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php new file mode 100755 index 0000000..d52d3e8 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/ext/class-thumb.php @@ -0,0 +1,253 @@ +<?php + +class Thumb { + private static $FFMPEG_CMDV = ['ffmpeg', '-ss', '0:00:10', '-i', '[SRC]', '-an', '-vframes', '1', '[DEST]']; + private static $AVCONV_CMDV = ['avconv', '-ss', '0:00:10', '-i', '[SRC]', '-an', '-vframes', '1', '[DEST]']; + private static $CONVERT_CMDV = ['convert', '-density', '200', '-quality', '100', '-strip', '[SRC][0]', '[DEST]']; + private static $GM_CONVERT_CMDV = ['gm', 'convert', '-density', '200', '-quality', '100', '[SRC][0]', '[DEST]']; + private static $THUMB_CACHE = 'thumbs'; + + private $context; + private $setup; + private $thumbs_path; + private $thumbs_href; + + public function __construct($context) { + $this->context = $context; + $this->setup = $context->get_setup(); + $this->thumbs_path = $this->setup->get('CACHE_PUB_PATH') . '/' . Thumb::$THUMB_CACHE; + $this->thumbs_href = $this->setup->get('CACHE_PUB_HREF') . Thumb::$THUMB_CACHE; + + if (!is_dir($this->thumbs_path)) { + @mkdir($this->thumbs_path, 0755, true); + } + } + + public function thumb($type, $source_href, $width, $height) { + $source_path = $this->context->to_path($source_href); + if (!file_exists($source_path) || Util::starts_with($source_path, $this->setup->get('CACHE_PUB_PATH'))) { + return null; + } + + $capture_path = $source_path; + if ($type === 'img') { + $capture_path = $source_path; + } elseif ($type === 'mov') { + if ($this->setup->get('HAS_CMD_AVCONV')) { + $capture_path = $this->capture(Thumb::$AVCONV_CMDV, $source_path); + } elseif ($this->setup->get('HAS_CMD_FFMPEG')) { + $capture_path = $this->capture(Thumb::$FFMPEG_CMDV, $source_path); + } + } elseif ($type === 'doc') { + if ($this->setup->get('HAS_CMD_CONVERT')) { + $capture_path = $this->capture(Thumb::$CONVERT_CMDV, $source_path); + } elseif ($this->setup->get('HAS_CMD_GM')) { + $capture_path = $this->capture(Thumb::$GM_CONVERT_CMDV, $source_path); + } + } + + return $this->thumb_href($capture_path, $width, $height); + } + + private function thumb_href($source_path, $width, $height) { + if (!file_exists($source_path)) { + return null; + } + + $name = 'thumb-' . sha1($source_path) . '-' . $width . 'x' . $height . '.jpg'; + $thumb_path = $this->thumbs_path . '/' . $name; + $thumb_href = $this->thumbs_href . '/' . $name; + + if (!file_exists($thumb_path) || filemtime($source_path) >= filemtime($thumb_path)) { + $image = new Image(); + + $et = false; + if ($this->setup->get('HAS_PHP_EXIF') && $this->context->query_option('thumbnails.exif', false) === true && $height != 0) { + $et = @exif_thumbnail($source_path); + } + if($et !== false) { + file_put_contents($thumb_path, $et); + $image->set_source($thumb_path); + $image->normalize_exif_orientation($source_path); + } else { + $image->set_source($source_path); + } + + $image->thumb($width, $height); + $image->save_dest_jpeg($thumb_path, 80); + } + + return file_exists($thumb_path) ? $thumb_href : null; + } + + private function capture($cmdv, $source_path) { + if (!file_exists($source_path)) { + return null; + } + + $capture_path = $this->thumbs_path . '/capture-' . sha1($source_path) . '.jpg'; + + if (!file_exists($capture_path) || filemtime($source_path) >= filemtime($capture_path)) { + foreach ($cmdv as &$arg) { + $arg = str_replace('[SRC]', $source_path, $arg); + $arg = str_replace('[DEST]', $capture_path, $arg); + } + + Util::exec_cmdv($cmdv); + } + + return file_exists($capture_path) ? $capture_path : null; + } +} + +class Image { + private $source_file; + private $source; + private $width; + private $height; + private $type; + private $dest; + + public function __construct($filename = null) { + $this->source_file = null; + $this->source = null; + $this->width = null; + $this->height = null; + $this->type = null; + + $this->dest = null; + + $this->set_source($filename); + } + + public function __destruct() { + $this->release_source(); + $this->release_dest(); + } + + public function set_source($filename) { + $this->release_source(); + $this->release_dest(); + + if (is_null($filename)) { + return; + } + + $this->source_file = $filename; + + list($this->width, $this->height, $this->type) = @getimagesize($this->source_file); + + if (!$this->width || !$this->height) { + $this->source_file = null; + $this->width = null; + $this->height = null; + $this->type = null; + return; + } + + $this->source = imagecreatefromstring(file_get_contents($this->source_file)); + } + + public function save_dest_jpeg($filename, $quality = 80) { + if (!is_null($this->dest)) { + @imagejpeg($this->dest, $filename, $quality); + @chmod($filename, 0775); + } + } + + public function release_dest() { + if (!is_null($this->dest)) { + @imagedestroy($this->dest); + $this->dest = null; + } + } + + public function release_source() { + if (!is_null($this->source)) { + @imagedestroy($this->source); + $this->source_file = null; + $this->source = null; + $this->width = null; + $this->height = null; + $this->type = null; + } + } + + public function thumb($width, $height) { + if (is_null($this->source)) { + return; + } + + $src_r = 1.0 * $this->width / $this->height; + + if ($height == 0) { + if ($src_r >= 1) { + $height = 1.0 * $width / $src_r; + } else { + $height = $width; + $width = 1.0 * $height * $src_r; + } + if ($width > $this->width) { + $width = $this->width; + $height = $this->height; + } + } + + $ratio = 1.0 * $width / $height; + + if ($src_r <= $ratio) { + $src_w = $this->width; + $src_h = $src_w / $ratio; + $src_x = 0; + } else { + $src_h = $this->height; + $src_w = $src_h * $ratio; + $src_x = 0.5 * ($this->width - $src_w); + } + + $width = intval($width); + $height = intval($height); + $src_x = intval($src_x); + $src_w = intval($src_w); + $src_h = intval($src_h); + + $this->dest = imagecreatetruecolor($width, $height); + $icol = imagecolorallocate($this->dest, 255, 255, 255); + imagefill($this->dest, 0, 0, $icol); + imagecopyresampled($this->dest, $this->source, 0, 0, $src_x, 0, $width, $height, $src_w, $src_h); + } + + public function rotate($angle) { + if (is_null($this->source) || ($angle !== 90 && $angle !== 180 && $angle !== 270)) { + return; + } + + $this->source = imagerotate($this->source, $angle, 0); + if ( $angle === 90 || $angle === 270 ) { + list($this->width, $this->height) = [$this->height, $this->width]; + } + } + + public function normalize_exif_orientation($exif_source_file = null) { + if (is_null($this->source) || !function_exists('exif_read_data')) { + return; + } + + if ($exif_source_file === null) { + $exif_source_file = $this->source_file; + } + + $exif = exif_read_data($exif_source_file); + switch (@$exif['Orientation']) { + case 3: + $this->rotate(180); + break; + case 6: + $this->rotate(270); + break; + case 8: + $this->rotate(90); + break; + } + } +} diff --git a/container/srv-http/root/srv/_h5ai/private/php/pages/index.php b/container/srv-http/root/srv/_h5ai/private/php/pages/index.php new file mode 100755 index 0000000..7885a87 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/pages/index.php @@ -0,0 +1,2 @@ +<?php header('Content-type: text/html;charset=utf-8'); ?><!DOCTYPE html><html class="no-js" lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>index - powered by h5ai v0.29.2 (https://larsjung.de/h5ai/)</title><meta name="description" content="index - powered by h5ai v0.29.2 (https://larsjung.de/h5ai/)"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="<?= $public_href; ?>images/favicon/favicon-16-32.ico"><link rel="apple-touch-icon-precomposed" type="image/png" href="<?= $public_href; ?>images/favicon/favicon-152.png"><link rel="stylesheet" href="<?= $public_href; ?>css/styles.css"><?php if (!$fallback_mode) { ?><script src="<?= $public_href; ?>js/scripts.js" data-module="index"></script><?php } ?> +<?= $x_head_tags; ?></head><body class="index" id="root"><div id="fallback-hints"><?php if (!$fallback_mode) { ?><span class="noJsMsg">Works best with JavaScript enabled!</span><span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span><?php } ?><span class="backlink"><a href="https://larsjung.de/h5ai/" title="h5ai v0.29.2 - Modern HTTP web server index.">powered by h5ai</a></span></div><div id="fallback"><?= $fallback_html; ?></div></body></html><!-- h5ai v0.29.2 - https://larsjung.de/h5ai/ --> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/private/php/pages/info.php b/container/srv-http/root/srv/_h5ai/private/php/pages/info.php new file mode 100755 index 0000000..59a8e08 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/private/php/pages/info.php @@ -0,0 +1,2 @@ +<?php header('Content-type: text/html;charset=utf-8'); ?><!DOCTYPE html><html class="no-js" lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><title>h5ai info page - v0.29.2</title><meta name="description" content="h5ai info page - v0.29.2"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="<?= $public_href; ?>images/favicon/favicon-16-32.ico"><link rel="apple-touch-icon-precomposed" type="image/png" href="<?= $public_href; ?>images/favicon/favicon-152.png"><link rel="stylesheet" href="<?= $public_href; ?>css/styles.css"><?php if (!$fallback_mode) { ?><script src="<?= $public_href; ?>js/scripts.js" data-module="info"></script><?php } ?> +<?= $x_head_tags; ?></head><body class="info" id="root"><div id="fallback-hints"><?php if (!$fallback_mode) { ?><span class="noJsMsg">Works best with JavaScript enabled!</span><span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span><?php } ?><span class="backlink"><a href="https://larsjung.de/h5ai/" title="h5ai v0.29.2 - Modern HTTP web server index.">powered by h5ai</a></span></div><div id="content"><h1 id="header"><a href="https://larsjung.de/h5ai/">h5ai</a></h1></div></body></html><!-- h5ai v0.29.2 - https://larsjung.de/h5ai/ --> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/.htaccess b/container/srv-http/root/srv/_h5ai/public/.htaccess new file mode 100755 index 0000000..3f14990 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/.htaccess @@ -0,0 +1,13 @@ +## make this folder accessible + +# Apache < 2.3 +<IfModule !mod_authz_core.c> + Order allow,deny + Allow from all + Satisfy All +</IfModule> + +# Apache ≥ 2.3 +<IfModule mod_authz_core.c> + Require all granted +</IfModule> diff --git a/container/srv-http/root/srv/_h5ai/public/cache/README.md b/container/srv-http/root/srv/_h5ai/public/cache/README.md new file mode 100755 index 0000000..fd2974c --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/cache/README.md @@ -0,0 +1,9 @@ +# Cache + +Public cache. + +This directory is used for server side caching. To use caching make this +directory writable for your webserver. + +There is no critical data in here. You can savely remove any content. This +will clear the cache. diff --git a/container/srv-http/root/srv/_h5ai/public/css/styles.css b/container/srv-http/root/srv/_h5ai/public/css/styles.css new file mode 100755 index 0000000..87bf906 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/css/styles.css @@ -0,0 +1,2 @@ +/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */ +@charset "utf-8";/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:0;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}::-moz-selection{color:#fff;background:#ff4081;text-shadow:none}::selection{color:#fff;background:#ff4081;text-shadow:none}*:focus{outline:0}code,pre{font-family:"Ubuntu Mono","Monaco","Lucida Sans Typewriter","monospace";font-size:15px;font-weight:normal;color:rgba(0,0,0,0.87)}audio,canvas,iframe,img,svg,video{vertical-align:middle}textarea{resize:vertical}.hidden{display:none!important}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.raised{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}.popup{box-shadow:0 1px 20px 0 rgba(0,0,0,0.5)}.rounded{border-radius:2px}.clear-appearance{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none}.eased-transition{transition:all .2s ease-in-out}.flex-base{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}.flex-column{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:column}.flex-row{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row}.el-button{border-radius:2px;transition:all .2s ease-in-out;color:#fff;background:#42a5f5;cursor:pointer;text-decoration:none}.el-button:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}.el-input{border-radius:2px;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:#fff;border:0;outline:0;background:#fafafa;border:1px solid rgba(0,0,0,0.05)}#cm-overlay{position:fixed;left:0;top:0;right:0;bottom:0;overflow:hidden;z-index:200}#cm-overlay .cm-panel{box-shadow:0 1px 20px 0 rgba(0,0,0,0.5);border-radius:2px;display:block;position:absolute;left:100px;top:100px;color:rgba(0,0,0,0.87);background:#fff;z-index:10;overflow:auto;min-width:200px}#cm-overlay .cm-panel ul{margin:0;padding:0;list-style:none;text-align:left}#cm-overlay .cm-label{padding:8px 16px;white-space:nowrap;font-weight:bold}#cm-overlay .cm-entry{padding:8px 16px;white-space:nowrap;cursor:pointer}#cm-overlay .cm-entry:hover{color:#42a5f5;background:rgba(0,0,0,0.03)}#cm-overlay .cm-icon{position:relative;top:-2px}#cm-overlay .cm-icon img{width:20px;height:20px}#cm-overlay .cm-icon.no-icon{opacity:0}#cm-overlay .cm-text{margin:0 0 0 12px}#cm-overlay .cm-sep{height:1px;margin:8px 0;padding:0;border-top:1px solid rgba(0,0,0,0.08)}#crumbbar{overflow:hidden;height:48px;font-size:16px;padding:0 8px}#crumbbar a,#crumbbar a:active,#crumbbar a:visited{color:rgba(0,0,0,0.87);cursor:pointer;text-decoration:none}#crumbbar a.active,#crumbbar a:active.active,#crumbbar a:visited.active{font-weight:bold}#crumbbar a:hover,#crumbbar a:active:hover,#crumbbar a:visited:hover{color:#42a5f5}#crumbbar a:focus,#crumbbar a:active:focus,#crumbbar a:visited:focus{outline:0}#crumbbar .crumb{transition:all .2s ease-in-out;display:inline-block}#crumbbar .sep{width:24px;height:24px;padding:12px 0;line-height:48px;display:inline-block;vertical-align:top}#crumbbar .crumb:first-of-type .sep{width:0}#crumbbar .label{line-height:48px;display:inline-block;vertical-align:top;padding:0 8px}#crumbbar .hint{width:20px;height:20px;padding:16px 0 0 0;line-height:48px;display:inline-block;vertical-align:top;position:relative;top:-2px}#content-header,#content-footer{margin:16px;padding:8px;color:rgba(0,0,0,0.87)}#content-header a,#content-footer a,#content-header a:active,#content-footer a:active,#content-header a:visited,#content-footer a:visited{color:#42a5f5;text-decoration:none;cursor:pointer}#content-header a:hover,#content-footer a:hover,#content-header a:active:hover,#content-footer a:active:hover,#content-header a:visited:hover,#content-footer a:visited:hover{color:#212121}#content-header h1,#content-footer h1,#content-header h2,#content-footer h2,#content-header h3,#content-footer h3,#content-header h4,#content-footer h4,#content-header h5,#content-footer h5,#content-header h6,#content-footer h6,#content-header p,#content-footer p{margin:.1em 0}#filter input{display:none;border:0;font-size:16px;color:rgba(0,0,0,0.87);background:transparent;outline:0;width:160px;padding:0 12px 0 4px;line-height:48px;vertical-align:top}#filter.active input{display:inline-block}#filter.pending input{color:rgba(0,0,0,0.26)}#info{overflow:auto;flex:0 0 auto;order:99;padding:32px 32px 32px 48px;white-space:nowrap;overflow-x:hidden;width:240px}#info .icon{width:240px;height:180px}#info .icon img{border-radius:2px;display:block;overflow:hidden;margin:0 auto;width:180px;height:180px}#info .icon .thumb{width:240px}#info .block{border-top:1px solid rgba(0,0,0,0.05);border-bottom:1px solid rgba(0,0,0,0.05);margin:0 0 24px 0;padding:24px 0}#info .label{font-size:16px;margin-bottom:16px}#info .time,#info .size,#info .content{line-height:20px;height:20px}#info .qrcode{margin:0 auto;width:200px}#info .qrcode img{display:block}#pv-content-aud{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%}#pv-content-img{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%;background-color:#f8f8f8;background-image:-webkit-linear-gradient(45deg,#e8e8e8 25%,transparent 25%,transparent 75%,#e8e8e8 75%,#e8e8e8),-webkit-linear-gradient(45deg,#e8e8e8 25%,transparent 25%,transparent 75%,#e8e8e8 75%,#e8e8e8);background-size:60px 60px;background-position:0 0,30px 30px}#pv-content-img.loading{opacity:.5;margin-top:32px;width:240px;height:240px;border-radius:1000px;overflow:hidden}#pv-content-txt{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);box-sizing:border-box;max-width:960px;text-align:left;background:#fff;margin:0 auto;padding:8px;overflow:auto}#pv-content-txt a,#pv-content-txt a:active,#pv-content-txt a:visited{color:#2080ff;text-decoration:none;cursor:pointer}#pv-content-txt a:hover,#pv-content-txt a:active:hover,#pv-content-txt a:visited:hover{color:#68a9ff}pre#pv-content-txt code{line-height:1.2em}div#pv-content-txt{font-size:1.1em;padding:8px 24px}div#pv-content-txt code{color:#008200}#pv-content-vid{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:absolute;max-width:100%;max-height:100%}#pv-content-vid:-webkit-full-screen{top:auto!important;left:auto!important}#pv-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:100;background:rgba(0,0,0,0.5);transition:background-color .3s ease-in-out;text-align:center}#pv-overlay.fullscreen{background:#212121}#pv-container{position:absolute}#pv-spinner{position:absolute}#pv-spinner .back{width:240px;height:240px;margin:-120px -120px;border-radius:120px;opacity:.5;overflow:hidden}#pv-spinner .spinner{width:100px;height:100px;margin:-50px -50px}#pv-prev-area,#pv-next-area{position:absolute;top:50%;cursor:pointer}#pv-prev-area img,#pv-next-area img{transition:all .2s ease-in-out;display:block;width:48px;height:48px;margin:-36px 0;padding:12px;opacity:.5}#pv-prev-area:hover img,#pv-next-area:hover img{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);opacity:1;background:rgba(27,27,27,0.8)}#pv-prev-area{left:0}#pv-prev-area img{border-radius:0 8px 8px 0;padding-left:48px}#pv-next-area{right:0}#pv-next-area img{border-radius:8px 0 0 8px;padding-right:48px}#pv-buttons{list-style:none;list-style-image:none;margin:0;padding:0}#pv-buttons img{position:relative;width:24px;height:24px;padding:12px}#pv-buttons .bar-label{transition:all .2s ease-in-out;display:block;color:#fff;height:48px;line-height:48px;padding:0 12px;opacity:.7}#pv-buttons .bar-button{transition:all .2s ease-in-out;display:block;line-height:48px;opacity:.7;cursor:pointer}#pv-buttons .bar-button:hover{opacity:1;background:rgba(255,255,255,0.1)}#pv-buttons .bar-left{float:left}#pv-buttons .bar-right{float:right}#pv-bottombar{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);position:fixed;z-index:5;left:0;right:0;bottom:0;background:#1b1b1b;height:48px}#pv-overlay.fullscreen #pv-bottombar{opacity:.5}@media only screen and (max-width:700px){#pv-prev-area,#pv-next-area{display:none!important}}#search input{display:none;border:0;font-size:16px;color:rgba(0,0,0,0.87);background:transparent;outline:0;width:160px;padding:0 12px 0 4px;line-height:48px;vertical-align:top}#search.active input{display:inline-block}#search.pending input{color:rgba(0,0,0,0.26)}#selection-rect{position:absolute;left:0;top:0;z-index:2;border:1px dashed rgba(0,0,0,0.15);background:rgba(0,0,0,0.1)}html.drag-select,html.drag-select *{cursor:move!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.drag-select #view .item:hover,html.drag-select * #view .item:hover{box-shadow:none!important}#view .selector{display:none;position:absolute;left:0;top:0;width:22px;height:22px;background:#42a5f5;cursor:pointer;border-radius:0 0 2px 0;opacity:.6}#view .selector:hover{opacity:.8}#view .selector img{width:100%;height:100%}#view .item:hover .selector{display:block}#view .item.selected:not(.selecting),#view .item.selecting:not(.selected){color:#fff;background:#42a5f5}#view .item.selected:not(.selecting) .selector,#view .item.selecting:not(.selected) .selector{display:block;opacity:1}#view .item.selected:not(.selecting):hover,#view .item.selecting:not(.selected):hover{color:#fff;background:#42a5f5}#view .no-match{display:none;margin-top:36px;text-align:center;color:rgba(0,0,0,0.05);font-size:5em;font-weight:bold}#tree{overflow:auto;flex:0 0 auto;order:1;padding:32px 32px 32px 16px;white-space:nowrap;max-width:250px;overflow-x:hidden}#tree a,#tree a:active,#tree a.visited{display:block;margin-left:20px;padding:3px 0;text-decoration:none;color:rgba(0,0,0,0.87)}#tree a:hover,#tree a:active:hover,#tree a.visited:hover{color:#42a5f5}#tree .active>a{font-weight:bold}#tree .indicator{display:block;float:left;padding:3px 0;position:relative;top:-2px;cursor:pointer}#tree .indicator img{width:20px;height:20px;zoom:1}#tree .item{clear:left}#tree .item.open>.indicator img{-webkit-transform:rotate(90deg);transform:rotate(90deg)}#tree .item.unknown>.indicator{opacity:.3}#tree .item.none>.indicator{opacity:0;cursor:inherit}#tree .item.unknown>.content,#tree .item.none>.content,#tree .item.closed>.content{display:none}#tree .icon{position:relative;top:-2px}#tree .icon img{width:20px;height:20px}#tree .label{margin:0 0 0 4px}#tree .content{margin:0;padding:0 0 0 20px}#tree .summary{color:rgba(0,0,0,0.26);padding:0 0 0 8px}#root.info #content{flex:1 1 auto;order:50;color:rgba(0,0,0,0.87);text-align:center}#root.info code{margin:0 .2em;padding:2px 4px;border-radius:4px;letter-spacing:.05em;background:#fafafa;border:1px solid rgba(0,0,0,0.05);font-size:.9em}#root.info #header a{transition:all .2s ease-in-out;font-size:4em;font-weight:300;margin:.8em 0 0 0;color:rgba(0,0,0,0.87);text-decoration:none}#root.info #header a:hover{color:#42a5f5}#root.info #support{margin:24px auto;padding:18px 0 6px 0;width:292px;background:#fafafa;border:1px solid rgba(0,0,0,0.05);border-radius:4px}#root.info #support input[type="image"]{border:0;width:100px;padding:12px 48px}#root.info #pass{border-radius:2px;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:#fff;border:0;outline:0;background:#fafafa;border:1px solid rgba(0,0,0,0.05);display:inline-block;margin:8px;padding:0 12px;line-height:28px;width:200px;vertical-align:top}#root.info #login,#root.info #logout{border-radius:2px;transition:all .2s ease-in-out;color:#fff;background:#42a5f5;cursor:pointer;text-decoration:none;display:inline-block;margin:8px;padding:0 12px;line-height:28px;vertical-align:top}#root.info #login:hover,#root.info #logout:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#root.info #hint{margin:12px auto;width:320px}#root.info #tests{display:inline-block;text-align:left;list-style-type:none;margin:48px 0;padding:0}#root.info #tests .test{background:#fff;margin:12px 0 0 0;padding:8px 12px 12px 12px;border-bottom:1px solid rgba(0,0,0,0.05)}#root.info #tests .label{display:inline-block;width:250px;font-size:1.4em}#root.info #tests .result{display:inline-block;width:250px;text-align:right;font-size:1.4em;font-weight:bold}#root.info #tests .result.passed{color:#4caf50}#root.info #tests .result.failed{color:#f44336}#root.info #tests .info{margin:4px 0 0 0}#content{overflow:auto;flex:1 1 auto;order:50;position:relative}#fallback{display:none;max-width:960px;margin:16px auto;padding:32px 16px}#fallback table{display:block;width:100%;border-collapse:collapse;background:#fff}#fallback th,#fallback td{padding:6px;text-align:left;border:0;border-bottom:1px solid #f0f0f0}#fallback th{color:#aaa;font-weight:normal;line-height:36px}#fallback td{overflow:hidden;white-space:nowrap}#fallback a,#fallback a:active,#fallback a:visited{display:block;color:inherit;text-decoration:none;cursor:pointer}#fallback a:hover,#fallback a:active:hover,#fallback a:visited:hover{color:#42a5f5}#fallback .fb-i{width:20px;padding-left:12px}#fallback .fb-i img{width:20px;height:20px;position:relative;top:-1px}#fallback .fb-n{width:682px;max-width:682px}#fallback .fb-d{text-align:right;width:160px;min-width:160px}#fallback .fb-s{text-align:right;width:70px;min-width:70px;padding-right:12px}#fallback-hints{display:none;overflow:hidden;text-align:right;background:#fafafa;border-bottom:1px solid rgba(0,0,0,0.05)}#fallback-hints a,#fallback-hints a:active,#fallback-hints a:visited{transition:all .2s ease-in-out;display:inline-block;line-height:48px;color:rgba(0,0,0,0.54);text-decoration:none;outline:0}#fallback-hints a:hover,#fallback-hints a:active:hover,#fallback-hints a:visited:hover{color:#42a5f5}#fallback-hints .backlink{margin:0 16px}#fallback-hints .noJsMsg,#fallback-hints .noBrowserMsg{display:none;margin:0 16px;color:#f44336}html.no-js #root,html.no-browser #root{position:static;overflow:auto}html.no-js #fallback,html.no-browser #fallback,html.no-js #fallback-hints,html.no-browser #fallback-hints{display:block}html.no-js .noJsMsg{display:inline!important}html.no-browser .noBrowserMsg{display:inline!important}#mainrow{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row;flex:1 1 auto;order:50;height:0}#notification{position:fixed;left:50%;width:200px;margin-left:-100px;z-index:100;padding:3px 6px 6px 6px;color:#fff;background:rgba(0,0,0,0.2);border-radius:0 0 4px 4px;text-align:center;overflow:hidden}#root{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:column;position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;background:#fff;line-height:1.4}#root,input,select{font-family:"Ubuntu","Roboto","Helvetica","Arial","sans-serif";font-size:13px;font-weight:normal;color:rgba(0,0,0,0.87)}#sidebar{overflow-x:hidden;overflow-y:auto;flex:0 0 auto;order:0;background:#fafafa;border-right:1px solid rgba(0,0,0,0.05);padding:16px;position:absolute;top:48px;min-height:100%;z-index:1}#sidebar .block{display:block;margin:0 0 24px 0;width:168px}#sidebar .block h1{font-size:1em;margin:2px 0 6px 0}#sidebar .button{border-radius:2px;transition:all .2s ease-in-out;display:inline-block;margin:4px;color:rgba(0,0,0,0.87);cursor:pointer}#sidebar .button:hover{background:rgba(0,0,0,0.03)}#sidebar .button.active{background:rgba(0,0,0,0.03);box-shadow:inset 0 0 4px 0 rgba(0,0,0,0.4)}#sidebar .button img{width:24px;height:24px;padding:12px}#sidebar .select{border-radius:2px;background:transparent;overflow:hidden;outline:0;width:160px;margin:4px;line-height:48px}#sidebar input,#sidebar select{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;background:transparent;width:100%;border:0 solid #000;cursor:pointer;outline:0}#sidebar input:hover,#sidebar select:hover{background:rgba(0,0,0,0.03)}#sidebar select{width:187px;padding:0 8px;height:48px;line-height:48px}#sidebar input[type='range']{border-radius:2px;width:144px;margin:4px;padding:8px;vertical-align:middle;height:32px;line-height:32px}#sidebar .range-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar .range-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar input[type='range']::-webkit-slider-runnable-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-moz-range-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-track{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-fill-lower{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-ms-fill-upper{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#e0e0e0;height:6px}#sidebar input[type='range']::-webkit-slider-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px;margin-top:-5px}#sidebar input[type='range']::-moz-range-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar input[type='range']::-ms-thumb{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;border-width:0;border-radius:20px;background:#616161;width:16px;height:16px}#sidebar #view-size{display:block}#topbar{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;flex-direction:row;overflow:hidden;flex:0 0 auto;order:1;background:#fafafa;border-bottom:1px solid rgba(0,0,0,0.05);z-index:1}#toolbar{overflow:hidden;flex:0 0 auto;order:1;height:48px}#toolbar .tool{transition:all .2s ease-in-out;display:inline-block;cursor:pointer}#toolbar .tool img{display:inline-block;width:24px;height:24px;padding:12px}#toolbar .tool:hover{background:rgba(0,0,0,0.03)}#flowbar{overflow:hidden;flex:1 1 auto;order:2;height:48px}#backlink{transition:all .2s ease-in-out;display:block;flex:0 0 auto;order:99;text-align:center;padding:6px 12px;overflow:hidden;height:36px}#backlink,#backlink:active,#backlink:visited{color:rgba(0,0,0,0.26);cursor:pointer;text-decoration:none}#backlink:hover{color:#42a5f5;background:rgba(0,0,0,0.03)}#backlink:focus{outline:0}#backlink div{line-height:18px;white-space:nowrap}#view.view-details{margin:32px}#view.view-details .header{position:relative;white-space:nowrap;display:list-item;border-bottom:1px solid rgba(0,0,0,0.07);border-radius:2px 2px 0 0}#view.view-details .header .label,#view.view-details .header .date,#view.view-details .header .size{transition:all .2s ease-in-out;line-height:24px;padding:0 8px 16px 8px;opacity:.4;outline:0}#view.view-details .header .label:hover,#view.view-details .header .date:hover,#view.view-details .header .size:hover{opacity:1;color:#42a5f5}#view.view-details .header .sort{display:none;position:relative;top:-2px;width:20px;height:20px;padding:0 4px}#view.view-details .header .ascending .sort{display:inline}#view.view-details .header .descending .sort{display:inline;-webkit-transform:rotate(180deg);transform:rotate(180deg);zoom:1}#view.view-details .item{overflow:hidden;border-bottom:1px solid rgba(0,0,0,0.07)}#view.view-details .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5);z-index:1}#view.view-details .item:last-child{border-radius:0 0 2px 2px}#view.view-details .square{display:inline-block;position:absolute;left:16px;top:-1px;padding:8px}#view.view-details .square .thumb{border-radius:2px;box-shadow:0 0 1px 0 rgba(0,0,0,0.2)}#view.view-details .label,#view.view-details .date,#view.view-details .size{padding:0 8px}#view.view-details .date{position:absolute;right:116px;top:0}#view.view-details .size{position:absolute;right:16px;top:0}#view.view-details .item .label,#view.view-details .item .date,#view.view-details .item .size{line-height:30px}#view.view-details .square{width:16px;height:16px}#view.view-details .square img{width:16px;height:16px}#view.view-details .label{margin:0 246px 0 48px}#view.view-details.width-0 .label{margin-right:4px}#view.view-details.width-0 .date{display:none}#view.view-details.width-0 .size{display:none}#view.view-details.width-1 .label{margin-right:64px}#view.view-details.width-1 .date{display:none}#view.view-grid{margin:28px}#view.view-grid .item{border-radius:2px;overflow:hidden;float:left;margin:8px}#view.view-grid .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#view.view-grid .square{display:inline-block;vertical-align:top}#view.view-grid .label{display:inline-block;vertical-align:top;width:180px;padding:0 8px}#view.view-grid .date,#view.view-grid .size{display:none}#view.view-grid .label{line-height:48px}#view.view-grid .square{width:48px;height:48px}#view.view-grid .square img{width:48px;height:48px}#view.view-icons{margin:28px}#view.view-icons .item{border-radius:2px;overflow:hidden;float:left;margin:8px}#view.view-icons .item:hover{box-shadow:0 1px 10px 0 rgba(0,0,0,0.5)}#view.view-icons .landscape{display:block;background:#fafafa}#view.view-icons .label{padding:0 6px;line-height:24px;text-align:center}#view.view-icons .date,#view.view-icons .size{display:none}#view.view-icons .item{width:128px}#view.view-icons .landscape{width:128px;height:96px}#view.view-icons .landscape img{width:96px;height:96px}#view.view-icons .landscape .thumb{width:128px}#view a,#view a:active,#view a:visited{display:block;color:inherit;cursor:pointer;text-decoration:none}#view ul{margin:0;padding:0;list-style:none}#view .header{display:none}#view .item{position:relative;white-space:nowrap;background:#fff}#view .item:hover{color:#42a5f5;background:#fafafa}#view .folder-parent .date,#view .folder-parent .size{display:none}#view .icon{display:none;text-align:center}#view .icon img{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#view .icon .thumb{max-width:none;max-height:none}#view .label{display:block;overflow:hidden;text-align:left;text-overflow:ellipsis}#view .date{text-align:right;width:130px}#view .size{text-align:right;width:80px}#view #view-hint{display:block;margin-top:36px;text-align:center;color:rgba(0,0,0,0.05);font-size:5em;font-weight:bold}@media only screen and (max-width:700px){#crumbbar .crumb:not(.active){display:none}#crumbbar .crumb.active .sep{width:0}#tree,#info{display:none!important}}@media print{*,*:before,*:after,*:first-letter ,*:first-line {background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}#toolbar,#sidebar,#tree,#info{display:none!important}} \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/ext/README.md b/container/srv-http/root/srv/_h5ai/public/ext/README.md new file mode 100755 index 0000000..7f9460c --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/ext/README.md @@ -0,0 +1,4 @@ +# Extensions + +This directory is used for additional script and style files. You have to add +them manualy to the `resources` section in `_h5ai/private/conf/options.json`. diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/file.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/file.png new file mode 100755 index 0000000000000000000000000000000000000000..c796a825dc0d1f519a95280ea35fa9202b11b3bf GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=t*47)NCo5DGuFHe20TYDOxSZ+ z_?d3=DewOqpL{(U>zS2u`=n!`NVDOIGA5A*237@U#uK|ZbT&Br<NDBK^}P7>*$E2I R*8&Y<@O1TaS?83{1OS-LCuslx
literal 0 HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/folder-parent.png new file mode 100755 index 0000000000000000000000000000000000000000..38da20dc9262f05651d048f7bbeabf65c50a917f GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=v8Rh;NCji^0$T~z#Kc5i1s~JH zPR`E%oi~b^@^VW)Yn#~gGEw1aoZP;)tU&YE7kPV_7+x9Y3kGj{{|cy`!PC{xWt~$( F696kY9+Ch6
literal 0 HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png b/container/srv-http/root/srv/_h5ai/public/images/fallback/folder.png new file mode 100755 index 0000000000000000000000000000000000000000..d4722e788e8e965c019daf82408d6b77f43def6f GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=mZytjNCjiE#6blUlP~sWGGb!a w9A-97k?t~>AY@~})+c3=^<YJ#vN!|7p(V4c9yRbW0d+BWy85}Sb4q9e0QU|UrvLx|
literal 0 HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-152.png new file mode 100755 index 0000000000000000000000000000000000000000..3666dfce1609fa22c165921b6c7c04c29333174a GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^GeDSy8A!f*V=Dxt_yc@GT!C~b65u!G*8>W%mIV0) zGc^2vpzvi^xHC|o%+tj&q=ND78E;0W03K$?f`+y$PApgUYl(dDJ6-R7AV$SA{`sut zNjG(7EKM=vPSc!uwkgspZF9mjoI+(K#z>(0z!_BFGwF-&J4?=amST}JZGkRe@O1Ta JS?83{1OUMlPdESo
literal 0 HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16-32.ico new file mode 100755 index 0000000000000000000000000000000000000000..be172231b6902c8f86a2695285a78e4b0f745e6c GIT binary patch literal 5430 zcmeH~;SGX7422)+0E}?Ij9cguFoRpj1kT|YY<9ki{3xOELaxTdUeX-*a_xhUatT0# z9oiP06Rro~2q2|t{h)rQcA~~h?wE8=0QFxSUDxF;F+a<eT*-<2i9qnP`>*f&VeS)a zw)mCgS~b6=XMP0|LsJ+x?tAA*o}4p@abd`L^cr&T#0UZ_1gvkxOJClCmycC9{51iK zlb5dD0WTk`Zun~g7AG%VyT|+Y;%wCo{+fWr$xGMn(f?kYt-8Tq6R<dy=r#VQN_^J# p)bJJ(YqdXVwY<0Z*Ywt%5UYP8kQZYF_I2Z&N8A`WkIll2%O}^3O?3bO
literal 0 HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-16.png new file mode 100755 index 0000000000000000000000000000000000000000..d7dd0f9a7a2b31f352fdcd9dc472f68e832a0275 GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>Ygr+Ar*|t5;6)VCSUB$WW>a- tIc#ARkz@+;;9E9}aWPwul)(oEhHuWskKC<%qk&o&JYD@<);T3K0RX3>7Rvwt
literal 0 HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon-32.png new file mode 100755 index 0000000000000000000000000000000000000000..2f97d12e445524bb2af5951cf17593dd823938c3 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzdrud~kP61P=e7$nDDWH&n6~A4 zV)2SP|GrCee~EWYnYnb<UE4fXj*X%UN5UEeq8W9Wftnz|g3VzH<Np0;D<4_gzXu6< My85}Sb4q9e0Glo&W&i*H
literal 0 HcmV?d00001
diff --git a/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg new file mode 100755 index 0000000..489efbe --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/favicon/favicon.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"> + <path fill="#555" d="M 1,2 1,14 15,14 15,4 9,4 7,2 z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/README.md b/container/srv-http/root/srv/_h5ai/public/images/themes/README.md new file mode 100755 index 0000000..650e0f7 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/README.md @@ -0,0 +1,9 @@ +# Themes + +This directory will contain any themes you add. At the moment there are only +icon themes supported. The folder structure is: `<theme-name>/<type>.<ext>`, +with `<ext>` one of `svg`, `png` or `jpg`. + +To select a theme use the option `view > theme` in file `conf/options.json`. + +You will find the previously included icon themes [here](https://github.com/lrsjng/h5ai-themes). diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg new file mode 100755 index 0000000..a7cc5cd --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-apk.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#a4c639" d="M14.5 3.2C14.4 3.2 14.2 3.3 14.1 3.5L13.3 5C12.3 4.4 11.2 4 10 4 8.8 4 7.7 4.3 6.8 4.9L5.9 3.5C5.8 3.3 5.6 3.2 5.5 3.3 5.4 3.3 5.4 3.2 5.3 3.3L5.2 3.3C5 3.5 4.9 3.8 5.1 4L6 5.6C4.8 6.7 4 8.2 4 10L16 10C16 8.3 15.3 6.7 14.1 5.6L15 4C15.1 3.8 15 3.5 14.8 3.3L14.7 3.3C14.7 3.2 14.6 3.2 14.5 3.2zM7.3 7C7.8 7 8.2 7.4 8.2 7.9 8.2 8.4 7.8 8.8 7.3 8.8 6.8 8.8 6.4 8.4 6.4 7.9 6.4 7.4 6.8 7 7.3 7zM12.7 7C13.2 7 13.6 7.4 13.6 7.9 13.6 8.4 13.2 8.8 12.7 8.8 12.2 8.8 11.8 8.4 11.8 7.9 11.8 7.4 12.2 7 12.7 7zM4 10.5L4 16 16 16 16 10.5 4 10.5z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg new file mode 100755 index 0000000..f1efae9 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-deb.svg @@ -0,0 +1,16 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="-60 -75 20 20"> + <g fill="#d70751" transform="matrix(0.06427071,0,0,0.06427071,-52.892053,-68.534728)"> + <path d="m 64.525,62.053 c -4.125,0.058 0.78,2.125 6.165,2.954 1.488,-1.161 2.838,-2.336 4.04,-3.479 -3.354,0.821 -6.765,0.838 -10.205,0.525"/> + <path d="m 86.665,56.533 c 2.457,-3.389 4.246,-7.102 4.878,-10.939 -0.551,2.736 -2.035,5.099 -3.435,7.592 -7.711,4.854 -0.726,-2.883 -0.004,-5.824 -8.29,10.436 -1.138,6.257 -1.439,9.171"/> + <path d="m 94.839,35.268 c 0.497,-7.428 -1.462,-5.08 -2.121,-2.245 0.766,0.4 1.377,5.237 2.121,2.245"/> + <path d="m 48.883,-66.264 c 2.201,0.395 4.757,0.698 4.398,1.224 2.407,-0.528 2.954,-1.015 -4.398,-1.224"/> + <path d="m 53.281,-65.04 -1.556,0.32 1.448,-0.127 0.108,-0.193"/> + <path d="m 121.93,38.085 c 0.247,6.671 -1.95,9.907 -3.932,15.637 l -3.564,1.781 c -2.919,5.666 0.282,3.598 -1.807,8.105 -4.556,4.049 -13.823,12.67 -16.789,13.457 -2.163,-0.047 1.469,-2.554 1.943,-3.537 -6.097,4.188 -4.894,6.285 -14.217,8.83 L 83.291,81.751 C 60.29,92.569 28.344,71.129 28.765,41.875 28.519,43.732 28.067,43.268 27.557,44.019 26.371,28.967 34.509,13.849 48.232,7.676 61.659,1.03 77.395,3.758 87.012,12.72 81.73,5.8 71.217,-1.534 58.757,-0.848 46.549,-0.655 35.132,7.102 31.321,15.521 c -6.253,3.938 -6.979,15.177 -9.704,17.233 -3.665,26.943 6.896,38.583 24.762,52.275 2.812,1.896 0.792,2.184 1.173,3.627 C 41.616,85.877 36.18,81.68 31.711,76.542 c 2.372,3.473 4.931,6.847 8.239,9.499 -5.596,-1.897 -13.074,-13.563 -15.256,-14.038 9.647,17.274 39.142,30.295 54.587,23.836 -7.146,0.263 -16.226,0.146 -24.256,-2.822 -3.371,-1.734 -7.958,-5.331 -7.14,-6.003 21.079,7.875 42.854,5.965 61.09,-8.655 4.641,-3.614 9.709,-9.761 11.173,-9.846 -2.206,3.317 0.377,1.596 -1.318,4.523 4.625,-7.456 -2.008,-3.035 4.779,-12.877 l 2.507,3.453 c -0.931,-6.188 7.687,-13.704 6.813,-23.492 1.975,-2.994 2.206,3.22 0.107,10.107 2.912,-7.64 0.767,-8.867 1.516,-15.171 0.81,2.118 1.867,4.37 2.412,6.606 -1.895,-7.382 1.948,-12.433 2.898,-16.724 -0.937,-0.415 -2.928,3.264 -3.383,-5.457 0.065,-3.788 1.054,-1.985 1.435,-2.917 -0.744,-0.427 -2.694,-3.33 -3.88,-8.9 0.86,-1.308 2.3,3.393 3.47,3.586 -0.753,-4.429 -2.049,-7.805 -2.103,-11.202 -3.421,-7.149 -1.211,0.953 -3.985,-3.069 -3.641,-11.357 3.021,-2.637 3.47,-7.796 5.52,7.995 8.667,20.387 10.11,25.519 -1.103,-6.258 -2.883,-12.32 -5.058,-18.185 1.677,0.705 -2.699,-12.875 2.18,-3.882 -5.21,-19.172 -22.302,-37.087 -38.025,-45.493 1.924,1.76 4.354,3.971 3.481,4.317 -7.819,-4.656 -6.444,-5.018 -7.565,-6.985 -6.369,-2.591 -6.788,0.208 -11.007,0.004 -12.005,-6.368 -14.318,-5.69 -25.368,-9.681 l 0.502,2.349 c -7.953,-2.649 -9.265,1.005 -17.862,0.009 -0.523,-0.409 2.753,-1.479 5.452,-1.871 -7.69,1.015 -7.329,-1.515 -14.854,0.279 1.855,-1.301 3.815,-2.162 5.793,-3.269 -6.271,0.381 -14.971,3.649 -12.286,0.677 -10.235,4.569 -28.403,10.976 -38.597,20.535 l -0.321,-2.142 c -4.672,5.608 -20.371,16.748 -21.622,24.011 l -1.249,0.291 c -2.431,4.116 -4.004,8.781 -5.932,13.016 -3.18,5.417 -4.661,2.085 -4.208,2.934 -6.253,12.679 -9.359,23.332 -12.043,32.069 1.912,2.858 0.046,17.206 0.769,28.688 -3.141,56.709 39.8,111.77 86.737,124.48 6.88,2.459 17.11,2.364 25.813,2.618 -10.268,-2.937 -11.595,-1.556 -21.595,-5.044 -7.215,-3.398 -8.797,-7.277 -13.907,-11.711 l 2.022,3.573 c -10.021,-3.547 -5.829,-4.39 -13.982,-6.972 l 2.16,-2.82 C 11.175,156.251 5.82,151.022 4.355,148.126 l -3.553,0.14 c -4.27,-5.269 -6.545,-9.063 -6.379,-12.005 l -1.148,2.047 c -1.301,-2.235 -15.709,-19.759 -8.234,-15.679 -1.389,-1.271 -3.235,-2.067 -5.237,-5.703 l 1.522,-1.739 c -3.597,-4.627 -6.621,-10.562 -6.391,-12.536 1.919,2.592 3.25,3.075 4.568,3.52 -9.083,-22.539 -9.593,-1.242 -16.474,-22.942 l 1.456,-0.116 c -1.116,-1.682 -1.793,-3.506 -2.69,-5.298 l 0.633,-6.313 C -44.113,63.94 -39.401,39.351 -38.459,25.865 -37.804,20.38 -33,14.543 -29.345,5.388 l -2.227,-0.384 c 4.256,-7.423 24.301,-29.814 33.583,-28.662 4.499,-5.649 -0.892,-0.02 -1.772,-1.443 9.878,-10.223 12.984,-7.222 19.65,-9.061 7.19,-4.268 -6.17,1.664 -2.761,-1.628 12.427,-3.174 8.808,-7.216 25.021,-8.828 1.71,0.973 -3.969,1.503 -5.395,2.766 10.354,-5.066 32.769,-3.914 47.326,2.811 16.895,7.896 35.873,31.232 36.622,53.189 l 0.852,0.229 c -0.431,8.729 1.336,18.822 -1.727,28.094 l 2.1,-4.385"/> + <path d="m 19.5,67.715 -0.578,2.893 c 2.71,3.683 4.861,7.673 8.323,10.552 -2.49,-4.863 -4.341,-6.872 -7.745,-13.445"/> + <path d="m 25.909,67.464 c -1.435,-1.587 -2.284,-3.497 -3.235,-5.4 0.909,3.345 2.771,6.219 4.504,9.143 l -1.269,-3.743"/> + <path d="m 139.32,42.814 -0.605,1.52 c -1.111,7.892 -3.511,15.701 -7.189,22.941 4.06,-7.639 6.69,-15.995 7.79,-24.461"/> + <path d="m 49.698,-68.243 c 2.789,-1.022 6.855,-0.56 9.814,-1.233 -3.855,0.324 -7.693,0.517 -11.484,1.005 l 1.67,0.228"/> + <path d="m -48.219,-16.176 c 0.642,5.951 -4.477,8.26 1.134,4.337 3.007,-6.773 -1.175,-1.87 -1.134,-4.337"/> + <path d="m -54.812,11.362 c 1.292,-3.967 1.526,-6.349 2.02,-8.645 -3.571,4.566 -1.643,5.539 -2.02,8.645"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg new file mode 100755 index 0000000..4146098 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/ar-rpm.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 13.913043 15.22257"> + <g fill="#000" transform="matrix(0.01974442,0,0,0.01974442,0.59799609,3.692127)"> + <path d="m 242.1304,26.136154 c 12.57375,-1.931991 25.25548,-3.344345 37.9671,-4.013656 2.25826,-0.538041 4.59412,-0.428086 6.90119,-0.510544 18.03637,-0.575318 36.09759,-0.549286 54.12636,0.262939 32.54014,2.301468 64.91549,7.707276 96.30586,16.718582 l -0.13292,0.17627 c -4.60202,6.223907 -9.21752,12.438019 -13.73035,18.725891 -1.35219,0.249481 -2.53581,-0.605759 -3.74014,-1.036484 -23.8157,-9.827469 -49.16701,-15.53215 -74.68315,-18.619186 -41.97006,-4.297928 -84.93817,-0.844666 -125.2014,12.070068 -29.64401,9.587738 -58.27112,24.371842 -80.37665,46.666519 -15.66559,16.020307 -27.69327,36.744737 -29.32584,59.451997 -1.51913,10.82149 1.07187,21.62427 3.36382,32.12558 L 14.185699,205.68005 C 13.945419,188.13843 18.523071,170.78329 25.80806,154.91394 40.297989,124.01501 65.424713,99.327652 93.421997,80.42572 112.35318,67.714981 132.81692,57.345383 154.07152,49.122925 182.38751,38.052567 212.05559,30.488739 242.1304,26.136154 z"/> + <path d="m 301.70334,148.63515 c 1.94578,-3.16858 5.37183,-5.69597 9.26865,-5.22687 4.4046,0.11267 7.79878,3.75244 8.71124,7.87158 l 310.75082,55.27789 -1.03752,5.20607 -310.68332,-54.48095 c -2.47844,4.31216 -8.22775,6.5392 -12.74457,3.9928 -3.13145,-1.36889 -4.19975,-4.71973 -5.61303,-7.53113 l -19.12972,-3.06511 0.87691,-5.38129 19.60054,3.33701 z"/> + <path d="m 13.649231,221.30466 c 18.262405,-0.12262 36.52626,-0.0226 54.789398,-0.051 0.01808,0.6767 0.05426,2.03008 0.07234,2.70677 13.269959,-2.88977 26.908417,-4.11874 40.480651,-3.36956 9.88256,0.90474 18.95615,5.13992 27.79413,9.3441 -9.96293,6.16172 -20.10092,12.09585 -29.82344,18.61522 -10.834169,-8.36657 -25.559114,-8.37398 -38.193818,-4.71335 -0.157685,1.35187 -0.305954,2.70839 -0.319413,4.07715 0.0064,31.4396 0.01517,62.87977 -0.0037,94.32 -18.255799,-0.006 -36.511368,0.0168 -54.767029,-0.0115 -0.0388,-40.30612 0.01926,-80.61204 -0.02911,-120.91781 z"/> + <path d="m 155.75305,221.30997 c 16.07997,-0.13549 32.16204,-0.0238 48.2433,-0.0572 23.83194,-0.13529 48.05416,2.93651 70.20328,12.1031 13.75632,5.82483 27.06233,14.43199 35.03758,27.39059 6.05672,10.0663 8.17432,22.99054 3.41974,34.00478 -5.58125,13.21376 -17.53407,22.37564 -29.70006,29.22304 -22.30197,11.93273 -47.08825,18.27707 -72.31572,19.34199 l -0.0437,24.93099 -54.85077,7.52423 0.006,-154.46153 z"/> + <path d="m 350.73776,221.33231 c 62.75727,-0.19167 125.51848,-0.0234 188.27761,-0.0843 18.36058,0.076 37.02661,0.1922 54.8872,4.94194 5.14029,1.69319 11.99558,3.70666 13.34763,9.68171 0.13403,35.45186 0.05,70.91191 0.0409,106.36713 -18.26615,-0.004 -36.53138,-0.0113 -54.79609,0.004 -0.004,-35.17893 -0.0756,-70.3591 0.0357,-105.53679 -3.31824,-2.87891 -8.04874,-2.75609 -12.16869,-3.25885 -11.26521,-0.29326 -22.53945,-0.084 -33.80654,-0.11576 0.002,36.30307 0.0406,72.60642 -0.0191,108.90969 -18.292,-0.0171 -36.58319,0.005 -54.87403,-0.0112 -0.0542,-29.07907 -0.008,-58.15799 -0.0231,-87.23671 -0.14635,-6.3542 0.31845,-12.73225 -0.27677,-19.06588 -5.14636,-2.16309 -10.78398,-2.58689 -16.30214,-2.61335 -9.79776,-0.0158 -19.5944,0.007 -29.39029,-0.01 -0.048,36.31536 0.0591,72.63149 -0.0537,108.94673 -17.22348,-0.022 -34.44665,-0.0339 -51.66902,0.007 l -3.31752,-0.0131 c 0.28336,-40.07539 0.0678,-80.83315 0.108,-120.91222 z"/> + <path fill="#d72123" d="m 423.56764,57.495636 c 4.51283,-6.287872 9.12833,-12.501984 13.73035,-18.725891 42.14722,12.344238 82.84823,31.836792 116.09491,60.881943 13.59442,12.173292 25.88991,25.944912 35.33316,41.613512 11.1826,18.43936 18.26884,39.55612 19.02705,61.19006 -33.0565,-5.77759 -66.1038,-11.60446 -99.1558,-17.40172 4.06793,-12.93818 4.10266,-27.0249 1.31704,-40.22806 -5.16264,-22.81849 -19.7915,-42.41004 -37.43728,-57.282084 C 457.76711,75.165924 440.98531,65.246307 423.20515,57.986771 l 0.36249,-0.491135 z"/> + <path fill="#fff" d="m 210.67975,234.60013 c 14.04689,1.40957 26.7447,9.34711 36.33964,19.39103 8.27451,8.70258 14.12349,20.84611 12.10276,33.07682 -2.20877,12.25284 -10.73442,22.20633 -20.32152,29.61572 -8.32672,6.11266 -17.74312,11.38919 -28.12337,12.77234 -0.0358,-31.61874 -0.0407,-63.2376 0.002,-94.85591 z"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg new file mode 100755 index 0000000..487a535 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-css.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <g transform="matrix(0.04742975,0,0,0.04742975,2.9426429,-1.9210171)"> + <path fill="#1572b6" d="M 27.142,386.29 0.071,82.67 l 297.45,0 -27.096,303.571 -121.811,33.77 L 27.142,386.29 z m 0,0"/> + <path fill="#33a9dc" d="m 148.798,394.199 98.427,-27.288 23.157,-259.415 -121.584,0 0,286.703 z m 0,0"/> + <g transform="translate(55,142)"> + <path fill="#ffffff" d="m 93.797,75.496 49.275,0 3.403,-38.132 -52.678,0 0,-37.239 0.129,0 93.246,0 -0.893,9.991 -9.152,102.616 -83.33,0 0,-37.236 z m 0,0"/> + <path fill="#ebebeb" d="m 94.02,172.204 -0.163,0.046 -41.472,-11.199 -2.652,-29.698 -20.151,0 -17.228,0 5.216,58.467 76.278,21.176 0.172,-0.048 0,-38.744 z m 0,0"/> + <path fill="#ffffff" d="m 139.907,111.156 -4.484,49.87 -41.532,11.21 0,38.742 76.339,-21.158 0.56,-6.29 6.478,-72.374 -37.361,0 z m 0,0"/> + <path fill="#ebebeb" d="m 93.926,0.125 0,23.128 0,14.019 0,0.092 -89.828,0 -0.119,0 -0.747,-8.37 -1.697,-18.878 -0.89,-9.991 93.281,0 z m 0,0"/> + <path fill="#ebebeb" d="m 93.797,75.5 0,23.129 0,14.017 0,0.092 -40.828,0 -0.119,0 -0.746,-8.369 -1.698,-18.878 -0.89,-9.991 44.281,0 z m 0,0"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg new file mode 100755 index 0000000..0d21bb0 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-go.svg @@ -0,0 +1,29 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 10.634,-238.979 c 0.764,15.751 16.499,8.463 23.626,3.539 6.765,-4.675 8.743,-0.789 9.337,-10.015 0.389,-6.064 1.088,-12.128 0.744,-18.216 -10.23,-0.927 -21.357,1.509 -29.744,7.602 -4.32,3.139 -12.42,13.158 -3.963,17.09" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#c6b198" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 10.634,-238.979 c 2.29,-0.852 4.717,-1.457 6.271,-3.528" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#6ad7e5" fill-rule="evenodd" stroke="#000" stroke-width="3" d="M46.997-426.619c-60.297-16.956-15.461-93.664 32.959-62.113l-32.959 62.113zM314.895-494.488c47.727-33.523 90.856 42.111 35.388 61.141l-35.388-61.141z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 325.161,-45.128999 c 12.123,7.501 34.282,30.182 16.096,41.1799995 -17.474,15.9990005 -27.254,-17.5609995 -42.591,-22.2109995 6.605,-8.97 14.977,-17.149 26.495,-18.969 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="none" stroke="#000" stroke-width="3" d="m 341.257,-3.9499995 c -2.696,-5.361 -3.601,-11.6179995 -8.102,-15.9389995" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 108.579,-19.496999 c -14.229,2.202 -22.238,15.0389995 -34.1,21.5579995 -11.178,6.665 -15.454,-2.13399996 -16.461,-3.92 -1.752,-0.799 -1.605,0.744 -4.309,-1.979 -10.362,-16.3539995 10.797,-28.3079995 21.815,-36.4319995 15.346,-3.102 24.963,10.202 33.055,20.773 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="none" stroke="#000" stroke-width="3" d="m 58.019,-1.8599995 c 0.542,-6.233 5.484,-10.4069995 7.838,-15.6769995" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill-rule="evenodd" d="M49.513-447.805c-7.955-4.208-13.791-9.923-8.925-19.124 4.505-8.518 12.874-7.593 20.83-3.385l-11.905 22.509zM337.716-455.805c7.955-4.208 13.791-9.923 8.925-19.124-4.505-8.518-12.874-7.593-20.83-3.385l11.905 22.509z" clip-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#f6d2a2" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 392.475,-240.979 c -0.764,15.751 -16.499,8.463 -23.626,3.539 -6.765,-4.675 -8.743,-0.789 -9.337,-10.015 -0.389,-6.064 -1.088,-12.128 -0.744,-18.216 10.23,-0.927 21.357,1.509 29.744,7.602 4.319,3.139 12.42,13.158 3.963,17.09" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#c6b198" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 392.475,-240.979 c -2.29,-0.852 -4.717,-1.457 -6.271,-3.528" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#6ad7e5" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 195.512,13.124 c 60.365,0 116.953,8.633 146.452,66.629 26.478,65.006 17.062,135.104 21.1,203.806 3.468,58.992 11.157,127.145 -16.21,181.812 -28.79,57.514 -100.73,71.982 -160,69.863 C 140.299,533.568 84.06,518.38 57.785,475.845 26.959,425.945 41.553,351.747 43.792,296.223 46.444,230.452 25.977,164.481 47.584,100.122 69.999,33.359 130.451,18.271 195.512,13.124" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 1.636)"/> + <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="2.908" d="m 206.169,-445.312 c 10.838,63.003 113.822,46.345 99.03,-17.197 -13.264,-56.98 -102.632,-41.208 -99.03,17.197" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="2.821" d="m 83.103,-435.122 c 14.047,54.85 101.864,40.807 98.554,-14.213 -3.966,-65.895 -111.984,-53.18 -98.554,14.213" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 218.594,-369.71 c 0.046,8.191 1.861,17.387 0.312,26.101 -2.091,3.952 -6.193,4.37 -9.729,5.967 -4.89,-0.767 -9.002,-3.978 -10.963,-8.552 -1.255,-9.946 0.468,-19.576 0.785,-29.526 l 19.595,6.01 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <g fill-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 1.636)" clip-rule="evenodd"> + <ellipse cx="107.324" cy="95.404" ry="16.062" rx="14.829"/> + <ellipse cx="114.069" cy="99.029" fill="#fff" ry="4.082" rx="3.496"/> + </g> + <g fill-rule="evenodd" transform="matrix(.03 0 0 .03 3.959 1.636)" clip-rule="evenodd"> + <ellipse cx="231.571" cy="91.404" ry="16.062" rx="14.582"/> + <ellipse cx="238.204" cy="95.029" fill="#fff" ry="4.082" rx="3.438"/> + </g> + <path fill="#fff" fill-rule="evenodd" stroke="#000" stroke-width="3" d="m 176.217,-370.602 c -6.47,15.68 3.608,47.035 21.163,23.908 -1.255,-9.946 0.468,-19.576 0.785,-29.526 l -21.948,5.618 z" clip-rule="evenodd" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 17.82)"/> + <g fill-rule="evenodd" clip-rule="evenodd"> + <path fill="#f6d2a2" stroke="#231f20" stroke-width="3" d="m 178.431,138.673 c -12.059,1.028 -21.916,15.366 -15.646,26.709 8.303,15.024 26.836,-1.329 38.379,0.203 13.285,0.272 24.17,14.047 34.84,2.49 11.867,-12.854 -5.109,-25.373 -18.377,-30.97 l -39.196,1.568 z" stroke-linecap="round" transform="matrix(.03 0 0 .03 3.959 1.636)"/> + <path d="m 176.913,138.045 c -0.893,-20.891 38.938,-23.503 43.642,-6.016 4.692,17.446 -41.681,21.498 -43.642,6.016 -1.565,-12.363 0,0 0,0 z" transform="matrix(.03 0 0 .03 3.959 1.636)"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg new file mode 100755 index 0000000..356e855 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-html.svg @@ -0,0 +1,10 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <g transform="matrix(0.03889348,0,0,0.03889348,0.04326912,-1.9134619)"> + <polygon fill="#e44d26" points="437.367,100.62 404.321,470.819 255.778,512 107.644,470.877 74.633,100.62"/> + <polygon fill="#f16529" points="256,130.894 256,480.523 376.03,447.246 404.27,130.894"/> + <polygon fill="#ebebeb" points="143.219,188.488 154.38,313.627 256,313.627 256,268.217 195.91,268.217 191.76,221.716 256,221.716 256,176.305 255.843,176.305 142.132,176.305"/> + <polygon fill="#ebebeb" points="256,386.153 255.801,386.206 205.227,372.55 201.994,336.333 177.419,336.333 156.409,336.333 162.771,407.634 255.791,433.457 256,433.399"/> + <polygon fill="#ffffff" points="255.843,433.435 348.937,407.634 349.62,399.962 360.291,280.411 361.399,268.217 349.162,268.217 255.843,268.217 255.843,313.627 311.761,313.627 306.49,372.521 255.843,386.191"/> + <polygon fill="#ffffff" points="366.442,211.509 368.511,188.488 369.597,176.305 255.843,176.305 255.843,204.509 255.843,221.605 255.843,221.716 365.385,221.716 365.385,221.716 365.531,221.716"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg new file mode 100755 index 0000000..91a3279 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-js.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#fbc02d" stroke="#fbc02d" stroke-width="1" d="M 14.1875 4.6875 C 13.09018 4.6875104 12.199333 4.9405471 11.5625 5.46875 C 10.925664 5.9871904 10.624999 6.7055265 10.625 7.625 C 10.624999 8.0651846 10.696787 8.4682415 10.84375 8.78125 C 11.000508 9.0942712 11.192562 9.3375261 11.4375 9.5625 C 11.692232 9.7874849 11.989182 9.9997477 12.3125 10.15625 C 12.645612 10.302981 12.991037 10.435342 13.34375 10.5625 C 13.696455 10.679886 14.006917 10.810341 14.28125 10.9375 C 14.555575 11.054885 14.782593 11.165778 14.96875 11.3125 C 15.164694 11.449448 15.308271 11.605183 15.40625 11.78125 C 15.514016 11.957323 15.562494 12.16171 15.5625 12.40625 C 15.562494 12.817085 15.428715 13.150022 15.125 13.375 C 14.821273 13.599981 14.322474 13.718751 13.65625 13.71875 C 13.019412 13.718751 12.481931 13.646727 12.03125 13.5 C 11.580565 13.353276 11.23328 13.209228 10.96875 13.0625 L 10.40625 14.5625 C 10.52382 14.630973 10.679049 14.724461 10.875 14.8125 C 11.070949 14.890754 11.297967 14.952993 11.5625 15.03125 C 11.836828 15.109504 12.157087 15.169839 12.5 15.21875 C 12.852707 15.277443 13.234955 15.3125 13.65625 15.3125 C 14.910321 15.3125 15.853361 15.061368 16.5 14.5625 C 17.156424 14.053851 17.499993 13.325734 17.5 12.40625 C 17.499993 11.92695 17.418407 11.551332 17.28125 11.21875 C 17.144079 10.876394 16.952025 10.557047 16.6875 10.3125 C 16.432759 10.058181 16.132095 9.8635762 15.75 9.6875 C 15.377691 9.5016528 14.948821 9.3010768 14.46875 9.125 C 14.194416 9.0271889 13.922635 8.9201051 13.6875 8.8125 C 13.462155 8.7049074 13.270101 8.5959189 13.09375 8.46875 C 12.92719 8.3415943 12.785469 8.2190145 12.6875 8.0625 C 12.599319 7.896218 12.562497 7.693737 12.5625 7.46875 C 12.562497 7.0970525 12.694418 6.7991744 12.96875 6.59375 C 13.252873 6.3883426 13.656575 6.2812588 14.15625 6.28125 C 14.577537 6.2812588 14.983096 6.3396915 15.375 6.4375 C 15.776691 6.5353258 16.13563 6.6891556 16.46875 6.875 L 17.03125 5.375 C 16.747117 5.2087206 16.374665 5.0432042 15.875 4.90625 C 15.385121 4.7595342 14.82433 4.6875104 14.1875 4.6875 z M 6.9375 4.9375 L 6.9375 11.625 C 6.9374954 12.387977 6.8153722 12.936987 6.53125 13.25 C 6.2471196 13.563017 5.7832845 13.718751 5.15625 13.71875 C 4.7839439 13.718751 4.4250043 13.646727 4.0625 13.5 C 3.7097899 13.343494 3.4011857 13.166291 3.15625 13 L 2.5 14.46875 C 2.7547338 14.674167 3.1234709 14.876648 3.59375 15.0625 C 4.0738243 15.238567 4.6346149 15.3125 5.28125 15.3125 C 5.9768667 15.3125 6.5493124 15.217103 7 15.03125 C 7.460476 14.845398 7.829213 14.604047 8.09375 14.28125 C 8.3680731 13.958455 8.5484718 13.555398 8.65625 13.125 C 8.7640159 12.694607 8.8124936 12.248871 8.8125 11.75 L 8.8125 4.9375 L 6.9375 4.9375 z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg new file mode 100755 index 0000000..fd15b02 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-less.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <g fill="#5c6bc0" transform="matrix(0.02460339,0,0,0.02460339,1.0508613,-2.0358995)"> + <path d="m 635.0385,526.8108 c 35.909,12.563 53.856,34.088 53.856,64.543 0,20.046 -7.443,35.957 -22.296,47.725 -14.838,11.776 -36.005,19.084 -63.557,19.084 -27.552,0 -53.037,-7.983 -76.51,-21.088 0.254,-6.95 2.091,-14.575 5.463,-22.852 3.372,-8.277 7.363,-14.853 11.936,-19.656 21.573,11.211 40.346,16.826 56.281,16.826 7.531,0 13.358,-1.264 17.414,-3.809 4.063,-2.536 6.083,-5.94 6.083,-10.217 0,-8.039 -6.226,-14.051 -18.638,-18.058 l -22.296,-8.421 c -33.73,-12.293 -50.596,-32.323 -50.596,-60.146 0,-20.316 7.085,-36.418 21.255,-48.33 14.17,-11.895 33.269,-22.137 57.283,-22.137 11.88,0 24.96,1.67 39.272,5.01 14.297,3.348 26.042,11.594 35.218,16.125 0.541,7.49 -0.962,15.712 -4.452,24.665 -3.515,8.961 -7.824,15.306 -12.969,19.052 -22.685,-10.162 -41.562,-15.243 -56.686,-15.243 -5.415,0 -9.494,1.201 -12.357,3.618 -2.831,2.41 -4.223,5.478 -4.223,9.224 0,6.417 5.121,11.49 15.386,15.235 l 25.133,8.85 z"/> + <path d="m 455.6835,526.8108 c 35.909,12.563 53.848,34.088 53.848,64.543 0,20.046 -7.443,35.957 -22.272,47.725 -14.853,11.776 -36.028,19.084 -63.572,19.084 -27.528,0 -53.045,-7.983 -76.51,-21.088 0.254,-6.95 2.091,-14.575 5.47,-22.852 3.372,-8.277 7.347,-14.853 11.936,-19.656 21.597,11.211 40.362,16.826 56.289,16.826 7.538,0 13.366,-1.264 17.406,-3.809 4.048,-2.536 6.083,-5.94 6.083,-10.217 0,-8.039 -6.226,-14.051 -18.638,-18.058 l -22.281,-8.421 c -33.738,-12.293 -50.611,-32.323 -50.611,-60.146 0,-20.316 7.085,-36.418 21.27,-48.33 14.162,-11.895 33.253,-22.137 57.267,-22.137 11.872,0 24.984,1.67 39.265,5.01 14.313,3.348 26.042,11.594 35.225,16.125 0.541,7.49 -0.962,15.712 -4.452,24.665 -3.507,8.961 -7.824,15.306 -12.961,19.052 -22.694,-10.162 -41.571,-15.243 -56.702,-15.243 -5.407,0 -9.502,1.201 -12.349,3.618 -2.823,2.41 -4.23,5.478 -4.23,9.224 0,6.417 5.128,11.49 15.394,15.235 l 25.125,8.85 z"/> + <path d="m 324.8885,529.6408 c 0,-12.293 -1.956,-23.656 -5.868,-34.089 -3.904,-10.432 -9.51,-19.378 -16.794,-26.868 -7.292,-7.49 -16.126,-13.367 -26.511,-17.645 -10.401,-4.27 -22.074,-10.711 -35.027,-10.711 -15.387,0 -28.816,6.966 -40.282,12.317 -11.466,5.344 -20.913,12.691 -28.332,22.05 -7.435,9.366 -12.969,20.388 -16.611,33.086 -3.642,12.699 -5.463,26.534 -5.463,41.499 0,15.49 1.479,29.818 4.453,42.914 2.966,13.08 8.03,24.435 15.18,34.073 7.156,9.621 16.467,17.104 27.941,22.439 11.474,5.344 25.715,9.447 42.716,9.447 31.305,0 57.752,-9.065 79.348,-24.292 -2.139,-15.49 -7.657,-27.807 -16.523,-36.896 -11.029,4.142 -20.786,7.108 -29.246,8.93 -8.468,1.798 -15.935,2.704 -22.383,2.704 -12.906,0 -22.193,-3.284 -27.83,-9.915 -5.631,-6.608 -8.72,-14.424 -9.267,-26.296 h 105.265 c 3.477,-11.243 5.234,-26.438 5.234,-42.747 z m -110.9,2.776 c 0.802,-13.645 3.292,-28.244 7.435,-34.255 4.151,-6.019 10.504,-9.025 19.083,-9.025 8.835,0 15.466,3.197 19.879,9.614 4.422,6.417 6.631,19.346 6.631,29.237 l 0.008,4.429 h -53.036 l 0,0 z"/> + <path d="m 129.3525,604.6078 h -10.933 c -11.887,0 -16.364,-6.25 -16.364,-18.805 V 355.05779 c 0,-13.875 -4.007,-23.616 -9.137,-29.229 -5.129,-5.598 -14.034,-5.542 -26.717,-5.542 h -24.69 l -2.91,-0.056 v 0.238 l -0.024,34.343 V 596.9678 c 0,19.258 4.326,33.349 12.022,42.318 7.705,8.953 20.722,13.422 39.074,13.422 12.691,0 27.131,-1.336 43.32,-4.016 0.811,-2.704 1.217,-8.492 1.217,-17.374 0,-8.906 -1.621,-17.788 -4.858,-26.71 z"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg new file mode 100755 index 0000000..a2fba14 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-md.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#ad1457" d="M12.078 10h2.3V6.007h2.32V10H19l-3.46 3.993zM1 13.993V6.007h2.32l2.355 2.917L8.03 6.007h2.32v7.986H8.03V9.398l-2.355 2.887L3.32 9.398v4.595z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg new file mode 100755 index 0000000..84e1e22 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-php.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#6c7eb7" fill-rule="evenodd" d="M 8.625 5.65625 L 7.25 12.6875 L 8.90625 12.6875 L 9.6875 8.78125 L 11 8.78125 C 11.609 8.78125 11.587 9.03375 11.5 9.46875 L 10.90625 12.6875 L 12.65625 12.6875 L 13.25 9.125 C 13.424 8.255 12.892 7.55575 11.5 7.46875 L 9.9375 7.46875 L 10.28125 5.65625 L 8.625 5.65625 z M 2.34375 7.46875 L 0.9375 14.53125 L 2.59375 14.53125 L 2.9375 12.6875 L 4.5 12.6875 C 5.979 12.7745 7.65625 11.55675 7.65625 9.46875 C 7.65625 8.25075 6.9545 7.55575 5.5625 7.46875 L 2.34375 7.46875 z M 13.84375 7.46875 L 12.4375 14.5 L 14.09375 14.5 L 14.4375 12.6875 L 16 12.6875 C 17.47899 12.7745 19.125 11.556754 19.125 9.46875 C 19.125 8.2507462 18.454491 7.55575 17.0625 7.46875 L 13.84375 7.46875 z M 15.21875 8.75 L 16.34375 8.75 C 16.952746 8.75 17.40625 9.0092466 17.40625 9.53125 C 17.31925 11.010253 16.626745 11.288 15.84375 11.375 L 14.78125 11.375 L 15.21875 8.75 z M 3.71875 8.78125 L 4.875 8.78125 C 5.484 8.78125 5.90625 9.0405 5.90625 9.5625 C 5.81925 11.0415 5.12675 11.31925 4.34375 11.40625 L 3.28125 11.40625 L 3.71875 8.78125 z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg new file mode 100755 index 0000000..d5dc003 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-py.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <g transform="translate(-473.36088,-341.57095)"> + <g transform="matrix(0.14489978,0,0,0.14489978,468.84945,333.83641)"> + <path fill="#387eb8" d="M 99.75,67.46875 C 71.718268,67.468752 73.46875,79.625 73.46875,79.625 L 73.5,92.21875 l 26.75,0 0,3.78125 -37.375,0 c 0,0 -17.9375,-2.034276 -17.9375,26.25 -2e-6,28.28427 15.65625,27.28125 15.65625,27.28125 l 9.34375,0 0,-13.125 c 0,0 -0.503652,-15.65625 15.40625,-15.65625 15.9099,0 26.53125,0 26.53125,0 0,0 14.90625,0.24096 14.90625,-14.40625 0,-14.647206 0,-24.21875 0,-24.21875 0,-2e-6 2.26318,-14.65625 -27.03125,-14.65625 z M 85,75.9375 c 2.661429,-2e-6 4.8125,2.151071 4.8125,4.8125 2e-6,2.661429 -2.151071,4.8125 -4.8125,4.8125 -2.661429,2e-6 -4.8125,-2.151071 -4.8125,-4.8125 -2e-6,-2.661429 2.151071,-4.8125 4.8125,-4.8125 z"/> + <path fill="#ffe052" d="m 100.5461,177.31485 c 28.03174,0 26.28125,-12.15625 26.28125,-12.15625 l -0.0312,-12.59375 -26.75,0 0,-3.78125 37.375,0 c 0,0 17.9375,2.03427 17.9375,-26.25001 10e-6,-28.284267 -15.65625,-27.281247 -15.65625,-27.281247 l -9.34375,0 0,13.124997 c 0,0 0.50366,15.65625 -15.40625,15.65625 -15.909902,0 -26.531252,0 -26.531252,0 0,0 -14.90625,-0.24096 -14.90625,14.40626 0,14.6472 0,24.21875 0,24.21875 0,0 -2.26318,14.65625 27.031252,14.65625 z m 14.75,-8.46875 c -2.66143,0 -4.8125,-2.15107 -4.8125,-4.8125 0,-2.66143 2.15107,-4.8125 4.8125,-4.8125 2.66143,0 4.8125,2.15107 4.8125,4.8125 1e-5,2.66143 -2.15107,4.8125 -4.8125,4.8125 z"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg new file mode 100755 index 0000000..a642dc2 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rb.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#e53935" d="M 10.707376,3.0220971 12.625,4.28125 11.5,7.90625 7.4375,11.6875 3.90625,12.46875 3.1875,10.46875 3,14.15625 c 0.07668,2.758421 2.05851,2.788289 2.90625,2.8125 L 5.875,17 16.96875,16.90625 17.0625,5.8125 C 17.122609,4.2480709 15.364825,3.0014165 14.375,3 z M 5.8700983,5.9390704 C 3.7805688,8.0101404 3.256183,9.918237 4.289943,10.960517 5.3229925,12.003507 7.2816787,11.165285 9.3712087,9.09421 11.460739,7.0231401 12.097651,5.0845033 11.06453,4.0415133 9.4255397,2.6480655 6.9773962,4.7208064 5.8700983,5.9390704 z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg new file mode 100755 index 0000000..0a71e77 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-rust.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#795548" d="M18 9.9 17.3 9.5c0 0 0-0.1 0-0.1L17.9 8.8C17.9 8.8 18 8.6 18 8.5 18 8.4 17.9 8.4 17.9 8.4L17.1 8.1c0 0 0-0.1 0-0.1l0.4-0.7c0 0 0-0.1 0-0.3 0-0.1-0.1-0.1-0.1-0.1L16.5 6.7c0 0 0-0.1-0.1-0.1l0.3-0.7c0-0.1 0-0.1 0-0.3 0 0-0.1-0.1-0.1-0.1l-0.8 0c0 0-0.1-0.1-0.1-0.1L15.7 4.6c0-0.1 0-0.1 0-0.3 0 0-0.1-0.1-0.3 0l-0.8 0.1c0 0-0.1-0.1-0.1-0.1l0-0.8c0-0.1 0-0.1-0.1-0.1 0 0-0.1 0-0.3 0l-0.7 0.3c0 0-0.1 0-0.1-0.1L13.1 2.7c0-0.1 0-0.1-0.1-0.1-0.1 0-0.1 0-0.3 0l-0.7 0.4c0 0-0.1 0-0.1 0L11.6 2.3c0-0.1-0.1-0.1-0.1-0.1-0.1 0-0.1 0-0.3 0.1l-0.5 0.5c0 0-0.1 0-0.1 0L10.1 2.1C10.1 2 10 2 10 2 9.9 2 9.9 2 9.9 2.1l-0.4 0.7c0 0-0.1 0-0.1 0L8.8 2.3c0 0-0.1-0.1-0.3-0.1-0.1 0-0.1 0.1-0.1 0.1L8.1 2.9c0 0-0.1 0-0.1 0L7.3 2.5c0 0-0.1 0-0.3 0-0.1 0-0.1 0.1-0.1 0.1L6.7 3.5c0 0-0.1 0-0.1 0.1L5.9 3.4c-0.1 0-0.1 0-0.3 0 0 0-0.1 0.1-0.1 0.1l0 0.8c0 0-0.1 0.1-0.1 0.1L4.6 4.3c-0.1 0-0.1 0-0.3 0 0 0-0.1 0.1 0 0.3l0.1 0.8c0 0-0.1 0.1-0.1 0.1l-0.8 0c-0.1 0-0.1 0-0.1 0.1 0 0 0 0.1 0 0.3l0.3 0.7c0 0 0 0.1-0.1 0.1L2.7 6.9c-0.1 0-0.1 0-0.1 0.1 0 0.1 0 0.1 0 0.3l0.4 0.7c0 0 0 0.1 0 0.1L2.3 8.4c-0.1 0-0.1 0.1-0.1 0.1 0 0.1 0 0.1 0.1 0.3l0.5 0.5c0 0 0 0.1 0 0.1L2.1 9.9C2 9.9 2 10 2 10c0 0.1 0 0.1 0.1 0.1l0.7 0.4c0 0 0 0.1 0 0.1l-0.5 0.5c0 0-0.1 0.1-0.1 0.3 0 0.1 0.1 0.1 0.1 0.1l0.7 0.3c0 0 0 0.1 0 0.1l-0.4 0.7c0 0 0 0.1 0 0.3 0 0.1 0.1 0.1 0.1 0.1l0.8 0.1c0 0 0 0.1 0.1 0.1l-0.3 0.7c0 0.1 0 0.1 0 0.3 0 0 0.1 0.1 0.1 0.1l0.8 0c0 0 0.1 0.1 0.1 0.1l-0.1 0.8c0 0.1 0 0.1 0 0.3 0 0 0.1 0.1 0.3 0l0.8-0.1c0 0 0.1 0.1 0.1 0.1l0 0.8c0 0.1 0 0.1 0.1 0.1 0 0 0.1 0 0.3 0l0.7-0.3c0 0 0.1 0 0.1 0.1l0.1 0.8c0 0.1 0 0.1 0.1 0.1 0.1 0 0.1 0 0.3 0l0.7-0.4c0 0 0.1 0 0.1 0l0.3 0.7c0 0.1 0.1 0.1 0.1 0.1 0.1 0 0.1 0 0.3-0.1l0.5-0.5c0 0 0.1 0 0.1 0l0.4 0.7C9.9 17.9 10 18 10 18c0.1 0 0.1 0 0.1-0.1l0.4-0.7c0 0 0.1 0 0.1 0l0.5 0.5c0 0 0.1 0.1 0.3 0.1 0.1 0 0.1-0.1 0.1-0.1l0.3-0.7c0 0 0.1 0 0.1 0l0.7 0.4c0 0 0.1 0 0.3 0 0.1 0 0.1-0.1 0.1-0.1l0.1-0.8c0 0 0.1 0 0.1-0.1l0.7 0.3c0.1 0 0.1 0 0.3 0 0 0 0.1-0.1 0.1-0.1l0-0.8c0 0 0.1-0.1 0.1-0.1l0.8 0.1c0.1 0 0.1 0 0.3 0 0 0 0.1-0.1 0-0.3l-0.1-0.8c0 0 0.1-0.1 0.1-0.1l0.8 0c0.1 0 0.1 0 0.1-0.1 0 0 0-0.1 0-0.3l-0.3-0.7c0 0 0-0.1 0.1-0.1l0.8-0.1c0.1 0 0.1 0 0.1-0.1 0-0.1 0-0.1 0-0.3l-0.4-0.7c0 0 0-0.1 0-0.1l0.7-0.3c0.1 0 0.1-0.1 0.1-0.1 0-0.1 0-0.1-0.1-0.3l-0.5-0.5c0 0 0-0.1 0-0.1l0.7-0.4C18 10.1 18 10 18 10 18 9.9 18 9.9 17.9 9.9zm-4.5 5.6c-0.3 0-0.4-0.3-0.4-0.5 0-0.3 0.3-0.4 0.5-0.4 0.3 0 0.4 0.3 0.4 0.5 0 0.3-0.3 0.4-0.5 0.4zm-0.3-1.5c-0.3 0-0.4 0.1-0.5 0.3l-0.3 1.1C11.8 15.6 10.9 15.8 10 15.8c-0.8 0-1.8-0.1-2.4-0.5L7.3 14.2c0-0.3-0.3-0.4-0.5-0.3L5.8 14.2C5.7 13.9 5.5 13.7 5.4 13.5l4.7 0c0 0 0.1 0 0.1 0l0-1.6c0 0 0 0-0.1 0l-1.4 0 0-1.1 1.5 0c0.1 0 0.7 0 0.9 0.8 0 0.3 0.1 0.9 0.3 1.2 0.1 0.3 0.4 0.8 0.8 0.8l2.4 0c0 0 0 0 0.1 0-0.1 0.3-0.4 0.4-0.5 0.7l-1.1-0.4zm-6.6 1.5c-0.3 0-0.5-0.1-0.5-0.4 0-0.3 0.1-0.5 0.4-0.5 0.3 0 0.5 0.1 0.5 0.4 0 0.3-0.1 0.5-0.4 0.5zM4.8 8.1c0.1 0.3 0 0.5-0.3 0.7-0.3 0.1-0.5 0-0.7-0.3-0.1-0.3 0-0.5 0.3-0.7 0.3-0.1 0.5 0 0.7 0.3zM4.3 9.5 5.4 9.1C5.7 8.9 5.7 8.6 5.7 8.5l-0.3-0.5 0.8 0 0 3.8-1.6 0C4.4 11.2 4.3 10.7 4.3 10.1c0-0.3 0-0.4 0-0.7zm4.5-0.4 0-1.1 2 0c0.1 0 0.7 0.1 0.7 0.5 0 0.4-0.4 0.5-0.8 0.5l-1.8 0zM16 10c0 0.1 0 0.3 0 0.4l-0.5 0c0 0-0.1 0-0.1 0.1l0 0.3c0 0.7-0.4 0.8-0.7 0.8-0.3 0-0.7-0.1-0.7-0.3-0.1-0.9-0.5-1.2-0.9-1.6 0.5-0.4 1.2-0.9 1.2-1.6 0-0.8-0.5-1.4-0.9-1.5C12.7 6.2 12.2 6.2 12 6.2l-6.2 0C6.6 5.3 7.8 4.6 9.1 4.3l0.7 0.8c0.1 0.1 0.4 0.1 0.7 0l0.8-0.8c1.8 0.3 3.1 1.4 3.9 2.8l-0.5 1.2c-0.1 0.3 0 0.4 0.3 0.5l1.1 0.5c0 0.1 0 0.4 0 0.5zM9.7 3.6c0.1-0.1 0.5-0.1 0.7 0 0.1 0.1 0.1 0.5 0 0.7-0.1 0.1-0.5 0.1-0.7 0-0.1-0.1-0.1-0.5 0-0.7zm5.6 4.5C15.4 7.8 15.7 7.7 16 7.8 16.2 8 16.4 8.2 16.2 8.5 16.1 8.8 15.8 8.9 15.6 8.8 15.3 8.6 15.2 8.4 15.3 8.1z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg new file mode 100755 index 0000000..f8704e8 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/txt-script.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#1976d2" d="M 8.59375 3 L 8 5.09375 L 6.84375 5.8125 L 4.625 5.34375 L 3.21875 7.65625 L 4.84375 9.3125 L 4.84375 10.6875 L 3.21875 12.34375 L 4.625 14.65625 L 6.84375 14.1875 L 8 14.90625 L 8.59375 17 L 11.40625 17 L 12.09375 14.90625 L 13.15625 14.1875 L 15.375 14.65625 L 16.78125 12.34375 L 15.25 10.6875 L 15.25 9.3125 L 16.78125 7.65625 L 15.375 5.34375 L 13.15625 5.8125 L 12.09375 5.09375 L 11.40625 3 L 8.59375 3 z M 10 7.5 C 11.380712 7.5 12.5 8.6192881 12.5 10 C 12.5 11.380712 11.380712 12.5 10 12.5 C 8.6192881 12.5 7.5 11.380712 7.5 10 C 7.5 8.6192881 8.6192881 7.5 10 7.5 z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg new file mode 100755 index 0000000..5266630 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/comity/x-pdf.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#e33" d="M 7.1837924,11.307953 C 7.6707878,10.353408 8.2243075,9.2777656 8.6673693,8.1977207 l 0,0 0.1750865,-0.4261233 C 8.2638361,5.5694562 7.9167872,3.8015945 8.2268175,2.65879 l 0,0 C 8.3103144,2.3606956 8.6554508,2.1799563 9.0244582,2.1799563 l 0,0 0.2246724,0.0031 0.041496,0 c 0.5051971,-0.00754 0.7430344,0.6351036 0.7700294,0.8848773 l 0,0 c 0.04457,0.4160895 -0.1480415,1.1202107 -0.1480415,1.1202107 l 0,0 c 0,-0.2842813 0.011293,-0.7436667 -0.1681885,-1.1402846 l 0,0 C 9.5354439,2.5891118 9.3358716,2.3148707 9.1570283,2.2715686 l 0,0 C 9.0667026,2.3318431 8.9787995,2.4566961 8.9486794,2.69706 l 0,0 c -0.062153,0.337009 -0.080934,0.7625005 -0.080934,0.9815213 l 0,0 c 0,0.7750507 0.1524795,1.7973568 0.4524699,2.8516732 l 0,0 C 9.376732,6.3670176 9.4262491,6.2102008 9.4658631,6.0633393 l 0,0 C 9.5273333,5.831768 9.9183329,4.2967327 9.9183329,4.2967327 l 0,0 c 0,0 -0.098522,2.0433649 -0.2359592,2.6615218 l 0,0 c -0.029539,0.130453 -0.062152,0.2598125 -0.095963,0.3922291 l 0,0 c 0.4945263,1.3812802 1.2909033,2.613824 2.2410503,3.5012084 l 0,0 c 0.374662,0.350187 0.847839,0.632591 1.295924,0.889897 l 0,0 c 0.977747,-0.140017 1.878312,-0.205837 2.629514,-0.197674 l 0,0 c 0.996584,0.01322 1.728324,0.160674 2.024539,0.452468 l 0,0 c 0.144967,0.141893 0.203958,0.313158 0.222161,0.505196 l 0,0 c 0.0046,0.07457 -0.03192,0.250406 -0.04265,0.294341 l 0,0 c 0.01063,-0.0533 0.01063,-0.315665 -0.789481,-0.571091 l 0,0 c -0.630087,-0.201452 -1.809285,-0.195167 -3.224454,-0.04454 l 0,0 c 1.636707,0.800785 3.231353,1.198664 3.736549,0.960177 l 0,0 c 0.123621,-0.06024 0.273628,-0.265462 0.273628,-0.265462 l 0,0 c 0,0 -0.08911,0.404778 -0.153163,0.505805 l 0,0 c -0.08162,0.109794 -0.241612,0.229069 -0.393496,0.26923 l 0,0 c -0.79828,0.212748 -2.875529,-0.279901 -4.686694,-1.314763 l 0,0 C 10.696554,12.63337 8.4743315,13.183748 6.69329,13.768015 l 0,0 c -1.7505467,3.067553 -3.0665588,4.476442 -4.1371905,3.940501 l 0,0 -0.3934914,-0.197673 C 2.0026124,17.419141 1.9780925,17.196419 2.0150773,17.015058 l 0,0 C 2.139895,16.40444 2.9055885,15.484427 4.443769,14.566287 l 0,0 c 0.1656275,-0.100408 0.9030766,-0.490141 0.9030766,-0.490141 l 0,0 c 0,0 -0.5459891,0.528424 -0.6740006,0.631965 l 0,0 c -1.2275229,1.005988 -2.1337362,2.2718 -2.1111425,2.762564 l 0,0 0.00437,0.04265 c 1.0430672,-0.148719 2.6069697,-2.271187 4.6177021,-6.205417 m 0.6369822,0.326336 C 7.4850166,12.266842 7.156801,12.852992 6.8536863,13.391448 l 0,0 C 8.5299255,12.689213 10.33419,12.239865 12.051848,11.920429 l 0,0 c -0.23094,-0.159484 -0.454977,-0.328215 -0.665855,-0.506443 l 0,0 C 10.440248,10.613209 9.7191732,9.6141206 9.196409,8.562942 l 0,0 C 8.8650521,9.4559636 8.4709445,10.40486 7.8207804,11.634266"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg new file mode 100755 index 0000000..e25cded --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/ar.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M3 3v14h14V6l-3-3zm2 2h4v3h2V5h2l2 2v8H5z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg new file mode 100755 index 0000000..dd955fc --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/aud.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M6 4l9 6-9 6z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg new file mode 100755 index 0000000..34f1f45 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/bin.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M 8.59375 3 L 8 5.09375 L 6.84375 5.8125 L 4.625 5.34375 L 3.21875 7.65625 L 4.84375 9.3125 L 4.84375 10.6875 L 3.21875 12.34375 L 4.625 14.65625 L 6.84375 14.1875 L 8 14.90625 L 8.59375 17 L 11.40625 17 L 12.09375 14.90625 L 13.15625 14.1875 L 15.375 14.65625 L 16.78125 12.34375 L 15.25 10.6875 L 15.25 9.3125 L 16.78125 7.65625 L 15.375 5.34375 L 13.15625 5.8125 L 12.09375 5.09375 L 11.40625 3 L 8.59375 3 z M 10 7.5 C 11.380712 7.5 12.5 8.6192881 12.5 10 C 12.5 11.380712 11.380712 12.5 10 12.5 C 8.6192881 12.5 7.5 11.380712 7.5 10 C 7.5 8.6192881 8.6192881 7.5 10 7.5 z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg new file mode 100755 index 0000000..66bcac7 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/file.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M3 2v16h14V6l-4-4zm2 2h7l3 3v9H5z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg new file mode 100755 index 0000000..4ca3ec2 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-page.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M2 3v14h16V5h-8L8 3H2zm14 4v8H8l8-8z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg new file mode 100755 index 0000000..e114689 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder-parent.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M9 4l-6 6 6 6 1.4-1.4L6.8 11H16V9H6.8l3.6-3.6z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg new file mode 100755 index 0000000..3e971cf --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/folder.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M2 3v14h16V5h-8L8 3z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg new file mode 100755 index 0000000..e754e82 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/img.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M8 8l3 4.712L13 11l4 5H3zm8-2a2 2 0 1 1-4 0 2 2 0 1 1 4 0z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg new file mode 100755 index 0000000..d5c0dc9 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/txt.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M4 3v2h12V3zm0 4v2h8V7zm0 4v2h12v-2zm0 4v2h6v-2z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg new file mode 100755 index 0000000..dd955fc --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/vid.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M6 4l9 6-9 6z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg b/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg new file mode 100755 index 0000000..66bcac7 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/themes/default/x.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"> + <path fill="#555" d="M3 2v16h14V6l-4-4zm2 2h7l3 3v9H5z"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg new file mode 100755 index 0000000..3275e21 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/back.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M20 11h-12.17l5.59-5.59-1.42-1.41-8 8 8 8 1.41-1.41-5.58-5.59h12.17v-2z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg new file mode 100755 index 0000000..8dfd404 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/crumb.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg new file mode 100755 index 0000000..5721c4e --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/download.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M19 9h-4v-6h-6v6h-4l7 7 7-7zm-14 9v2h14v-2h-14z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg new file mode 100755 index 0000000..d6d4c78 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/filter.svg @@ -0,0 +1,5 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1"> + <g transform="translate(0,-8)"> + <path d="m15.8 22.3h-0.8l-0.3-0.3c1-1.1 1.6-2.6 1.6-4.2 0-3.6-2.9-6.5-6.5-6.5-3.6 0-6.5 2.9-6.5 6.5 0 3.6 2.9 6.5 6.5 6.5 1.6 0 3.1-0.6 4.2-1.6l0.3 0.3v0.8l5 5 1.5-1.5-5-5zm-6 0c-2.5 0-4.5-2-4.5-4.5 0-2.5 2-4.5 4.5-4.5 2.5 0 4.5 2 4.5 4.5 0 2.5-2 4.5-4.5 4.5z" fill="#555"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg new file mode 100755 index 0000000..ebc0e5c --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/info-toggle.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1"> + <path d="M 12 2 C 6.48 2 2 6.48 2 12 C 2 17.52 6.48 22 12 22 C 17.52 22 22 17.52 22 12 C 22 6.48 17.52 2 12 2 z M 11 7 L 13 7 L 13 9 L 11 9 L 11 7 z M 11 11 L 13 11 L 13 17 L 11 17 L 11 11 z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg new file mode 100755 index 0000000..a17415e --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/paypal.svg @@ -0,0 +1,6 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="296" height="76" version="1.1"> + <g transform="translate(782.29881,-654.4062)"> + <path d="m-618.9 654.6c-1.8 0-3.5 1.4-3.9 3.1L-634.2 707.6c-0.4 1.7 0.7 3.1 2.4 3.1l8.2 0c1.7 0 3.5-1.4 3.9-3.1L-616.9 695.5c0.4-1.7 2.1-3.1 3.9-3.1l2.3 0c10 0 17.7-2 23.3-6.1 5.5-4.1 8.3-9.5 8.3-16.2 0-2.9-0.5-5.4-1.6-7.3-1-2-2.6-3.6-4.5-4.8-2-1.2-4.4-2.1-7.1-2.6-2.7-0.5-5.9-0.7-9.6-0.7l-17.1 0zm115.3 0.3 0 2.3-0.9 0 0 1.1 0.9 0 0 4.2c0 1 0.2 1.7 0.6 2.1 0.4 0.4 1 0.7 1.8 0.7 0.2 0 0.5 0 0.8-0.1 0.3 0 0.6-0.1 0.8-0.2l0-1.2-0.1 0c-0.1 0-0.3 0.1-0.5 0.2-0.2 0.1-0.5 0.1-0.7 0.1-0.4 0-0.6-0.1-0.8-0.2-0.2-0.1-0.3-0.2-0.4-0.4-0.1-0.2-0.2-0.4-0.2-0.7 0-0.2 0-0.6 0-1l0-3.6 2.8 0 0-1.1-2.7 0 0-2.3-1.3 0zm-17 0.1c-1.7 0-3.4 1.3-3.8 2.9 0 0.1 0 0.1-0.1 0.2 0 0-0.2 0.8-0.5 2.2l-10 45.4c-0.2 1-0.4 1.7-0.4 1.9l0 0c-0.3 1.6 0.6 2.9 2.2 3l0 0 7.6 0c1.7 0 3.3-1.3 3.8-2.9 0-0.1 0.1-0.1 0.1-0.2l10.9-49.4c0.4-1.7-0.7-3.1-2.5-3.1l-7.3 0c0 0 0 0 0 0zm26.6 2c-0.5 0-0.9 0.1-1.3 0.3-0.4 0.2-0.8 0.5-1.2 0.8l0-0.9-1.3 0 0 7.9 1.3 0 0-5.9c0.4-0.3 0.7-0.5 1.1-0.7 0.4-0.2 0.7-0.2 1.1-0.2 0.4 0 0.7 0.1 0.9 0.2 0.2 0.1 0.4 0.2 0.5 0.4 0.1 0.2 0.2 0.5 0.2 0.8 0 0.3 0 0.6 0 1l0 4.5 1.3 0 0-5.1c0-0.1 0-0.3 0-0.4 0-0.1 0-0.3-0.1-0.4 0.4-0.3 0.8-0.5 1.1-0.7 0.4-0.2 0.7-0.3 1.1-0.3 0.4 0 0.7 0.1 0.9 0.2 0.2 0.1 0.4 0.3 0.5 0.5 0.1 0.2 0.2 0.4 0.2 0.8 0 0.3 0 0.6 0 1l0 4.5 1.3 0 0-5.2c0-0.9-0.2-1.7-0.6-2.2-0.4-0.5-1.1-0.8-1.9-0.8-0.5 0-1 0.1-1.4 0.3-0.4 0.2-1 0.5-1.5 1-0.2-0.4-0.5-0.7-0.8-0.9-0.4-0.2-0.8-0.3-1.4-0.3zm-112.8 8 2.7 0c3.1 0 5.5 0.5 7.1 1.6 1.6 1.1 2.3 2.7 2.3 4.9 0 3.3-1.2 5.9-3.7 7.7-2.4 1.8-5.9 2.7-10.3 2.7l-2 0c-1.8 0-2.9-1.4-2.5-3.1l2.4-10.6c0.4-1.7 2.1-3.1 3.9-3.1zm50.8 2.2c-3.3 0-6.6 0.3-9.9 0.8-2.4 0.4-2.7 0.4-4.2 0.8-3.1 0.7-3.6 3.8-3.6 3.8l-1 4.1c-0.6 2.6 0.9 2.5 1.6 2.3 1.4-0.4 2.1-0.8 4.8-1.4 2.6-0.6 5.4-1 7.7-1 3.3 0 5.7 0.3 7.4 1 1.6 0.7 2.5 1.9 2.5 3.7 0 0.4 0 0.8-0.1 1.2-0.1 0.3-0.4 0.6-1.2 0.8-4.7 0.3-8 0.7-12 1.3-4 0.6-7.4 1.5-10.3 2.8-3.1 1.4-5.4 3.2-7 5.5-1.6 2.3-2.3 5.2-2.3 8.5 0 3.2 1.1 5.7 3.3 7.7 2.2 2 5.1 2.9 8.6 2.9 2.2 0 3.9-0.2 5.1-0.5 1.2-0.3 2.5-0.7 3.9-1.3 1-0.4 2.2-1.1 3.4-1.9 1.2-0.8 2-1.3 3.1-2l0 0.1-0.3 1.3c0 0 0 0 0 0l0 0c-0.3 1.6 0.6 2.9 2.2 3l0 0 0.1 0c1 0 4.6 0 6.3 0l1.2 0c0.1 0 0.1 0 0.1 0 1.6-0.2 3.1-1.5 3.5-3.1l6-25.7c0.1-0.6 0.2-1.3 0.3-2.1 0.1-0.8 0.2-1.5 0.1-1.9 0-3.6-1.5-6.3-4.6-8.1-3.1-1.7-7.9-2.6-14.6-2.6zm2.8 23.6c0.3 0 0.4 0.1 0.3 1-0.1 0.5-1.1 4.9-1.6 6.9-0.1 0.6-1 1.5-1.3 1.7-1 0.6-2.1 1.2-3.2 1.6-1.5 0.6-2.9 0.9-4.2 0.9-2 0-3.6-0.3-4.6-0.9-1.1-0.6-1.6-1.6-1.6-3 0-1.7 0.4-3 1.2-4 0.8-1 2-1.8 3.5-2.4 1.5-0.5 3.3-0.9 5.4-1.2 1.9-0.2 5.5-0.7 6-0.7 0.1 0 0.2 0 0.3 0z" fill="#369"/> + <path d="m-749.8 654.4-17 0c-1.8 0-3.5 1.4-3.9 3.1l-11.5 49.9c-0.4 1.7 0.7 3.1 2.5 3.1l8.2 0c1.8 0 3.5-1.4 3.9-3.1l2.8-12.1c0.4-1.7 2.1-3.1 3.9-3.1l2.3 0c10 0 17.7-2 23.3-6.1 5.5-4.1 8.3-9.5 8.3-16.2 0-2.9-0.5-5.4-1.6-7.3-1-2-2.5-3.6-4.5-4.8-2-1.2-4.3-2.1-7.1-2.6-2.7-0.5-6-0.7-9.6-0.8zm-4.8 10.4 2.7 0c3.1 0 5.5 0.5 7.1 1.6 1.6 1 2.4 2.7 2.4 4.8 0 3.3-1.2 5.9-3.7 7.7-2.5 1.8-5.9 2.7-10.3 2.7l-2 0c-1.8 0-2.9-1.4-2.5-3.1l2.5-10.6c0.4-1.7 2.1-3.1 3.9-3.1zm50.7 2.3c-3.3 0-6.6 0.2-9.9 0.8-2.4 0.4-2.6 0.5-4.2 0.8-3.1 0.7-3.6 3.8-3.6 3.8l-1 4.1c-0.6 2.6 0.9 2.5 1.6 2.3 1.3-0.4 2.1-0.8 4.8-1.4 2.6-0.6 5.4-1 7.7-1 3.3 0 5.8 0.4 7.4 1.1 1.7 0.7 2.4 1.9 2.4 3.7 0 0.4 0 0.8-0.1 1.2-0.1 0.3-0.4 0.6-1.2 0.8-4.6 0.3-8 0.7-12 1.3-4 0.6-7.4 1.5-10.3 2.8-3.1 1.4-5.4 3.2-7 5.5-1.6 2.3-2.3 5.2-2.3 8.5 0 3.2 1.1 5.8 3.3 7.8 2.2 2 5.1 2.9 8.6 2.9 2.2 0 3.9-0.2 5.1-0.5 1.2-0.3 2.5-0.7 3.9-1.3 1-0.4 2.2-1.1 3.4-1.9 1.2-0.8 2-1.3 3.1-2l0 0.1-0.3 1.3c0 0 0 0 0 0-0.3 1.6 0.6 2.9 2.2 3.1l0 0 0.1 0c1 0 4.6 0 6.3 0l1.2 0c0.1 0 0.1 0 0.1-0.1 1.6-0.2 3.1-1.5 3.5-3l5.9-25.7c0.1-0.6 0.3-1.3 0.3-2.1 0.1-0.8 0.1-1.5 0.1-1.9 0-3.6-1.5-6.3-4.6-8.1-3.1-1.7-7.9-2.6-14.6-2.6zm60.2 0.6c-1.7 0-4 1.4-5.1 3.1 0 0-11.7 20-12.8 22-0.6 1.1-1.2 0.4-1.3 0-0.1-0.5-3.6-21.9-3.6-21.9-0.4-1.7-2.2-3.2-4.4-3.2l-7.3 0c-1.8 0-2.9 1.4-2.5 3.1 0 0 5.6 31.5 6.7 39 0.5 4.1-0.1 4.8-0.1 4.8l-7.2 12.6c-1.1 1.7-0.5 3.1 1.3 3.1l8.4 0c1.7 0 4.1-1.4 5.1-3.1l32.5-54.9c0 0 3.1-4.7 0.2-4.7-2 0-9.8 0-9.8 0zM-701.4 690.8c0.5 0 0.8-0.3 0.6 1-0.1 0.5-1.1 4.9-1.6 6.9-0.1 0.6-0.9 1.5-1.3 1.7-1 0.6-2.1 1.2-3.2 1.7-1.5 0.6-2.9 0.9-4.2 0.9-2 0-3.6-0.3-4.6-0.9-1.1-0.6-1.6-1.6-1.6-3 0-1.7 0.4-3 1.2-4 0.8-1 2-1.8 3.5-2.3 1.5-0.5 3.3-0.9 5.4-1.2 1.9-0.2 5.5-0.7 6-0.7z" fill="#1c3664"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg new file mode 100755 index 0000000..ef5f8a0 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-close.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M19 6.4l-1.4-1.4-5.6 5.6-5.6-5.6-1.4 1.4 5.6 5.6-5.6 5.6 1.4 1.4 5.6-5.6 5.6 5.6 1.4-1.4-5.6-5.6z" fill="#fff"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg new file mode 100755 index 0000000..bf04ad7 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-fullscreen.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M7 14h-2v5h5v-2h-3v-3zm-2-4h2v-3h3v-2h-5v5zm12 7h-3v2h5v-5h-2v3zm-3-12v2h3v3h2v-5h-5z" fill="#fff"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg new file mode 100755 index 0000000..1b72100 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-next.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#fff"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg new file mode 100755 index 0000000..d2a3efb --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-no-fullscreen.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M5 16h3v3h2v-5h-5v2zm3-8h-3v2h5v-5h-2v3zm6 11h2v-3h3v-2h-5v5zm2-11v-3h-2v5h5v-2h-3z" fill="#fff"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg new file mode 100755 index 0000000..a592b22 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-prev.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M14.6 18 16 16.6 11.4 12 16 7.4 14.6 6l-6 6z" fill="#fff"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg new file mode 100755 index 0000000..7a8a69d --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/preview-raw.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M19 9h-4v-6h-6v6h-4l7 7 7-7zm-14 9v2h14v-2h-14z" fill="#fff"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg new file mode 100755 index 0000000..d6d4c78 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/search.svg @@ -0,0 +1,5 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1"> + <g transform="translate(0,-8)"> + <path d="m15.8 22.3h-0.8l-0.3-0.3c1-1.1 1.6-2.6 1.6-4.2 0-3.6-2.9-6.5-6.5-6.5-3.6 0-6.5 2.9-6.5 6.5 0 3.6 2.9 6.5 6.5 6.5 1.6 0 3.1-0.6 4.2-1.6l0.3 0.3v0.8l5 5 1.5-1.5-5-5zm-6 0c-2.5 0-4.5-2-4.5-4.5 0-2.5 2-4.5 4.5-4.5 2.5 0 4.5 2 4.5 4.5 0 2.5-2 4.5-4.5 4.5z" fill="#555"/> + </g> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg new file mode 100755 index 0000000..50ac249 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/selected.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M9 16.2l-4.2-4.2-1.4 1.4 5.6 5.6 12-12-1.4-1.4z" fill="#fff"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg new file mode 100755 index 0000000..4e38c05 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/sidebar.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M3 18h18v-2h-18v2zm0-5h18v-2h-18v2zm0-7v2h18v-2h-18z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg new file mode 100755 index 0000000..5b0ed8d --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/sort.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M18 9.7 16.6 8.3 12 12.9 7.4 8.3 6 9.7l6 6z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg new file mode 100755 index 0000000..a5f7a7b --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/spinner.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="white"> + <path opacity=".25" d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"/> + <path d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z"> + <animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.8s" repeatCount="indefinite" /> + </path> +</svg> diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg new file mode 100755 index 0000000..8dfd404 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-indicator.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" version="1.1"> + <path d="M10 6l-1.4 1.4 4.6 4.6-4.6 4.6 1.4 1.4 6-6z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg new file mode 100755 index 0000000..9914792 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/tree-toggle.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24"> + <path d="M4 3 4 6 7 6 7 3zm5 0 0 3 8 0 0-3zm-3 5 0 3 3 0 0-3zm5 0 0 3 9 0 0-3zm-5 5 0 3 3 0 0-3zm5 0 0 3 6 0 0-3zm-5 5 0 3 3 0 0-3zm5 0 0 3 8 0 0-3z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg new file mode 100755 index 0000000..5e756e0 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-details.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24"> + <path d="m4 4 0 4 16 0 0-4zm0 6 0 4 16 0 0-4zm0 6 0 4 16 0 0-4z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg new file mode 100755 index 0000000..8f4c48c --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-grid.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24"> + <path d="m4 4 0 4 7 0 0-4zm9 0 0 4 7 0 0-4zm-9 6 0 4 7 0 0-4zm9 0 0 4 7 0 0-4zm-9 6 0 4 7 0 0-4zm9 0 0 4 7 0 0-4z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg b/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg new file mode 100755 index 0000000..8601293 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/images/ui/view-icons.svg @@ -0,0 +1,3 @@ +<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24"> + <path d="m4 4 0 7 7 0 0-7zm9 0 0 7 7 0 0-7zm-9 9 0 7 7 0 0-7zm9 0 0 7 7 0 0-7z" fill="#555"/> +</svg> \ No newline at end of file diff --git a/container/srv-http/root/srv/_h5ai/public/index.php b/container/srv-http/root/srv/_h5ai/public/index.php new file mode 100755 index 0000000..89f99e8 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/index.php @@ -0,0 +1,17 @@ +<?php + +define('H5AI_VERSION', '0.29.2'); +define('MIN_PHP_VERSION', '5.5.0'); + +if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<')) { + header('Content-type: text/plain;charset=utf-8'); + exit('[ERR] h5ai requires PHP ' . MIN_PHP_VERSION . ' or later, but found PHP ' . PHP_VERSION); +} + +if (substr(H5AI_VERSION, 0, 1) === '{') { + header('Content-type: text/plain;charset=utf-8'); + exit('[ERR] h5ai sources must be preprocessed to work correctly'); +} + +require_once __DIR__ . '/../private/php/class-bootstrap.php'; +Bootstrap::run(); diff --git a/container/srv-http/root/srv/_h5ai/public/js/scripts.js b/container/srv-http/root/srv/_h5ai/public/js/scripts.js new file mode 100755 index 0000000..664fd61 --- /dev/null +++ b/container/srv-http/root/srv/_h5ai/public/js/scripts.js @@ -0,0 +1,5 @@ +/* h5ai v0.29.2 - https://larsjung.de/h5ai/ */ +!function(e){function t(e,t){if(!t)throw i.className=r,new Error(r+": "+e)}function n(e){return"function"==typeof e}if(!e||e.window!==e||!e.document)throw new Error("no-window");var r="no-browser",i=e.document.documentElement;i.className="",t("console",e.console&&n(e.console.log)),t("assign",e.Object&&n(e.Object.assign)),t("promise",n(e.Promise)),t("xhr",e.XMLHttpRequest)}(this),function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";n(1)},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=r.awaitReady,a=n(7),s=i("script[data-module]").attr("data-module"),c={action:"get",setup:!0,options:!0,types:!0};if("index"===s)c.theme=!0,c.langs=!0;else{if("info"!==s)throw new Error("no-main-module: '"+s+"'");c.refresh=!0}a._update(c).then(function(){return o()}).then(function(){return n(9)("./"+s)})},function(e,t,n){"use strict";e.exports=Object.assign({},n(3),n(4),n(5),n(6))},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e){return void 0!==e&&null!==e},i=function(e,t){return("undefined"==typeof e?"undefined":n(e))===t},o=function(e){return i(e,"string")},a=function(e){return i(e,"function")},s=function(e){return i(e,"number")},c=function(e){return e&&e.hasOwnProperty("length")},u=function(e){return!e||o(e)?[]:(c(e)&&(e=Array.from(e)),Object.keys(e))},l=function(e){return u(e).map(function(t){return e[t]})},f=function(e,t){return u(e).forEach(function(n){return t(e[n],n)})},d=function(e,t){return l(e).filter(t)},p=function(e,t){return l(e).map(t)},h=function(e,t){return l(e).indexOf(t)>=0},g=function(e){return d(e,function(e){return!!e})},m=function(e,t){return!!e&&e instanceof t},v=function(e){return Array.from(e)},b=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)<0})},w=function(e,t){return t=l(t),d(e,function(e){return t.indexOf(e)>=0})},y=function(e,t){return e<t?-1:e>t?1:0},x=function(e,t){var n=a(t)?t:function(e){return e[t]},r=function(e,t){return y(n(e),n(t))};return l(e).sort(r)},k=function(e,t){var n=null;return function(){clearTimeout(n),n=setTimeout(e,t)}};e.exports={is:r,isStr:o,isFn:a,isNum:s,hasLength:c,keys:u,values:l,each:f,filter:d,map:p,includes:h,compact:g,isInstanceOf:m,toArray:v,difference:b,intersection:w,cmp:y,sortBy:x,debounce:k}},function(e,t,n){(function(t){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=n(3),a=o.each,s=o.filter,c=o.hasLength,u=o.is,l=o.isStr,f=o.map,d=o.isInstanceOf,p=o.toArray,h=t.window,g=h.document,m=function(){var e=function(e){return g.createElement(e)},t=[[/^<t(head|body|foot)|^<c(ap|olg)/i,e("table")],[/^<col/i,e("colgroup")],[/^<tr/i,e("tbody")],[/^<t[dh]/i,e("tr")]],n=e("div"),r=function(e){var r=!0,o=!1,a=void 0;try{for(var s,c=t[Symbol.iterator]();!(r=(s=c.next()).done);r=!0){var u=s.value,l=i(u,2),f=l[0],d=l[1];if(f.test(e))return d}}catch(e){o=!0,a=e}finally{try{!r&&c.return&&c.return()}finally{if(o)throw a}}return n};return function(e){var t=r(e);t.innerHTML=e;var n=p(t.childNodes);return a(n,function(e){return t.removeChild(e)}),t.innerHTML="",n}}(),v=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;try{return p(t.querySelectorAll(e))}catch(e){return[]}},b=function(e){return d(e,h.Element)},w=function(e){return d(e,h.Document)},y=function(e){return u(e)&&e.window===e&&w(e.document)},x=function(e){return b(e)||w(e)||y(e)},k=function(e,t,n){return e.addEventListener(t,n)},_=function(e,t,n){return e.removeEventListener(t,n)},C=new Promise(function(e){/^(i|c|loade)/.test(g.readyState)?e():k(g,"DOMContentLoaded",function(){return e()})}),S=function(){return C},A=new Promise(function(e){k(h,"load",function(){return e()})}),T=function(){return A},E=function e(t){if(d(t,e))return t;var n=void 0;return l(t)?(t=t.trim(),n="<"===t[0]?m(t):v(t)):n=x(t)?[t]:c(t)?t:[t],n=s(n,x),Object.assign(Object.create(e.prototype),n,{length:n.length})};E.prototype={constructor:E,each:function(e){return a(this,e),this},map:function(e){return f(this,e)},find:function(e){var t;return E((t=[]).concat.apply(t,r(this.map(function(t){return v(e,t)}))))},on:function(e,t){return this.each(function(n){return k(n,e,t)})},off:function(e,t){return this.each(function(n){return _(n,e,t)})},attr:function(e,t){return void 0===t?this.length?this[0].getAttribute(e):void 0:this.each(function(n){return n.setAttribute(e,t)})},rmAttr:function(e){return this.each(function(t){return t.removeAttribute(e)})},prop:function(e,t){return void 0===t?this.length?this[0][e]:void 0:this.each(function(n){n[e]=t})},rmProp:function(e){return this.each(function(t){return delete t[e]})},val:function(e){return void 0===e?this.length?this[0].value:void 0:this.each(function(t){t.value=e})},html:function(e){return void 0===e?this.map(function(e){return e.innerHTML}).join(""):this.each(function(t){t.innerHTML=e})},text:function(e){return void 0===e?this.map(function(e){return e.textContent}).join(""):this.each(function(t){t.textContent=e})},clr:function(){return this.html("")},rm:function(){return this.each(function(e){var t=e.parentNode;t&&t.removeChild(e)})},rpl:function(e){return this.each(function(t){var n=t.parentNode;n&&n.replaceChild(E(e)[0],t)})},app:function(e){return this.each(function(t){E(e).each(function(e){return t.appendChild(e)})})},appTo:function(e){return E(e).app(this),this},pre:function(e){return this.each(function(t){E(e).each(function(e){var n=t.firstChild;n?t.insertBefore(e,n):t.appendChild(e)})})},preTo:function(e){return E(e).pre(this),this},cls:function(){return arguments.length?(this.each(function(e){e.className=""}),this.addCls.apply(this,arguments)):this.length?p(this[0].classList):[]},hasCls:function(e){return p(this).every(function(t){return t.classList.contains(e)})},addCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},rmCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.remove(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},tglCls:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.each(function(e){var n=!0,r=!1,i=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;e.classList.contains(s)?e.classList.remove(s):e.classList.add(s)}}catch(e){r=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw i}}})},parent:function(){return E(this.map(function(e){return e.parentNode}))},children:function(){var e;return E((e=[]).concat.apply(e,r(this.map(function(e){return p(e.children)}))))},hide:function(){return this.addCls("hidden")},show:function(){return this.rmCls("hidden")},isHidden:function(){return this.hasCls("hidden")},css:function(e){return this.each(function(t){return Object.assign(t.style,e)})}},e.exports={awaitReady:S,awaitLoad:T,dom:E}}).call(t,function(){return this}())},function(e,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,o=/^0x[0-9a-f]+$/i,a=/^0/,s=function(e,t){var s=String(e).trim(),c=String(t).trim(),u=s.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),l=c.replace(r,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),f=parseInt(s.match(o),16)||1!==u.length&&s.match(i)&&Date.parse(s),d=parseInt(c.match(o),16)||f&&c.match(i)&&Date.parse(c)||null;if(d){if(f<d)return-1;if(f>d)return 1}for(var p=0,h=Math.max(u.length,l.length);p<h;p+=1){var g=!(u[p]||"").match(a)&&parseFloat(u[p])||u[p]||0,m=!(l[p]||"").match(a)&&parseFloat(l[p])||l[p]||0;if(isNaN(g)!==isNaN(m))return isNaN(g)?1:-1;if(("undefined"==typeof g?"undefined":n(g))!==("undefined"==typeof m?"undefined":n(m))&&(g=String(g),m=String(m)),g<m)return-1;if(g>m)return 1}return 0};e.exports={naturalCmp:s}},function(e,t){"use strict";var n=function(e){return e.replace(/[\-\[\]{}()*+?.,\\$\^|#\s]/g,"\\$&")},r=function(e,t){return t?"re:"===e.substr(0,3)?e.substr(3):e.trim().split(/\s+/).map(function(e){return e.split("").map(function(e){return n(e)}).join(".*?")}).join("|"):n(e)};e.exports={parsePattern:r}},function(e,t,n){"use strict";var r=n(8),i=r.request,o=e.exports={_update:function(e){return i(e).then(function(e){return Object.assign(o,e)})}}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.dom,a=t.window.XMLHttpRequest,s=function(e){return new Promise(function(t){var n=new a,r=function(){if(n.readyState===a.DONE)try{t(JSON.parse(n.responseText))}catch(e){t({err:e,txt:n.responseText})}};n.open("POST","?",!0),n.onreadystatechange=r,n.setRequestHeader("Content-Type","application/json;charset=utf-8"),n.send(JSON.stringify(e))})},c=function(e){var t=o('<form method="post" action="?" style="display:none;"/>');i(e,function(e,n){o('<input type="hidden"/>').attr("name",n).attr("value",e).appTo(t)}),t.appTo("body"),t[0].submit(),t.rm()};e.exports={request:s,formRequest:c}}).call(t,function(){return this}())},function(e,t,n){function r(e){return n(i(e))}function i(e){return o[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var o={"./index":10,"./index.js":10,"./info":50,"./info.js":50};r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=9},function(e,t,n){(function(e){"use strict";n(11),n(24),n(25),n(26),n(27),n(29),n(30),n(31),n(32),n(34),n(36),n(37),n(44),n(45),n(46),n(47),n(48),n(49);var t=e.window.document.location.href;n(20).setLocation(t,!0)}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(13),c=n(14),u=n(15),l=n(17),f=n(18),d=Object.assign({modeToggle:!1},c.view),p='<div id="viewmode-settings" class="block"><h1 class="l10n-view">View</h1></div>',h='<div id="viewmode-[MODE]" class="button mode">\n <img src="'+s.image("view-[MODE]")+'" alt="viewmode-[MODE]"/>\n </div>',g='<input id="viewmode-size" type="range" min="0" max="0" value="0">',m='<div id="viewmode-toggle" class="tool">\n <img alt="viewmode"/>\n </div>',v=void 0,b=void 0,w=function(e,t){o("#viewmode-settings .mode").rmCls("active"),o("#viewmode-"+e).addCls("active"),o("#viewmode-size").val(b.indexOf(t)),"next"===d.modeToggle&&(e=v[(v.indexOf(e)+1)%v.length]),o("#viewmode-toggle img").attr("src",s.image("view-"+e))},y=function(){if(!(v.length<2&&b.length<2)){var e=o(p);if(v.length>1&&i(v,function(t){o(h.replace(/\[MODE\]/g,t)).on("click",function(){f.setMode(t)}).appTo(e)}),b.length>1){var t=b.length-1;o(g).attr("max",t).on("input",function(e){return f.setSize(b[e.target.valueAsNumber])}).on("change",function(e){return f.setSize(b[e.target.valueAsNumber])}).appTo(e)}e.appTo(u.$el)}},x=function(){var e=f.getMode(),t=(v.indexOf(e)+1)%v.length,n=v[t];f.setMode(n)},k=function(){d.modeToggle&&v.length>1&&o(m).on("click",x).appTo(l.$toolbar)},_=function(){v=f.getModes(),b=f.getSizes(),y(),k(),w(f.getMode(),f.getSize()),a.sub("view.mode.changed",w)};_()},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.isStr,o=r.isFn,a=r.dom,s={},c=function(e,t){i(e)&&o(t)&&(s[e]||(s[e]=[]),s[e].push(t))},u=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];i(e)&&s[e]&&s[e].forEach(function(t){t.apply(e,n)})};a(t.window).on("resize",function(){return u("resize")}),e.exports={sub:c,pub:u}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.includes,o=n(7),a=n(14),s=a.publicHref+"images/",c=s+"ui/",u=s+"themes/",l=u+"default/",f=["file","folder","folder-page","folder-parent","ar","aud","bin","img","txt","vid","x"],d=function(e){return c+e+".svg"},p=function(e){var t=(e||"").split("-")[0],n=o.theme[e]||o.theme[t];return n?u+n:i(f,e)?l+e+".svg":i(f,t)?l+t+".svg":l+"file.svg"};e.exports={image:d,icon:p}},function(e,t,n){"use strict";var r=n(7);e.exports=Object.assign({},r.options,{publicHref:r.setup.PUBLIC_HREF,rootHref:r.setup.ROOT_HREF})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(13),a=n(14),s=n(16),c=n(17),u=Object.assign({disableSidebar:!1},a.view),l="sidebarIsVisible",f='<div id="sidebar"></div>',d='<div id="sidebar-toggle" class="tool">\n <img alt="sidebar"/>\n </div>',p=function(){var e=i(f).hide(),t=i(d),n=t.find("img"),r=function(r){var i=s.get(l);r&&(i=!i,s.put(l,i)),i?(t.addCls("active"),n.attr("src",o.image("back")),e.show()):(t.rmCls("active"),n.attr("src",o.image("sidebar")),e.hide())};return u.disableSidebar||(e.appTo(c.$mainrow),t.appTo(c.$toolbar).on("click",function(){return r(!0)}),r()),{$el:e}};e.exports=p()},function(e,t){(function(t){"use strict";var n=t.window.localStorage,r="_h5ai",i=function(){try{return JSON.parse(n[r])}catch(e){}return{}},o=function(e){n[r]=JSON.stringify(e)},a=function(e,t){var n=i();n[e]=t,o(n)},s=function(e){return i()[e]};e.exports={put:a,get:s}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o="body",a='<div id="topbar">\n <div id="toolbar"></div>\n <div id="flowbar"></div>\n <a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n </div>',s='<div id="mainrow">\n <div id="content"></div>\n </div>',c=function(){var e=i(o).attr("id","root").clr().app(a).app(s);return{$root:e,$topbar:e.find("#topbar"),$toolbar:e.find("#toolbar"),$flowbar:e.find("#flowbar"),$mainrow:e.find("#mainrow"),$content:e.find("#content")}};e.exports=c()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=r.intersection,c=r.dom,u=n(12),l=n(19),f=n(20),d=n(13),p=n(16),h=n(14),g=n(17),m=["details","grid","icons"],v=[20,40,60,80,100,150,200,250,300,350,400],b=Object.assign({binaryPrefix:!1,hideFolders:!1,hideParentFolder:!1,maxIconSize:40,modes:m,setParentFolderLabels:!1,sizes:v},h.view),w=b.sizes.sort(function(e,t){return e-t}),y=s(b.modes,m),x="view",k='<div id="view">\n <ul id="items" class="clearfix">\n <li class="header">\n <a class="icon"></a>\n <a class="label" href="#"><span class="l10n-name"/></a>\n <a class="date" href="#"><span class="l10n-lastModified"/></a>\n <a class="size" href="#"><span class="l10n-size"/></a>\n </li>\n </ul>\n <div id="view-hint"></div>\n </div>',_='<li class="item">\n <a>\n <span class="icon square"><img/></span>\n <span class="icon landscape"><img/></span>\n <span class="label"></span>\n <span class="date"></span>\n <span class="size"></span>\n </a>\n </li>',C=c(k),S=C.find("#items"),A=C.find("#view-hint"),T=function(e,t,n){return Math.min(n,Math.max(t,e))},E=function(e){var t=T(e,20,80),n=T(e,40,160),r=T(e,80,1e3),i=Math.round(4*r/3),o="!important;",a="#view.view-details.view-size-"+e,s="#view.view-grid.view-size-"+e,c="#view.view-icons.view-size-"+e,u=[a+" .item .label {line-height: "+(t+14)+"px "+o+"}",a+" .item .date {line-height: "+(t+14)+"px "+o+"}",a+" .item .size {line-height: "+(t+14)+"px "+o+"}",a+" .square {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .square img {width: "+t+"px "+o+" height: "+t+"px "+o+"}",a+" .label {margin-left: "+(t+32)+"px "+o+"}",s+" .item .label {line-height: "+n+"px "+o+"}",s+" .square {width: "+n+"px "+o+" height: "+n+"px "+o+"}",s+" .square img {width: "+n+"px "+o+" height: "+n+"px "+o+"}",c+" .item {width: "+i+"px "+o+"}",c+" .landscape {width: "+i+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape img {width: "+r+"px "+o+" height: "+r+"px "+o+"}",c+" .landscape .thumb {width: "+i+"px "+o+"}"];return u.join("\n")},M=function(){var e=o(w,function(e){return E(e)});e.push("#view .icon img {max-width: "+b.maxIconSize+"px; max-height: "+b.maxIconSize+"px;}"),c("<style></style>").text(e.join("\n")).appTo("head")},D=function(e,t){var n=p.get(x);e=e||n&&n.mode,t=t||n&&n.size,e=a(b.modes,e)?e:b.modes[0],t=a(b.sizes,t)?t:b.sizes[0],p.put(x,{mode:e,size:t}),i(y,function(t){t===e?C.addCls("view-"+t):C.rmCls("view-"+t)}),i(w,function(e){e===t?C.addCls("view-size-"+e):C.rmCls("view-size-"+e)}),u.pub("view.mode.changed",e,t)},P=function(){return y},z=function(){return p.get(x).mode},L=function(e){return D(e,null)},$=function(){return w},H=function(){return p.get(x).size},O=function(e){return D(null,e)},B=function(e){var t=e.target._item;u.pub("item.mouseenter",t)},R=function(e){var t=e.target._item;u.pub("item.mouseleave",t)},N=function(e){var t=c(_),n=t.find("a"),r=t.find(".icon img"),i=t.find(".label"),o=t.find(".date"),a=t.find(".size");return t.addCls(e.isFolder()?"folder":"file").on("mouseenter",B).on("mouseleave",R),f.setLink(n,e),i.text(e.label).attr("title",e.label),o.attr("data-time",e.time).text(l.formatDate(e.time)),a.attr("data-bytes",e.size).text(l.formatSize(e.size)),e.icon=d.icon(e.type),e.isFolder()&&!e.isManaged&&(t.addCls("page"),e.icon=d.icon("folder-page")),e.isCurrentParentFolder()&&(e.icon=d.icon("folder-parent"),b.setParentFolderLabels||i.addCls("l10n-parentDirectory"),t.addCls("folder-parent")),r.attr("src",e.icon).attr("alt",e.type),e.$view=t,t[0]._item=e,t},I=function(){var e=S.find(".item").length===S.find(".folder-parent").length;e?A.show():A.hide()},j=function(e){var t=o(S.find(".item"),function(e){return e._item});S.find(".item").rm(),i(e,function(e){return S.app(N(e))}),g.$content[0].scrollLeft=0,g.$content[0].scrollTop=0,I(),u.pub("view.changed",e,t)},F=function(e,t){i(e,function(e){N(e).hide().appTo(S).show()}),i(t,function(e){e.$view.hide().rm()}),I(),u.pub("view.changed",e,t)},q=function(e){A.rmCls().addCls("l10n-"+e),I()},Y=function(e){e||(e=f.getItem());var t=[];e.parent&&!b.hideParentFolder&&t.push(e.parent),i(e.content,function(e){e.isFolder()&&b.hideFolders||t.push(e)}),q("empty"),j(t)},Z=function(e,t,n){var r=[];i(t,function(e){e.isFolder()&&b.hideFolders||r.push(e)}),q("empty"),F(r,n)},U=function(){var e=C[0].offsetWidth;C.rmCls("width-0").rmCls("width-1"),e<320?C.addCls("width-0"):e<480&&C.addCls("width-1")},V=function(){M(),D(),C.appTo(g.$content),A.hide(),l.setDefaultMetric(b.binaryPrefix),u.sub("location.changed",Y),u.sub("location.refreshed",Z),u.sub("resize",U),U()};V(),e.exports={$el:C,setItems:j,changeItems:F,setLocation:Y,setHint:q,getModes:P,getMode:z,setMode:L,getSizes:$,getSize:H,setSize:O}},function(e,t,n){"use strict";var r=n(2),i=r.isNum,o={t:1e3,k:1e3,u:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},a={t:1024,k:1024,u:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},s=o,c=[[/YYYY/,"Y",4],[/YY/,"Y",2],[/Y/,"Y",0],[/MM/,"M",2],[/M/,"M",0],[/DD/,"D",2],[/D/,"D",0],[/HH/,"H",2],[/H/,"H",0],[/mm/,"m",2],[/m/,"m",0],[/ss/,"s",2],[/s/,"s",0]],u="YYYY-MM-DD HH:mm",l=function(e){s=e?a:o},f=function(e,t){if(t=t||s,!i(e)||e<0)return"";for(var n=0,r=t.u.length-1;e>=t.t&&n<r;)e/=t.k,n+=1;return(n<=1?Math.round(e):e.toFixed(1)).toString()+" "+t.u[n]},d=function(e){u=e},p=function(e,t){var n=String(e);return t&&(n=("000"+n).substr(-t)),n},h=function(e,t){if(!e||!i(e))return"";t=t||u;var n=new Date(e),r={Y:n.getFullYear(),M:n.getMonth()+1,D:n.getDate(),H:n.getHours(),m:n.getMinutes(),s:n.getSeconds()};return c.forEach(function(e){t=t.replace(e[0],p(r[e[1]],e[2]))}),t};e.exports={setDefaultMetric:l,formatSize:f,setDefaultDateFormat:d,formatDate:h}},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.values,a=r.difference,s=n(8),c=s.request,u=n(14),l=n(12),f=n(21),d=t.window,p=d.document,h=Object.assign({fastBrowsing:!0,unmanagedInNewWindow:!0},u.view),g=h.fastBrowsing?d.history:null,m=/^.*:\/\/[^\/]*|[^\/]*$/g,v=[[/\/+/g,"/"],[/ /g,"%20"],[/!/g,"%21"],[/#/g,"%23"],[/\$/g,"%24"],[/&/g,"%26"],[/'/g,"%27"],[/\(/g,"%28"],[/\)/g,"%29"],[/\*/g,"%2A"],[/\+/g,"%2B"],[/\,/g,"%2C"],[/:/g,"%3A"],[/;/g,"%3B"],[/\=/g,"%3D"],[/\?/g,"%3F"],[/@/g,"%40"],[/\[/g,"%5B"],[/\]/g,"%5D"]],b=null,w=function(e){return v.reduce(function(e,t){return e.replace(t[0],t[1])},e)},y=function(e){return e.replace(m,"")},x=function(){var e="/a b",t=p.createElement("a");return t.href=e,y(t.href)===e}(),k=function(e){var t=p.createElement("a"),n=void 0;return t.href=e,n=y(t.href),x&&(n=encodeURIComponent(n).replace(/%2F/gi,"/")),w(n)},_=function(){return p.domain},C=function(){return b},S=function(){return n(22).get(b)},A=function(){return c({action:"get",items:{href:b,what:1}}).then(function(e){var t=n(22),r=t.get(b);if(e){var o={};i(e.items,function(e){var n=t.get(e);o[n.absHref]=!0}),i(r.content,function(e){o[e.absHref]||t.remove(e.absHref)})}return r})},T=function(){var e=S(),t=o(e.content);l.pub("location.beforeRefresh"),A().then(function(){var n=o(e.content),r=a(n,t),i=a(t,n);l.pub("location.refreshed",e,r,i)})},E=function(e,t){l.pub("location.beforeChange"),e=k(e),b!==e&&(b=e,g&&(t?g.replaceState({absHref:b},"",b):g.pushState({absHref:b},"",b)));var n=S();n.isLoaded?(l.pub("location.changed",n),T()):(f.set("loading..."),A().then(function(){n.isLoaded=!0,f.set(),l.pub("location.changed",n)}))},M=function(e,t){e.attr("href",t.absHref),g&&t.isFolder()&&t.isManaged&&e.on("click",function(e){return E(t.absHref),e.preventDefault(),!1}),h.unmanagedInNewWindow&&!t.isManaged&&e.attr("target","_blank")},D=function(e){e.state&&e.state.absHref&&E(e.state.absHref,!0)};d.onpopstate=g?D:null,e.exports={forceEncoding:w,getDomain:_,getAbsHref:C,getItem:S,setLocation:E,refresh:T,setLink:M}}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(17),a=function(){var e=i('<div id="notification"></div>').hide().appTo(o.$root),t=function(t){t?e.html(t).show():e.hide()};return{set:t}};e.exports=a()},function(e,t,n){"use strict";var r=n(2),i=r.keys,o=r.each,a=r.filter,s=r.sortBy,c=r.isStr,u=r.isNum,l=n(8),f=n(20),d=n(14),p=n(23),h=/\/$/,g=/^(.*\/)([^\/]+\/?)$/,m={},v=function(e,t){return c(e)&&e.startsWith(t)},b=function(e){e=e.replace(h,"");try{e=decodeURIComponent(e)}catch(e){}return e},w=function(e){if("/"===e)return{parent:null,name:"/"};var t=g.exec(e);if(!t)return null;var n={parent:t[1],name:t[2]};return n.parent&&!v(n.parent,d.rootHref)&&(n.parent=null),n},y=function(e){if(c(e))e={href:e};else if(!e||!c(e.href))return null;var t=f.forceEncoding(e.href);if(!v(t,d.rootHref))return null;var n=m[t]||_(t);return u(e.time)&&(n.time=e.time),u(e.size)&&(n.size=e.size),e.managed&&(n.isManaged=!0),e.fetched&&(n.isContentFetched=!0),n},x=function e(t){t=f.forceEncoding(t);var n=m[t];n&&(delete m[t],n.parent&&delete n.parent.content[n.absHref],o(n.content,function(t){e(t.absHref)}))},k=function(e){return new Promise(function(t){var n=y(e);n.isContentFetched?t(n):l.request({action:"get",items:{href:n.absHref,what:1}}).then(function(e){e.items&&o(e.items,function(e){y(e)}),t(n)})})},_=function e(t){var n=w(t),r=Object.assign(Object.create(e.prototype),{absHref:t,type:p.getType(t),label:b("/"===t?f.getDomain():n.name),time:null,size:null,parent:null,isManaged:null,content:{}});return m[t]=r,n.parent&&(r.parent=y(n.parent),r.parent.content[r.absHref]=r,i(r.parent.content).length>1&&(r.parent.isContentFetched=!0)),r};_.prototype={constructor:_,isFolder:function(){return h.test(this.absHref)},isCurrentFolder:function(){return this.absHref===f.getAbsHref()},isInCurrentFolder:function(){return!!this.parent&&this.parent.isCurrentFolder()},isCurrentParentFolder:function(){var e=y(f.getAbsHref());return!!e&&this===e.parent},isDomain:function(){return"/"===this.absHref},isRoot:function(){return this.absHref===d.rootHref},isEmpty:function(){return 0===i(this.content).length},fetchContent:function(){return k(this.absHref)},getCrumb:function(){for(var e=this,t=[e];e.parent;)e=e.parent,t.unshift(e);return t},getSubfolders:function(){return s(a(this.content,function(e){return e.isFolder()}),function(e){return e.label.toLowerCase()})},getStats:function(){var e=0,t=0;o(this.content,function(n){n.isFolder()?e+=1:t+=1});for(var n=0,r=this;r.parent;)n+=1,r=r.parent;return{folders:e,files:t,depth:n}}},e.exports={get:y,remove:x}},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=n(7),s=/\/$/,c={},u=function(e){return e.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$]/g,"\\$&")},l=function(e){i(e,function(e,t){var n="^("+o(e,function(e){return"("+u(e).replace(/\*/g,".*")+")"}).join("|")+")$";c[t]=new RegExp(n,"i")})},f=function(e){if(s.test(e))return"folder";var t=e.lastIndexOf("/"),n=t>=0?e.substr(t+1):e,r=void 0;return i(c,function(e,t){c[t].test(n)&&(r=t)}),r?r:"file"};l(Object.assign({},a.types)),e.exports={getType:f}},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(20),i=n(14),o=e.window,a=Object.assign({enabled:!1,interval:5e3},i.autorefresh),s=null,c=function(){r.refresh()},u=function(){o.clearTimeout(s)},l=function(){o.clearTimeout(s),s=o.setTimeout(c,a.interval)},f=function(){a.enabled&&(a.interval=Math.max(1e3,a.interval),t.sub("location.beforeChange",u),t.sub("location.beforeRefresh",u),t.sub("location.changed",l),t.sub("location.refreshed",l))};f()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(13),s=n(14),c=Object.assign({enabled:!1},s.contextmenu),u='<div id="cm-overlay"></div>',l='<div class="cm-panel"><ul></ul></div>',f='<li class="cm-sep"></li>',d='<li class="cm-entry"><span class="cm-icon"><img/></span><span class="cm-text"></span></li>',p='<li class="cm-label"><span class="cm-text"></span></li>',h=function(e){for(;!e._cmId&&e.parentNode;)e=e.parentNode;return e._cmId},g=function(e){var t=o(u),n=function(n){n.stopPropagation(),n.preventDefault();var r=h(n.target);n.target!==t[0]&&void 0===r||(t.rm(),e(r))};return t.on("contextmenu",n).on("click",n)},m=function(e){var t=o(l),n=t.find("ul"),r=void 0;return i(e,function(e){"-"===e.type?o(f).appTo(n):"l"===e.type?o(p).appTo(n).find(".cm-text").text(e.text):"e"===e.type&&(r=o(d).appTo(n),r[0]._cmId=e.id,r.find(".cm-text").text(e.text),e.icon?r.find(".cm-icon img").attr("src",a.icon(e.icon)):r.find(".cm-icon").addCls("no-icon"))}),t},v=function(e,t,n,r){var i=4;t.css({left:0,top:0,opacity:0}),e.show();var o=e[0].getBoundingClientRect(),a=t[0].getBoundingClientRect(),s=o.left,c=o.top,u=o.width,l=o.height,f=a.width,d=a.height,p=n,h=r;f>u-2*i&&(p=i,f=u-2*i),d>l-2*i&&(h=i,d=l-2*i),p<s+i&&(p=s+i),p+f>s+u-i&&(p=s+u-i-f),h<c+i&&(h=c+i),h+d>c+l-i&&(h=c+l-i-d),t.css({left:p+"px",top:h+"px",width:f+"px",height:d+"px",opacity:1})},b=function(e,t,n,r){var i=g(r),o=m(n);i.hide().app(o).appTo("body"),v(i,o,e,t)},w=function(){if(c.enabled){var e=[{type:"e",id:"e1",text:"testing context menus"},{type:"e",id:"e2",text:"another entry"},{type:"e",id:"e3",text:"one with icon",icon:"folder"},{type:"-"},{type:"e",id:"e4",text:"one with icon",icon:"x"},{type:"e",id:"e5",text:"one with icon",icon:"img"}];o("#view").on("contextmenu",function(t){t.preventDefault(),b(t.pageX,t.pageY,e)})}};w()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(12),s=n(20),c=n(13),u=n(14),l=n(17),f=Object.assign({enabled:!1},u.crumb),d='<div id="crumbbar"></div>',p='<a class="crumb">\n <img class="sep" src="'+c.image("crumb")+'" alt=">"/>\n <span class="label"></span>\n </a>',h='<img class="hint" src="'+c.icon("folder-page")+'" alt="has index page"/>',g=function(e){var t=o(p);return s.setLink(t,e),t.find(".label").text(e.label),e.isCurrentFolder()&&t.addCls("active"),e.isManaged||t.app(o(h)),e._$crumb=t,t[0]._item=e,t},m=function(e){var t=e._$crumb,n=o("#crumbbar");t&&t.parent()[0]===n[0]?(n.children().rmCls("active"),t.addCls("active")):(n.clr(),i(e.getCrumb(),function(e){n.app(g(e))}))},v=function(){f.enabled&&(o(d).appTo(l.$flowbar),a.sub("location.changed",m))};v()},function(e,t,n){"use strict";var r=n(28),i=n(2),o=i.each,a=i.dom,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1},u.custom),f=function(e,t){var n=a("#content-"+t);if(e&&e[t].content){var i=e[t].content;"md"===e[t].type&&(i=r(i)),n.html(i).show()}else n.hide()},d=function(e){s.request({action:"get",custom:e.absHref}).then(function(e){var t=e&&e.custom;o(["header","footer"],function(e){return f(t,e)})})},p=function(){l.enabled&&(a('<div id="content-header"></div>').hide().preTo("#content"),a('<div id="content-footer"></div>').hide().appTo("#content"),c.sub("location.changed",d))};p()},function(e,t,n){(function(t){!function(t){"use strict";function n(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||b.defaults,this.rules=w.normal,this.options.pedantic?this.rules=w.pedantic:this.options.gfm&&(this.options.tables?this.rules=w.tables:this.rules=w.gfm)}function r(e,t){if(this.options=t||b.defaults,this.links=e,this.rules=y.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=y.pedantic:this.options.gfm&&(this.options.breaks?this.rules=y.breaks:this.rules=y.gfm)}function i(e){this.options=e||b.defaults}function o(){}function a(e){this.tokens=[],this.token=null,this.options=e||b.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new s}function s(){this.seen={}}function c(e,t){if(t){if(c.escapeTest.test(e))return e.replace(c.escapeReplace,function(e){return c.replacements[e]})}else if(c.escapeTestNoEncode.test(e))return e.replace(c.escapeReplaceNoEncode,function(e){return c.replacements[e]});return e}function u(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function l(e,t){return e=e.source||e,t=t||"",{replace:function(t,n){return n=n.source||n,n=n.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function f(e,t,n){if(e){try{var r=decodeURIComponent(u(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!k.test(n)&&(n=d(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}function d(e,t){return x[" "+e]||(/^[^:]+:\/*[^\/]*$/.test(e)?x[" "+e]=e+"/":x[" "+e]=m(e,"/",!0)),e=x[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^\/]*)[\s\S]*/,"$1")+t:e+t}function p(){}function h(e){for(var t,n,r=1;r<arguments.length;r++){t=arguments[r];for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}function g(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,i=t;--i>=0&&"\\"===n[i];)r=!r; +return r?"|":" |"}),r=n.split(/ \|/),i=0;if(r.length>t)r.splice(t);else for(;r.length<t;)r.push("");for(;i<r.length;i++)r[i]=r[i].trim().replace(/\\\|/g,"|");return r}function m(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var i=e.charAt(e.length-r-1);if(i!==t||n){if(i===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function v(e,t){if(e.indexOf(t[1])===-1)return-1;for(var n=0,r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return-1}function b(e,t,r){if("undefined"==typeof e||null===e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof t){r||(r=t,t=null),t=h({},b.defaults,t||{});var i,o,s=t.highlight,u=0;try{i=n.lex(e,t)}catch(e){return r(e)}o=i.length;var l=function(e){if(e)return t.highlight=s,r(e);var n;try{n=a.parse(i,t)}catch(t){e=t}return t.highlight=s,e?r(e):r(null,n)};if(!s||s.length<3)return l();if(delete t.highlight,!o)return l();for(;u<i.length;u++)!function(e){return"code"!==e.type?--o||l():s(e.text,e.lang,function(t,n){return t?l(t):null==n||n===e.text?--o||l():(e.text=n,e.escaped=!0,void(--o||l()))})}(i[u])}else try{return t&&(t=h({},b.defaults,t)),a.parse(n.lex(e,t),t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(t||b.defaults).silent)return"<p>An error occurred:</p><pre>"+c(e.message+"",!0)+"</pre>";throw e}}var w={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:p,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:p,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\n*|<![A-Z][\s\S]*?>\n*|<!\[CDATA\[[\s\S]*?\]\]>\n*|</?(tag)(?: +|\n|/?>)[\s\S]*?(?:\n{2,}|$)|<(?!script|pre|style)([a-z][\w-]*)(?:attribute)*? */?>(?=\h*\n)[\s\S]*?(?:\n{2,}|$)|</(?!script|pre|style)[a-z][\w-]*\s*>(?=\h*\n)[\s\S]*?(?:\n{2,}|$))",def:/^ {0,3}[(label)]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:p,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};w._label=/(?!\s*])(?:\[[]]|[^[]])+/,w._title=/(?:"(?:\"?|[^"\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|([^()]*))/,w.def=l(w.def).replace("label",w._label).replace("title",w._title).getRegex(),w.bullet=/(?:[*+-]|\d{1,9}.)/,w.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,w.item=l(w.item,"gm").replace(/bull/g,w.bullet).getRegex(),w.list=l(w.list).replace(/bull/g,w.bullet).replace("hr","\n+(?=\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$))").replace("def","\n+(?="+w.def.source+")").getRegex(),w._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",w._comment=/<!--(?!-?>)[\s\S]*?-->/,w.html=l(w.html,"i").replace("comment",w._comment).replace("tag",w._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),w.paragraph=l(w.paragraph).replace("hr",w.hr).replace("heading",w.heading).replace("lheading",w.lheading).replace("tag",w._tag).getRegex(),w.blockquote=l(w.blockquote).replace("paragraph",w.paragraph).getRegex(),w.normal=h({},w),w.gfm=h({},w.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),w.gfm.paragraph=l(w.paragraph).replace("(?!","(?!"+w.gfm.fences.source.replace("\1","\2")+"|"+w.list.source.replace("\1","\3")+"|").getRegex(),w.tables=h({},w.gfm,{nptable:/^ *([^|\n ].*|.*)\n *([-:]+ *|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *|(.+)\n *|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),w.pedantic=h({},w.normal,{html:l("^ *(?:comment *(?:\n|\s*$)|<(tag)[\s\S]+?</\1> *(?:\n{2,}|\s*$)|<tag(?:"[^"]*"|'[^']*'|\s[^'"/>\s]*)*?/?> *(?:\n{2,}|\s*$))").replace("comment",w._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\b)\w+(?!:|[^\w\s@]*@)\b").getRegex(),def:/^ *[([^]]+)]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),n.rules=w,n.lex=function(e,t){var r=new n(t);return r.lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,t){e=e.replace(/^ +$/gm,"");for(var n,r,i,o,a,s,c,u,l,f,d,p,h,v,b,y;e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:m(i,"\n")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2]?i[2].trim():i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(t&&(i=this.rules.nptable.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d],s.header.length);this.tokens.push(s)}else if(i=this.rules.hr.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"hr"});else if(i=this.rules.blockquote.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"blockquote_start"}),i=i[0].replace(/^ *> ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),o=i[2],v=o.length>1,c={type:"list_start",ordered:v,start:v?+o:"",loose:!1},this.tokens.push(c),i=i[0].match(this.rules.item),u=[],n=!1,h=i.length,d=0;d<h;d++)s=i[d],f=s.length,s=s.replace(/^ *([*+-]|\d+\.) */,""),~s.indexOf("\n ")&&(f-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+f+"}","gm"),"")),d!==h-1&&(a=w.bullet.exec(i[d+1])[0],(o.length>1?1===a.length:a.length>1||this.options.smartLists&&a!==o)&&(e=i.slice(d+1).join("\n")+e,d=h-1)),r=n||/\n\n(?!\s*$)/.test(s),d!==h-1&&(n="\n"===s.charAt(s.length-1),r||(r=n)),r&&(c.loose=!0),b=/^\[[ xX]\] /.test(s),y=void 0,b&&(y=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,"")),l={type:"list_item_start",task:b,checked:y,loose:r},u.push(l),this.tokens.push(l),this.token(s,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(h=u.length,d=0;d<h;d++)u[d].loose=!0;this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:i[0]});else if(t&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),p=i[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[p]||(this.tokens.links[p]={href:i[2],title:i[3]});else if(t&&(i=this.rules.table.exec(e))&&(s={type:"table",header:g(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/(?: *\| *)?\n$/,"").split("\n"):[]},s.header.length===s.align.length)){for(e=e.substring(i[0].length),d=0;d<s.align.length;d++)/^ *-+: *$/.test(s.align[d])?s.align[d]="right":/^ *:-+: *$/.test(s.align[d])?s.align[d]="center":/^ *:-+ *$/.test(s.align[d])?s.align[d]="left":s.align[d]=null;for(d=0;d<s.cells.length;d++)s.cells[d]=g(s.cells[d].replace(/^ *\| *| *\| *$/g,""),s.header.length);this.tokens.push(s)}else if(i=this.rules.lheading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:"="===i[2]?1:2,text:i[1]});else if(t&&(i=this.rules.paragraph.exec(e)))e=e.substring(i[0].length),this.tokens.push({type:"paragraph",text:"\n"===i[1].charAt(i[1].length-1)?i[1].slice(0,-1):i[1]});else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"text",text:i[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var y={escape:/^\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:p,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\?[\s\S]*?\?>|^<![a-zA-Z]+\s[\s\S]*?>|^<!\[CDATA\[[\s\S]*?\]\]>",link:/^!?[(label)](href(?:\s+(title))?\s*)/,reflink:/^!?[(label)][(?!\s*])((?:\[[]]?|[^[]\])+)]/,nolink:/^!?[(?!\s*])((?:[[^[]]*]|\[[]]|[^[]])*)](?:[])?/,strong:/^__([^\s_])__(?!_)|^**([^\s*])**(?!*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^**([^\s][\s\S]*?[^\s])**(?!*)/,em:/^_([^\s_])_(?!_)|^*([^\s*"<[])*(?!*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^*([^\s"<[][\s\S]*?[^\s*])*(?!*)|^*([^\s*"<[][\s\S]*?[^\s])*(?!*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\)\n(?!\s*$)/,del:p,text:/^(`+|[^`])[\s\S]*?(?=[\<![`*]|\b_| {2,}\n|$)/};y._punctuation="!"#$%&'()*+,\-./:;<=>?@\[^_{|}~",y.em=l(y.em).replace(/punctuation/g,y._punctuation).getRegex(),y._escapes=/\([!"#$%&'()*+,-./:;<=>?@[]\^_`{|}~])/g,y._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,y._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,y.autolink=l(y.autolink).replace("scheme",y._scheme).replace("email",y._email).getRegex(),y._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,y.tag=l(y.tag).replace("comment",w._comment).replace("attribute",y._attribute).getRegex(),y._label=/(?:[[^[]]*]|\[[]]?|`[^`]*`|[^[]\])*?/,y._href=/\s*(<(?:\[<>]?|[^\s<>\])*>|[^\s\x00-\x1f]*)/,y._title=/"(?:\"?|[^"\])*"|'(?:\'?|[^'\])*'|((?:\)?|[^)\])*)/,y.link=l(y.link).replace("label",y._label).replace("href",y._href).replace("title",y._title).getRegex(),y.reflink=l(y.reflink).replace("label",y._label).getRegex(),y.normal=h({},y),y.pedantic=h({},y.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^**(?=\S)([\s\S]*?\S)**(?!*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^*(?=\S)([\s\S]*?\S)*(?!*)/,link:l(/^!?[(label)]((.*?))/).replace("label",y._label).getRegex(),reflink:l(/^!?[(label)]\s*[([^]]*)]/).replace("label",y._label).getRegex()}),y.gfm=h({},y.normal,{escape:l(y.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?)://|www.)(?:[a-zA-Z0-9-]+.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|([^)]*)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:l(y.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\|}~-]+@|$").getRegex()}),y.gfm.url=l(y.gfm.url,"i").replace("email",y.gfm._extended_email).getRegex(),y.breaks=h({},y.gfm,{br:l(y.br).replace("{2,}","*").getRegex(),text:l(y.gfm.text).replace("{2,}","*").getRegex()}),r.rules=y,r.output=function(e,t,n){var i=new r(t,n);return i.output(e)},r.prototype.output=function(e){for(var t,n,i,o,a,s,u="";e;)if(a=this.rules.escape.exec(e))e=e.substring(a[0].length),u+=c(a[1]);else if(a=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(a[0])?this.inLink=!0:this.inLink&&/^</a>/i.test(a[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(a[0])?this.inRawBlock=!0:this.inRawBlock&&/^</(pre|code|kbd|script)(\s|>)/i.test(a[0])&&(this.inRawBlock=!1),e=e.substring(a[0].length),u+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):c(a[0]):a[0];else if(a=this.rules.link.exec(e)){var l=v(a[2],"()");if(l>-1){var f=a[2].length-l;a[2]=a[2].substring(0,l),a[0]=a[0].substring(0,a[0].length-f)}e=e.substring(a[0].length),this.inLink=!0,i=a[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i),t?(i=t[1],o=t[3]):o=""):o=a[3]?a[3].slice(1,-1):"",i=i.trim().replace(/^<([\s\S]*)>$/,"$1"),u+=this.outputLink(a,{href:r.escapes(i),title:r.escapes(o)}),this.inLink=!1}else if((a=this.rules.reflink.exec(e))||(a=this.rules.nolink.exec(e))){if(e=e.substring(a[0].length),t=(a[2]||a[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){u+=a[0].charAt(0),e=a[0].substring(1)+e;continue}this.inLink=!0,u+=this.outputLink(a,t),this.inLink=!1}else if(a=this.rules.strong.exec(e))e=e.substring(a[0].length),u+=this.renderer.strong(this.output(a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.em.exec(e))e=e.substring(a[0].length),u+=this.renderer.em(this.output(a[6]||a[5]||a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.code.exec(e))e=e.substring(a[0].length),u+=this.renderer.codespan(c(a[2].trim(),!0));else if(a=this.rules.br.exec(e))e=e.substring(a[0].length),u+=this.renderer.br();else if(a=this.rules.del.exec(e))e=e.substring(a[0].length),u+=this.renderer.del(this.output(a[1]));else if(a=this.rules.autolink.exec(e))e=e.substring(a[0].length),"@"===a[2]?(n=c(this.mangle(a[1])),i="mailto:"+n):(n=c(a[1]),i=n),u+=this.renderer.link(i,null,n);else if(this.inLink||!(a=this.rules.url.exec(e))){if(a=this.rules.text.exec(e))e=e.substring(a[0].length),u+=this.inRawBlock?this.renderer.text(a[0]):this.renderer.text(c(this.smartypants(a[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===a[2])n=c(a[0]),i="mailto:"+n;else{do s=a[0],a[0]=this.rules._backpedal.exec(a[0])[0];while(s!==a[0]);n=c(a[0]),i="www."===a[1]?"http://%22+n:n%7De=e.substring(a%5B0%5D.length),u+=this.renderer.link(i,null... u},r.escapes=function(e){return e?e.replace(r.rules._escapes,"$1"):e},r.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},r.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/([{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/([{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/.{3}/g,"…"):e},r.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i<r;i++)t=e.charCodeAt(i),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return r?'<pre><code class="'+this.options.langPrefix+c(r,!0)+'">'+(n?e:c(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:c(e,!0))+"</code></pre>"},i.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},i.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},i.prototype.list=function(e,t,n){var r=t?"ol":"ul",i=t&&1!==n?' start="'+n+'"':"";return"<"+r+i+">\n"+e+"</"+r+">\n"},i.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},i.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},i.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},i.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},i.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' align="'+t.align+'">':"<"+n+">";return r+e+"</"+n+">\n"},i.prototype.strong=function(e){return"<strong>"+e+"</strong>"},i.prototype.em=function(e){return"<em>"+e+"</em>"},i.prototype.codespan=function(e){return"<code>"+e+"</code>"},i.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},i.prototype.del=function(e){return"<del>"+e+"</del>"},i.prototype.link=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<a href="'+c(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},i.prototype.image=function(e,t,n){if(e=f(this.options.sanitize,this.options.baseUrl,e),null===e)return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},i.prototype.text=function(e){return e},o.prototype.strong=o.prototype.em=o.prototype.codespan=o.prototype.del=o.prototype.text=function(e){return e},o.prototype.link=o.prototype.image=function(e,t,n){return""+n},o.prototype.br=function(){return""},a.parse=function(e,t){var n=new a(t);return n.parse(e)},a.prototype.parse=function(e){this.inline=new r(e.links,this.options),this.inlineText=new r(e.links,h({},this.options,{renderer:new o})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},a.prototype.next=function(){return this.token=this.tokens.pop()},a.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},a.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},a.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,u(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(i+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});o+=this.renderer.tablerow(n)}return this.renderer.table(i,o);case"blockquote_start":for(o="";"blockquote_end"!==this.next().type;)o+=this.tok();return this.renderer.blockquote(o);case"list_start":o="";for(var a=this.token.ordered,s=this.token.start;"list_end"!==this.next().type;)o+=this.tok();return this.renderer.list(o,a,s);case"list_item_start":o="";var c=this.token.loose;for(this.token.task&&(o+=this.renderer.checkbox(this.token.checked));"list_item_end"!==this.next().type;)o+=c||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(o);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var l='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(l);console.log(l)}},s.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\'!"#$%&()*+,./:;<=>?@[]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do this.seen[n]++,t=n+"-"+this.seen[n];while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},c.escapeTest=/[&<>"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var x={},k=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;p.exec=p,b.options=b.setOptions=function(e){return h(b.defaults,e),b},b.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new i,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},b.defaults=b.getDefaults(),b.Parser=a,b.parser=a.parse,b.Renderer=i,b.TextRenderer=o,b.Lexer=n,b.lexer=n.lex,b.InlineLexer=r,b.inlineLexer=r.output,b.Slugger=s,b.parse=b,e.exports=b}(this||("undefined"!=typeof window?window:t))}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=n(8),s=n(12),c=n(20),u=n(13),l=n(14),f=Object.assign({enabled:!1,type:"php-tar",packageName:"package",alwaysVisible:!1},l.download),d='<div id="download" class="tool">\n <img src="'+u.image("download")+'" alt="download"/>\n </div>',p=[],h=void 0,g=function(e){p=e.slice(0),p.length?h.show():f.alwaysVisible||h.hide()},m=function(){var e=f.type,t=f.packageName,n="shell-zip"===e?"zip":"tar";t||(t=1===p.length?p[0].label:c.getItem().label);var r={action:"download",as:t+"."+n,type:e,baseHref:c.getAbsHref(),hrefs:""};i(p,function(e,t){r["hrefs["+t+"]"]=e.absHref}),a.formRequest(r)},v=function(){f.enabled&&(h=o(d).hide().appTo("#toolbar").on("click",m),f.alwaysVisible&&h.show(),s.sub("selection",g))};v()},function(e,t,n){"use strict";var r=n(2),i=r.filter,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(12),u=n(20),l=n(13),f=n(14),d=n(18),p=Object.assign({enabled:!1,advanced:!1,debounceTime:100,ignorecase:!0},f.filter),h='<div id="filter" class="tool">\n <img src="'+l.image("filter")+'" alt="filter"/>\n <input class="l10n_ph-filter" type="text" value=""/>\n </div>',g=!1,m="",v=void 0,b=void 0,w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==m){if(m=e,!e)return void d.setLocation();v.addCls("pending");var t=new RegExp(e,p.ignorecase?"i":""),n=i(u.getItem().content,function(e){return t.test(e.label)});v.rmCls("pending"),d.setHint("noMatch"),d.setItems(n)}},y=function(){g?(v.addCls("active"),b[0].focus(),w(a(b.val(),p.advanced))):(w(),v.rmCls("active"))},x=function(){g=!g,y()},k=function(){g=!1,b.val(""),y()},_=function(){p.enabled&&(v=s(h).appTo("#toolbar"),b=v.find("input"),v.find("img").on("click",x),b.on("keyup",o(y,p.debounceTime)),c.sub("location.changed",k))};_()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.map,i=n(12),o=n(14),a=e.window,s=Object.assign({enabled:!1,id:"UA-000000-0"},o["google-analytics-ua"]),c=function(){!function(e,t,n,r,i,o,a){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].l=1*new Date,o=t.createElement(n),a=t.getElementsByTagName(n)[0],o.async=1,o.src=r,a.parentNode.insertBefore(o,a)}(window,document,"script","//www.google-analytics.com/analytics.js","ga")},u=function(){s.enabled&&(c(),a.ga("create",s.id,"auto"),i.sub("location.changed",function(e){var t=a.location;a.ga("send","pageview",{location:t.protocol+"//"+t.host+e.absHref,title:r(e.getCrumb(),function(e){return e.label}).join(" > ")})}))};u()}).call(t,function(){return this}())},function(e,t,n){(function(e){"use strict";var t=n(33),r=n(2),i=r.isNum,o=r.dom,a=n(12),s=n(19),c=n(13),u=n(14),l=n(16),f=Object.assign({enabled:!1,show:!1,qrcode:!0,qrColor:"#999"},u.info),d='<div id="info">\n <div class="icon"><img/></div>\n <div class="block">\n <div class="label"></div>\n <div class="time"></div>\n <div class="size"></div>\n <div class="content">\n <span class="folders"></span> <span class="l10n-folders"></span>,\n <span class="files"></span> <span class="l10n-files"></span>\n </div>\n </div>\n <div class="qrcode"/>\n </div>',p='<div class="block">\n <h1 class="l10n-info">Info</h1>\n <div id="view-info" class="button view">\n <img src="'+c.image("info-toggle")+'" alt="view-info"/>\n </div>\n </div>',h="ext/info",g=void 0,m=void 0,v=void 0,b=void 0,w=void 0,y=void 0,x=void 0,k=void 0,_=void 0,C=function(){l.get(h)?(o("#view-info").addCls("active"),o("#info").show()):(o("#view-info").rmCls("active"),o("#info").hide())},S=function(n){var r=n.thumbRational||n.icon,o=!!n.thumbRational;if(!n.isCurrentFolder()&&r||(r=c.icon("folder")),g.attr("src",r),o?g.addCls("thumb"):g.rmCls("thumb"),m.text(n.label),i(n.time)?v.text(s.formatDate(n.time)):v.text("."),i(n.size)?(b.text(s.formatSize(n.size)),b.show()):b.hide(),n.isContentFetched){var a=n.getStats();y.text(a.folders),x.text(a.files),w.show()}else w.hide();if(f.qrcode){var u=e.window.location;k.clr().app(t({render:"image",size:200,fill:f.qrFill,back:f.qrBack,text:u.protocol+"//"+u.host+n.absHref,crisp:!0,quiet:1}))}},A=function(e){S(e)},T=function(){S(_)},E=function(e){_=e,S(_)},M=function(){if(f.enabled){var e=o(d).hide().appTo("#mainrow");g=e.find(".icon img"),m=e.find(".label"),v=e.find(".time"),b=e.find(".size"),w=e.find(".content"),y=e.find(".folders"),x=e.find(".files"),k=e.find(".qrcode"),f.qrcode||k.rm(),o(p).appTo("#sidebar").find("#view-info").on("click",function(e){l.put(h,!l.get(h)),C(),a.pub("resize"),e.preventDefault()}),"boolean"!=typeof l.get(h)&&l.put(h,f.show),C(),a.sub("location.changed",E),a.sub("item.mouseenter",A),a.sub("item.mouseleave",T)}};M()}).call(t,function(){return this}())},function(e,t,n){var r,i,o;!function(t,n){e.exports=n()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=n(1),i=r.create_canvas,o=r.canvas_to_img,a=r.dpr,s=n(2),c=n(3),u=n(4);e.exports=function(e){var t=Object.assign({},s,e),n=c(t.text,t.ecLevel,t.minVersion,t.quiet),r=t.ratio||a,l=i(t.size,r),f=l.getContext("2d");return f.scale(r,r),u(n,f,t),"image"===t.render?o(l):l}},function(e,t){"use strict";var n=window,r=n.document,i=n.devicePixelRatio||1,o=function(e){return r.createElement(e)},a=function(e,t){return e.getAttribute(t)},s=function(e,t,n){return e.setAttribute(t,n)},c=function(e,t){var n=o("canvas");return s(n,"width",e*t),s(n,"height",e*t),n.style.width=e+"px",n.style.height=e+"px",n},u=function(e){var t=o("img");return s(t,"crossorigin","anonymous"),s(t,"src",e.toDataURL("image/png")),s(t,"width",a(e,"width")),s(t,"height",a(e,"height")),t.style.width=e.style.width,t.style.height=e.style.height,t};e.exports={create_canvas:c,canvas_to_img:u,dpr:i}},function(e,t){"use strict";e.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(n,a){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=/code length overflow/i,u=function(){var n=function(){function e(t,n){if("undefined"==typeof t.length)throw new Error(t.length+"/"+n);var r=function(){for(var e=0;e<t.length&&0==t[e];)e+=1;for(var r=new Array(t.length-e+n),i=0;i<t.length-e;i+=1)r[i]=t[i+e];return r}(),i={};return i.getAt=function(e){return r[e]},i.getLength=function(){return r.length},i.multiply=function(t){for(var n=new Array(i.getLength()+t.getLength()-1),r=0;r<i.getLength();r+=1)for(var o=0;o<t.getLength();o+=1)n[r+o]^=a.gexp(a.glog(i.getAt(r))+a.glog(t.getAt(o)));return e(n,0)},i.mod=function(t){if(i.getLength()-t.getLength()<0)return i;for(var n=a.glog(i.getAt(0))-a.glog(t.getAt(0)),r=new Array(i.getLength()),o=0;o<i.getLength();o+=1)r[o]=i.getAt(o);for(var o=0;o<t.getLength();o+=1)r[o]^=a.gexp(a.glog(t.getAt(o))+n);return e(r,0).mod(t)},i}var t=function(t,n){var i=236,a=17,l=t,f=r[n],d=null,p=0,g=null,m=new Array,v={},b=function(e,t){p=4*l+17,d=function(e){for(var t=new Array(e),n=0;n<e;n+=1){t[n]=new Array(e);for(var r=0;r<e;r+=1)t[n][r]=null}return t}(p),w(0,0),w(p-7,0),w(0,p-7),k(),x(),C(e,t),l>=7&&_(e),null==g&&(g=T(l,f,m)),S(g,t)},w=function(e,t){for(var n=-1;n<=7;n+=1)if(!(e+n<=-1||p<=e+n))for(var r=-1;r<=7;r+=1)t+r<=-1||p<=t+r||(0<=n&&n<=6&&(0==r||6==r)||0<=r&&r<=6&&(0==n||6==n)||2<=n&&n<=4&&2<=r&&r<=4?d[e+n][t+r]=!0:d[e+n][t+r]=!1)},y=function(){for(var e=0,t=0,n=0;n<8;n+=1){b(!0,n);var r=o.getLostPoint(v);(0==n||e>r)&&(e=r,t=n)}return t},x=function(){for(var e=8;e<p-8;e+=1)null==d[e][6]&&(d[e][6]=e%2==0);for(var t=8;t<p-8;t+=1)null==d[6][t]&&(d[6][t]=t%2==0)},k=function(){for(var e=o.getPatternPosition(l),t=0;t<e.length;t+=1)for(var n=0;n<e.length;n+=1){var r=e[t],i=e[n];if(null==d[r][i])for(var a=-2;a<=2;a+=1)for(var s=-2;s<=2;s+=1)a==-2||2==a||s==-2||2==s||0==a&&0==s?d[r+a][i+s]=!0:d[r+a][i+s]=!1}},_=function(e){for(var t=o.getBCHTypeNumber(l),n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[Math.floor(n/3)][n%3+p-8-3]=r}for(var n=0;n<18;n+=1){var r=!e&&1==(t>>n&1);d[n%3+p-8-3][Math.floor(n/3)]=r}},C=function(e,t){for(var n=f<<3|t,r=o.getBCHTypeInfo(n),i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<6?d[i][8]=a:i<8?d[i+1][8]=a:d[p-15+i][8]=a}for(var i=0;i<15;i+=1){var a=!e&&1==(r>>i&1);i<8?d[8][p-i-1]=a:i<9?d[8][15-i-1+1]=a:d[8][15-i-1]=a}d[p-8][8]=!e},S=function(e,t){for(var n=-1,r=p-1,i=7,a=0,s=o.getMaskFunction(t),c=p-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var u=0;u<2;u+=1)if(null==d[r][c-u]){var l=!1;a<e.length&&(l=1==(e[a]>>>i&1));var f=s(r,c-u);f&&(l=!l),d[r][c-u]=l,i-=1,i==-1&&(a+=1,i=7)}if(r+=n,r<0||p<=r){r-=n,n=-n;break}}},A=function(t,n){for(var r=0,i=0,a=0,s=new Array(n.length),c=new Array(n.length),u=0;u<n.length;u+=1){var l=n[u].dataCount,f=n[u].totalCount-l;i=Math.max(i,l),a=Math.max(a,f),s[u]=new Array(l);for(var d=0;d<s[u].length;d+=1)s[u][d]=255&t.getBuffer()[d+r];r+=l;var p=o.getErrorCorrectPolynomial(f),h=e(s[u],p.getLength()-1),g=h.mod(p);c[u]=new Array(p.getLength()-1);for(var d=0;d<c[u].length;d+=1){var m=d+g.getLength()-c[u].length;c[u][d]=m>=0?g.getAt(m):0}}for(var v=0,d=0;d<n.length;d+=1)v+=n[d].totalCount;for(var b=new Array(v),w=0,d=0;d<i;d+=1)for(var u=0;u<n.length;u+=1)d<s[u].length&&(b[w]=s[u][d],w+=1);for(var d=0;d<a;d+=1)for(var u=0;u<n.length;u+=1)d<c[u].length&&(b[w]=c[u][d],w+=1);return b},T=function(e,t,n){for(var r=s.getRSBlocks(e,t),u=c(),l=0;l<n.length;l+=1){var f=n[l];u.put(f.getMode(),4),u.put(f.getLength(),o.getLengthInBits(f.getMode(),e)),f.write(u)}for(var d=0,l=0;l<r.length;l+=1)d+=r[l].dataCount;if(u.getLengthInBits()>8*d)throw new Error("code length overflow. ("+u.getLengthInBits()+">"+8*d+")");for(u.getLengthInBits()+4<=8*d&&u.put(0,4);u.getLengthInBits()%8!=0;)u.putBit(!1);for(;!(u.getLengthInBits()>=8*d)&&(u.put(i,8),!(u.getLengthInBits()>=8*d));)u.put(a,8);return A(u,r)};return v.addData=function(e){var t=u(e);m.push(t),g=null},v.isDark=function(e,t){if(e<0||p<=e||t<0||p<=t)throw new Error(e+","+t);return d[e][t]},v.getModuleCount=function(){return p},v.make=function(){b(!1,y())},v.createTableTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n="";n+='<table style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: "+t+"px;",n+='">',n+="<tbody>";for(var r=0;r<v.getModuleCount();r+=1){n+="<tr>";for(var i=0;i<v.getModuleCount();i+=1)n+='<td style="',n+=" border-width: 0px; border-style: none;",n+=" border-collapse: collapse;",n+=" padding: 0px; margin: 0px;",n+=" width: "+e+"px;",n+=" height: "+e+"px;",n+=" background-color: ",n+=v.isDark(r,i)?"#000000":"#ffffff",n+=";",n+='"/>';n+="</tr>"}return n+="</tbody>",n+="</table>"},v.createImgTag=function(e,t){e=e||2,t="undefined"==typeof t?4*e:t;var n=v.getModuleCount()*e+2*t,r=t,i=n-t;return h(n,n,function(t,n){if(r<=t&&t<i&&r<=n&&n<i){var o=Math.floor((t-r)/e),a=Math.floor((n-r)/e); +return v.isDark(a,o)?0:1}return 1})},v};t.stringToBytes=function(e){for(var t=new Array,n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t.push(255&r)}return t},t.createStringToBytes=function(e,t){var n=function(){for(var n=d(e),r=function(){var e=n.read();if(e==-1)throw new Error;return e},i=0,o={};;){var a=n.read();if(a==-1)break;var s=r(),c=r(),u=r(),l=String.fromCharCode(a<<8|s),f=c<<8|u;o[l]=f,i+=1}if(i!=t)throw new Error(i+" != "+t);return o}(),r="?".charCodeAt(0);return function(e){for(var t=new Array,i=0;i<e.length;i+=1){var o=e.charCodeAt(i);if(o<128)t.push(o);else{var a=n[e.charAt(i)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(r)}}return t}};var n={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},r={L:1,M:0,Q:3,H:2},i={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},o=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,o=7973,s=21522,c={},u=function(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t};return c.getBCHTypeInfo=function(e){for(var t=e<<10;u(t)-u(r)>=0;)t^=r<<u(t)-u(r);return(e<<10|t)^s},c.getBCHTypeNumber=function(e){for(var t=e<<12;u(t)-u(o)>=0;)t^=o<<u(t)-u(o);return e<<12|t},c.getPatternPosition=function(e){return t[e-1]},c.getMaskFunction=function(e){switch(e){case i.PATTERN000:return function(e,t){return(e+t)%2==0};case i.PATTERN001:return function(e,t){return e%2==0};case i.PATTERN010:return function(e,t){return t%3==0};case i.PATTERN011:return function(e,t){return(e+t)%3==0};case i.PATTERN100:return function(e,t){return(Math.floor(e/2)+Math.floor(t/3))%2==0};case i.PATTERN101:return function(e,t){return e*t%2+e*t%3==0};case i.PATTERN110:return function(e,t){return(e*t%2+e*t%3)%2==0};case i.PATTERN111:return function(e,t){return(e*t%3+(e+t)%2)%2==0};default:throw new Error("bad maskPattern:"+e)}},c.getErrorCorrectPolynomial=function(t){for(var n=e([1],0),r=0;r<t;r+=1)n=n.multiply(e([1,a.gexp(r)],0));return n},c.getLengthInBits=function(e,t){if(1<=t&&t<10)switch(e){case n.MODE_NUMBER:return 10;case n.MODE_ALPHA_NUM:return 9;case n.MODE_8BIT_BYTE:return 8;case n.MODE_KANJI:return 8;default:throw new Error("mode:"+e)}else if(t<27)switch(e){case n.MODE_NUMBER:return 12;case n.MODE_ALPHA_NUM:return 11;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 10;default:throw new Error("mode:"+e)}else{if(!(t<41))throw new Error("type:"+t);switch(e){case n.MODE_NUMBER:return 14;case n.MODE_ALPHA_NUM:return 13;case n.MODE_8BIT_BYTE:return 16;case n.MODE_KANJI:return 12;default:throw new Error("mode:"+e)}}},c.getLostPoint=function(e){for(var t=e.getModuleCount(),n=0,r=0;r<t;r+=1)for(var i=0;i<t;i+=1){for(var o=0,a=e.isDark(r,i),s=-1;s<=1;s+=1)if(!(r+s<0||t<=r+s))for(var c=-1;c<=1;c+=1)i+c<0||t<=i+c||0==s&&0==c||a==e.isDark(r+s,i+c)&&(o+=1);o>5&&(n+=3+o-5)}for(var r=0;r<t-1;r+=1)for(var i=0;i<t-1;i+=1){var u=0;e.isDark(r,i)&&(u+=1),e.isDark(r+1,i)&&(u+=1),e.isDark(r,i+1)&&(u+=1),e.isDark(r+1,i+1)&&(u+=1),0!=u&&4!=u||(n+=3)}for(var r=0;r<t;r+=1)for(var i=0;i<t-6;i+=1)e.isDark(r,i)&&!e.isDark(r,i+1)&&e.isDark(r,i+2)&&e.isDark(r,i+3)&&e.isDark(r,i+4)&&!e.isDark(r,i+5)&&e.isDark(r,i+6)&&(n+=40);for(var i=0;i<t;i+=1)for(var r=0;r<t-6;r+=1)e.isDark(r,i)&&!e.isDark(r+1,i)&&e.isDark(r+2,i)&&e.isDark(r+3,i)&&e.isDark(r+4,i)&&!e.isDark(r+5,i)&&e.isDark(r+6,i)&&(n+=40);for(var l=0,i=0;i<t;i+=1)for(var r=0;r<t;r+=1)e.isDark(r,i)&&(l+=1);var f=Math.abs(100*l/t/t-50)/5;return n+=10*f},c}(),a=function(){for(var e=new Array(256),t=new Array(256),n=0;n<8;n+=1)e[n]=1<<n;for(var n=8;n<256;n+=1)e[n]=e[n-4]^e[n-5]^e[n-6]^e[n-8];for(var n=0;n<255;n+=1)t[e[n]]=n;var r={};return r.glog=function(e){if(e<1)throw new Error("glog("+e+")");return t[e]},r.gexp=function(t){for(;t<0;)t+=255;for(;t>=256;)t-=255;return e[t]},r}(),s=function(){var e=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(e,t){var n={};return n.totalCount=e,n.dataCount=t,n},n={},i=function(t,n){switch(n){case r.L:return e[4*(t-1)+0];case r.M:return e[4*(t-1)+1];case r.Q:return e[4*(t-1)+2];case r.H:return e[4*(t-1)+3];default:return}};return n.getRSBlocks=function(e,n){var r=i(e,n);if("undefined"==typeof r)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+n);for(var o=r.length/3,a=new Array,s=0;s<o;s+=1)for(var c=r[3*s+0],u=r[3*s+1],l=r[3*s+2],f=0;f<c;f+=1)a.push(t(u,l));return a},n}(),c=function(){var e=new Array,t=0,n={};return n.getBuffer=function(){return e},n.getAt=function(t){var n=Math.floor(t/8);return 1==(e[n]>>>7-t%8&1)},n.put=function(e,t){for(var r=0;r<t;r+=1)n.putBit(1==(e>>>t-r-1&1))},n.getLengthInBits=function(){return t},n.putBit=function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1},n},u=function(e){var r=n.MODE_8BIT_BYTE,i=t.stringToBytes(e),o={};return o.getMode=function(){return r},o.getLength=function(e){return i.length},o.write=function(e){for(var t=0;t<i.length;t+=1)e.put(i[t],8)},o},l=function(){var e=new Array,t={};return t.writeByte=function(t){e.push(255&t)},t.writeShort=function(e){t.writeByte(e),t.writeByte(e>>>8)},t.writeBytes=function(e,n,r){n=n||0,r=r||e.length;for(var i=0;i<r;i+=1)t.writeByte(e[i+n])},t.writeString=function(e){for(var n=0;n<e.length;n+=1)t.writeByte(e.charCodeAt(n))},t.toByteArray=function(){return e},t.toString=function(){var t="";t+="[";for(var n=0;n<e.length;n+=1)n>0&&(t+=","),t+=e[n];return t+="]"},t},f=function(){var e=0,t=0,n=0,r="",i={},o=function(e){r+=String.fromCharCode(a(63&e))},a=function(e){if(e<0);else{if(e<26)return 65+e;if(e<52)return 97+(e-26);if(e<62)return 48+(e-52);if(62==e)return 43;if(63==e)return 47}throw new Error("n:"+e)};return i.writeByte=function(r){for(e=e<<8|255&r,t+=8,n+=1;t>=6;)o(e>>>t-6),t-=6},i.flush=function(){if(t>0&&(o(e<<6-t),e=0,t=0),n%3!=0)for(var i=3-n%3,a=0;a<i;a+=1)r+="="},i.toString=function(){return r},i},d=function(e){var t=e,n=0,r=0,i=0,o={};o.read=function(){for(;i<8;){if(n>=t.length){if(0==i)return-1;throw new Error("unexpected end of file./"+i)}var e=t.charAt(n);if(n+=1,"="==e)return i=0,-1;e.match(/^\s$/)||(r=r<<6|a(e.charCodeAt(0)),i+=6)}var o=r>>>i-8&255;return i-=8,o};var a=function(e){if(65<=e&&e<=90)return e-65;if(97<=e&&e<=122)return e-97+26;if(48<=e&&e<=57)return e-48+52;if(43==e)return 62;if(47==e)return 63;throw new Error("c:"+e)};return o},p=function(e,t){var n=e,r=t,i=new Array(e*t),o={};o.setPixel=function(e,t,r){i[t*n+e]=r},o.write=function(e){e.writeString("GIF87a"),e.writeShort(n),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(","),e.writeShort(0),e.writeShort(0),e.writeShort(n),e.writeShort(r),e.writeByte(0);var t=2,i=s(t);e.writeByte(t);for(var o=0;i.length-o>255;)e.writeByte(255),e.writeBytes(i,o,255),o+=255;e.writeByte(i.length-o),e.writeBytes(i,o,i.length-o),e.writeByte(0),e.writeString(";")};var a=function(e){var t=e,n=0,r=0,i={};return i.write=function(e,i){if(e>>>i!=0)throw new Error("length over");for(;n+i>=8;)t.writeByte(255&(e<<n|r)),i-=8-n,e>>>=8-n,r=0,n=0;r|=e<<n,n+=i},i.flush=function(){n>0&&t.writeByte(r)},i},s=function(e){for(var t=1<<e,n=(1<<e)+1,r=e+1,o=c(),s=0;s<t;s+=1)o.add(String.fromCharCode(s));o.add(String.fromCharCode(t)),o.add(String.fromCharCode(n));var u=l(),f=a(u);f.write(t,r);var d=0,p=String.fromCharCode(i[d]);for(d+=1;d<i.length;){var h=String.fromCharCode(i[d]);d+=1,o.contains(p+h)?p+=h:(f.write(o.indexOf(p),r),o.size()<4095&&(o.size()==1<<r&&(r+=1),o.add(p+h)),p=h)}return f.write(o.indexOf(p),r),f.write(n,r),f.flush(),u.toByteArray()},c=function(){var e={},t=0,n={};return n.add=function(r){if(n.contains(r))throw new Error("dup key:"+r);e[r]=t,t+=1},n.size=function(){return t},n.indexOf=function(t){return e[t]},n.contains=function(t){return"undefined"!=typeof e[t]},n};return o},h=function(e,t,n,r){for(var i=p(e,t),o=0;o<t;o+=1)for(var a=0;a<e;a+=1)i.setPixel(a,o,n(a,o));var s=l();i.write(s);for(var c=f(),u=s.toByteArray(),d=0;d<u.length;d+=1)c.writeByte(u[d]);c.flush();var h="";return h+="<img",h+=' src="',h+="data:image/gif;base64,",h+=c,h+='"',h+=' width="',h+=e,h+='"',h+=' height="',h+=t,h+='"',r&&(h+=' alt="',h+=r,h+='"'),h+="/>"};return t}();return function(n){i=[],r=n,o="function"==typeof r?r.apply(t,i):r,!(void 0!==o&&(e.exports=o))}(function(){return n}),!function(e){e.stringToBytes=function(e){function t(e){for(var t=[],n=0;n<e.length;n++){var r=e.charCodeAt(n);r<128?t.push(r):r<2048?t.push(192|r>>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t}return t(e)}}(n),n}(),l=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;n=Math.max(1,n);for(var r=n;r<=40;r+=1)try{var i=function(){var n=u(r,t);n.addData(e),n.make();var i=n.getModuleCount(),o=function(e,t){return e>=0&&e<i&&t>=0&&t<i&&n.isDark(e,t)};return{v:{text:e,level:t,version:r,moduleCount:i,isDark:o}}}();if("object"===("undefined"==typeof i?"undefined":s(i)))return i.v}catch(e){if(!(r<40&&c.test(e.message)))throw e}return null},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"L",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=l(e,t,n);if(i){var o=i.isDark;i.moduleCount+=2*r,i.isDark=function(e,t){return o(e-r,t-r)}}return i};n.exports=f},function(e,t,n){"use strict";var r=n(5),i=n(6),o=function(e,t){e.fillStyle=t.back,e.fillRect(0,0,t.size,t.size)},a=function(e,t,n,r,i,o){e.isDark(i,o)&&t.rect(o*r,i*r,r,r)},s=function(e,t,n){if(e){var i=n.rounded>0&&n.rounded<=100?r:a,o=e.moduleCount,s=n.size/o,c=0;n.crisp&&(s=Math.floor(s),c=Math.floor((n.size-s*o)/2)),t.translate(c,c),t.beginPath();for(var u=0;u<o;u+=1)for(var l=0;l<o;l+=1)i(e,t,n,s,u,l);t.fillStyle=n.fill,t.fill(),t.translate(-c,-c)}},c=function(e,t,n){o(t,n),s(e,t,n),i(t,n)};e.exports=c},function(e,t){"use strict";var n=function(e){return{c:e,m:function(){var e;return(e=this.c).moveTo.apply(e,arguments),this},l:function(){var e;return(e=this.c).lineTo.apply(e,arguments),this},a:function(){var e;return(e=this.c).arcTo.apply(e,arguments),this}}},r=function(e,t,n,r,i,o,a,s,c,u){a?e.m(t+o,n):e.m(t,n),s?e.l(r-o,n).a(r,n,r,i,o):e.l(r,n),c?e.l(r,i-o).a(r,i,t,i,o):e.l(r,i),u?e.l(t+o,i).a(t,i,t,n,o):e.l(t,i),a?e.l(t,n+o).a(t,n,r,n,o):e.l(t,n)},i=function(e,t,n,r,i,o,a,s,c,u){a&&e.m(t+o,n).l(t,n).l(t,n+o).a(t,n,t+o,n,o),s&&e.m(r-o,n).l(r,n).l(r,n+o).a(r,n,r-o,n,o),c&&e.m(r-o,i).l(r,i).l(r,i-o).a(r,i,r-o,i,o),u&&e.m(t+o,i).l(t,i).l(t,i-o).a(t,i,t+o,i,o)},o=function(e,t,o,a,s,c){var u=c*a,l=s*a,f=u+a,d=l+a,p=.005*o.rounded*a,h=e.isDark,g=s-1,m=s+1,v=c-1,b=c+1,w=h(s,c),y=h(g,v),x=h(g,c),k=h(g,b),_=h(s,b),C=h(m,b),S=h(m,c),A=h(m,v),T=h(s,v);t=n(t),w?r(t,u,l,f,d,p,!x&&!T,!x&&!_,!S&&!_,!S&&!T):i(t,u,l,f,d,p,x&&T&&y,x&&_&&k,S&&_&&C,S&&T&&A)};e.exports=o},function(e,t){"use strict";var n=function(e,t){var n=t.size,r="bold "+.01*t.mSize*n+"px "+t.fontname;e.strokeStyle=t.back,e.lineWidth=.01*t.mSize*n*.1,e.fillStyle=t.fontcolor,e.font=r;var i=e.measureText(t.label).width,o=.01*t.mSize,a=i/n,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n+.75*t.mSize*.01*n;e.strokeText(t.label,u,l),e.fillText(t.label,u,l)},r=function(e,t){var n=t.size,r=t.image.naturalWidth||1,i=t.image.naturalHeight||1,o=.01*t.mSize,a=o*r/i,s=(1-a)*t.mPosX*.01,c=(1-o)*t.mPosY*.01,u=s*n,l=c*n,f=a*n,d=o*n;e.draw_image(t.image,u,l,f,d)},i=function(e,t){var i=t.mode;"label"===i?n(e,t):"image"===i&&r(e,t)};e.exports=i}])})},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.isStr,o=t.dom,a=n(8),s=n(12),c=n(19),u=n(35),l=n(14),f=n(16),d=e.window,p=Object.assign({enabled:!1,lang:"en",useBrowserLang:!0},l.l10n),h={isoCode:"en",lang:"english",dateFormat:"YYYY-MM-DD HH:mm",details:"details",download:"download",empty:"empty",files:"files",filter:"filter",folders:"folders",grid:"grid",icons:"icons",language:"Language",lastModified:"Last modified",name:"Name",noMatch:"no match",parentDirectory:"Parent Directory",search:"search",size:"Size",tree:"Tree",view:"View"},g='<div class="block">\n <h1 class="l10n-language">Language</h1>\n <div class="select">\n <select id="langs"/>\n </div>\n </div>',m="<option/>",v="ext/l10n",b={en:Object.assign({},h)},w=b.en,y=function(e){e&&(w=e);var t="selected";o("#langs option").rmAttr(t).rmProp(t),o("#langs ."+w.isoCode).attr(t,"").prop(t,!0),r(w,function(e,t){o(".l10n-"+t).text(e),o(".l10n_ph-"+t).attr("placeholder",e)}),c.setDefaultDateFormat(w.dateFormat),o("#items .item").each(function(e){o(e).find(".date").text(c.formatDate(e._item.time))})},x=function(e){return b[e]?Promise.resolve(b[e]):a.request({action:"get",l10n:[e]}).then(function(t){return b[e]=Object.assign({},h,t.l10n&&t.l10n[e],{isoCode:e}),b[e]})},k=function(e,t,n){var r=f.get(v);if(e[r])t=r;else if(n){var i=d.navigator.language||d.navigator.browserLanguage;i&&(e[i]?t=i:i.length>2&&e[i.substr(0,2)]&&(t=i.substr(0,2)))}e[t]||(t="en"),x(t).then(y)},_=function(e){var t=o(g),n=t.find("select").on("change",function(t){var n=t.target.value;f.put(v,n),k(e,n,!1)});r(e,function(e,t){o(m).attr("value",t).addCls(t).text(t+" - "+(i(e)?e:e.lang)).appTo(n)}),t.appTo("#sidebar")},C=function(){p.enabled&&_(u),s.sub("view.changed",function(){k(u,p.lang,p.useBrowserLang)})};C()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(7),i=r.langs;e.exports=Object.assign({},i)},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=t.awaitLoad,o=n(12),a=n(14),s=e.window,c=Object.assign({enabled:!1,baseURL:"not-set",idSite:0},a["piwik-analytics"]),u=function(){if(c.enabled){var e=("https:"===s.location.protocol?"https://%22:%22http://%22)+c.baseURL+%22/%22,t=%5B%5D,n=null;r("<script></script>").attr("src",e+"piwik.js").appTo("body"),i().then(function(){if(n=s.Piwik&&s.Piwik.getTracker(e+"piwik.php",c.idSite))for(n.enableLinkTracking();t.length;)n.trackPageView(t.shift())}),o.sub("location.changed",function(e){var r=e.getCrumb().map(function(e){return e.label}).join(" > ");n?n.trackPageView(r):t.push(r)})}};u()}).call(t,function(){return this}())},function(e,t,n){"use strict";n(38),n(39),n(40),n(41),n(43)},function(e,t,n){(function(t){"use strict";var r=n(2),i=r.each,o=r.isFn,a=r.dom,s=r.includes,c=r.compact,u=n(12),l=n(13),f=n(14),d=n(16),p=t.window,h=Object.assign({enabled:!0},f.preview),g='<div id="pv-overlay">\n <div id="pv-container"></div>\n <div id="pv-spinner"><img class="back"/><img class="spinner" src="'+l.image("spinner")+'"/></div>\n <div id="pv-prev-area" class="hof"><img src="'+l.image("preview-prev")+'"/></div>\n <div id="pv-next-area" class="hof"><img src="'+l.image("preview-next")+'"/></div>\n <div id="pv-bottombar" class="clearfix hof">\n <ul id="pv-buttons">\n <li id="pv-bar-close" class="bar-right bar-button"><img src="'+l.image("preview-close")+'"/></li>\n <li id="pv-bar-raw" class="bar-right"><a class="bar-button" target="_blank"><img src="'+l.image("preview-raw")+'"/></a></li>\n <li id="pv-bar-fullscreen" class="bar-right bar-button"><img src="'+l.image("preview-fullscreen")+'"/></li>\n <li id="pv-bar-next" class="bar-right bar-button"><img src="'+l.image("preview-next")+'"/></li>\n <li id="pv-bar-idx" class="bar-right bar-label"></li>\n <li id="pv-bar-prev" class="bar-right bar-button"><img src="'+l.image("preview-prev")+'"/></li>\n </ul>\n </div>\n </div>',m="ext/preview",v=d.get(m)||!1,b=null,w=!1,y=null,x=null,k=function(){var e=a("#pv-container"),t=e[0],n=e.children()[0];if(t&&n){var r=t.offsetWidth,i=t.offsetHeight,o=n.offsetWidth,s=n.offsetHeight;a(n).css({left:.5*(r-o)+"px",top:.5*(i-s)+"px"})}},_=function(){var e=p.document.documentElement,t=e.clientWidth,n=e.clientHeight,r=v?0:20,i=v?0:48;a("#pv-container").css({width:t-2*r+"px",height:n-2*r-i+"px",left:r+"px",top:r+"px"}),a("#pv-spinner").css({left:.5*t+"px",top:.5*n+"px"}),v?(a("#pv-overlay").addCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-no-fullscreen"))):(a("#pv-overlay").rmCls("fullscreen"),a("#pv-bar-fullscreen").find("img").attr("src",l.image("preview-fullscreen"))),k(),o(x&&x.adjust)&&x.adjust()},C=function(e,t){a("#pv-bar-idx").text(e+"/"+t).show()},S=function(e){a("#pv-bar-raw").show().find("a").attr("href",e)},A=function(e){a("#pv-buttons .bar-left").rm(),i(e,function(e){a("<li></li>").addCls("bar-left").addCls("bar-label").text(e).appTo("#pv-buttons")})},T=function(){var e=a("#pv-overlay .hof");p.clearTimeout(b),e.show(),v&&(b=p.setTimeout(function(){return e.hide()},2e3))},E=function(){return x&&x.moveIdx(1)},M=function(){return x&&x.moveIdx(-1)},D=function(){v=!v,d.put(m,v),T(),_()},P=function(e){e.stopPropagation(),e.preventDefault()},z=function(e){var t=e.keyCode;27===t?(P(e),$()):8===t||37===t?(P(e),M()):13===t||32===t||39===t?(P(e),E()):70===t&&(P(e),D())},L=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").show(),a(p).on("keydown",z),_()},$=function(){A([]),a("#pv-container").clr(),a("#pv-overlay").hide(),a(p).off("keydown",z)},H=function e(t,n,r){p.clearTimeout(y);var i=a("#pv-spinner");if(!t)return w=!1,void i.hide();if(!w&&r)return void(y=p.setTimeout(function(){return e(!0,n)},r));var o=i.find(".back");n?o.attr("src",n).show():o.hide(),w=!0,i.show()},O=function e(t,n,r,i){var o=Object.assign(Object.create(e.prototype),{items:t,load:r,adjust:i});return o.setIdx(n),o};O.prototype={setIdx:function(e){var t=this;this.idx=(e+this.items.length)%this.items.length,this.item=this.items[this.idx],C(this.idx+1,this.items.length),S(this.item.absHref),A([this.item.label]);var n=this.item;Promise.resolve().then(function(){i(a("#pv-container *"),function(e){"function"==typeof e.unload&&e.unload()}),a("#pv-container").hide().clr(),H(!0,n.thumbSquare||n.icon,200)}).then(function(){return t.load(n)}).then(function(e){n===t.item&&(a("#pv-container").clr().app(e).show(),H(!1),_())})},moveIdx:function(e){this.setIdx(this.idx+e)}};var B=function(e,t,n){var r=function(r){r.$view&&s(e,r.type)&&r.$view.find("a").on("click",function(i){i.preventDefault();var o=c(a("#items .item").map(function(t){var n=t._item;return s(e,n.type)?n:null}));x=O(o,o.indexOf(r),t,n),L()})};u.sub("view.changed",function(e){return i(e,r)})},R=function(){h.enabled&&(a(g).hide().appTo("body").on("keydown",z).on("mousemove",T).on("mousedown",T).on("click",function(e){"pv-overlay"!==e.target.id&&"pv-container"!==e.target.id||$()}).on("mousedown",P).on("mousemove",P).on("keydown",P).on("keypress",P),a("#pv-spinner").hide(),a("#pv-bar-prev, #pv-prev-area").on("click",M),a("#pv-bar-next, #pv-next-area").on("click",E),a("#pv-bar-close").on("click",$),a("#pv-bar-fullscreen").on("click",D),a(p).on("resize",_).on("load",_))};e.exports={setLabels:A,register:B,get item(){return x&&x.item}},R()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(19),a=n(14),s=n(38),c=Object.assign({enabled:!1,autoplay:!0,types:[]},a["preview-aud"]),u='<audio id="pv-content-aud"/>',l=function(){var e=i("#pv-content-aud")[0];e&&s.setLabels([s.item.label,o.formatDate(1e3*e.duration,"m:ss")])},f=function(e){e.unload=function(){e.src="",e.load()}},d=function(e){return new Promise(function(t){var n=i(u).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");c.autoplay&&n.attr("autoplay","autoplay"),f(n[0]),n.attr("src",e.absHref)})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(8),a=n(14),s=n(38),c=Object.assign({enabled:!1,size:null,types:[]},a["preview-img"]),u='<img id="pv-content-img"/>',l=function(){var e=i("#pv-content-img")[0];if(e){var t=e.offsetWidth,n=[s.item.label];if(!c.size){var r=e.naturalWidth,o=e.naturalHeight;n.push(String(r)+"x"+String(o)),n.push(String((100*t/r).toFixed(0))+"%")}s.setLabels(n)}},f=function(e){return o.request({action:"get",thumbs:[{type:"img",href:e,width:c.size,height:0}]}).then(function(e){return e&&e.thumbs&&e.thumbs[0]?e.thumbs[0]:null})},d=function(e){return Promise.resolve(e.absHref).then(function(e){return c.size?f(e):e}).then(function(e){return new Promise(function(t){var n=i(u).on("load",function(){return t(n)}).attr("src",e)})})},p=function(){c.enabled&&s.register(c.types,d,l)};p()},function(e,t,n){(function(e){"use strict";var t=n(42),r=n(28),i=n(2),o=i.keys,a=i.dom,s=n(14),c=n(38),u=e.window,l=u.XMLHttpRequest,f=Object.assign({enabled:!1,styles:{}},s["preview-txt"]),d='<pre id="pv-content-txt"></pre>',p='<div id="pv-content-txt"></div>',h=function(){var e=a("#pv-content-txt")[0];if(e){var t=a("#pv-container")[0];e.style.height=t.offsetHeight+"px",c.setLabels([c.item.label,c.item.size+" bytes"])}},g=function(e){return new Promise(function(t,n){var r=new l,i=function(){if(r.readyState===l.DONE)try{t(r.responseText||"")}catch(e){n(String(e))}};r.open("GET",e,!0),r.onreadystatechange=i,r.send()})},m=function(e){return g(e.absHref).catch(function(e){return"[request failed] "+e}).then(function(n){var i=f.styles[e.type];if(1===i)return a(d).text(n);if(2===i)return a(p).html(r(n));if(3===i){var o=a("<code></code>").text(n);return u.setTimeout(function(){t.el(o[0])},n.length<2e4?0:500),a(d).app(o)}return a(p).text(n)})},v=function(){f.enabled&&c.register(o(f.styles),m,h)};v()}).call(t,function(){return this}())},function(e,t,n){!function(t,n){e.exports=n()}(this,function(){var e=".lolight",t="ll-",n="_nam#2196f3}_num#ec407a}_str#43a047}_rex#ef6c00}_pct#666}_key#555;font-weight:bold}_com#aaa;font-style:italic}".replace(/_/g,"."+t).replace(/#/g,"{color:#"),r=/^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/,i="com",o="key",a="nam",s="num",c="pct",u="rex",l="spc",f="str",d="unk",p=[[s,/#([0-9a-f]{6}|[0-9a-f]{3})\b/],[i,/(//|#).*?(?=\n|$)/],[i,//*[\s\S]*?*//],[i,/<!--[\s\S]*?-->/],[u,//(\/|[^\n])*?//],[f,/(['"`])(\\1|[\s\S])*?\1/],[s,/[+-]?([0-9]*.?[0-9]+|[0-9]+.?[0-9]*)([eE][+-]?[0-9]+)?/],[c,/[\.,:;+-*/=<>()[]{}|?!&@~]/],[l,/\s+/],[a,/[\w$]+/],[d,/./]],h=function(e){if("string"!=typeof e)throw new Error("tok: no string");for(var t=[],n=p.length,i=!1;e;)for(var c=0;c<n;c+=1){var f=p[c][1].exec(e);if(f&&0===f.index){var d=p[c][0];if(d!==u||!i){var h=f[0];d===a&&r.test(h)&&(d=o),d===l?h.indexOf("\n")>=0&&(i=!1):i=d===s||d===a,e=e.slice(h.length),t.push([d,h]);break}}}return t},g=function(e,t){if("undefined"!=typeof document)t(document);else if(e)throw new Error("no doc")},m=function(e){g(!0,function(n){var r=h(e.textContent);e.innerHTML="",r.forEach(function(r){var i=n.createElement("span");i.className=t+r[0],i.textContent=r[1],e.appendChild(i)})})},v=function(t){g(!0,function(n){[].forEach.call(n.querySelectorAll(t||e),function(e){m(e)})})};return g(!1,function(e){var t=e.querySelector("head"),r=e.createElement("style");r.textContent=n,t.insertBefore(r,t.firstChild),/^(i|c|loade)/.test(e.readyState)?v():e.addEventListener("DOMContentLoaded",function(){v()})}),v.tok=h,v.el=m,v})},function(e,t,n){"use strict";var r=n(2),i=r.dom,o=n(14),a=n(38),s=Object.assign({enabled:!1,autoplay:!0,types:[]},o["preview-vid"]),c='<video id="pv-content-vid"/>',u=function(){var e=i("#pv-content-vid")[0];if(e){var t=e.offsetWidth,n=e.videoWidth,r=e.videoHeight;a.setLabels([a.item.label,String(n)+"x"+String(r),String((100*t/n).toFixed(0))+"%"])}},l=function(e){e.unload=function(){e.src="",e.load()}},f=function(e){return new Promise(function(t){var n=i(c).on("loadedmetadata",function(){return t(n)}).attr("controls","controls");s.autoplay&&n.attr("autoplay","autoplay"),l(n[0]),n.attr("src",e.absHref)})},d=function(){s.enabled&&a.register(s.types,f,u)};d()},function(e,t,n){"use strict";var r=n(2),i=r.map,o=r.debounce,a=r.parsePattern,s=r.dom,c=n(8),u=n(12),l=n(20),f=n(13),d=n(14),p=n(22),h=n(18),g=Object.assign({enabled:!1,advanced:!1,debounceTime:300,ignorecase:!0},d.search),m='<div id="search" class="tool">\n <img src="'+f.image("search")+'" alt="search"/>\n <input class="l10n_ph-search" type="text" value=""/>\n </div>',v=!1,b="",w=void 0,y=void 0,x=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(e!==b){if(b=e,!e)return void h.setLocation();w.addCls("pending"),c.request({action:"get",search:{href:l.getAbsHref(),pattern:e,ignorecase:g.ignorecase}}).then(function(e){w.rmCls("pending"),h.setHint("noMatch"),h.setItems(i(e.search,function(e){return p.get(e)}))})}},k=function(){v?(w.addCls("active"),y[0].focus(),x(a(y.val(),g.advanced))):(x(),w.rmCls("active"))},_=function(){v=!v,k()},C=function(){v=!1,y.val(""),k()},S=function(){g.enabled&&(w=s(m).appTo("#toolbar"),y=w.find("input"),w.find("img").on("click",_),y.on("keyup",o(k,g.debounceTime)),u.sub("location.changed",C))};S()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.each,i=t.dom,o=n(12),a=n(13),s=n(14),c=e.window.document,u=Object.assign({enabled:!1,clickndrag:!1,checkboxes:!1},s.select),l='<span class="selector">\n <img src="'+a.image("selected")+'" alt="selected"/>\n </span>',f=i(c),d=i("html"),p=i('<div id="selection-rect"></div>'),h=Math.max,g=Math.min,m=Math.abs,v=0,b=0,w=function(){var e=i("#items .item.selected").map(function(e){return e._item});o.pub("selection",e)},y=function(e){var t=i(e);if(!t.length||t.isHidden())return null;var n=t[0].getBoundingClientRect();return{l:n.left,t:n.top,r:n.right,b:n.bottom}},x=function(e,t){return!!e&&!!t&&e.l===t.l&&e.t===t.t&&e.r===t.r&&e.b===t.b},k=function(e){var t=e[0];x(y(t),t&&t._rect)||e.each(function(e){e._rect=y(e)})},_=function(e,t){if(!e||!t)return!1;var n=h(e.l,t.l),r=g(e.r,t.r),i=h(e.t,t.t),o=g(e.b,t.b);return n<=r&&i<=o},C=function(e){var t=i("#content")[0],n=y(t),r=e.pageX-n.l+t.scrollLeft,o=e.pageY-n.t+t.scrollTop;return{x:r,y:o}},S=function(e){var t=C(e),n=t.x,r=t.y,o=g(v,n),a=g(b,r),s=m(v-n),c=m(b-r),u=e.ctrlKey||e.metaKey;if(!(!u&&s<4&&c<4)){u||i("#items .item").rmCls("selected"),d.addCls("drag-select"),p.show().css({left:o+"px",top:a+"px",width:s+"px",height:c+"px"});var l=y(p),f=i("#items .item:not(.folder-parent)");k(f),f.rmCls("selecting").each(function(e){_(l,e._rect)&&i(e).addCls("selecting")})}},A=function e(t){f.off("mousemove",S).off("mouseup",e),S(t),i("#items .item.selecting.selected").rmCls("selecting").rmCls("selected"),i("#items .item.selecting").rmCls("selecting").addCls("selected"),w(),d.rmCls("drag-select"),p.hide(),t.stopPropagation(),t.preventDefault()},T=function(e){if(!(0!==e.button||e.offsetX>=i("#content")[0].offsetWidth-16)){var t=C(e),n=t.x,r=t.y;v=n,b=r,f.on("mousemove",S).on("mouseup",A),S(e),e.preventDefault()}},E=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},M=function(e){E(e.target).$view.tglCls("selected"),w(),e.stopPropagation(),e.preventDefault()},D=function(e){e.$view&&!e.isCurrentParentFolder()&&i(l).on("click",M).appTo(e.$view.find("a"))},P=function(e,t){u.checkboxes&&r(e,D),r(t,function(e){e.$view&&e.$view.rmCls("selected")}),w()},z=function(){u.enabled&&(u.clickndrag||u.checkboxes)&&(o.sub("view.changed",P),u.clickndrag&&(p.hide().appTo("#content"),i("#content").on("mousedown",T).on("drag",function(e){return e.preventDefault()}).on("dragstart",function(e){return e.preventDefault()})))};z()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.toArray,a=r.dom,s=r.cmp,c=r.naturalCmp,u=n(12),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,column:0,reverse:!1,ignorecase:!0,natural:!1,folders:0},f.sort),h="ext/sort",g='<img src="'+l.image("sort")+'" class="sort" alt="sort order"/>',m=function(e){ +return e.isFolder()?p.folders:1},v={0:"label",1:"time",2:"size"},b={0:"label",1:"date",2:"size"},w=function(e,t,n,r){return function(i,o){var a=i._item,u=o._item,l=m(a)-m(u);if(0!==l)return l;var f=a[e],d=u[e];return(isNaN(f)||isNaN(d))&&(f=String(f),d=String(d),n&&(f=f.toLowerCase(),d=d.toLowerCase())),l=r?c(f,d):s(f,d),t?-l:l}},y=function(e,t){var n=a("#items li.header a"),r=a("#items li.header a."+b[e]),i=w(v[e],t,p.ignorecase,p.natural);d.put(h,{column:e,reverse:t}),n.rmCls("ascending").rmCls("descending"),r.addCls(t?"descending":"ascending"),a(o(a("#items .item:not(.folder-parent)")).sort(i)).appTo("#items")},x=function(){var e=d.get(h),t=e&&e.column||p.column,n=e&&e.reverse||p.reverse;y(t,n)},k=function(){var e=a("#items li.header");i(b,function(t,n){var r="0"===n?"app":"pre";e.find("a."+t)[r](g).on("click",function(e){y(n,a(e.currentTarget).hasCls("ascending")),e.preventDefault()})})},_=function(){p.enabled&&(k(),u.sub("view.changed",x))};_()},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.map,a=r.includes,s=n(8),c=n(12),u=n(14),l=Object.assign({enabled:!1,img:["img-bmp","img-gif","img-ico","img-jpg","img-png"],mov:["vid-avi","vid-flv","vid-mkv","vid-mov","vid-mp4","vid-mpg","vid-webm"],doc:["x-pdf","x-ps"],delay:1,size:100,exif:!1,chunksize:20},u.thumbnails),f=4/3,d=function(e,t){var n=null;if(a(l.img,t.type))n="img";else if(a(l.mov,t.type))n="mov";else{if(!a(l.doc,t.type))return;n="doc"}t.thumbSquare?t.$view.find(".icon.square img").addCls("thumb").attr("src",t.thumbSquare):e.push({type:n,href:t.absHref,ratio:1,callback:function(e){e&&t.$view&&(t.thumbSquare=e,t.$view.find(".icon.square img").addCls("thumb").attr("src",e))}}),t.thumbRational?t.$view.find(".icon.landscape img").addCls("thumb").attr("src",t.thumbRational):e.push({type:n,href:t.absHref,ratio:f,callback:function(e){e&&t.$view&&(t.thumbRational=e,t.$view.find(".icon.landscape img").addCls("thumb").attr("src",e))}})},p=function(e){var t=o(e,function(e){return{type:e.type,href:e.href,width:Math.round(l.size*e.ratio),height:l.size}});return s.request({action:"get",thumbs:t}).then(function(t){i(e,function(e,n){e.callback(t&&t.thumbs?t.thumbs[n]:null)})})},h=function(e){for(var t=e.length,n=l.chunksize,r=Promise.resolve(),i=function(t){r=r.then(function(){return p(e.slice(t,t+n))})},o=0;o<t;o+=n)i(o)},g=function(e){var t=[];i(e,function(e){return d(t,e)}),h(t)},m=function(e){setTimeout(function(){return g(e)},l.delay)},v=function(){l.enabled&&c.sub("view.changed",m)};v()},function(e,t,n){(function(e){"use strict";var t=n(12),r=n(14),i=e.window.document,o=Object.assign({enabled:!1},r.title),a=function(e){var t=e.getCrumb().map(function(e){return e.label}),n=t.join(" > ");t.length>1&&(n=t[t.length-1]+" - "+n),i.title=n},s=function(){o.enabled&&t.sub("location.changed",a)};s()}).call(t,function(){return this}())},function(e,t,n){"use strict";var r=n(2),i=r.each,o=r.dom,a=r.cmp,s=r.naturalCmp,c=n(12),u=n(20),l=n(13),f=n(14),d=n(16),p=Object.assign({enabled:!1,show:!0,maxSubfolders:50,naturalSort:!1,ignorecase:!0},f.tree),h='<div class="item folder">\n <span class="indicator">\n <img src="'+l.image("tree-indicator")+'"/>\n </span>\n <a>\n <span class="icon"><img src="'+l.icon("folder")+'"/></span>\n <span class="label"></span>\n </a>\n </span>',g='<div class="block">\n <h1 class="l10n-tree">Tree</h1>\n <div id="view-tree" class="button view">\n <img src="'+l.image("tree-toggle")+'" alt="view-tree"/>\n </div>\n </div>',m="ext/tree",v=function(e){for(;!e._item&&e.parentNode;)e=e.parentNode;return e._item},b=function(e){var t=v(e.target);"unknown"===t._treeState?t.fetchContent().then(function(){t._treeState="open",y(t)}):"open"===t._treeState?(t._treeState="closed",t._$tree.rmCls("open").addCls("closed")):"closed"===t._treeState&&(t._treeState="open",t._$tree.rmCls("closed").addCls("open"))},w=function(e,t){var n=e.label,r=t.label;return p.ignorecase&&(n=n.toLowerCase(),r=r.toLowerCase()),p.naturalSort?s(n,r):a(n,r)},y=function e(t){var n=t.getSubfolders(),r=n.length,a=p.maxSubfolders,s=o(h);if(s.find(".indicator").on("click",b),s.find(".label").text(t.label),u.setLink(s.find("a"),t),t.isCurrentFolder()&&s.addCls("active"),t.isManaged||s.find(".icon img").attr("src",l.icon("folder-page")),t._treeState=t._treeState||"none",t.isManaged&&!t.isContentFetched?t._treeState="unknown":r||(t._treeState="none"),s.addCls(t._treeState),r){var c=o('<div class="content"></div>').appTo(s);n.sort(w),i(n.slice(0,a),function(t){return c.app(e(t))}),r>a&&c.app('<div class="summary">… '+(r-a)+" more subfolders</div>")}return t._$tree&&t._$tree.rpl(s),t._$tree=s,s[0]._item=t,s},x=function e(t){return t._treeState="open",t.fetchContent().then(function(){return t.parent?e(t.parent):t})},k=function(){d.get(m)?(o("#view-tree").addCls("active"),o("#tree").show()):(o("#view-tree").rmCls("active"),o("#tree").hide())},_=function(e){x(e).then(function(e){o("#tree").clr().app(y(e)),k()})},C=function(){p.enabled&&(o('<div id="tree"></div>').hide().appTo("#mainrow"),o(g).appTo("#sidebar").find("#view-tree").on("click",function(e){d.put(m,!d.get(m)),k(),c.pub("resize"),e.preventDefault()}),"boolean"!=typeof d.get(m)&&d.put(m,p.show),k(),c.sub("location.changed",_))};C()},function(e,t,n){(function(e){"use strict";var t=n(2),r=t.dom,i=n(7),o=n(8),a=n(13),s='<ul id="tests"></ul>',c='<li class="test">\n <span class="label"></span>\n <span class="result"></span>\n <div class="info"></div>\n </li>',u='<div id="login-wrapper">\n <input id="pass" type="password" placeholder="password"/>\n <span id="login">login</span>\n <span id="logout">logout</span>\n <div id="hint">\n The preset password is the empty string, just click login.\n Change it in '_h5ai/private/conf/options.json'.\n </div>\n </div>',l='<div id="support">\n Show your support with a donation!\n <div class="paypal">\n <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\n <input type="hidden" name="cmd" value="_s-xclick"/>\n <input type="hidden" name="hosted_button_id" value="8WSPKWT7YBTSQ"/>\n <input type="image" src="'+a.image("paypal")+'" name="submit" alt="PayPal"/>\n </form>\n </div>\n </div>',f=i.setup,d=function(e,t,n,i){var o=r(c).appTo("#tests");o.find(".label").text(e),o.find(".result").addCls(n?"passed":"failed").text(i?i:n?"yes":"no"),o.find(".info").html(t)},p=function(){f.AS_ADMIN&&(r(s).appTo("#content"),d("h5ai version","Only green if this is an official h5ai release",/^\d+.\d+.\d+$/.test(f.VERSION),f.VERSION),d("Index file found","Add <code>"+f.INDEX_HREF+"</code> to your index file list",f.INDEX_HREF),d("Options parsable","File <code>options.json</code> is readable and syntax is correct",null!==i.options),d("Types parsable","File <code>types.json</code> is readable and syntax is correct",null!==i.types),d("Server software","Server is one of apache, lighttpd, nginx or cherokee",f.HAS_SERVER,f.SERVER_NAME+" "+f.SERVER_VERSION),d("PHP version","PHP version >= "+f.MIN_PHP_VERSION,!0,f.PHP_VERSION),d("PHP arch","64-bit required to correctly display file/folder sizes > ~2GB","64-bit"===f.PHP_ARCH,f.PHP_ARCH),d("Public Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PUB),d("Private Cache directory","Web server has write access",f.HAS_WRITABLE_CACHE_PRV),d("Image thumbs","PHP GD extension with JPEG support available",f.HAS_PHP_JPEG),d("Use EXIF thumbs","PHP EXIF extension available",f.HAS_PHP_EXIF),d("Movie thumbs","Command line program <code>avconv</code> or <code>ffmpeg</code> available",f.HAS_CMD_AVCONV||f.HAS_CMD_FFMPEG),d("PDF thumbs","Command line program <code>convert</code> or <code>gm</code> available",f.HAS_CMD_CONVERT||f.HAS_CMD_GM),d("Shell tar","Command line program <code>tar</code> available",f.HAS_CMD_TAR),d("Shell zip","Command line program <code>zip</code> available",f.HAS_CMD_ZIP),d("Shell du","Command line program <code>du</code> available",f.HAS_CMD_DU))},h=function(){e.window.location.reload()},g=function(){o.request({action:"login",pass:r("#pass").val()}).then(h)},m=function(){o.request({action:"logout"}).then(h)},v=function(e){13===e.which&&g()},b=function(){r(l).appTo("#content")},w=function(){r(u).appTo("#content"),f.AS_ADMIN?(r("#pass").rm(),r("#login").rm(),r("#logout").on("click",m)):(r("#pass").on("keydown",v)[0].focus(),r("#login").on("click",g),r("#logout").rm()),i.options.hasCustomPasshash&&r("#hint").rm()},y=function(){b(),w(),p()};y()}).call(t,function(){return this}())}]); \ No newline at end of file