pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Rename fgallery to efgallery as it is the start of a version 2.x of the venerable version 1.x fgallery line which will not be maintained anymore. Hence use a new MASTER_SITE which obviates the need for all those large patch files.



Module Name:	pkgsrc-wip
Committed By:	ast <ast%NetBSD.org@localhost>
Pushed By:	ast
Date:		Sun May 13 15:45:49 2018 +0200
Changeset:	c1f1bd05b72b5da75ce637e00ec1629c961265a9

Modified Files:
	Makefile
Added Files:
	efgallery/DESCR
	efgallery/Makefile
	efgallery/PLIST
	efgallery/distinfo
	efgallery/files/noscript.css
	efgallery/files/overview.css
	efgallery/files/overview.html
	efgallery/files/overview.js
	efgallery/files/overview.png
Removed Files:
	fgallery/DESCR
	fgallery/Makefile
	fgallery/PLIST
	fgallery/distinfo
	fgallery/files/noscript.css
	fgallery/files/overview.css
	fgallery/files/overview.html
	fgallery/files/overview.js
	fgallery/files/overview.png
	fgallery/patches/patch-fgallery
	fgallery/patches/patch-view_index.css
	fgallery/patches/patch-view_index.html
	fgallery/patches/patch-view_index.js

Log Message:
Rename fgallery to efgallery as it is the start of a version 2.x
of the venerable version 1.x fgallery line which will not be
maintained anymore. Hence use a new MASTER_SITE which obviates the
need for all those large patch files.

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=c1f1bd05b72b5da75ce637e00ec1629c961265a9

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 Makefile                               |   2 +-
 efgallery/DESCR                        |  16 +
 efgallery/Makefile                     |  88 +++++
 efgallery/PLIST                        |  27 ++
 efgallery/distinfo                     |   6 +
 efgallery/files/noscript.css           |  64 ++++
 efgallery/files/overview.css           |  53 +++
 efgallery/files/overview.html          |  14 +
 efgallery/files/overview.js            |  46 +++
 efgallery/files/overview.png           | Bin 0 -> 196 bytes
 fgallery/DESCR                         |  20 --
 fgallery/Makefile                      |  90 -----
 fgallery/PLIST                         |  31 --
 fgallery/distinfo                      |  10 -
 fgallery/files/noscript.css            |  64 ----
 fgallery/files/overview.css            |  53 ---
 fgallery/files/overview.html           |  14 -
 fgallery/files/overview.js             |  46 ---
 fgallery/files/overview.png            | Bin 196 -> 0 bytes
 fgallery/patches/patch-fgallery        | 597 ---------------------------------
 fgallery/patches/patch-view_index.css  |  27 --
 fgallery/patches/patch-view_index.html |  36 --
 fgallery/patches/patch-view_index.js   | 522 ----------------------------
 23 files changed, 315 insertions(+), 1511 deletions(-)

diffs:
diff --git a/Makefile b/Makefile
index cc50cad1b6..d71769f95c 100644
--- a/Makefile
+++ b/Makefile
@@ -659,6 +659,7 @@ SUBDIR+=	edb-debugger-git
 SUBDIR+=	edbrowse
 SUBDIR+=	edelib
 SUBDIR+=	eduke32
+SUBDIR+=	efgallery
 SUBDIR+=	efltk
 SUBDIR+=	eic
 SUBDIR+=	eina-musicplayer
@@ -776,7 +777,6 @@ SUBDIR+=	fftjet
 SUBDIR+=	fftw-mpich
 SUBDIR+=	fftw-openmpi
 SUBDIR+=	fftw2-openmpi
-SUBDIR+=	fgallery
 SUBDIR+=	fiche
 SUBDIR+=	file-roller
 SUBDIR+=	filelight
