Fix: CSS issues, keyboard shortcuts, group galleries
This commit is contained in:
parent
ebfbd3b6fc
commit
ac3d805175
11 changed files with 300 additions and 95 deletions
|
@ -38,8 +38,8 @@ Just use the galleria directive like this:
|
||||||
:align: Align to 'right', 'left' or 'center' (default to center) - node level
|
:align: Align to 'right', 'left' or 'center' (default to center) - node level
|
||||||
:hide_title: Flag - hide title under image (not in dialog) - image level
|
:hide_title: Flag - hide title under image (not in dialog) - image level
|
||||||
:hide_alt: Flag - hide alternative text under image - image level
|
:hide_alt: Flag - hide alternative text under image - image level
|
||||||
:transition: (optional, once) Transition for gallery - image level
|
:no_transition: Flag - avoid transition effect - node level
|
||||||
:class: (optional, once) HTML class for gallery - node level
|
:class: (optional) HTML class for gallery - node level
|
||||||
|
|
||||||
Image level options are same for all images defined by
|
Image level options are same for all images defined by
|
||||||
the directive. If you need separated descriptions and
|
the directive. If you need separated descriptions and
|
||||||
|
|
5
babel.cfg
Normal file
5
babel.cfg
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[python: **.py]
|
||||||
|
encoding = utf-8
|
||||||
|
|
||||||
|
[javascript: **.js]
|
||||||
|
[javascript: **.mjs]
|
21
setup.cfg
21
setup.cfg
|
@ -5,3 +5,24 @@ license-files =
|
||||||
LICENSE-de
|
LICENSE-de
|
||||||
LICENSE-fr
|
LICENSE-fr
|
||||||
LICENSE-nl
|
LICENSE-nl
|
||||||
|
|
||||||
|
|
||||||
|
[extract_messages]
|
||||||
|
mapping_file = babel.cfg
|
||||||
|
output_file = sphinx_galleria/locale/sphinx.pot
|
||||||
|
keywords = _ l_ lazy_gettext gettext ngettext
|
||||||
|
add_comments = Translators:
|
||||||
|
|
||||||
|
[init_catalog]
|
||||||
|
domain = sphinx
|
||||||
|
input_file = sphinx_galleria/locale/sphinx.pot
|
||||||
|
output_dir = sphinx_galleria/locale/
|
||||||
|
|
||||||
|
[update_catalog]
|
||||||
|
domain = sphinx
|
||||||
|
input_file = sphinx_galleria/locale/sphinx.pot
|
||||||
|
output_dir = sphinx_galleria/locale/
|
||||||
|
|
||||||
|
[compile_catalog]
|
||||||
|
domain = sphinx
|
||||||
|
directory = sphinx_galleria/locale/
|
||||||
|
|
30
setup.py
30
setup.py
|
@ -1,4 +1,28 @@
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
|
import distutils
|
||||||
|
from babel.messages import frontend as babel
|
||||||
|
|
||||||
|
|
||||||
|
class TranslateCommand(distutils.cmd.Command):
|
||||||
|
description = "Translation"
|
||||||
|
|
||||||
|
user_options = []
|
||||||
|
sub_commands = [
|
||||||
|
('extract_messages', None),
|
||||||
|
('update_catalog', None),
|
||||||
|
('compile_catalog', None),
|
||||||
|
]
|
||||||
|
|
||||||
|
def initialize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def finalize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
for cmd_name in self.get_sub_commands():
|
||||||
|
self.run_command(cmd_name)
|
||||||
|
|
||||||
|
|
||||||
with open("README.rst", "r") as fh:
|
with open("README.rst", "r") as fh:
|
||||||
long_description = fh.read()
|
long_description = fh.read()
|
||||||
|
@ -14,6 +38,12 @@ setup(
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
long_description_content_type="text/x-rst",
|
long_description_content_type="text/x-rst",
|
||||||
packages=["sphinx_galleria"],
|
packages=["sphinx_galleria"],
|
||||||
|
cmdclass={
|
||||||
|
'compile_catalog': babel.compile_catalog,
|
||||||
|
'extract_messages': babel.extract_messages,
|
||||||
|
'init_catalog': babel.init_catalog,
|
||||||
|
'update_catalog': babel.update_catalog
|
||||||
|
},
|
||||||
package_data={
|
package_data={
|
||||||
"sphinx_galleria": [
|
"sphinx_galleria": [
|
||||||
"*.py",
|
"*.py",
|
||||||
|
|
|
@ -32,10 +32,14 @@ def copy_images_files(app: Sphinx, env: BuildEnvironment) -> None:
|
||||||
relpath = os.path.relpath(thumb, env.srcdir)
|
relpath = os.path.relpath(thumb, env.srcdir)
|
||||||
dest = os.path.join(app.outdir, relpath)
|
dest = os.path.join(app.outdir, relpath)
|
||||||
basename, ext = os.path.splitext(dest)
|
basename, ext = os.path.splitext(dest)
|
||||||
|
|
||||||
|
if ext.lower() in ('.svg', '.svgz'):
|
||||||
|
continue
|
||||||
|
|
||||||
thumbsize = basename.split('-')[-1].split('x')
|
thumbsize = basename.split('-')[-1].split('x')
|
||||||
thumbsize = [int(size) for size in thumbsize]
|
thumbsize = [int(size) for size in thumbsize]
|
||||||
original = '.'.join(basename.split('.')[:-1]) + ext
|
original = '.'.join(basename.split('.')[:-1]) + ext
|
||||||
dest = basename + '.jpg'
|
dest = basename + '.png'
|
||||||
ensuredir(os.path.dirname(dest))
|
ensuredir(os.path.dirname(dest))
|
||||||
|
|
||||||
with Image.open(original) as im:
|
with Image.open(original) as im:
|
||||||
|
@ -60,7 +64,7 @@ def copy_images_files(app: Sphinx, env: BuildEnvironment) -> None:
|
||||||
(im.size[1]+thumbsize[0]*im.size[1]/thumbsize[0])//2,
|
(im.size[1]+thumbsize[0]*im.size[1]/thumbsize[0])//2,
|
||||||
))
|
))
|
||||||
|
|
||||||
out.save(dest, "JPEG")
|
out.save(dest, "PNG")
|
||||||
|
|
||||||
|
|
||||||
def install_static_files(app: Sphinx, env: BuildEnvironment) -> None:
|
def install_static_files(app: Sphinx, env: BuildEnvironment) -> None:
|
||||||
|
@ -93,12 +97,6 @@ def install_static_files(app: Sphinx, env: BuildEnvironment) -> None:
|
||||||
app.add_css_file(os.path.join('sphinxgalleria', static))
|
app.add_css_file(os.path.join('sphinxgalleria', static))
|
||||||
|
|
||||||
|
|
||||||
def init_directive(app: Sphinx, config) -> None:
|
|
||||||
if 'galleria_override_image' in config and \
|
|
||||||
config['galleria_override_image']:
|
|
||||||
app.add_directive('image', directive.GalleriaDirective)
|
|
||||||
|
|
||||||
|
|
||||||
def setup(app: Sphinx) -> Dict[str, Any]:
|
def setup(app: Sphinx) -> Dict[str, Any]:
|
||||||
app.add_node(
|
app.add_node(
|
||||||
directive.galleria,
|
directive.galleria,
|
||||||
|
@ -112,8 +110,6 @@ def setup(app: Sphinx) -> Dict[str, Any]:
|
||||||
)
|
)
|
||||||
app.add_directive('galleria', directive.GalleriaDirective)
|
app.add_directive('galleria', directive.GalleriaDirective)
|
||||||
app.add_env_collector(collector.GalleriaCollector)
|
app.add_env_collector(collector.GalleriaCollector)
|
||||||
app.add_config_value('galleria_override_image', False, 'boolean')
|
|
||||||
app.connect('env-updated', install_static_files)
|
app.connect('env-updated', install_static_files)
|
||||||
app.connect('env-updated', copy_images_files)
|
app.connect('env-updated', copy_images_files)
|
||||||
app.connect('config-inited', init_directive)
|
|
||||||
return {'version': __version__}
|
return {'version': __version__}
|
||||||
|
|
|
@ -8,6 +8,7 @@ Galleria image collector
|
||||||
import os
|
import os
|
||||||
import glob
|
import glob
|
||||||
import logging
|
import logging
|
||||||
|
from copy import copy
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from sphinx.environment.collectors import EnvironmentCollector
|
from sphinx.environment.collectors import EnvironmentCollector
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
|
@ -63,9 +64,10 @@ class GalleriaCollector(EnvironmentCollector):
|
||||||
images = []
|
images = []
|
||||||
for imageglob in node['images']:
|
for imageglob in node['images']:
|
||||||
thumbsize = imageglob['thumbsize']
|
thumbsize = imageglob['thumbsize']
|
||||||
|
size_array = []
|
||||||
try:
|
try:
|
||||||
for size in thumbsize.split('x'):
|
for size in thumbsize.split('x'):
|
||||||
int(size)
|
size_array.append(int(size))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
logger.error(
|
logger.error(
|
||||||
__('thumbsize %s is invalid (use 100x120 format)'),
|
__('thumbsize %s is invalid (use 100x120 format)'),
|
||||||
|
@ -73,25 +75,35 @@ class GalleriaCollector(EnvironmentCollector):
|
||||||
raise
|
raise
|
||||||
|
|
||||||
del imageglob['thumbsize']
|
del imageglob['thumbsize']
|
||||||
glob_path = os.path.join(app.env.srcdir, imageglob['image'])
|
glob_path = os.path.join(
|
||||||
|
os.path.dirname(node.source),
|
||||||
|
imageglob['path']
|
||||||
|
)
|
||||||
|
|
||||||
for image_path in glob.glob(glob_path):
|
for image_path in glob.glob(glob_path):
|
||||||
app.env.galleria.add_file(docname, image_path)
|
app.env.galleria.add_file(docname, image_path)
|
||||||
|
|
||||||
basename, ext = os.path.splitext(image_path)
|
basename, ext = os.path.splitext(image_path)
|
||||||
thumb_path = basename + ".thumb-" + thumbsize + ext
|
thumb_path = basename + ".thumb-" + thumbsize + ext
|
||||||
thumb_path_jpg = basename + ".thumb-" + thumbsize + '.jpg'
|
thumb_path_cropped = basename + ".thumb-" + thumbsize
|
||||||
|
thumb_path_cropped += '.png'
|
||||||
|
if ext.lower() in ('.svg', '.svgz'):
|
||||||
|
thumb_path_cropped = image_path
|
||||||
|
thumb_path = image_path
|
||||||
|
|
||||||
|
jsonimage = copy(imageglob)
|
||||||
|
jsonimage['thumbsize'] = size_array
|
||||||
|
jsonimage['thumb'] = os.path.relpath(
|
||||||
|
thumb_path_cropped,
|
||||||
|
app.env.srcdir)
|
||||||
|
jsonimage['path'] = os.path.relpath(
|
||||||
|
image_path,
|
||||||
|
app.env.srcdir
|
||||||
|
)
|
||||||
|
images.append(jsonimage)
|
||||||
|
|
||||||
images.append({
|
|
||||||
'title': imageglob['title'],
|
|
||||||
'alt': imageglob['alt'],
|
|
||||||
'thumb': os.path.relpath(
|
|
||||||
thumb_path_jpg,
|
|
||||||
app.env.srcdir),
|
|
||||||
'image': os.path.relpath(image_path, app.env.srcdir)
|
|
||||||
})
|
|
||||||
app.env.dependencies[docname].add(image_path)
|
app.env.dependencies[docname].add(image_path)
|
||||||
app.env.dependencies[docname].add(thumb_path_jpg)
|
app.env.dependencies[docname].add(thumb_path_cropped)
|
||||||
if not os.access(
|
if not os.access(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
app.srcdir,
|
app.srcdir,
|
||||||
|
|
|
@ -18,7 +18,7 @@ from sphinx.writers.texinfo import TexinfoTranslator
|
||||||
from sphinx.writers.text import TextTranslator
|
from sphinx.writers.text import TextTranslator
|
||||||
from sphinx.writers.manpage import ManualPageTranslator
|
from sphinx.writers.manpage import ManualPageTranslator
|
||||||
from sphinx.util.osutil import relative_uri
|
from sphinx.util.osutil import relative_uri
|
||||||
from sphinx.locale import __
|
from sphinx.locale import _
|
||||||
|
|
||||||
|
|
||||||
class galleria(nodes.General, nodes.Element):
|
class galleria(nodes.General, nodes.Element):
|
||||||
|
@ -26,12 +26,11 @@ class galleria(nodes.General, nodes.Element):
|
||||||
|
|
||||||
|
|
||||||
def html_visit_galleria(self: HTMLTranslator, node: galleria) -> None:
|
def html_visit_galleria(self: HTMLTranslator, node: galleria) -> None:
|
||||||
galleria_id = 'galleria-%s' % uuid.uuid4()
|
|
||||||
|
|
||||||
self.body.append(
|
self.body.append(
|
||||||
"<div id='%s' class='%s' width='%s' height='%s'>" % (
|
"<div id='%s' class='%s' style='width: %s; height: %s;'>" % (
|
||||||
galleria_id,
|
node['options']['galleria'],
|
||||||
node['class'] + ' align-%s' % node['options']['align'],
|
node['class'] + ' align-%s sphinxgalleria-core' %
|
||||||
|
node['options']['align'],
|
||||||
node['options']['width'],
|
node['options']['width'],
|
||||||
node['options']['height'],
|
node['options']['height'],
|
||||||
)
|
)
|
||||||
|
@ -40,12 +39,22 @@ def html_visit_galleria(self: HTMLTranslator, node: galleria) -> None:
|
||||||
if len(node['images']) > 0:
|
if len(node['images']) > 0:
|
||||||
self.body.append("<figure><div class='row'>")
|
self.body.append("<figure><div class='row'>")
|
||||||
self.body.append("<img src='%s' title='%s' alt='%s'>" % (
|
self.body.append("<img src='%s' title='%s' alt='%s'>" % (
|
||||||
node['images'][0]['image'],
|
node['images'][0]['path'],
|
||||||
node['images'][0]['title'],
|
node['images'][0]['title'],
|
||||||
node['images'][0]['alt']
|
node['images'][0]['alt']
|
||||||
))
|
))
|
||||||
self.body.append('</div></figure>')
|
self.body.append('</div></figure>')
|
||||||
|
|
||||||
|
for img in node['images']:
|
||||||
|
img['path'] = relative_uri(
|
||||||
|
self.builder.get_target_uri(self.builder.current_docname),
|
||||||
|
img['path']
|
||||||
|
)
|
||||||
|
img['thumb'] = relative_uri(
|
||||||
|
self.builder.get_target_uri(self.builder.current_docname),
|
||||||
|
img['thumb']
|
||||||
|
)
|
||||||
|
|
||||||
self.body.append(
|
self.body.append(
|
||||||
"</div><script type='module'>" +
|
"</div><script type='module'>" +
|
||||||
"import {SphinxGalleria} from './%s';\n" %
|
"import {SphinxGalleria} from './%s';\n" %
|
||||||
|
@ -53,7 +62,7 @@ def html_visit_galleria(self: HTMLTranslator, node: galleria) -> None:
|
||||||
self.builder.get_target_uri(self.builder.current_docname),
|
self.builder.get_target_uri(self.builder.current_docname),
|
||||||
'_static/sphinxgalleria/sphinxgalleria.mjs') +
|
'_static/sphinxgalleria/sphinxgalleria.mjs') +
|
||||||
"new SphinxGalleria('%s', %s, %s).init();</script>" % (
|
"new SphinxGalleria('%s', %s, %s).init();</script>" % (
|
||||||
galleria_id,
|
node['options']['galleria'],
|
||||||
json.dumps(node['options']),
|
json.dumps(node['options']),
|
||||||
json.dumps(node['images'])
|
json.dumps(node['images'])
|
||||||
)
|
)
|
||||||
|
@ -82,7 +91,7 @@ def text_visit_galleria(self: TextTranslator, node: galleria) -> None:
|
||||||
|
|
||||||
def gemini_visit_galleria(self, node: galleria) -> None:
|
def gemini_visit_galleria(self, node: galleria) -> None:
|
||||||
for image in node['images']:
|
for image in node['images']:
|
||||||
self.body.append('=> %s %s' % (image['path'], image['alt']))
|
self.body += '=> %s %s' % (image['path'], image['alt'])
|
||||||
raise nodes.SkipNode
|
raise nodes.SkipNode
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,51 +117,54 @@ class GalleriaDirective(Directive):
|
||||||
"alt": directives.unchanged,
|
"alt": directives.unchanged,
|
||||||
"title": directives.unchanged,
|
"title": directives.unchanged,
|
||||||
"thumbsize": directives.unchanged,
|
"thumbsize": directives.unchanged,
|
||||||
"transition": directives.unchanged,
|
|
||||||
'width': directives.length_or_percentage_or_unitless,
|
'width': directives.length_or_percentage_or_unitless,
|
||||||
'height': directives.length_or_unitless,
|
'height': directives.length_or_unitless,
|
||||||
'align': align_choices,
|
'align': align_choices,
|
||||||
'hide_title': directives.flag,
|
'hide_title': directives.flag,
|
||||||
'hide_alt': directives.flag,
|
'hide_alt': directives.flag,
|
||||||
|
'no_transition': directives.flag,
|
||||||
}
|
}
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
source = self.state.document.settings._source
|
source = self.state_machine.document.settings._source
|
||||||
document = self.state.document
|
env = self.state_machine.document.settings.env
|
||||||
if not document.hasattr('galleria_nodes'):
|
try:
|
||||||
document.galleria_nodes = {}
|
if source not in env.galleria_nodes:
|
||||||
if source not in document.galleria_nodes:
|
env.galleria_nodes[source] = {}
|
||||||
document.galleria_nodes[source] = {}
|
|
||||||
|
|
||||||
galleria_name = self.options.get('galleria') or uuid.uuid4()
|
except AttributeError:
|
||||||
|
env.galleria_nodes = {}
|
||||||
|
env.galleria_nodes[source] = {}
|
||||||
|
|
||||||
|
galleria_name = self.options.get('galleria')
|
||||||
|
galleria_name = galleria_name or str(uuid.uuid4()).replace('-', '')
|
||||||
created = False
|
created = False
|
||||||
|
|
||||||
if galleria_name in document.galleria_nodes[source]:
|
if galleria_name in env.galleria_nodes[source]:
|
||||||
node = document.galleria_nodes[source][galleria_name]
|
node = env.galleria_nodes[source][galleria_name]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
node = galleria()
|
node = galleria()
|
||||||
node['class'] = 'galleria'
|
node['class'] = 'galleria'
|
||||||
node['options'] = {
|
node['options'] = {
|
||||||
'transition': 'fade',
|
'galleria': 'galleria-' + galleria_name,
|
||||||
'label_prev': __('Previous'),
|
'label_prev': _('Previous'),
|
||||||
'label_next': __('Next'),
|
'label_next': _('Next'),
|
||||||
'label_close': __('Close'),
|
'label_close': _('Close'),
|
||||||
'label_thumbnail': __('Thumbnail, click to enlarge'),
|
'label_thumbnail': _('Thumbnail, click to enlarge'),
|
||||||
}
|
}
|
||||||
node['images'] = []
|
node['images'] = []
|
||||||
document.galleria_nodes[source][galleria_name] = node
|
env.galleria_nodes[source][galleria_name] = node
|
||||||
|
|
||||||
created = True
|
created = True
|
||||||
|
|
||||||
if self.options.get('class'):
|
if self.options.get('class'):
|
||||||
node['class'] = self.options['class']
|
node['class'] = ' '.join(self.options['class'])
|
||||||
if self.options.get('transition'):
|
|
||||||
node['options']['transition'] = self.options['transition']
|
|
||||||
|
|
||||||
node['options']["width"] = self.options.get('width') or 'auto'
|
node['options']["width"] = self.options.get('width') or 'auto'
|
||||||
node['options']["height"] = self.options.get('height') or 'auto'
|
node['options']["height"] = self.options.get('height') or 'auto'
|
||||||
node['options']["align"] = self.options.get('align') or 'center'
|
node['options']["align"] = self.options.get('align') or 'center'
|
||||||
|
node['options']["no_transition"] = 'no_transition' in self.options
|
||||||
|
|
||||||
images_path = self.arguments
|
images_path = self.arguments
|
||||||
for path in images_path:
|
for path in images_path:
|
||||||
|
@ -160,9 +172,9 @@ class GalleriaDirective(Directive):
|
||||||
image["alt"] = self.options.get('alt')
|
image["alt"] = self.options.get('alt')
|
||||||
image["title"] = self.options.get('title')
|
image["title"] = self.options.get('title')
|
||||||
image["thumbsize"] = self.options.get('thumbsize') or '100x100'
|
image["thumbsize"] = self.options.get('thumbsize') or '100x100'
|
||||||
image["hide_alt"] = bool(self.options.get('hide_alt'))
|
image["hide_alt"] = 'hide_alt' in self.options
|
||||||
image["hide_title"] = bool(self.options.get('hide_title'))
|
image["hide_title"] = 'hide_title' in self.options
|
||||||
image["image"] = path
|
image["path"] = path
|
||||||
node['images'].append(image)
|
node['images'].append(image)
|
||||||
|
|
||||||
if created:
|
if created:
|
||||||
|
|
37
sphinx_galleria/locale/fr/LC_MESSAGES/sphinx.po
Normal file
37
sphinx_galleria/locale/fr/LC_MESSAGES/sphinx.po
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# French translations for sphinx_galleria.
|
||||||
|
# Copyright (C) 2021 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_galleria
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_galleria 1.0.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2021-06-02 23:53+0200\n"
|
||||||
|
"PO-Revision-Date: 2021-06-02 23:55+0200\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"Language-Team: fr <LL@li.org>\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"X-Generator: Poedit 2.4.3\n"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:151
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Précédent"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:152
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Suivant"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:153
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Fermer"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:154
|
||||||
|
msgid "Thumbnail, click to enlarge"
|
||||||
|
msgstr "Vignette, cliquer pour agrandir"
|
37
sphinx_galleria/locale/nl/LC_MESSAGES/sphinx.po
Normal file
37
sphinx_galleria/locale/nl/LC_MESSAGES/sphinx.po
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# Dutch translations for sphinx_galleria.
|
||||||
|
# Copyright (C) 2021 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_galleria
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_galleria 1.0.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2021-06-02 23:53+0200\n"
|
||||||
|
"PO-Revision-Date: 2021-06-02 23:57+0200\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"Language-Team: nl <LL@li.org>\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"X-Generator: Poedit 2.4.3\n"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:151
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Vorig"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:152
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Volgende"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:153
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Sluit"
|
||||||
|
|
||||||
|
#: sphinx_galleria/directive.py:154
|
||||||
|
msgid "Thumbnail, click to enlarge"
|
||||||
|
msgstr "Miniatuur, klik om te vergroten"
|
|
@ -1,17 +1,27 @@
|
||||||
.sphinxgalleria-core {
|
.sphinxgalleria-core {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sphinxgalleria-core.align-center {
|
.sphinxgalleria-core.align-center {
|
||||||
margin: auto;
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sphinxgalleria-core.align-left {
|
.sphinxgalleria-core.align-left {
|
||||||
float: left;
|
float: left;
|
||||||
|
margin-right: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sphinxgalleria-core.align-right {
|
.sphinxgalleria-core.align-right {
|
||||||
float: right;
|
float: right;
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sphinxgalleria-core figure {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sphinxgalleria-core figure .row {
|
.sphinxgalleria-core figure .row {
|
||||||
|
@ -31,10 +41,17 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: none;
|
border: none;
|
||||||
width: max-content;
|
border-radius: unset;
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 100%;
|
||||||
height: max-content;
|
height: max-content;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column nowrap;
|
flex-flow: column nowrap;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sphinxgalleria-core figure .row button.button-modal::hover {
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sphinxgalleria-core figure .row button.button-modal .caption {
|
.sphinxgalleria-core figure .row button.button-modal .caption {
|
||||||
|
@ -46,6 +63,7 @@
|
||||||
border: none;
|
border: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: .5rem 1.5rem .5rem 1.5rem;
|
padding: .5rem 1.5rem .5rem 1.5rem;
|
||||||
|
box-sizing: border-box;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
@ -59,9 +77,13 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: none;
|
border: none;
|
||||||
width: auto;
|
width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
object-fit: contain;
|
object-fit: cover;
|
||||||
|
transition: width ease .4s, height ease .4s, opacity ease .4s;
|
||||||
|
}
|
||||||
|
.sphinxgalleria-core.no-transition figure .row button.button-modal img {
|
||||||
|
transition: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sphinxgalleria-core figure input[type=range] {
|
.sphinxgalleria-core figure input[type=range] {
|
||||||
|
@ -163,6 +185,10 @@
|
||||||
flex-shrink: 1000;
|
flex-shrink: 1000;
|
||||||
margin: 0.5rem 0 0.5rem 0;
|
margin: 0.5rem 0 0.5rem 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
transition: width ease 1s, height ease 1s, opacity ease .4s;
|
||||||
|
}
|
||||||
|
.sphinxgalleria-core.no-transition dialog img {
|
||||||
|
transition: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sphinxgalleria-core dialog menu {
|
.sphinxgalleria-core dialog menu {
|
||||||
|
|
|
@ -12,7 +12,7 @@ export class SphinxGalleria {
|
||||||
self.node_figure = document.createElement('figure');
|
self.node_figure = document.createElement('figure');
|
||||||
self.button_modal = document.createElement('button');
|
self.button_modal = document.createElement('button');
|
||||||
self.button_modal.setAttribute('aria-haspopup', 'dialog');
|
self.button_modal.setAttribute('aria-haspopup', 'dialog');
|
||||||
self.button_modal.setAttribute('class', 'button-modal');
|
self.button_modal.classList.add('button-modal');
|
||||||
|
|
||||||
self.node_image = document.createElement('img');
|
self.node_image = document.createElement('img');
|
||||||
self.node_caption = document.createElement('figcaption');
|
self.node_caption = document.createElement('figcaption');
|
||||||
|
@ -20,22 +20,22 @@ export class SphinxGalleria {
|
||||||
self.node_alt.setAttribute('id', self.target+'-'+'alt');
|
self.node_alt.setAttribute('id', self.target+'-'+'alt');
|
||||||
self.node_image.setAttribute('aria-describedby', self.target+'-'+'alt');
|
self.node_image.setAttribute('aria-describedby', self.target+'-'+'alt');
|
||||||
self.node_thumbnails = document.createElement('ul');
|
self.node_thumbnails = document.createElement('ul');
|
||||||
self.node_thumbnails.setAttribute('class', 'thumbnails');
|
self.node_thumbnails.classList.add('thumbnails');
|
||||||
self.node_dialog = document.createElement('dialog');
|
self.node_dialog = document.createElement('dialog');
|
||||||
self.node_mask = document.createElement('div');
|
self.node_mask = document.createElement('div');
|
||||||
self.node_mask.setAttribute('class', 'mask');
|
self.node_mask.classList.add('mask');
|
||||||
self.node_mask.hidden = true;
|
self.node_mask.hidden = true;
|
||||||
var node_submask = document.createElement('div');
|
var node_submask = document.createElement('div');
|
||||||
node_submask.setAttribute('class', 'submask');
|
node_submask.classList.add('submask');
|
||||||
|
|
||||||
self.node_div_caption = document.createElement('div');
|
self.node_div_caption = document.createElement('div');
|
||||||
self.node_div_caption.setAttribute('class', 'caption');
|
self.node_div_caption.classList.add('caption');
|
||||||
|
|
||||||
var figure_row = document.createElement('div');
|
var figure_row = document.createElement('div');
|
||||||
figure_row.setAttribute('class', 'row');
|
figure_row.classList.add('row');
|
||||||
|
|
||||||
self.dialog_button_close = document.createElement('button');
|
self.dialog_button_close = document.createElement('button');
|
||||||
self.dialog_button_close.setAttribute('class', 'close');
|
self.dialog_button_close.classList.add('close');
|
||||||
|
|
||||||
self.dialog_button_close_icon = document.createElement('button');
|
self.dialog_button_close_icon = document.createElement('button');
|
||||||
self.dialog_button_close_icon.setAttribute('aria-label', self.options.label_close);
|
self.dialog_button_close_icon.setAttribute('aria-label', self.options.label_close);
|
||||||
|
@ -50,7 +50,7 @@ export class SphinxGalleria {
|
||||||
if(self.oneimage) {
|
if(self.oneimage) {
|
||||||
self.node_thumbnails.hidden = true;
|
self.node_thumbnails.hidden = true;
|
||||||
self.node_thumbnails.setAttribute('aria-hidden', true);
|
self.node_thumbnails.setAttribute('aria-hidden', true);
|
||||||
self.node_thumbnails.style.visibility = 'hidden';
|
self.node_thumbnails.style.display = 'none';
|
||||||
} else {
|
} else {
|
||||||
self.node_slider = document.createElement('input');
|
self.node_slider = document.createElement('input');
|
||||||
self.node_slider.setAttribute('type', 'range');
|
self.node_slider.setAttribute('type', 'range');
|
||||||
|
@ -59,17 +59,17 @@ export class SphinxGalleria {
|
||||||
self.node_slider.setAttribute('value', 1);
|
self.node_slider.setAttribute('value', 1);
|
||||||
|
|
||||||
self.button_prev = document.createElement('button');
|
self.button_prev = document.createElement('button');
|
||||||
self.button_prev.setAttribute('class', 'prev');
|
self.button_prev.classList.add('prev');
|
||||||
self.button_prev.setAttribute('aria-label', self.options.label_prev);
|
self.button_prev.setAttribute('aria-label', self.options.label_prev);
|
||||||
|
|
||||||
self.button_next = document.createElement('button');
|
self.button_next = document.createElement('button');
|
||||||
self.button_next.setAttribute('class', 'next');
|
self.button_next.classList.add('next');
|
||||||
self.button_next.setAttribute('aria-label', self.options.label_next);
|
self.button_next.setAttribute('aria-label', self.options.label_next);
|
||||||
|
|
||||||
self.dialog_button_prev = document.createElement('button');
|
self.dialog_button_prev = document.createElement('button');
|
||||||
self.dialog_button_prev.setAttribute('class', 'prev');
|
self.dialog_button_prev.classList.add('prev');
|
||||||
self.dialog_button_next = document.createElement('button');
|
self.dialog_button_next = document.createElement('button');
|
||||||
self.dialog_button_next.setAttribute('class', 'next');
|
self.dialog_button_next.classList.add('next');
|
||||||
self.dialog_button_prev.appendChild(document.createTextNode(self.options.label_prev));
|
self.dialog_button_prev.appendChild(document.createTextNode(self.options.label_prev));
|
||||||
self.dialog_button_next.appendChild(document.createTextNode(self.options.label_next));
|
self.dialog_button_next.appendChild(document.createTextNode(self.options.label_next));
|
||||||
|
|
||||||
|
@ -107,18 +107,20 @@ export class SphinxGalleria {
|
||||||
init() {
|
init() {
|
||||||
var self = this;
|
var self = this;
|
||||||
self.node_target = document.getElementById(self.target);
|
self.node_target = document.getElementById(self.target);
|
||||||
|
if(self.options.no_transition || self.oneimage) {
|
||||||
|
if(!self.node_target.classList.contains('no-transition')) {
|
||||||
|
self.node_target.classList.add('no-transition');
|
||||||
|
}
|
||||||
|
}
|
||||||
self.node_target.innerHTML = '';
|
self.node_target.innerHTML = '';
|
||||||
self.node_target.setAttribute(
|
self.node_target.classList.add("sphinxgalleria-core");
|
||||||
'class',
|
|
||||||
self.node_target.getAttribute('class') + " sphinxgalleria-core"
|
|
||||||
);
|
|
||||||
self.node_target.appendChild(self.node_figure);
|
self.node_target.appendChild(self.node_figure);
|
||||||
self.node_target.appendChild(self.node_thumbnails);
|
self.node_target.appendChild(self.node_thumbnails);
|
||||||
self.node_target.appendChild(self.node_mask);
|
self.node_target.appendChild(self.node_mask);
|
||||||
|
|
||||||
var onmodal = function(event) {
|
var onmodal = function(event) {
|
||||||
var key = event.keyCode || event.charCode || event.which;
|
var key = event.key;
|
||||||
if(event.type==='keypress' && key!==13 && key!==32) {
|
if(event.type==='keypress' && key!==" " && key!=="Enter") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -128,8 +130,8 @@ export class SphinxGalleria {
|
||||||
self.button_modal.addEventListener('keypress', onmodal);
|
self.button_modal.addEventListener('keypress', onmodal);
|
||||||
|
|
||||||
var onclose = function(event) {
|
var onclose = function(event) {
|
||||||
var key = event.keyCode || event.charCode || event.which;
|
var key = event.key;
|
||||||
if(event.type==='keypress' && key!==13 && key!==32) {
|
if(event.type==='keypress' && key!==" " && key!=="Enter") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -145,8 +147,8 @@ export class SphinxGalleria {
|
||||||
|
|
||||||
if(!self.oneimage) {
|
if(!self.oneimage) {
|
||||||
var onprev = function(event) {
|
var onprev = function(event) {
|
||||||
var key = event.keyCode || event.charCode || event.which;
|
var key = event.key;
|
||||||
if(event.type==='keypress' && key!==13 && key!==32) {
|
if(event.type==='keypress' && key!==" " && key!=="Enter") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -154,8 +156,8 @@ export class SphinxGalleria {
|
||||||
};
|
};
|
||||||
|
|
||||||
var onnext = function(event) {
|
var onnext = function(event) {
|
||||||
var key = event.keyCode || event.charCode || event.which;
|
var key = event.key;
|
||||||
if(event.type==='keypress' && key!==13 && key!==32) {
|
if(event.type==='keypress' && key!==" " && key!=="Enter") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -195,7 +197,7 @@ export class SphinxGalleria {
|
||||||
var image_element = document.createElement('li');
|
var image_element = document.createElement('li');
|
||||||
var image_button = document.createElement('input');
|
var image_button = document.createElement('input');
|
||||||
image_button.setAttribute('type', 'radio');
|
image_button.setAttribute('type', 'radio');
|
||||||
image_button.setAttribute('value', image_data.image);
|
image_button.setAttribute('value', image_data.path);
|
||||||
image_button.setAttribute('name', self.target);
|
image_button.setAttribute('name', self.target);
|
||||||
image_button.setAttribute('data-index', idx);
|
image_button.setAttribute('data-index', idx);
|
||||||
image_button.setAttribute('id', self.target+'-'+idx);
|
image_button.setAttribute('id', self.target+'-'+idx);
|
||||||
|
@ -211,6 +213,8 @@ export class SphinxGalleria {
|
||||||
|
|
||||||
var image_thumb = document.createElement('img');
|
var image_thumb = document.createElement('img');
|
||||||
image_thumb.setAttribute('src', image_data.thumb);
|
image_thumb.setAttribute('src', image_data.thumb);
|
||||||
|
image_thumb.setAttribute('width', image_data.thumbsize[0]);
|
||||||
|
image_thumb.setAttribute('heigh', image_data.thumbsize[1]);
|
||||||
|
|
||||||
if(image_data.alt) {
|
if(image_data.alt) {
|
||||||
image_button.setAttribute('data-alt', image_data.alt);
|
image_button.setAttribute('data-alt', image_data.alt);
|
||||||
|
@ -229,28 +233,37 @@ export class SphinxGalleria {
|
||||||
image_button.setAttribute('data-hide-title', true);
|
image_button.setAttribute('data-hide-title', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(image_data.transition) {
|
|
||||||
image_thumb.setAttribute('data-transition', image_data.transition);
|
|
||||||
}
|
|
||||||
|
|
||||||
image_label.appendChild(image_thumb);
|
image_label.appendChild(image_thumb);
|
||||||
self.node_thumbnails.appendChild(image_element);
|
self.node_thumbnails.appendChild(image_element);
|
||||||
|
|
||||||
image_button.addEventListener('change', function() {self.changeImage();});
|
image_button.addEventListener('change', function() {self.changeImage();});
|
||||||
});
|
});
|
||||||
|
|
||||||
self.node_target.addEventListener('keypress', function(event) {
|
document.addEventListener('keydown', function(event) {
|
||||||
var key = event.keyCode || event.charCode || event.which;
|
var key = event.key;
|
||||||
|
|
||||||
if(!self.oneimage && key===37) {
|
if(!self.node_dialog.open && !self.node_target.contains(document.activeElement)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!self.oneimage && key==="ArrowLeft") {
|
||||||
self.prev();
|
self.prev();
|
||||||
} else if(!self.oneimage && key===39) {
|
event.preventDefault();
|
||||||
|
} else if(!self.oneimage && key==="ArrowRight") {
|
||||||
self.next();
|
self.next();
|
||||||
} else if(key===27) {
|
event.preventDefault();
|
||||||
|
} else if(key==="Escape") {
|
||||||
self.closeModal();
|
self.closeModal();
|
||||||
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(self.node_dialog.showModal) {
|
||||||
|
self.node_dialog.addEventListener('close', function() {
|
||||||
|
self.closeModal();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
self.changeImage();
|
self.changeImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,6 +304,11 @@ export class SphinxGalleria {
|
||||||
var hide_caption = true;
|
var hide_caption = true;
|
||||||
var idx = parseInt(current.getAttribute('data-index'));
|
var idx = parseInt(current.getAttribute('data-index'));
|
||||||
|
|
||||||
|
if(!self.options.no_transition && !self.oneimage) {
|
||||||
|
self.node_image.style.opacity = 0.2;
|
||||||
|
self.dialog_image.style.opacity = 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
if(!self.oneimage) {
|
if(!self.oneimage) {
|
||||||
if(self.node_slider.value !== idx+1) {
|
if(self.node_slider.value !== idx+1) {
|
||||||
self.node_slider.value = idx + 1;
|
self.node_slider.value = idx + 1;
|
||||||
|
@ -338,8 +356,19 @@ export class SphinxGalleria {
|
||||||
self.node_div_caption.hidden = false;
|
self.node_div_caption.hidden = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(self.options.no_transition || self.oneimage) {
|
||||||
self.node_image.setAttribute('src', url);
|
self.node_image.setAttribute('src', url);
|
||||||
self.dialog_image.setAttribute('src', url);
|
self.dialog_image.setAttribute('src', url);
|
||||||
|
} else {
|
||||||
|
setTimeout(function() {
|
||||||
|
self.node_image.setAttribute('src', url);
|
||||||
|
self.dialog_image.setAttribute('src', url);
|
||||||
|
setTimeout(function() {
|
||||||
|
self.node_image.style.opacity = 1;
|
||||||
|
self.dialog_image.style.opacity = 1;
|
||||||
|
}, 200);
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
showModal() {
|
showModal() {
|
||||||
|
|
Loading…
Reference in a new issue