From 6b7da088e0640521fa304661d916da88399fc516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Schoentgen?= Date: Tue, 3 Oct 2023 23:14:42 +0200 Subject: [PATCH] refactor!: Rewrite from PHP to Python --- .gitignore | 18 +- .htaccess | 36 -- LICENSE | 2 +- README.md | 78 ++- TODO | 7 +- assets/css/main.css | 109 ---- assets/css/main.min.css | 1 - assets/icon/icon-ipad.png | Bin 3192 -> 0 bytes assets/icon/icon-iphone.png | Bin 2680 -> 0 bytes assets/icon/icon-iphone4.png | Bin 5551 -> 0 bytes assets/js/galinear.js | 711 --------------------- assets/js/galinear.min.js | 1 - checks.sh | 6 + host/__init__.py | 0 host/__main__.py | 33 + host/app.py | 124 ++++ host/assets/css/app.css | 191 ++++++ favicon.png => host/assets/img/favicon.png | Bin {assets => host/assets}/img/loading.gif | Bin {assets => host/assets}/img/mask.png | Bin host/assets/img/nsfw.png | Bin 0 -> 2709 bytes host/assets/js/galinear.js | 173 +++++ host/assets/js/update.js | 45 ++ host/assets/robots.txt | 3 + host/config.py | 18 + host/constants.py | 38 ++ host/functions.py | 433 +++++++++++++ host/helpers.py | 214 +++++++ host/types.py | 17 + host/version.py | 6 + host/views/footer.tpl | 2 + host/views/header.tpl | 22 + host/views/page.tpl | 93 +++ host/views/update.tpl | 34 + host/views/zoom.tpl | 68 ++ inc/Config.php | 119 ---- inc/Functions.php | 417 ------------ inc/Rss.php | 159 ----- inc/Solver.php | 428 ------------- inc/Update.php | 232 ------- index.php | 88 --- maj.php | 214 ------- pyproject.toml | 41 ++ requirements-dev.txt | 15 + server.py | 11 + tests/__init__.py | 0 tests/constants.py | 12 + tests/data/0_kVjw_SjIx2y8.jpg | Bin 0 -> 706240 bytes tests/data/8kZBBg_1471877768-20160824.png | Bin 0 -> 103600 bytes tests/data/ZKwOVg_vYAvIM0_d.jpg | Bin 0 -> 503 bytes tests/test_app.py | 29 + tests/test_fn_images.py | 68 ++ tests/test_update.py | 130 ++++ 53 files changed, 1893 insertions(+), 2553 deletions(-) delete mode 100755 .htaccess delete mode 100755 assets/css/main.css delete mode 100755 assets/css/main.min.css delete mode 100755 assets/icon/icon-ipad.png delete mode 100755 assets/icon/icon-iphone.png delete mode 100755 assets/icon/icon-iphone4.png delete mode 100644 assets/js/galinear.js delete mode 100644 assets/js/galinear.min.js create mode 100755 checks.sh create mode 100644 host/__init__.py create mode 100644 host/__main__.py create mode 100644 host/app.py create mode 100755 host/assets/css/app.css rename favicon.png => host/assets/img/favicon.png (100%) rename {assets => host/assets}/img/loading.gif (100%) rename {assets => host/assets}/img/mask.png (100%) create mode 100644 host/assets/img/nsfw.png create mode 100644 host/assets/js/galinear.js create mode 100644 host/assets/js/update.js create mode 100644 host/assets/robots.txt create mode 100644 host/config.py create mode 100644 host/constants.py create mode 100644 host/functions.py create mode 100644 host/helpers.py create mode 100644 host/types.py create mode 100644 host/version.py create mode 100644 host/views/footer.tpl create mode 100644 host/views/header.tpl create mode 100644 host/views/page.tpl create mode 100644 host/views/update.tpl create mode 100644 host/views/zoom.tpl delete mode 100644 inc/Config.php delete mode 100644 inc/Functions.php delete mode 100644 inc/Rss.php delete mode 100644 inc/Solver.php delete mode 100644 inc/Update.php delete mode 100755 index.php delete mode 100644 maj.php create mode 100644 pyproject.toml create mode 100644 requirements-dev.txt create mode 100644 server.py create mode 100644 tests/__init__.py create mode 100644 tests/constants.py create mode 100644 tests/data/0_kVjw_SjIx2y8.jpg create mode 100644 tests/data/8kZBBg_1471877768-20160824.png create mode 100644 tests/data/ZKwOVg_vYAvIM0_d.jpg create mode 100644 tests/test_app.py create mode 100644 tests/test_fn_images.py create mode 100644 tests/test_update.py diff --git a/.gitignore b/.gitignore index 84f45e3..68debc7 100755 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,12 @@ -images/ -geany_run_script.sh -.httmp -.shaarli.opml -images.json +# Files +.coverage + +# Folders data/ -sync.sh -test.php +.mypy_cache/ +__pycache__/ +.pytest_cache/ +venv/ + +# Keep those +!tests/data/ diff --git a/.htaccess b/.htaccess deleted file mode 100755 index fb2b3ee..0000000 --- a/.htaccess +++ /dev/null @@ -1,36 +0,0 @@ -SetEnv PHP_VER 5_4 - -# Compression de certains types de fichiers -AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript - -# Mise en cache - - ExpiresActive On - ExpiresByType text/css "access plus 10 years" - ExpiresByType text/js "access plus 10 years" - ExpiresByType text/javascript "access plus 10 years" - ExpiresByType application/x-javascript "access plus 10 years" - ExpiresByType image/png "access plus 10 years" - ExpiresByType image/jpg "access plus 10 years" - ExpiresByType image/jpeg "access plus 10 years" - #ExpiresDefault "access plus 10 years" - - - - Order allow,deny - Deny from all - Satisfy all - - - - Order allow,deny - Deny from all - Satisfy all - - -FileETag MTime Size - - -ErrorDocument 401 /index.php?error -ErrorDocument 403 /index.php?error -ErrorDocument 404 /index.php?error diff --git a/LICENSE b/LICENSE index 41cb9c4..0ea52dc 100755 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013 +Copyright (c) 2013-2023 Mickaël 'Tiger-222' Schoentgen 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 diff --git a/README.md b/README.md index fc3c02c..4410a5b 100755 --- a/README.md +++ b/README.md @@ -1,12 +1,52 @@ -ShaarlImages -=== +# Shaarlimages Shaarlimages, la galerie des shaarlis ! -Démo : [shaarlimages.net](http://shaarlimages.net) +URL : [shaarlimages.net](https://shaarlimages.net) -Informations ---- +## Production + +Copy all files from the `host` folder to the [PythonAnywhere](https://www.pythonanywhere.com) hosting account. + +Details: +- Python version: `3.10` +- Force HTTPS: enabled +- Web app type: Bottle + +Check [Batteries Included](https://www.pythonanywhere.com/batteries_included/) to know what modules are already provided. + +## Development + +### Installation + +```console +$ python3.10 -m venv venv +$ . venv/bin/activate +$ python -m pip install -U pip +$ python -m pip install -r requirements-dev.txt +``` + +### Quality + +```console +$ ./checks.sh +``` + +### Tests + +```console +$ python -m pytest --doctest-modules host tests +``` + +### Local Server + +```console +$ python server.py +``` + +-- + +### Informations Suite à [cette requête](http://sebsauvage.net/paste/?b1176a415f9bbe17#CIT+sEj+1tsMW8IAWBipoVJiNBcgLt81Gm79rxuiVnU). Cette galerie s'inspire honteusement de [celle-ci](http://www.chromatic.io/FQrLQsb), et repose @@ -14,34 +54,24 @@ sur le principe de [partition linéaire](http://www.crispymtn.com/stories/the-al Le code javascript a été largement inspiré par celui de [jakobholmelund / fitpicsjs](https://github.com/jakobholmelund/fitpicsjs), amélioré et porté en javascript natif (plus besoin de grosses bibliothèques telles que jQuery, Prototype, ...). - -Ajouter un shaarli ---- +### Ajouter un shaarli J'utilise la liste d'export de [shaarli.fr](http://shaarli.fr/opml?mod=opml), donc il vous suffira d'être ajouté sur ce site pour que vous soyez pris en compte. -Améliorations possibles ---- +### Améliorations possibles Dans l'immédiat, la couleur de fond pour chaque image est calculée (couleur moyenne dominante) et une image est ajoutée par dessus pour le grain. Bien que ça rende pas trop mal, il faudrait revoir le mécanisme pour se rapprocher un peu plus de [cette galerie](http://www.chromatic.io/FQrLQsb). Pour le reste, libre à vous de forker, bidouiller et proposer des patches ;) -Pré-requis ---- - -Pour auto-héberger une galerie, en l'état, il vous faudra PHP, la bibliothèque GD et cURL. - -Détails techniques ---- +### Détails techniques Reportez-vous au dépôt [Galinear](https://github.com/BoboTiG/galinear) pour plus d'informations. Il s'agit du système de la galerie seul, plus facile pour bidouiller. -Remerciements ---- +### Remerciements -Séb pour avoir mis au point [shaarli ;](http://sebsauvage.net/wiki/doku.php?id=php:shaarli) -Bronco pour l'inspiration ([feed2array](http://www.warriordudimanche.net/article178/feed2array-obtenir-un-flux-rss-atom-sous-forme-de-tableau)) ; -Jakob Holmelund pour la [base javascript](https://github.com/jakobholmelund/fitpicsjs) de la partition linéaire ; -Chromatic.io pour l'[inspiration](http://www.chromatic.io/FQrLQsb) ; -Et tous les contributeurs et testeurs de l'ombre :) +- Séb pour avoir mis au point [shaarli ;](http://sebsauvage.net/wiki/doku.php?id=php:shaarli) +- Bronco pour l'inspiration ([feed2array](http://www.warriordudimanche.net/article178/feed2array-obtenir-un-flux-rss-atom-sous-forme-de-tableau)) ; +- Jakob Holmelund pour la [base javascript](https://github.com/jakobholmelund/fitpicsjs) de la partition linéaire ; +- Chromatic.io pour l'[inspiration](http://www.chromatic.io/FQrLQsb) ; +- Et tous les contributeurs et testeurs de l'ombre :) diff --git a/TODO b/TODO index 67fa84f..36af18c 100644 --- a/TODO +++ b/TODO @@ -1,6 +1 @@ - -[ ] Mise en cache des recherches -[ ] Pagination en JS (pour ne plus avoir à recharger images.json) -[ ] Ne charger les images que lorsqu'elles sont dans la zone visible de l'écran - -D'autres idées d'amélioration ? +- [ ] Mise en cache des recherches diff --git a/assets/css/main.css b/assets/css/main.css deleted file mode 100755 index 5097046..0000000 --- a/assets/css/main.css +++ /dev/null @@ -1,109 +0,0 @@ -body { background-color: #eee; margin: 8px } -a:hover, a:focus, a:active { outline: 1px dashed #222 } - -#image-container a { float: left; margin-bottom: 4px } -#image-container img { - display: inline-block; - vertical-align: middle; - opacity: 0; - transition: opacity .5s linear, height .5s step-start -} -#image-container .show-off { opacity: 1; transition-timing-function: linear, step-end } -#image-container .nsfw { background: transparent url(data:image/png;base64,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) no-repeat top right } -#image-container .nsfw img { opacity: .05 } - - -footer { - clear: both; - margin: -8px; - color: #eee; - border-top: 1px solid #eee; - padding: 0; - font-size: .9em; - height: 25px; - line-height: 25px; - text-align: center; - background: #45484d linear-gradient(to bottom, #45484d 0%,#000222 100%); - text-shadow: 1px 1px 1px #000 -} -footer a { color: #999; text-decoration: none } -footer a:hover { color: orange } - -.prefs { - float: right; - margin-bottom: -30px; - display: inline; - font-size: 1.2em -} -.prefs .enabled { color: limegreen } -.prefs .disabled { color: orange } -.prefs a { margin-right: 10px } -.prefs a:hover { - cursor: pointer; - color: #222; - text-shadow: 0 0 5px #eee; - transition: .5s -} - - -/* - * One image to show - */ -.image-container-alone img { - margin: auto; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - max-width: 100%; - max-height: 100%; - box-shadow: 1px 0 0 0 rgba(255,255,255,0.1) inset,0 0 1px rgba(0,0,0,0.5),0 0 20px rgba(0,0,0,0.5) -} - - -/* - * Previous/next - */ -.image-container-previous, .image-container-next { - position: absolute; - top: 50%; - display: inline-block; - color: #eee; - padding: 5px; - font-size: 3em; - opacity: .1; - transition: .5s -} -.image-container-previous:hover, .image-container-next:hover { - opacity: 1; - transition: .5s -} -.image-container-next { right: 0; margin-right: 10px } - - -/* - * Toolbar - */ -.image-container-alone-toolbar { - width: 126px; - border: 1px solid #222; - background-color: #eee; - border-radius: 10px; - box-shadow: 0px 0px 20px #111; - opacity: .1; - transition: 1s -} -.image-container-alone-toolbar:hover { opacity: .5; transition: 1s } -.image-container-alone-toolbar a { - outline: 0; - display: inline-block; - width: 40px; - height: 40px; - vertical-align: middle; - opacity: .5 -} -.image-container-alone-toolbar a:hover { opacity: 1; transition: .5s } -.image-container-alone-toolbar .home { background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAJ1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdEvm1AAAADHRSTlN1l0RCipGEg4J9fAC0sU2RAAAAhklEQVR42tXRSwrAIBADUPvXdu5/3pYUiZAshEJps4gj8zZiOjrzCE5jH9wjMoa4QugcpEB1kArVZZRAdfXYPaQrGwY0oXG3QXtYqqMshNZREhqHrJSE6lQmdV4mdSoJE53K0kA6Jxu40KkcCJGwweoNyNX3YXTDHzwGt/f+enZuMdDnV/AEG1FFwGoYtU4AAAAASUVORK5CYII=) no-repeat center center } -.image-container-alone-toolbar .permalink { background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAwFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOy8QAAAAP3RSTlN2qBL8DhH9a71M1+gIWummQxjussVb99k6bAUoCmTRO+LxDAIPzgYDFkomYgdCsfYE4Z0thCAzjByVfFNzAQB/x9zgAAAAv0lEQVR42s3UxQ7CYBCF0UIguLu7e6FCZeb93woNFP7K3ZDwrU8ym5uRCOy/oSpBUAnxEYBhjVkOPp22+JoeBEeZwc2dKADma3wv4g+PcX7UID+oy/ws1fSB4xO/MskTTmP8bmJ7QdvMsqM6ecBel51tyR22SvzZ0hUWzvzVmVzg0GChuQj3naroDBJgos9iu3bQcJ9wRRg8zEC4IAyWCYQqCHMEQgWEGoEwCkKLMFhcg7BCGEzaINz8zSP9FbwA3LN85kf/0jUAAAAASUVORK5CYII=) no-repeat center center } -.image-container-alone-toolbar .source { background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAABp1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABk7Y+rAAAAjHRSTlOOHkXnCGzQ9GZezRNPjTyl2Ks9WapqTRigTJJtH54O14l4x1zmsmWMwuDkSOlk4ZxHvIdKu/176IBiCjRQ3QKCtyytDxr5IqZ9TsO4vcmbQzE6DRUzafMdYxQmj9OEKxD7fBGZLyX2Fq5J7BIFse2dG4Ec4/73kCQtzAyLINtC/AcX3sUoWwRz8QMBAHgpTsMAAAGsSURBVHja7ZRXU8JAFEbtvffee29j7733SnNUmhXUEQvooCAhufuj3bsbIIAyPvrg93Tutyc7O5NsouCX+Rcxd/l5WV7jx7Wgiyj2NhF/Kms9P4mP3SQodV3fiuIiCUvnS7h4uszXUpL0qae6ZDOfOgyh4uw9W8h0gxxTOldHgsW7ASxvcigaXIkk4eQYQKVh5pNS3P7Aqu8Y2UlY0gCuShAeHhXiNDbrIrCccTOXooDw6vSLQzifScCTQXjeKZ8g2HziDk5m9BoarQDSBRercN2GpJdFO+4/jLWLEIsbbrnYgo10TWmFixK2U4C5Qaz/JDzsLJdIJiZ6+IEwXqKMiNUVdg4mwgLFSfZ4jdK7wIadYwy46Ma6B1tBKaqxWUIalUWYwEmgUKEUy2jxhuACnyiu4VxN6TzgHdKxlZHDL4J1H4tyJ0Cx0itl9Kb8KJ5YpVEBHGnpe4+NigZ4z2blZ/BntklYtJcgJy6eyF6wCPP3fKGooJBuG6Pm09xW+FV4sZCwPB98e7nO20K8vfEfrqunvTlgGftnIv0AdgdX6ct9eLZviH/2J/UXxS/jWTvHcUASSgAAAABJRU5ErkJggg==) no-repeat center center } diff --git a/assets/css/main.min.css b/assets/css/main.min.css deleted file mode 100755 index 09bf0c5..0000000 --- a/assets/css/main.min.css +++ /dev/null @@ -1 +0,0 @@ -body{background-color:#eee;margin:8px}a:active,a:focus,a:hover{outline:1px dashed #222}#image-container a{float:left;margin-bottom:4px}#image-container img{display:inline-block;vertical-align:middle;opacity:0;transition:opacity .5s linear,height .5s step-start}#image-container .show-off{opacity:1;transition-timing-function:linear,step-end}#image-container .nsfw{background:transparent url(data:image/png;base64,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) no-repeat top right}#image-container .nsfw img{opacity:.05}footer{clear:both;margin:-8px;color:#eee;border-top:1px solid #eee;padding:0;font-size:.9em;height:25px;line-height:25px;text-align:center;background:#45484d linear-gradient(to bottom,#45484d 0,#000222 100%);text-shadow:1px 1px 1px #000}footer a{color:#999;text-decoration:none}footer a:hover{color:orange}.prefs{float:right;margin-bottom:-30px;display:inline;font-size:1.2em}.prefs .enabled{color:#32cd32}.prefs .disabled{color:orange}.prefs a{margin-right:10px}.prefs a:hover{cursor:pointer;color:#222;text-shadow:0 0 5px #eee;transition:.5s}.image-container-alone img{margin:auto;position:absolute;top:0;left:0;bottom:0;right:0;max-width:100%;max-height:100%;box-shadow:1px 0 0 0 rgba(255,255,255,.1) inset,0 0 1px rgba(0,0,0,.5),0 0 20px rgba(0,0,0,.5)}.image-container-next,.image-container-previous{position:absolute;top:50%;display:inline-block;color:#eee;padding:5px;font-size:3em;opacity:.1;transition:.5s}.image-container-next:hover,.image-container-previous:hover{opacity:1;transition:.5s}.image-container-next{right:0;margin-right:10px}.image-container-alone-toolbar{width:126px;border:1px solid #222;background-color:#eee;border-radius:10px;box-shadow:0 0 20px #111;opacity:.1;transition:1s}.image-container-alone-toolbar:hover{opacity:.5;transition:1s}.image-container-alone-toolbar a{outline:0;display:inline-block;width:40px;height:40px;vertical-align:middle;opacity:.5}.image-container-alone-toolbar a:hover{opacity:1;transition:.5s}.image-container-alone-toolbar .home{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAJ1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdEvm1AAAADHRSTlN1l0RCipGEg4J9fAC0sU2RAAAAhklEQVR42tXRSwrAIBADUPvXdu5/3pYUiZAshEJps4gj8zZiOjrzCE5jH9wjMoa4QugcpEB1kArVZZRAdfXYPaQrGwY0oXG3QXtYqqMshNZREhqHrJSE6lQmdV4mdSoJE53K0kA6Jxu40KkcCJGwweoNyNX3YXTDHzwGt/f+enZuMdDnV/AEG1FFwGoYtU4AAAAASUVORK5CYII=) no-repeat center center}.image-container-alone-toolbar .permalink{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAwFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOy8QAAAAP3RSTlN2qBL8DhH9a71M1+gIWummQxjussVb99k6bAUoCmTRO+LxDAIPzgYDFkomYgdCsfYE4Z0thCAzjByVfFNzAQB/x9zgAAAAv0lEQVR42s3UxQ7CYBCF0UIguLu7e6FCZeb93woNFP7K3ZDwrU8ym5uRCOy/oSpBUAnxEYBhjVkOPp22+JoeBEeZwc2dKADma3wv4g+PcX7UID+oy/ws1fSB4xO/MskTTmP8bmJ7QdvMsqM6ecBel51tyR22SvzZ0hUWzvzVmVzg0GChuQj3naroDBJgos9iu3bQcJ9wRRg8zEC4IAyWCYQqCHMEQgWEGoEwCkKLMFhcg7BCGEzaINz8zSP9FbwA3LN85kf/0jUAAAAASUVORK5CYII=) no-repeat center center}.image-container-alone-toolbar .source{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAABp1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABk7Y+rAAAAjHRSTlOOHkXnCGzQ9GZezRNPjTyl2Ks9WapqTRigTJJtH54O14l4x1zmsmWMwuDkSOlk4ZxHvIdKu/176IBiCjRQ3QKCtyytDxr5IqZ9TsO4vcmbQzE6DRUzafMdYxQmj9OEKxD7fBGZLyX2Fq5J7BIFse2dG4Ec4/73kCQtzAyLINtC/AcX3sUoWwRz8QMBAHgpTsMAAAGsSURBVHja7ZRXU8JAFEbtvffee29j7733SnNUmhXUEQvooCAhufuj3bsbIIAyPvrg93Tutyc7O5NsouCX+Rcxd/l5WV7jx7Wgiyj2NhF/Kms9P4mP3SQodV3fiuIiCUvnS7h4uszXUpL0qae6ZDOfOgyh4uw9W8h0gxxTOldHgsW7ASxvcigaXIkk4eQYQKVh5pNS3P7Aqu8Y2UlY0gCuShAeHhXiNDbrIrCccTOXooDw6vSLQzifScCTQXjeKZ8g2HziDk5m9BoarQDSBRercN2GpJdFO+4/jLWLEIsbbrnYgo10TWmFixK2U4C5Qaz/JDzsLJdIJiZ6+IEwXqKMiNUVdg4mwgLFSfZ4jdK7wIadYwy46Ma6B1tBKaqxWUIalUWYwEmgUKEUy2jxhuACnyiu4VxN6TzgHdKxlZHDL4J1H4tyJ0Cx0itl9Kb8KJ5YpVEBHGnpe4+NigZ4z2blZ/BntklYtJcgJy6eyF6wCPP3fKGooJBuG6Pm09xW+FV4sZCwPB98e7nO20K8vfEfrqunvTlgGftnIv0AdgdX6ct9eLZviH/2J/UXxS/jWTvHcUASSgAAAABJRU5ErkJggg==) no-repeat center center} diff --git a/assets/icon/icon-ipad.png b/assets/icon/icon-ipad.png deleted file mode 100755 index bfdc55f89cb93d08248e155fe95f9ad0f95568c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3192 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 diff --git a/assets/js/galinear.js b/assets/js/galinear.js deleted file mode 100644 index 0e2c9ee..0000000 --- a/assets/js/galinear.js +++ /dev/null @@ -1,711 +0,0 @@ -/* - * - * Galinear (gallery using linear partition algorithm). - * - * Tiger-222 https://github.com/BoboTiG/galinear - * - * - * Changelog: - * - * 0.5 - better image transition - * - remove from
- * - remove obsolete CSS code - * - add outline on images - * - use of