diff --git a/efgallery/DESCR b/efgallery/DESCR
new file mode 100644
index 0000000000..9036b4430c
--- /dev/null
+++ b/efgallery/DESCR
@@ -0,0 +1,16 @@
+Efgallery is a static photo gallery generator in Perl with a minimalist
+look and feel: it shows your photos, and optionally detects faces
+so they aren't cropped in the thumbnails.
+
+Efgallery stands for "extended fgallery" as it was inspired from
+the fgallery 1.x version.
+
+You can see an example galleries at the following addresses:
+
+https://marabu.ch/efgallery/demo/ (efgallery)
+https://alexschroeder.ch/gallery/ (sitelen-mute)
+http://www.thregr.org/~wavexx/software/fgallery/demo/ (fgallery 1.x)
+
+There is no server-side processing, only static generation. The
+resulting gallery can be uploaded anywhere without any additional
+requirements on the web server or browser.
diff --git a/efgallery/Makefile b/efgallery/Makefile
new file mode 100644
index 0000000000..9d65fe2c96
--- /dev/null
+++ b/efgallery/Makefile
@@ -0,0 +1,88 @@
+# $NetBSD$
+
+PORTVERSION=	2.1
+PKGBASE=	efgallery
+DISTNAME=	${PKGBASE}-${PORTVERSION}
+PKGREVISION=	1
+CATEGORIES=	www
+
+MASTER_SITES=	${MASTER_SITE_GITHUB:=0-ast-0/}
+GITHUB_PROJECT=	${PKGBASE}
+GITHUB_TAG=	${PORTVERSION}
+
+MAINTAINER=	ast%NetBSD.org@localhost
+HOMEPAGE=	https://github.com/0-ast-0/efgallery
+COMMENT=	Minimilistic photo gallery generator in Perl
+LICENSE=	gnu-gpl-v2
+
+NO_BUILD=	yes
+USE_TOOLS+=	perl
+REPLACE_PERL=	${PKGBASE}
+
+DEPENDS+=	facedetect>=0.1:../../wip/facedetect
+DEPENDS+=	ImageMagick>=6.9:../../graphics/ImageMagick
+DEPENDS+=	jpegoptim>=1.4:../../graphics/jpegoptim
+DEPENDS+=	pngcrush>=1.7:../../graphics/pngcrush
+DEPENDS+=	lcms2>=2.7:../../graphics/lcms2
+DEPENDS+=	p7zip>=9.38:../../archivers/p7zip
+DEPENDS+=	p5-Image-ExifTool>=10.0:../../graphics/p5-Image-ExifTool
+
+EFG_SHAREDIR=	share/${PKGBASE}
+EFG_VIEWDIR=	share/${PKGBASE}/view
+
+SUBST_CLASSES+=			fix-paths
+SUBST_STAGE.fix-paths=		post-patch
+SUBST_MESSAGE.fix-paths=	Fixing ${EFG_VIEWDIR} path.
+SUBST_FILES.fix-paths=		efgallery
+SUBST_SED.fix-paths=		-e "s,%%EFG_VIEWDIR%%,${PREFIX}/${EFG_VIEWDIR},g"
+
+SUBST_CLASSES+=		fix-vers
+SUBST_STAGE.fix-vers=	post-patch
+SUBST_MESSAGE.fix-vers=	Setting version to ${PKGVERSION:C/^.*-//}.
+SUBST_FILES.fix-vers=	efgallery
+SUBST_SED.fix-vers=	-e "s,\"${PORTVERSION}\",\"${PKGVERSION:C/^.*-//}\","
+
+EFG_DOCS=	COPYING.txt README.md
+EFG_SRCDIR=	${WRKDIR}/${DISTNAME}
+EFG_VIEWFILES=	back.png \
+		cap-always.png \
+		cap-never.png \
+		cap-normal.png \
+		cut-left.png \
+		cut-mov.png \
+		cut-right.png \
+		cut-top.png \
+		download.png \
+		eye.png \
+		index.css \
+		index.html \
+		index.js \
+		mootools-core-1.4.js \
+		mootools-idle.js \
+		mootools-mooswipe.js \
+		mootools-more-1.4.js \
+		noise.png \
+		throbber.gif \
+		overview.html \
+		overview.js \
+		overview.png
+
+INSTALLATION_DIRS=	bin ${PKGMANDIR}/man1 ${EFG_SHAREDIR} ${EFG_VIEWDIR}
+
+do-install:
+	${INSTALL_SCRIPT} ${EFG_SRCDIR}/${PKGBASE} \
+		${DESTDIR}${PREFIX}/bin/${PKGBASE}
+	${INSTALL_MAN} ${WRKSRC}/efgallery.1 \
+		${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
+
+post-install:
+.for file in ${EFG_DOCS}
+	${INSTALL_DATA} ${EFG_SRCDIR}/${file} \
+		${DESTDIR}${PREFIX}/${EFG_SHAREDIR}
+.endfor
+.for file in ${EFG_VIEWFILES}
+	${INSTALL_DATA} ${EFG_SRCDIR}/view/${file} \
+		${DESTDIR}${PREFIX}/${EFG_VIEWDIR}
+.endfor
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/efgallery/PLIST b/efgallery/PLIST
new file mode 100644
index 0000000000..83461ae2f8
--- /dev/null
+++ b/efgallery/PLIST
@@ -0,0 +1,27 @@
+@comment $NetBSD$
+bin/efgallery
+man/man1/efgallery.1
+share/efgallery/COPYING.txt
+share/efgallery/README.md
+share/efgallery/view/back.png
+share/efgallery/view/cap-always.png
+share/efgallery/view/cap-never.png
+share/efgallery/view/cap-normal.png
+share/efgallery/view/cut-left.png
+share/efgallery/view/cut-mov.png
+share/efgallery/view/cut-right.png
+share/efgallery/view/cut-top.png
+share/efgallery/view/download.png
+share/efgallery/view/eye.png
+share/efgallery/view/index.css
+share/efgallery/view/index.html
+share/efgallery/view/index.js
+share/efgallery/view/mootools-core-1.4.js
+share/efgallery/view/mootools-idle.js
+share/efgallery/view/mootools-mooswipe.js
+share/efgallery/view/mootools-more-1.4.js
+share/efgallery/view/noise.png
+share/efgallery/view/overview.html
+share/efgallery/view/overview.js
+share/efgallery/view/overview.png
+share/efgallery/view/throbber.gif
diff --git a/efgallery/distinfo b/efgallery/distinfo
new file mode 100644
index 0000000000..246f071a7f
--- /dev/null
+++ b/efgallery/distinfo
@@ -0,0 +1,6 @@
+$NetBSD$
+
+SHA1 (efgallery-2.1.tar.gz) = 027cb81fcb5b5890e12330aad7dcc5c5791b9344
+RMD160 (efgallery-2.1.tar.gz) = aa0f29ec542aeb16510b2d0f0d949fad591064ef
+SHA512 (efgallery-2.1.tar.gz) = bef104c06964ec59ddd80926b8210db3ba9cf558648d19309cd95a9dd1469be1399a21d5a4a7218991275cec841e2276f1053e1e01285fba251b208a5762b0e3
+Size (efgallery-2.1.tar.gz) = 145941 bytes
diff --git a/efgallery/files/noscript.css b/efgallery/files/noscript.css
new file mode 100644
index 0000000000..8d03d5ed0f
--- /dev/null
+++ b/efgallery/files/noscript.css
@@ -0,0 +1,64 @@
+/* noscript environment, based on https://css-tricks.com/seamless-responsive-photo-grid/ */
+html, body
+{
+  overflow: hidden; /* IE<9 */
+  padding: 0;
+  margin: 0;
+  border: 0;
+  height: 100.1% /* IOS>7.1 meta viewport minimal-ui to hide menu + bars */
+}
+
+body
+{
+  overflow: scroll;
+  background-color: #eee;
+}
+
+#photos {
+  /* Prevent vertical gaps */
+  line-height: 0;
+  -webkit-column-count: 8;
+  -webkit-column-gap:   0px;
+  -moz-column-count:    8;
+  -moz-column-gap:      0px;
+  column-count:         8;
+  column-gap:           0px;  
+}
+
+#photos img {
+  /* Just in case there are inline attributes */
+  width: 100% !important;
+  height: auto !important;
+}
+
+@media (max-width: 1200px) {
+  #photos {
+    -moz-column-count:    7;
+    -webkit-column-count: 7;
+    column-count:         7;
+  }
+}
+
+@media (max-width: 1000px) {
+  #photos {
+    -moz-column-count:    6;
+    -webkit-column-count: 6;
+    column-count:         6;
+  }
+}
+
+@media (max-width: 800px) {
+  #photos {
+    -moz-column-count:    5;
+    -webkit-column-count: 5;
+    column-count:         5;
+  }
+}
+
+@media (max-width: 400px) {
+  #photos {
+    -moz-column-count:    3;
+    -webkit-column-count: 3;
+    column-count:         3;
+  }
+}
diff --git a/efgallery/files/overview.css b/efgallery/files/overview.css
new file mode 100644
index 0000000000..05732fa935
--- /dev/null
+++ b/efgallery/files/overview.css
@@ -0,0 +1,53 @@
+html, body
+{
+  overflow: hidden; /* IE<9 */
+  padding: 0;
+  margin: 0;
+  border: 0;
+  height: 100.1% /* IOS>7.1 meta viewport minimal-ui to hide menu + bars */
+}
+
+body
+{
+  overflow: scroll;
+  background-color: #eee;
+}
+
+#overview
+{
+  margin: 1em;
+}
+
+.overview-img-div
+{
+  display: inline-block;
+  margin: 0.5em;
+}
+
+.overview-img, .overview-img-div
+{
+  -webkit-border-radius: 5px;
+     -moz-border-radius: 5px;
+          border-radius: 5px;
+}
+
+.overview-img-div {
+  display: inline-block;
+  background: black;
+  padding: 0;
+  box-shadow: 5px 5px 15px #888;
+}
+
+.overview-img-div img {
+  display: block;
+
+  -webkit-transition: all 0.05s linear;
+     -moz-transition: all 0.05s linear;
+      -ms-transition: all 0.05s linear;
+       -o-transition: all 0.05s linear;
+          transition: all 0.05s linear;
+}
+
+.overview-img-div:hover img {
+  opacity: 0.7;
+}
diff --git a/efgallery/files/overview.html b/efgallery/files/overview.html
new file mode 100755
index 0000000000..39ae999808
--- /dev/null
+++ b/efgallery/files/overview.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimal-ui" />
+    <noscript>
+      <meta http-equiv="refresh" content="0;url=noscript.html" />
+    </noscript>
+    <script src="mootools-core-1.4.js" type="text/javascript"></script>
+    <script src="overview.js" type="text/javascript"></script>
+    <link href="overview.css" rel="stylesheet" type="text/css" />
+  </head>
+  <body><div id="overview"></div></body>
+</html>
diff --git a/efgallery/files/overview.js b/efgallery/files/overview.js
new file mode 100644
index 0000000000..ac55ff37e4
--- /dev/null
+++ b/efgallery/files/overview.js
@@ -0,0 +1,46 @@
+var datafile = '../data.json';
+
+function initOverview(data)
+{
+  emain = $('overview');
+  data.data.each(function(x, i) {
+    emain.grab(new Element('div', {
+      'class': 'overview-img-div'
+    }).grab(new Element('a', {
+      'href': '../index.html#' + i
+    }).grab(new Element('img', {
+      'class': 'overview-img',
+      'src': '../' + x.thumb[0]
+    }))))
+  });
+};
+
+function initFailure()
+{
+  emain = $('overview');
+  emain.set('html', "<h2>Cannot load gallery data :'(</h2>");
+  emain.setStyles(
+  {
+    'background': 'inherit',
+    'display': 'block'
+  });
+}
+
+window.addEvent("domready", function() {
+  new Request.JSON(
+  {
+    url: datafile,
+    onRequest: function()
+    {
+      if(this.xhr.overrideMimeType)
+        this.xhr.overrideMimeType('application/json');
+    },
+    isSuccess: function()
+    {
+      return (!this.status || (this.status >= 200 && this.status < 300));
+    },
+    onSuccess: initOverview,
+    onFailure: initFailure
+  }).get();
+});
+
diff --git a/efgallery/files/overview.png b/efgallery/files/overview.png
new file mode 100644
index 0000000000..a1bd7320dd
Binary files /dev/null and b/efgallery/files/overview.png differ
diff --git a/fgallery/DESCR b/fgallery/DESCR
deleted file mode 100644
index d9c41701df..0000000000
--- a/fgallery/DESCR
+++ /dev/null
@@ -1,20 +0,0 @@
-Fgallery is a minimalist javascript photo gallery.
-
-It is a static photo gallery generator with no frills that has a
-stylish, minimalist look: it shows your photos, and nothing else.
-
-You can see an example gallery at the following address:
-
-http://www.thregr.org/~wavexx/software/fgallery/demo/
-
-There is no server-side processing, only static generation. The
-resulting gallery can be uploaded anywhere without additional
-requirements and works with any modern browser.
-
-- Automatically orients pictures without quality loss.
-- Multi-camera friendly: automatically sorts pictures by time.
-- Adapts to the current screen size and aspect.
-- Supports face detection for improved thumbnail centering.
-- Loads fast! Especially over slow connections.
-- Can original (raw) pictures in a zip file for downloading.
-- Panoramas can be seen full-size by default.
diff --git a/fgallery/Makefile b/fgallery/Makefile
deleted file mode 100644
index 374bdb220f..0000000000
--- a/fgallery/Makefile
+++ /dev/null
@@ -1,90 +0,0 @@
-# $NetBSD$
-
-PORTVERSION=	1.8.2
-PKGBASE=	fgallery
-DISTNAME=	${PKGBASE}-${PORTVERSION}
-PKGREVISION=	4
-CATEGORIES=	www
-
-MASTER_SITES=	http://www.thregr.org/~wavexx/software/fgallery/releases/
-EXTRACT_SUFX=	.zip
-
-MAINTAINER=	ast%NetBSD.org@localhost
-HOMEPAGE=	http://www.thregr.org/~wavexx/software/fgallery
-COMMENT=	Minimilistic, static photo gallery generator
-LICENSE=	gnu-gpl-v2
-
-NO_BUILD=	yes
-USE_TOOLS+=	perl
-REPLACE_PERL=	${PKGBASE}
-
-DEPENDS+=	facedetect>=0.1:../../wip/facedetect
-DEPENDS+=	ImageMagick>=6.9:../../graphics/ImageMagick
-DEPENDS+=	jpegoptim>=1.4:../../graphics/jpegoptim
-DEPENDS+=	pngcrush>=1.7:../../graphics/pngcrush
-DEPENDS+=	lcms2>=2.7:../../graphics/lcms2
-DEPENDS+=	p7zip>=9.38:../../archivers/p7zip
-DEPENDS+=	p5-Image-ExifTool>=10.0:../../graphics/p5-Image-ExifTool
-
-FG_SHAREDIR=	share/${PKGBASE}
-FG_VIEWDIR=	share/${PKGBASE}/view
-
-SUBST_CLASSES+=			fix-paths
-SUBST_STAGE.fix-paths=		post-patch
-SUBST_MESSAGE.fix-paths=	Fixing ${FG_VIEWDIR} path.
-SUBST_FILES.fix-paths=		fgallery
-SUBST_SED.fix-paths=		-e "s,%%FG_VIEWDIR%%,${PREFIX}/${FG_VIEWDIR},g"
-
-SUBST_CLASSES+=		fix-vers
-SUBST_STAGE.fix-vers=	post-patch
-SUBST_MESSAGE.fix-vers=	Setting version to ${PKGVERSION:C/^.*-//}.
-SUBST_FILES.fix-vers=	fgallery
-SUBST_SED.fix-vers=	-e "s,\"${PORTVERSION}\",\"${PKGVERSION:C/^.*-//}\","
-
-FG_DOCS=	COPYING.txt NEWS.html NEWS.rst README.html README.rst
-FG_SRCDIR=	${WRKDIR}/${DISTNAME}
-FG_VIEWFILES=	back.png \
-		cap-always.png \
-		cap-never.png \
-		cap-normal.png \
-                cut-left.png \
-                cut-mov.png \
-                cut-right.png \
-                cut-top.png \
-                download.png \
-                eye.png \
-                index.css \
-                index.html \
-                index.js \
-                mootools-core-1.4.js \
-                mootools-idle.js \
-                mootools-mooswipe.js \
-                mootools-more-1.4.js \
-                noise.png \
-                throbber.gif
-
-OV_FILES=	overview.css \
-                overview.html \
-                overview.js \
-                overview.png \
-                noscript.css
-
-INSTALLATION_DIRS=	bin ${FG_SHAREDIR} ${FG_VIEWDIR}
-
-pre-patch:
-.for file in ${OV_FILES}
-	${CP} ${FILESDIR}/${file} ${WRKSRC}/view
-.endfor
-
-do-install:
-	${INSTALL_SCRIPT} ${FG_SRCDIR}/${PKGBASE} ${DESTDIR}${PREFIX}/bin/${PKGBASE}
-
-post-install:
-.for file in ${FG_DOCS}
-	${INSTALL_DATA} ${FG_SRCDIR}/${file} ${DESTDIR}${PREFIX}/${FG_SHAREDIR}
-.endfor
-.for file in ${FG_VIEWFILES} ${OV_FILES}
-	${INSTALL_DATA} ${FG_SRCDIR}/view/${file} ${DESTDIR}${PREFIX}/${FG_VIEWDIR}
-.endfor
-
-.include "../../mk/bsd.pkg.mk"
diff --git a/fgallery/PLIST b/fgallery/PLIST
deleted file mode 100644
index 04e7bf5c2b..0000000000
--- a/fgallery/PLIST
+++ /dev/null
@@ -1,31 +0,0 @@
-@comment $NetBSD$
-bin/fgallery
-share/fgallery/COPYING.txt
-share/fgallery/NEWS.html
-share/fgallery/NEWS.rst
-share/fgallery/README.html
-share/fgallery/README.rst
-share/fgallery/view/back.png
-share/fgallery/view/cap-always.png
-share/fgallery/view/cap-never.png
-share/fgallery/view/cap-normal.png
-share/fgallery/view/cut-left.png
-share/fgallery/view/cut-mov.png
-share/fgallery/view/cut-right.png
-share/fgallery/view/cut-top.png
-share/fgallery/view/download.png
-share/fgallery/view/eye.png
-share/fgallery/view/index.css
-share/fgallery/view/index.html
-share/fgallery/view/index.js
-share/fgallery/view/mootools-core-1.4.js
-share/fgallery/view/mootools-idle.js
-share/fgallery/view/mootools-mooswipe.js
-share/fgallery/view/mootools-more-1.4.js
-share/fgallery/view/noise.png
-share/fgallery/view/noscript.css
-share/fgallery/view/overview.css
-share/fgallery/view/overview.html
-share/fgallery/view/overview.js
-share/fgallery/view/overview.png
-share/fgallery/view/throbber.gif
diff --git a/fgallery/distinfo b/fgallery/distinfo
deleted file mode 100644
index 5bee7babe5..0000000000
--- a/fgallery/distinfo
+++ /dev/null
@@ -1,10 +0,0 @@
-$NetBSD$
-
-SHA1 (fgallery-1.8.2.zip) = a4164160f9e7d70fe1b135f11e175e8a470a94f2
-RMD160 (fgallery-1.8.2.zip) = 959854b675a813379e78d8e66022dd2f56e30561
-SHA512 (fgallery-1.8.2.zip) = 1e782b86c74b7cafbb61e46f346b2e42dab9cc3133cf8cedef827f916b5eb29316d86a52020305b56a42fa9d6555423b9d5a175dac4446a0f7f5d538beb9311f
-Size (fgallery-1.8.2.zip) = 158562 bytes
-SHA1 (patch-fgallery) = f0536a948a24849cc3b4821aa3b0e6c7fe4dc3b1
-SHA1 (patch-view_index.css) = 562587d10dc72d8a22a9577cba9cc63fa9473c86
-SHA1 (patch-view_index.html) = 6ea26e75ee14d5d6825ebab6e647f37853ed1382
-SHA1 (patch-view_index.js) = b8deb226c5ade199440565f87ae0e38c62b4bad4
diff --git a/fgallery/files/noscript.css b/fgallery/files/noscript.css
deleted file mode 100644
index 8d03d5ed0f..0000000000
--- a/fgallery/files/noscript.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/* noscript environment, based on https://css-tricks.com/seamless-responsive-photo-grid/ */
-html, body
-{
-  overflow: hidden; /* IE<9 */
-  padding: 0;
-  margin: 0;
-  border: 0;
-  height: 100.1% /* IOS>7.1 meta viewport minimal-ui to hide menu + bars */
-}
-
-body
-{
-  overflow: scroll;
-  background-color: #eee;
-}
-
-#photos {
-  /* Prevent vertical gaps */
-  line-height: 0;
-  -webkit-column-count: 8;
-  -webkit-column-gap:   0px;
-  -moz-column-count:    8;
-  -moz-column-gap:      0px;
-  column-count:         8;
-  column-gap:           0px;  
-}
-
-#photos img {
-  /* Just in case there are inline attributes */
-  width: 100% !important;
-  height: auto !important;
-}
-
-@media (max-width: 1200px) {
-  #photos {
-    -moz-column-count:    7;
-    -webkit-column-count: 7;
-    column-count:         7;
-  }
-}
-
-@media (max-width: 1000px) {
-  #photos {
-    -moz-column-count:    6;
-    -webkit-column-count: 6;
-    column-count:         6;
-  }
-}
-
-@media (max-width: 800px) {
-  #photos {
-    -moz-column-count:    5;
-    -webkit-column-count: 5;
-    column-count:         5;
-  }
-}
-
-@media (max-width: 400px) {
-  #photos {
-    -moz-column-count:    3;
-    -webkit-column-count: 3;
-    column-count:         3;
-  }
-}
diff --git a/fgallery/files/overview.css b/fgallery/files/overview.css
deleted file mode 100644
index 05732fa935..0000000000
--- a/fgallery/files/overview.css
+++ /dev/null
@@ -1,53 +0,0 @@
-html, body
-{
-  overflow: hidden; /* IE<9 */
-  padding: 0;
-  margin: 0;
-  border: 0;
-  height: 100.1% /* IOS>7.1 meta viewport minimal-ui to hide menu + bars */
-}
-
-body
-{
-  overflow: scroll;
-  background-color: #eee;
-}
-
-#overview
-{
-  margin: 1em;
-}
-
-.overview-img-div
-{
-  display: inline-block;
-  margin: 0.5em;
-}
-
-.overview-img, .overview-img-div
-{
-  -webkit-border-radius: 5px;
-     -moz-border-radius: 5px;
-          border-radius: 5px;
-}
-
-.overview-img-div {
-  display: inline-block;
-  background: black;
-  padding: 0;
-  box-shadow: 5px 5px 15px #888;
-}
-
-.overview-img-div img {
-  display: block;
-
-  -webkit-transition: all 0.05s linear;
-     -moz-transition: all 0.05s linear;
-      -ms-transition: all 0.05s linear;
-       -o-transition: all 0.05s linear;
-          transition: all 0.05s linear;
-}
-
-.overview-img-div:hover img {
-  opacity: 0.7;
-}
diff --git a/fgallery/files/overview.html b/fgallery/files/overview.html
deleted file mode 100755
index 39ae999808..0000000000
--- a/fgallery/files/overview.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <meta name="viewport" content="width=device-width,initial-scale=1,minimal-ui" />
-    <noscript>
-      <meta http-equiv="refresh" content="0;url=noscript.html" />
-    </noscript>
-    <script src="mootools-core-1.4.js" type="text/javascript"></script>
-    <script src="overview.js" type="text/javascript"></script>
-    <link href="overview.css" rel="stylesheet" type="text/css" />
-  </head>
-  <body><div id="overview"></div></body>
-</html>
diff --git a/fgallery/files/overview.js b/fgallery/files/overview.js
deleted file mode 100644
index ac55ff37e4..0000000000
--- a/fgallery/files/overview.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var datafile = '../data.json';
-
-function initOverview(data)
-{
-  emain = $('overview');
-  data.data.each(function(x, i) {
-    emain.grab(new Element('div', {
-      'class': 'overview-img-div'
-    }).grab(new Element('a', {
-      'href': '../index.html#' + i
-    }).grab(new Element('img', {
-      'class': 'overview-img',
-      'src': '../' + x.thumb[0]
-    }))))
-  });
-};
-
-function initFailure()
-{
-  emain = $('overview');
-  emain.set('html', "<h2>Cannot load gallery data :'(</h2>");
-  emain.setStyles(
-  {
-    'background': 'inherit',
-    'display': 'block'
-  });
-}
-
-window.addEvent("domready", function() {
-  new Request.JSON(
-  {
-    url: datafile,
-    onRequest: function()
-    {
-      if(this.xhr.overrideMimeType)
-        this.xhr.overrideMimeType('application/json');
-    },
-    isSuccess: function()
-    {
-      return (!this.status || (this.status >= 200 && this.status < 300));
-    },
-    onSuccess: initOverview,
-    onFailure: initFailure
-  }).get();
-});
-
diff --git a/fgallery/files/overview.png b/fgallery/files/overview.png
deleted file mode 100644
index a1bd7320dd..0000000000
Binary files a/fgallery/files/overview.png and /dev/null differ
diff --git a/fgallery/patches/patch-fgallery b/fgallery/patches/patch-fgallery
deleted file mode 100644
index a80ab9a576..0000000000
--- a/fgallery/patches/patch-fgallery
+++ /dev/null
@@ -1,597 +0,0 @@
-$NetBSD$
-
-Merge from https://raw.githubusercontent.com/wavexx/fgallery/master/fgallery
-Use a "cmd_exists" for tests of existence of commands in given environment
-Use oct instead of 0### and don't return undef explicitely (Perl::Critic)
-Adaptions for keeping all fgallery files in view subdirectory
-Pretty print json for easier customization
-
---- fgallery.orig	2016-05-25 09:53:19.000000000 +0000
-+++ fgallery
-@@ -8,6 +8,8 @@ use warnings;
- 
- use locale;
- use utf8;
-+use if $^V lt v5.23.4, open => qw{:std :utf8};
-+use if $^V ge v5.23.4, open => qw{:std :locale};
- require Encode;
- require encoding;
- 
-@@ -20,25 +22,20 @@ use Fcntl;
- use File::Basename qw{fileparse};
- use File::Find qw{find};
- use File::Path qw{make_path remove_tree};
--use File::Spec::Functions qw{rel2abs};
--use FindBin qw{$RealBin};
-+use File::Spec::Functions qw{rel2abs canonpath catfile};
- use Getopt::Long qw{:config bundling};
- use IO::Handle;
- use Image::ExifTool qw{ImageInfo};
- use Time::Piece;
- 
--# We require either Cpanel::JSON::XS or JSON::PP (JSON::XS does not support ithreads)
--my $JSON_cls = eval { require Cpanel::JSON::XS; "Cpanel::JSON::XS"; } //
--	       eval { require JSON::PP; "JSON::PP"; } //
--	       fatal("either Cpanel::JSON::XS or JSON::PP is required");
--$JSON_cls->import(qw{encode_json});
-+use JSON::PP;
- 
- # constants
- our $VERSION = "1.8.2";
- our $ENCODING = encoding::_get_locale_encoding() || 'UTF-8';
- 
- # defaults
--my $mode = 0644;
-+my $mode = oct(644);
- my $slim = 0;
- my $ofile = 0;
- my $orient = 1;
-@@ -55,6 +52,7 @@ my $fullpano = 1;
- my $nodown = 0;
- my $panort = 2.;
- my $facedet = 0;
-+my $keeporig = 0;
- my $jpegoptim = 1;
- my $pngoptim = 1;
- my $p7zip = 1;
-@@ -63,6 +61,8 @@ my $workers = 0;
- my $sRGB = 1;
- my $indexUrl = undef;
- my @capmethods = ("txt", "xmp", "exif");
-+my $use_symlinks = 0;
-+my $do_blur = 1;
- 
- 
- # support functions
-@@ -73,6 +73,14 @@ sub fatal
- }
- 
- 
-+# see if our environment has a given command installed
-+sub cmd_exists
-+{
-+  my ($c) = @_;
-+  return qx{/bin/sh -c "command -v $c"};
-+}
-+
-+
- sub sys
- {
-   my @cmd = @_;
-@@ -87,13 +95,13 @@ sub sys
-   }
- 
-   local $/ = undef;
--  my $out = <$fd>;
-+  my $output = <$fd>;
- 
-   unless(close($fd)) {
-     fatal("command \"@cmd\" failed");
-   }
- 
--  return split("\n", $out);
-+  return split("\n", $output);
- }
- 
- 
-@@ -110,7 +118,10 @@ sub isin
- sub slurp
- {
-   my ($fn) = @_;
--  open(my $fd, "<:encoding($ENCODING)", "$fn") or fatal("cannot read $fn: $!");
-+  open(my $fd, '<', $fn) or fatal("cannot read $fn: $!");
-+  if($^V lt v5.23.4) {
-+    binmode($fd, ":encoding($ENCODING)");
-+  }
-   local $/;
-   return <$fd> // "";
- }
-@@ -132,7 +143,7 @@ sub dispatch
-     my $thr = threads->create(sub
-     {
-       while(defined(my $v = $queue->dequeue_nb())) {
--	&$fun($v);
-+        &$fun($v);
-       }
-     });
-     push(@threads, $thr);
-@@ -187,7 +198,7 @@ sub clamp
- 
- sub decode
- {
--  return Encode::decode($ENCODING, @_);
-+  return Encode::decode($ENCODING, $_[0]);
- }
- 
- 
-@@ -263,7 +274,7 @@ sub cap_clean_desc
- sub cap_from_str
- {
-   my ($title, $desc) = split("\n", shift, 2);
--  return undef if(!$title && !$desc);
-+  return unless $title || $desc;
-   my $ret = [cap_clean_title($title), ($desc? cap_clean_desc($desc): '')];
-   return $ret;
- }
-@@ -322,32 +333,84 @@ sub parse_cap
- 
- sub print_version
- {
--  print("fgallery $VERSION\n");
-+  print("$0 $VERSION\n");
-   exit(0);
- }
- 
-+sub init_noscript
-+{
-+  my ($d) = @_;
-+  fatal("init_noscript: $d not a directory")
-+    unless $d && -d $d;
-+  my $fd;
-+  my $f = "$d/noscript.html";
-+  unless(open($fd, ">:raw", $f)) {
-+    fatal("init_noscript: cannot write file '$f': $!");
-+  }
-+  chmod($mode, $f);
-+  select $fd;
-+  print join "\n",
-+    '<!DOCTYPE html>',
-+    '<html>',
-+    '<head>',
-+    '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',
-+    '  <meta name="viewport" '
-+       . 'content="width=device-width,initial-scale=1,'
-+       . 'minimum-scale=1,minimal-ui" />',
-+    '  <link href="view/noscript.css" rel="stylesheet" type="text/css" />',
-+    '</head>',
-+    '<body>',
-+    '  <section id="photos">',
-+    '';
-+}
-+
-+sub print_noscript
-+# <a href="imgs/DSC00712.jpg"><img src="thumbs/DSC00712.jpg" alt="c1 c2"></a>
-+{
-+  my ($f, $t, $c) = @_;
-+  return unless @_ == 3 && $f && $t;
-+  $c = [] unless $c && ref $c eq 'ARRAY';
-+  my $x = '';
-+  for (@$c) {
-+    $x .= ' ' if $c =~ /\S$/o;
-+    $x .= $_ if defined $_ && /\S/o;
-+  }
-+  my $a = '';
-+  $a = sprintf ' alt="%s"', $x if $x && $x =~ /\S/o;
-+  printf '    <a href="%s"><img src="%s"%s></a>' . "\n", $f, $t, $a;
-+}
-+
-+sub finish_noscript
-+{
-+  print join "\n", '  </section>', '</body>', '</html>', '';
-+  select STDOUT;
-+}
-+
- sub print_help
- {
-   print(STDERR qq{Usage: $0 [options] input-dir output-dir [album name]
--  -h, --help		this help
--  --version		output current fgallery version
--  -v			verbose (show commands as being executed)
--  -s			slim output (no original files and downloads)
--  -i			include individual originals
--  -c methods		caption extraction methods (txt,xmp,exif,cmt or none)
--  -o			do not auto-orient
--  -t			do not time-sort
--  -r			reverse album order
--  -p			do not automatically include full-sized panoramas
--  -d			do not generate a full album download
--  -f			improve thumbnail cutting by performing face detection
--  -j N			set process-level parallelism
--  --max-full WxH	maximum full image size ($maxfull[0]x$maxfull[1])
--  --max-thumb WxH	maximum thumbnail size ($maxthumb[0]x$maxthumb[1])
--  --min-thumb WxH	minimum thumbnail size ($minthumb[0]x$minthumb[1])
--  --no-sRGB		do not remap preview/thumbnail color profiles to sRGB
--  --quality Q		preview image quality (0-100, currently: $imgq)
--  --index url		specify the URL location for the index/back button
-+  -h, --help            this help
-+  --version             output current fgallery version
-+  -v                    verbose (show commands as being executed)
-+  -s                    slim output (no original files and downloads)
-+  -i                    include individual originals
-+  -c methods            caption extraction (txt, xmp, exif, cmt, or none)
-+  -o                    do not auto-orient
-+  -k                    do not modify files, keep original
-+  -t                    do not time-sort
-+  -r                    reverse album order
-+  -p                    do not automatically include full-sized panoramas
-+  -d                    do not generate a full album download
-+  -f                    improve thumbnail cutting by performing face detection
-+  -j N                  set process-level parallelism
-+  -L                    symlink %%FG_VIEWDIR%% (instead of copy)
-+  --max-full WxH        maximum full image size ($maxfull[0]x$maxfull[1])
-+  --max-thumb WxH       maximum thumbnail size ($maxthumb[0]x$maxthumb[1])
-+  --min-thumb WxH       minimum thumbnail size ($minthumb[0]x$minthumb[1])
-+  --no-sRGB             do not remap preview/thumbnail color profiles to sRGB
-+  --quality Q           preview image quality (0-100, currently: $imgq)
-+  --index url           specify the URL location for the index/back button
-+  --noblur              skip blurry backdrop generation (just dark noise)
- });
-   exit(shift);
- }
-@@ -363,17 +426,21 @@ my ($ret, @ARGS) = GetOptions(
-   'i' => sub { $ofile = 1; },
-   'j=i' => sub { $workers = parse_int($_[0], $_[1], 1, undef); },
-   'o' => sub { $orient = 0; },
-+  'k' => sub { $keeporig = 1; },
-   'p' => sub { $fullpano = 0; },
-   'r' => sub { $revsort = 1; },
-   's' => sub { $slim = 1; },
-   't' => sub { $timesort = 0; },
-   'v' => sub { $verbose = 1; },
-+  'L' => sub { $use_symlinks = 1; },
-   'max-full=s' => sub { @maxfull = parse_wh(@_); },
-   'max-thumb=s' => sub { @maxthumb = parse_wh(@_); },
-   'min-thumb=s' => sub { @minthumb = parse_wh(@_); },
-   'no-sRGB' => sub { $sRGB = 0; },
-   'quality=i' => sub { $imgq = parse_int($_[0], $_[1], 0, 100); },
--  'index=s' => sub { $indexUrl = decode($_[1]); });
-+  'index=s' => sub { $indexUrl = decode($_[1]); },
-+  'noblur' => sub { $do_blur = 0; },
-+);
- 
- if(@ARGV < 2 || @ARGV > 3 || !$ret) {
-   print_help(2);
-@@ -383,8 +450,16 @@ my $out = $ARGV[1];
- my $name = (@ARGV < 3? undef: decode($ARGV[2]));
- 
- # check paths
--my $absDir = rel2abs($dir) . '/';
--my $absOut = rel2abs($out) . '/';
-+my $absDir = canonpath(rel2abs($dir)) . '/';
-+my $absOut = canonpath(rel2abs($out)) . '/';
-+
-+sub is_fgallery_dir
-+{
-+    return unless -e catfile($out, 'view');
-+    return unless -e catfile($out, 'index.html');
-+    return unless -e catfile($out, 'data.json');
-+    return 1;
-+}
- 
- if(!-d $dir) {
-   fatal("input directory \"$dir\" does not exist");
-@@ -393,55 +468,37 @@ if(!-d $dir) {
- } elsif(substr($absOut, 0, length($absDir)) eq $absDir) {
-   fatal("output directory is a sub-directory of input, refusing to scan");
- } elsif(!-d $out) {
--  sys('cp', '-L', '-R', "$RealBin/view", $out);
--} elsif(!-f "$out/index.html") {
--  fatal("output directory already exists, but doesn't look like a template copy");
-+  mkdir($out);
-+  unless ($use_symlinks) {
-+      sys('cp', '-L', '-R', '%%FG_VIEWDIR%%', $out);
-+      sys('mv', "$out/view/index.html", $out);
-+  }
-+} elsif(!is_fgallery_dir) {
-+  fatal("Output directory '$absOut' exists but wasn't generated by fgallery");
- }
- 
- # check tools
--if(system("identify -version >/dev/null 2>&1")
--|| system("convert -version >/dev/null 2>&1")) {
--  fatal("cannot run \"identify\" or \"convert\" (check if ImageMagick is installed)");
--}
--if(system("7za -h >/dev/null 2>&1"))
--{
-+fatal 'Missing identify or convert executable (from ImageMagick)'
-+  unless cmd_exists('identify') || cmd_exists('convert');
-+unless(cmd_exists('7za')) {
-   $p7zip = 0;
--  if(system("zip -h >/dev/null 2>&1")) {
--    fatal("cannot run \"zip\" (check if 7za or zip is installed)");
--  }
--}
--if(system("jpegoptim -V >/dev/null 2>&1")) {
--  $jpegoptim = 0;
-+  cmd_exists('zip') || fatal('Missing 7z or zip command');
- }
--if(system("pngcrush -h >/dev/null 2>&1")) {
--  $pngoptim = 0;
--}
--if($facedet && system("facedetect -h >/dev/null 2>&1")) {
--  fatal("cannot run \"facedetect\" (see https://www.thregr.org/~wavexx/software/facedetect/)");
--}
--
--my $tificccmd;
--if($sRGB)
--{
--  if(!system("tificc >/dev/null 2>&1")) {
--    $tificccmd = "tificc";
--  } elsif(!system("tificc2 >/dev/null 2>&1")) {
--    $tificccmd = "tificc2";
--  } else {
--    fatal("cannot run \"tificc\" or \"tificc2\" (check if liblcms2-utils is installed)");
--  }
--}
--
-+$jpegoptim = 0 unless cmd_exists('jpegoptim');
-+$pngoptim = 0 unless cmd_exists('pngcrush');
-+fatal 'Missing facedetect (see http://www.thregr.org/~wavexx/hacks/facedetect/'
-+  if $facedet && !cmd_exists('facedetect');
-+fatal 'Missing tificc executable (from lcms2 library)'
-+  if $sRGB && !cmd_exists('tificc');
-+my $tificccmd = 'tificc';
- my $exiftrancmd;
--if($orient)
-+while($orient)
- {
--  if(!system("exiftran -h >/dev/null 2>&1")) {
--    $exiftrancmd = "exiftran -aip";
--  } elsif(!system("exifautotran >/dev/null 2>&1")) {
--    $exiftrancmd = "exifautotran";
--  } else {
--    fatal("cannot execute exiftran or exifautotran for lossless JPEG autorotation");
--  }
-+  $exiftrancmd = "exiftran -aip" if cmd_exists('exiftran');
-+  last if $exiftrancmd;
-+  $exiftrancmd = "exifautotran" if cmd_exists('exifautotran');
-+  fatal 'Missing exiftran or exifautotran executable for JPEG autorotation'
-+    unless $exiftrancmd;
- }
- 
- # list available files
-@@ -475,6 +532,7 @@ my @backsize = (int($minthumb[0] * 4), i
- for my $path("$out/thumbs", "$out/blurs", "$out/imgs", "$out/files")
- {
-   remove_tree($path);
-+  next if ($path eq "$out/blurs") && ! $do_blur;
-   make_path($path);
- }
- 
-@@ -496,7 +554,7 @@ sub analyze_file
- 
-   my $props = ImageInfo($file, {PrintConv => 0, Sort => 'File'});
-   unless(defined($props) && isin($props->{FileType}, @filetypes)) {
--    return undef;
-+    return;
-   }
- 
-   # sanitize file name
-@@ -535,9 +593,9 @@ sub analyze_file
-     {
-       if($props->{'Comment'})
-       {
--	my $cmt = Encode::decode_utf8($props->{'Comment'});
--	$props->{'caption'} = cap_from_str($cmt);
--	last;
-+        my $cmt = Encode::decode_utf8($props->{'Comment'});
-+        $props->{'caption'} = cap_from_str($cmt);
-+        last;
-       }
-     }
-     elsif($m eq "txt")
-@@ -545,16 +603,16 @@ sub analyze_file
-       my $txt = "$dir$base.txt";
-       if(-f $txt)
-       {
--	$props->{'caption'} = cap_from_str(slurp($txt));
--	last;
-+        $props->{'caption'} = cap_from_str(slurp($txt));
-+        last;
-       }
-     }
-     elsif($m eq "exif")
-     {
-       if($props->{'Title'} || $props->{'Description'})
-       {
--	$props->{'caption'} = cap_from_props($props);
--	last;
-+        $props->{'caption'} = cap_from_props($props);
-+        last;
-       }
-     }
-     elsif($m eq "xmp")
-@@ -562,8 +620,8 @@ sub analyze_file
-       my $xmp = ImageInfo("$file.xmp", {PrintConv => 0, Sort => 'File'});
-       if(defined($xmp) && ($xmp->{'Title'} || $xmp->{'Description'}))
-       {
--	$props->{'caption'} = cap_from_props($xmp);
--	last;
-+        $props->{'caption'} = cap_from_props($xmp);
-+        last;
-       }
-     }
-   }
-@@ -635,22 +693,24 @@ sub process_img
- 
-   # copy source file
-   sys('cp', '-L', $file, $fout);
--  chmod(0600, $fout);
- 
-   # apply lossless transforms
--  if($orient && $props{FileType} eq "JPEG" && ($props{'Orientation'} // 0))
-+  if(!$keeporig)
-   {
--    sys("$exiftrancmd $fout 2>/dev/null");
--    if(($props{'Orientation'} // 0) > 4) {
--      ($props{ImageWidth}, $props{ImageHeight}) = ($props{ImageHeight}, $props{ImageWidth});
-+    if($orient && $props{FileType} eq "JPEG" && ($props{'Orientation'} // 0))
-+    {
-+      sys("$exiftrancmd $fout 2>/dev/null");
-+      if(($props{'Orientation'} // 0) > 4) {
-+        ($props{ImageWidth}, $props{ImageHeight}) = ($props{ImageHeight}, $props{ImageWidth});
-+      }
-+    }
-+    if($jpegoptim && $props{FileType} eq "JPEG") {
-+      sys('jpegoptim', '-q', $fout);
-+    } elsif($pngoptim && $props{FileType} eq "PNG")
-+    {
-+      sys('pngcrush', '-q', $fout, $ftmp);
-+      rename($ftmp, $fout);
-     }
--  }
--  if($jpegoptim && $props{FileType} eq "JPEG") {
--    sys('jpegoptim', '-q', $fout);
--  } elsif($pngoptim && $props{FileType} eq "PNG")
--  {
--    sys('pngcrush', '-q', $fout, $ftmp);
--    rename($ftmp, $fout);
-   }
- 
-   # final file mode
-@@ -658,11 +718,12 @@ sub process_img
-   sys('touch', '-r', $file, $fout);
- 
-   # intermediate sRGB colorspace conversion
--  if(!$sRGB || ($props{ColorSpace} // 65535) == 1 || !defined($props{ProfileID})) {
--    link($fout, $ftmp) or sys('cp', '-L', $fout, $ftmp);
-+  if(!$sRGB || !defined($props{ProfileID}) || ($props{ColorSpace} // 65535) == 1
-+  || ($props{DeviceModel} // '') eq 'sRGB') {
-+    $ftmp = $fout;
-   } else
-   {
--    sys('convert', $fout, '-compress', 'LZW', "tiff:$ftmp");
-+    sys('convert', '-quiet', $fout, '-compress', 'LZW', '-type', 'truecolor', "tiff:$ftmp");
-     sys($tificccmd, '-t0', $ftmp, "$ftmp.tmp");
-     rename("$ftmp.tmp", $ftmp);
-   }
-@@ -674,13 +735,13 @@ sub process_img
- 
-   # generate main image
-   my @sfile = ($props{ImageWidth}, $props{ImageHeight});
--  my @simg = sys('convert', $ftmp,
--		 '-gamma', '0.454545',
--		 '-geometry', "$maxfull[0]x$maxfull[1]>",
--		 '-print', '%w\n%h',
--		 '-gamma', '2.2',
--		 '+profile', '!icc,*',
--		 '-quality', $imgq, "$out/$fimg");
-+  my @simg = sys('convert', '-quiet', $ftmp,
-+                 '-gamma', '0.454545',
-+                 '-geometry', "$maxfull[0]x$maxfull[1]>",
-+                 '-print', '%w\n%h',
-+                 '-gamma', '2.2',
-+                 '+profile', '!icc,*',
-+                 '-quality', $imgq, "$out/$fimg");
- 
-   # face/center detection
-   my @center = (0.5, 0.5);
-@@ -701,7 +762,7 @@ sub process_img
-     $thumbrt = $minthumb[1] / $sfile[1];
-   }
-   my @sthumb = (max(int($sfile[0] * $thumbrt + 0.5), $minthumb[0]),
--		max(int($sfile[1] * $thumbrt + 0.5), $minthumb[1]));
-+                max(int($sfile[1] * $thumbrt + 0.5), $minthumb[1]));
-   my @mthumb = (min($maxthumb[0], $sthumb[0]), min($maxthumb[1], $sthumb[1]));
- 
-   # cropping window
-@@ -710,7 +771,7 @@ sub process_img
-   my $dy = $sthumb[1] - $mthumb[1];
-   my $cy = clamp(0, $dy, int($center[1] * $sthumb[1] - $sthumb[1] / 2 + $dy / 2));
- 
--  sys('convert', $ftmp,
-+  sys('convert', '-quiet', $ftmp,
-       '-gamma', '0.454545',
-       '-resize', "$sthumb[0]x$sthumb[1]!",
-       '-gravity', 'NorthWest',
-@@ -720,17 +781,17 @@ sub process_img
-       '-quality', $imgq, "$out/$fthumb");
- 
-   # blur
--  sys('convert', "$out/$fthumb",
-+  sys('convert', '-quiet', "$out/$fthumb",
-       '-virtual-pixel', 'Mirror',
-       '-gaussian-blur', "0x$backblur",
-       '-scale', "$backsize[0]x$backsize[1]",
--      '-quality', '90', "$out/$fblur");
-+      '-quality', '90', "$out/$fblur") if $do_blur;
- 
-   my %fdata;
-   $fdata{props} = \%props;
-   $fdata{img} = [$fimg, [map { int } @simg]];
-   $fdata{file} = [$ffile, [map { int } @sfile]];
--  $fdata{blur} = $fblur;
-+  $fdata{blur} = $fblur if $do_blur;
- 
-   # do not store duplicate information
-   my @tdata = ($fthumb, [map { int } @mthumb]);
-@@ -747,7 +808,9 @@ sub process_img
-   }
- 
-   # remove temporary files
--  unlink($ftmp);
-+  if($ftmp ne $fout) {
-+    unlink($ftmp);
-+  }
- 
-   return \%fdata;
- }
-@@ -807,7 +870,7 @@ if(!$ofile || $slim)
-       my $omp = ($ox * $oy / 1e6);
- 
-       if($mp >= $omp && $mp > $amp && abs($x / $y) >= $panort) {
--	$keep = 1;
-+        $keep = 1;
-       }
-     }
- 
-@@ -828,9 +891,11 @@ $json{version} = $VERSION;
- $json{name} = $name if($name);
- $json{download} = $fdownload if($fdownload);
- $json{index} = $indexUrl if($indexUrl);
--$json{blur} = \@backsize;
-+$json{blur} = \@backsize if $do_blur;
- $json{thumb} = { min => \@minthumb, max => \@maxthumb };
- 
-+# prepare data.json and print out noscript.html file
-+init_noscript($out);
- foreach my $fdata(@adata)
- {
-   my %data;
-@@ -845,13 +910,22 @@ foreach my $fdata(@adata)
-     }
-   }
-   push(@{$json{data}}, \%data);
-+  print_noscript($data{img}->[0], $data{thumb}->[0], $data{caption});
- }
-+finish_noscript();
- 
- my $fd;
--unless(open($fd, ">:raw", "$out/data.json")) {
--  fatal("cannot write data file: $!");
-+my $dj = "$out/data.json";
-+unless(open($fd, ">:raw", $dj)) {
-+  fatal("cannot write file '$dj': $!");
- }
--print($fd encode_json(\%json));
-+print($fd JSON::PP->new->ascii->pretty->canonical->allow_blessed->encode(\%json));
- close($fd);
- 
--print("completed\n");
-+if ($use_symlinks) {
-+    chdir($absOut) || die "Failed to 'cd $absOut' for symlink creation";
-+    sys('ln', '-s', '%%FG_VIEWDIR%%');
-+    sys('ln', '-s', 'view/index.html');
-+}
-+
-+print("$0 version $VERSION done for $absOut\n");
diff --git a/fgallery/patches/patch-view_index.css b/fgallery/patches/patch-view_index.css
deleted file mode 100644
index 1dc23add46..0000000000
--- a/fgallery/patches/patch-view_index.css
+++ /dev/null
@@ -1,27 +0,0 @@
-$NetBSD$
-
-Force fullscreen on IOS > 1.1 where minimal-ui fails
-Make the (optional) download/date text slightly less conspicuous
-
---- view/index.css.orig	2016-01-11 19:17:15.000000000 +0000
-+++ view/index.css
-@@ -1,10 +1,10 @@
--/* General reset */
- html, body
- {
-   overflow: hidden; /* IE<9 */
-   padding: 0;
-   margin: 0;
-   border: 0;
-+  height: 100.1% /* IOS>7.1 meta viewport minimal-ui to hide menu + bars */
- }
- 
- img
-@@ -110,6 +110,7 @@ img
-   background: #111; /* IE<9 */
-   background: rgba(0, 0, 0, 0.7);
-   font-family: sans-serif;
-+  font-size: 80%;
-   padding: 0.5em;
- }
- 
diff --git a/fgallery/patches/patch-view_index.html b/fgallery/patches/patch-view_index.html
deleted file mode 100644
index 4100c26a83..0000000000
--- a/fgallery/patches/patch-view_index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-$NetBSD$
-
-Move all fgallery files into view subdirectory so we can symlink it on
-webserver to /usr/pkg/share/fgallery/view in DocumentRoot hierarchies
-
---- view/index.html.orig	2016-01-06 19:45:03.000000000 +0000
-+++ view/index.html
-@@ -2,18 +2,16 @@
- <html>
-   <head>
-     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
--    <meta name="viewport" content="width=device-width,initial-scale=1" />
--    <script src="mootools-core-1.4.js" type="text/javascript"></script>
--    <script src="mootools-more-1.4.js" type="text/javascript"></script>
--    <script src="mootools-idle.js" type="text/javascript"></script>
--    <script src="mootools-mooswipe.js" type="text/javascript"></script>
--    <script src="index.js" type="text/javascript"></script>
--    <link href="index.css" rel="stylesheet" type="text/css"/>
--  </head>
--  <body>
-+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,minimal-ui" />
-     <noscript>
--      <h2>Frak! JavaScript required :'(</h2>
-+      <meta http-equiv="refresh" content="0;url=noscript.html" />
-     </noscript>
--    <div id="gallery"></div>
--  </body>
-+    <script src="view/mootools-core-1.4.js" type="text/javascript"></script>
-+    <script src="view/mootools-more-1.4.js" type="text/javascript"></script>
-+    <script src="view/mootools-idle.js" type="text/javascript"></script>
-+    <script src="view/mootools-mooswipe.js" type="text/javascript"></script>
-+    <script src="view/index.js" type="text/javascript"></script>
-+    <link href="view/index.css" rel="stylesheet" type="text/css" />
-+  </head>
-+  <body><div id="gallery"></div></body>
- </html>
diff --git a/fgallery/patches/patch-view_index.js b/fgallery/patches/patch-view_index.js
deleted file mode 100644
index 835f7116f2..0000000000
--- a/fgallery/patches/patch-view_index.js
+++ /dev/null
@@ -1,522 +0,0 @@
-$NetBSD$
-
-Slideshow on/off: click (tap) on center image (or type 's' with keyboard)
-Remove forward and back buttons so slideshow works better
-
-Move all fgallery files into view subdirectory so we can symlink it on
-webserver to /usr/pkg/share/fgallery/view in DocumentRoot hierarchies
-
---- view/index.js.orig	2016-04-25 19:57:44.000000000 +0000
-+++ view/index.js
-@@ -4,10 +4,13 @@
- "use strict";
- 
- var datafile = 'data.json';
-+
-+// dimensions
- var padding = 22;
--var duration = 500;
--var thrdelay = 1500;
--var hidedelay = 3000;
-+var duration = 500;      // for scrolling
-+var thrdelay = 1500;     // throbber delay
-+var hidedelay = 3000;    // header and caption hiding delay
-+var slidedelay = 5000;   // slide show delay
- var prefetch = 1;
- var minupscale = 640 * 480;
- var thumbrt = 16/9 - 5/3;
-@@ -15,6 +18,34 @@ var cutrt = 0.15;
- var capdelay = 5000;
- var rdwdelay = 500;
- 
-+// state variables
-+var emain;      // main object
-+var eback;      // background
-+var enoise;     // additive noise
-+var eflash;     // flashing object
-+var ehdr;       // header
-+var ecap;       // caption
-+var capst;      // caption status
-+var captm;      // caption timeout
-+var elist;      // thumbnail list
-+var fscr;       // thumbnail list scroll fx
-+var econt;      // picture container
-+var ebuff;      // picture buffer
-+var oimg;       // old image
-+var eimg;       // new image
-+var cthumb;     // current thumbnail
-+var mthumb;     // thumbnail measurement cache
-+var eidx;       // current index
-+var tthr;       // throbber timeout
-+var imgs;       // image list
-+var first;      // first image
-+var idle;       // general idle timer
-+var idleMouse;  // idle mouse timer
-+var clayout;    // current layout
-+var csr;        // current scaling ratio
-+var sdir;       // scrolling direction
-+var slideshow;  // slideshow status
-+
- Element.Events.hashchange =
- {
-   onAdd: function()
-@@ -32,41 +63,13 @@ Element.Events.hashchange =
-     };
- 
-     if("onhashchange" in window
--    && (!Browser.ie || Browser.version > 7))
-+        && (!Browser.ie || Browser.version > 7))
-       window.onhashchange = hashchange;
-     else
-       hashchange.periodical(50);
-   }
- };
- 
--// some state variables
--var emain;	// main object
--var eback;	// background
--var enoise;	// additive noise
--var eflash;	// flashing object
--var ehdr;	// header
--var ecap;	// caption
--var capst;      // caption status
--var captm;      // caption timeout
--var elist;	// thumbnail list
--var fscr;	// thumbnail list scroll fx
--var econt;	// picture container
--var ebuff;	// picture buffer
--var eleft;	// go left
--var eright;	// go right
--var oimg;	// old image
--var eimg;	// new image
--var cthumb;	// current thumbnail
--var mthumb;	// thumbnail measurement cache
--var eidx;	// current index
--var tthr;	// throbber timeout
--var imgs;	// image list
--var first;	// first image
--var idle;	// idle timer
--var clayout;	// current layout
--var csr;	// current scaling ratio
--var sdir;	// scrolling direction
--
- function resize()
- {
-   // best layout
-@@ -100,7 +103,7 @@ function resize()
-   {
-     econt.setStyles(
-     {
--      'width': epos.x,
-+      'width': (slideshow == 'on'? msize.x: epos.x),
-       'height': msize.y
-     });
-   }
-@@ -109,7 +112,7 @@ function resize()
-     econt.setStyles(
-     {
-       'width': msize.x,
--      'height': epos.y
-+      'height': (slideshow == 'on'? msize.y: epos.y)
-     });
-   }
- 
-@@ -119,6 +122,7 @@ function resize()
- 
- function onResize()
- {
-+  setSlideshowOff();
-   resize();
-   onScroll();
- }
-@@ -131,9 +135,9 @@ function onLayoutChanged(layout, sr)
-   imgs.data.each(function(x, i)
-   {
-     var crop = x.thumb[1];
--    var size = (x.thumb[2]? x.thumb[2]: crop);
--    var offset = (x.thumb[3]? x.thumb[3]: [0, 0]);
--    var center = (x.center? [x.center[0] / 1000, x.center[1] / 1000]: [0.5, 0.5]);
-+    var size = (x.thumb[2]? x.thumb[2] : crop);
-+    var offset = (x.thumb[3]? x.thumb[3] : [0, 0]);
-+    var center = (x.center? [x.center[0]/1000, x.center[1]/1000] : [0.5, 0.5]);
- 
-     var maxw, maxh;
-     if(layout == 'horizontal')
-@@ -155,7 +159,8 @@ function onLayoutChanged(layout, sr)
-     {
-       'width': Math.round(maxw * sr),
-       'height': Math.round(maxh * sr),
--      'background-size': Math.round(crop[0] * sr) + "px " + Math.round(crop[1] * sr) + "px"
-+      'background-size':
-+         Math.round(crop[0] * sr) + 'px ' + Math.round(crop[1] * sr) + 'px'
-     });
- 
-     // center cropped thumbnail
-@@ -169,7 +174,8 @@ function onLayoutChanged(layout, sr)
-     cy = Math.round(crop[1] / 2 - cy + dy / 2);
-     cy = Math.max(Math.min(0, cy), dy);
- 
--    x.eimg.setStyle('background-position', Math.round(cx * sr) + 'px ' + Math.round(cy * sr) + 'px');
-+    x.eimg.setStyle('background-position',
-+      Math.round(cx * sr) + 'px ' + Math.round(cy * sr) + 'px');
- 
-     // border styles
-     var classes = ['cut-left', 'cut-right', 'cut-top', 'cut-bottom'];
-@@ -244,13 +250,17 @@ function resizeMainImg(img)
- {
-   var contSize = econt.getSize();
-   var listSize = elist.getSize();
--  var thumbWidth = (clayout == 'horizontal'? listSize.x: listSize.y);
-   var data = imgs.data[img.idx].img;
-   var width = data[1][0];
-   var height = data[1][1];
-   var imgrt = width / height;
--  var pad = padding * 2;
--
-+  var thumbWidth = 0;
-+  var pad = 0;
-+  if(slideshow != 'on')
-+  {
-+    thumbWidth = clayout == 'horizontal'? listSize.x: listSize.y;
-+    pad = padding * 2;
-+  }
-   if(imgrt > (contSize.x / contSize.y))
-   {
-     img.width = Math.max(thumbWidth + pad, contSize.x - pad);
-@@ -333,7 +343,6 @@ function onScroll()
-     beg = Math.max(0, beg - psize);
-     end = Math.min(imgs.data.length, end + psize);
-   }
--
-   for(var i = beg; i != end; ++i)
-   {
-     if(!imgs.data[i].thumbLoaded)
-@@ -388,17 +397,20 @@ function hideCap(nodelay)
- function showCap(nodelay)
- {
-   if(capst == 'never') return;
-+  var cap = imgs.data[ecap.eidx]['caption'];
-+  if(!cap || (cap[0].length + cap[1].length == 0))
-+  {
-+    hideCap(true);
-+    return;
-+  }
-   captm = resetTimeout(captm);
-   ecap.get('tween').cancel();
--
-   if(nodelay) ecap.fade('show');
-   else ecap.tween('opacity', 1);
-   ecap.setStyle('display', 'block');
--
-   if(capst != 'always')
-   {
-     // calculate a decent reading time
--    var cap = imgs.data[ecap.eidx]['caption'];
-     var words = cap[0].split(' ').length + cap[1].split(' ').length;
-     var delay = Math.max(capdelay, rdwdelay * words);
-     captm = hideCap.delay(delay);
-@@ -408,7 +420,6 @@ function showCap(nodelay)
- function toggleCap()
- {
-   if(!imgs.captions) return;
--
-   // switch mode
-   if(capst == 'normal')
-     capst = 'never';
-@@ -416,53 +427,83 @@ function toggleCap()
-     capst = 'always';
-   else
-     capst = 'normal';
--
-   // update visual state
-   if(capst == 'never')
-     hideCap(true);
-   else if(ecap.eidx == eidx)
-     showCap(true);
--
-   // update indicator
-   var img = document.id('togglecap', ehdr);
--  img.src = 'cap-' + capst + '.png';
-+  img.src = 'view/cap-' + capst + '.png';
-   showHdr();
- }
- 
-+function setSlideshowOff()
-+{
-+  if(slideshow == 'off') return;
-+  idle.removeEvent('idle', next);
-+  showHdr();
-+  elist.setStyle('display', 'block');
-+  slideshow = 'off';
-+}
-+
-+function setSlideshowOn()
-+{
-+  if(slideshow == 'on') return;
-+  idle.addEvent('idle', next);
-+  hideHdr();
-+  elist.setStyle('display', 'none');
-+  slideshow = 'on';
-+}
-+
-+function toggleSlideshow()
-+{
-+  if(slideshow == 'on')
-+    setSlideshowOff();
-+  else
-+    setSlideshowOn();
-+  resize();
-+}
-+
- function setupHeader()
- {
-   ehdr.empty();
-+  var el;
-   if(imgs.index)
-   {
--    var el = new Element('a', { 'title': 'Back to index', 'href': imgs.index });
--    el.set('html', '<img src=\"back.png\"/>');
-+    el = new Element('a', { 'title': 'Back to index', 'href': imgs.index });
-+    el.set('html', '<img src="view/back.png"/>');
-     ehdr.adopt(el);
-   }
-   if(imgs.data[eidx].file)
-   {
-     var file = imgs.data[eidx].file[0];
--    var el = new Element('a', { 'title': 'Download image', 'href': file });
--    el.set('html', '<img src=\"eye.png\"/>');
-+    el = new Element('a', { 'title': 'Download image', 'href': file });
-+    el.set('html', '<img src="view/eye.png"/>');
-     ehdr.adopt(el);
-   }
-   if(imgs.download)
-   {
--    var el = new Element('a', { 'title': 'Download album', 'href': imgs.download });
--    el.set('html', '<img src=\"download.png\"/>');
-+    el = new Element('a', { 'title': 'Download album', 'href': imgs.download });
-+    el.set('html', '<img src="view/download.png"/>');
-     ehdr.adopt(el);
-   }
-   if(imgs.captions)
-   {
--    var el = new Element('a', { 'title': 'Toggle captions (shortcut: c)' });
-+    el = new Element('a', { 'title': 'Toggle captions' });
-     el.setStyle('cursor', 'pointer');
-     el.addEvent('click', toggleCap);
--    var img = new Element('img', { 'id': 'togglecap', 'src': 'cap-' + capst + '.png' });
-+    var img = new Element('img', { 'id': 'togglecap', 'src': 'view/cap-' + capst + '.png' });
-     img.inject(el);
-     el.inject(ehdr);
-   }
-   if(imgs.data[eidx].date)
--    ehdr.adopt(new Element('span', { 'html': '<b>Date</b>: ' + imgs.data[eidx].date }));
-+    ehdr.adopt(new Element('span', { 'title': 'EXIF timestamp', 'html': imgs.data[eidx].date }));
-+  el = new Element('a', { 'title': 'Overview', 'href': 'view/overview.html' });
-+  el.set('html', '<img src="view/overview.png"/>');
-+  ehdr.adopt(el);
-   ehdr.setStyle('display', (ehdr.children.length? 'block': 'none'));
-+  ehdr.removeEvent('click', toggleSlideshow);
- }
- 
- function onMainReady()
-@@ -513,11 +554,11 @@ function onMainReady()
-     {
-       var diff = umod(eidx - oimg.idx, imgs.data.length);
-       if(diff == 1)
--	sdir = 1;
-+        sdir = 1;
-       else if(diff == imgs.data.length - 1)
--	sdir = -1;
-+        sdir = -1;
-       else
--	sdir = 0;
-+        sdir = 0;
-     }
- 
-     // fade old image
-@@ -544,26 +585,30 @@ function onMainReady()
-   fx.start('opacity', 1);
- 
-   var rp = Math.floor(Math.random() * 100);
--  eback.src = imgs.data[eidx].blur;
--  enoise.setStyle('background-position', rp + 'px ' + rp + 'px');
-+  eback.src = '';
-+  if (imgs.data[eidx].blur)
-+  {
-+    eback.src = imgs.data[eidx].blur;
-+    enoise.setStyle('background-position', rp + 'px ' + rp + 'px');
-+  }
- 
-   tthr = resetTimeout(tthr);
-   idle.start();
--  showHdr();
-+  if(slideshow != 'on') showHdr();
-   centerThumb(d);
- 
-   // prefetch next image
-   if(prefetch && sdir != 0)
-   {
-     var data = imgs.data[umod(eidx + sdir, imgs.data.length)];
--    Asset.images([data.img[0], data.blur]);
-+    Asset.images([data.img[0], data.blur? data.blur :[]]);
-   }
- }
- 
- function showThrobber()
- {
-   var img = new Element('img', { id: 'throbber' });
--  img.src = "throbber.gif";
-+  img.src = "view/throbber.gif";
-   ehdr.empty();
-   img.inject(ehdr);
-   ehdr.setStyle('display', 'block');
-@@ -573,32 +618,17 @@ function showThrobber()
- 
- function hideHdr()
- {
--  if(idle.started)
--    ehdr.tween('opacity', 0);
--}
--
--function hideNav()
--{
-+  ehdr.tween('opacity', 0);
-   emain.addClass('no-cursor');
--  eleft.tween('opacity', 0);
--  eright.tween('opacity', 0);
- }
- 
- function showHdr()
- {
-+  emain.removeClass('no-cursor');
-   ehdr.get('tween').cancel();
-   ehdr.fade('show');
- }
- 
--function showNav()
--{
--  emain.removeClass('no-cursor');
--  eleft.get('tween').cancel();
--  eleft.fade('show');
--  eright.get('tween').cancel();
--  eright.fade('show');
--}
--
- function flash()
- {
-   eflash.setStyle('display', 'block');
-@@ -637,7 +667,7 @@ function load(i)
-   if(i == eidx) return;
- 
-   var data = imgs.data[i];
--  var assets = Asset.images([data.img[0], data.blur],
-+  var assets = Asset.images([data.img[0], data.blur? data.blur: []],
-   {
-     onComplete: function() { if(i == eidx) onMainReady(); }
-   });
-@@ -722,16 +752,6 @@ function initGallery(data)
-   ecap = new Element('div', { id: 'caption' });
-   ecap.inject(econt);
- 
--  eleft = new Element('a', { id: 'left' });
--  eleft.adopt((new Element('div')).adopt(new Element('img', { 'src': 'left.png' })));
--  eleft.set('tween', { link: 'ignore' })
--  eleft.inject(econt);
--
--  eright = new Element('a', { id: 'right' });
--  eright.adopt((new Element('div')).adopt(new Element('img', { 'src': 'right.png' })));
--  eright.set('tween', { link: 'ignore' })
--  eright.inject(econt);
--
-   ehdr = new Element('div', { id: 'header' });
-   ehdr.set('tween', { link: 'ignore' })
-   ehdr.inject(econt);
-@@ -771,10 +791,9 @@ function initGallery(data)
- 
-   // events and navigation shortcuts
-   elist.addEvent('scroll', onScroll);
--  eleft.addEvent('click', prev);
--  eright.addEvent('click', next);
-   window.addEvent('resize', onResize);
-   window.addEvent('hashchange', change);
-+  econt.addEvent('click', toggleSlideshow);
- 
-   window.addEvent('keydown', function(ev)
-   {
-@@ -788,10 +807,6 @@ function initGallery(data)
-       ev.stop();
-       next();
-     }
--    else if(ev.key == 'c')
--    {
--      toggleCap();
--    }
-   });
- 
-   econt.addEvent('mousewheel', function(ev)
-@@ -815,16 +830,21 @@ function initGallery(data)
-   });
- 
-   // setup an idle callback for mouse movement only
--  var idleTmp = new IdleTimer(window, {
-+  idleMouse = new IdleTimer(window, {
-     timeout: hidedelay,
-     events: ['mousemove', 'mousedown', 'mousewheel']
-   }).start();
--  idleTmp.addEvent('idle', hideNav);
--  idleTmp.addEvent('active', function() { showNav(); showHdr(); });
-+  idleMouse.addEvent('active', showHdr);
-+  idleMouse.addEvent('idle', hideHdr);
- 
-   // general idle callback
--  idle = new IdleTimer(window, { timeout: hidedelay }).start();
--  idle.addEvent('idle', hideHdr);
-+  idle = new IdleTimer(window, { timeout: slidedelay }).start();
-+
-+  // start slide show immediately if specified in data.json
-+  if(imgs.startslideshow == 'yes')
-+    setSlideshowOn();
-+  else
-+    setSlideshowOff();
- 
-   // prepare first image
-   sdir = 1;
-@@ -834,7 +854,10 @@ function initGallery(data)
-   loadThumb(first);
-   centerThumb(0);
- 
-+  // set visibility
-   emain.setStyle('visibility', 'visible');
-+  if(slideshow == 'on')
-+    elist.setStyle('display', 'none');
- }
- 
- function initFailure()
-@@ -860,7 +883,7 @@ function init()
-     onRequest: function()
-     {
-       if(this.xhr.overrideMimeType)
--	this.xhr.overrideMimeType('application/json');
-+        this.xhr.overrideMimeType('application/json');
-     },
-     isSuccess: function()
-     {
-@@ -871,12 +894,12 @@ function init()
-   }).get();
- 
-   // preload some resources
--  Asset.images(['throbber.gif',
--		'left.png', 'right.png',
--		'eye.png', 'download.png', 'back.png',
--		'cap-normal.png', 'cap-always.png', 'cap-never.png',
--		'cut-left.png', 'cut-right.png',
--		'cut-top.png', 'cut-mov.png']);
-+  Asset.images([
-+    'view/throbber.gif', 'view/overview.png', 'view/eye.png',
-+    'view/download.png', 'view/back.png', 'view/cap-normal.png',
-+    'view/cap-always.png', 'view/cap-never.png', 'view/cut-left.png',
-+    'view/cut-right.png', 'view/cut-top.png', 'view/cut-mov.png'
-+   ]);
- }
- 
- window.addEvent('domready', init);


Home | Main Index | Thread Index | Old Index