initiale Version (klassische Seitennavigation, keine Themes)
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
*~
|
||||||
|
.jekyll-cache/
|
||||||
|
_site/
|
||||||
|
Gemfile.lock
|
||||||
15
Gemfile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
# gem "rails"
|
||||||
|
gem "jekyll"
|
||||||
|
|
||||||
|
group :jekyll_plugins do
|
||||||
|
gem "jekyll-youtube"
|
||||||
|
gem "mini_magick"
|
||||||
|
gem "exifr", :git => "https://codeberg.org/rwv/exifr.git"
|
||||||
|
gem "jekyll-exiftag", :git => "https://github.com/jimmyjxiao/jekyll-exiftag.git"
|
||||||
|
gem "jquery"
|
||||||
|
gem "nokogiri"
|
||||||
|
end
|
||||||
14
_config.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
future: true
|
||||||
|
#plugins:
|
||||||
|
# - jekyll-youtube
|
||||||
|
exclude:
|
||||||
|
- .gitignore
|
||||||
|
#safe: false
|
||||||
|
mini_magick:
|
||||||
|
photoFolders:
|
||||||
|
source: assets/img/albums
|
||||||
|
destination: assets/img/thumbnails
|
||||||
|
resize: "320x240^"
|
||||||
|
#resize: "320x240!"
|
||||||
|
gravity: "center"
|
||||||
|
extent: "320x240"
|
||||||
9
_data/count1.csv
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Name,Stimmen
|
||||||
|
Bill Gates,11
|
||||||
|
Tedros,2
|
||||||
|
Merz,4
|
||||||
|
Musk,4
|
||||||
|
Höcke,2
|
||||||
|
Habeck,5
|
||||||
|
Baerbock,3
|
||||||
|
Franziskus,1
|
||||||
|
6
_data/navigation.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
- name: Hauptseite
|
||||||
|
link: /
|
||||||
|
- name: Über uns
|
||||||
|
link: /about.html
|
||||||
|
- name: Meldungen
|
||||||
|
link: /blog.html
|
||||||
16
_includes/album.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<div id="{{include.albumname}}">
|
||||||
|
|
||||||
|
{%- for image in site.static_files -%}
|
||||||
|
{%- if image.path contains 'img/albums' and image.path contains include.albumname -%}
|
||||||
|
<a href="{{ image.path }}" data-sub-html="{% exiftag image_description, , {{ image.path }} %}" >
|
||||||
|
<img src="/assets/img/thumbnails/{{ include.albumname }}/{{ image.name }}" />
|
||||||
|
</a>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
lightGallery(document.getElementById('{{include.albumname}}'), {
|
||||||
|
plugins: [lgZoom, lgThumbnail, lgHash, lgShare],
|
||||||
|
});
|
||||||
|
</script>
|
||||||
72
_includes/datatable.html
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<table id="{{ include.id }}">
|
||||||
|
{% for row in include.datafile %}
|
||||||
|
{% if forloop.first %}
|
||||||
|
<tr>
|
||||||
|
{% for pair in row %}
|
||||||
|
{% assign column = forloop.index0 %}
|
||||||
|
<th onclick="sortTable({{column}})">{{ pair[0] }}</th>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% tablerow pair in row %}
|
||||||
|
{{ pair[1] }}
|
||||||
|
{% endtablerow %}
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
<script>
|
||||||
|
function sortTable(n) {
|
||||||
|
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
|
||||||
|
table = document.getElementById("{{include.id}}");
|
||||||
|
switching = true;
|
||||||
|
// Set the sorting direction to ascending:
|
||||||
|
dir = "asc";
|
||||||
|
/* Make a loop that will continue until
|
||||||
|
no switching has been done: */
|
||||||
|
while (switching) {
|
||||||
|
// Start by saying: no switching is done:
|
||||||
|
switching = false;
|
||||||
|
rows = table.rows;
|
||||||
|
/* Loop through all table rows (except the
|
||||||
|
first, which contains table headers): */
|
||||||
|
for (i = 1; i < (rows.length - 1); i++) {
|
||||||
|
// Start by saying there should be no switching:
|
||||||
|
shouldSwitch = false;
|
||||||
|
/* Get the two elements you want to compare,
|
||||||
|
one from current row and one from the next: */
|
||||||
|
x = rows[i].getElementsByTagName("TD")[n];
|
||||||
|
y = rows[i + 1].getElementsByTagName("TD")[n];
|
||||||
|
/* Check if the two rows should switch place,
|
||||||
|
based on the direction, asc or desc: */
|
||||||
|
if (dir == "asc") {
|
||||||
|
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
|
||||||
|
// If so, mark as a switch and break the loop:
|
||||||
|
shouldSwitch = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (dir == "desc") {
|
||||||
|
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
|
||||||
|
// If so, mark as a switch and break the loop:
|
||||||
|
shouldSwitch = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (shouldSwitch) {
|
||||||
|
/* If a switch has been marked, make the switch
|
||||||
|
and mark that a switch has been done: */
|
||||||
|
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
|
||||||
|
switching = true;
|
||||||
|
// Each time a switch is done, increase this count by 1:
|
||||||
|
switchcount ++;
|
||||||
|
} else {
|
||||||
|
/* If no switching has been done AND the direction is "asc",
|
||||||
|
set the direction to "desc" and run the while loop again. */
|
||||||
|
if (switchcount == 0 && dir == "asc") {
|
||||||
|
dir = "desc";
|
||||||
|
switching = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
15
_includes/navigation.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<nav>
|
||||||
|
<!--
|
||||||
|
<a href="/"
|
||||||
|
{% if page.url == "/" %}style="color: red;"{% endif %}
|
||||||
|
>Hauptseite</a>
|
||||||
|
<a href="/about.html"
|
||||||
|
{% if page.url == "/about.html" %}style="color: red;"{% endif %}
|
||||||
|
>Über uns</a>
|
||||||
|
-->
|
||||||
|
{% for item in site.data.navigation %}
|
||||||
|
<a href="{{ item.link }}"
|
||||||
|
{% if page.url == item.link %}class="current-site"{% endif %}
|
||||||
|
>{{ item.name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</nav>
|
||||||
21
_layouts/default.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>{{ page.title }} | Scherbengericht</title>
|
||||||
|
<link rel="stylesheet" href="{{ '/assets/css/styles.css' | relative_url }}"/>
|
||||||
|
<!-- lightgallery styles -->
|
||||||
|
<link rel="stylesheet" href="{{ '/assets/css/lightgallery-bundle.css' | relative_url }}"/>
|
||||||
|
<!-- lightgallery code -->
|
||||||
|
<script src="{{ 'assets/js/lightgallery.umd.js' | relative_url }}"></script>
|
||||||
|
<!-- lightgallery plugins -->
|
||||||
|
<script src="{{ '/assets/js/plugins/lg-thumbnail.umd.js' | relative_url }}"></script>
|
||||||
|
<script src="{{ '/assets/js/plugins/lg-zoom.umd.js' | relative_url }}"></script>
|
||||||
|
<script src="{{ '/assets/js/plugins/lg-hash.umd.js' | relative_url }}"></script>
|
||||||
|
<script src="{{ '/assets/js/plugins/lg-share.umd.js' | relative_url }}"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% include navigation.html %}
|
||||||
|
{{ content }}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
7
_layouts/post.html
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
<h1>{{ page.title }}</h1>
|
||||||
|
<p>{{ page.date | date_to_string }}</p>
|
||||||
|
|
||||||
|
{{ content }}
|
||||||
80
_plugins/jekyll_minimagick.rb
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
require 'mini_magick'
|
||||||
|
|
||||||
|
module Jekyll
|
||||||
|
module JekyllMinimagick
|
||||||
|
|
||||||
|
class GeneratedImageFile < Jekyll::StaticFile
|
||||||
|
# Initialize a new GeneratedImage.
|
||||||
|
# +site+ is the Site
|
||||||
|
# +base+ is the String path to the <source>
|
||||||
|
# +dir+ is the String path between <source> and the file
|
||||||
|
# +name+ is the String filename of the file
|
||||||
|
# +preset+ is the Preset hash from the config.
|
||||||
|
#
|
||||||
|
# Returns <GeneratedImageFile>
|
||||||
|
def initialize(site, base, dir, name, preset)
|
||||||
|
@site = site
|
||||||
|
@base = base
|
||||||
|
@dir = dir
|
||||||
|
@name = name
|
||||||
|
@dst_dir = preset.delete('destination')
|
||||||
|
@src_dir = preset.delete('source')
|
||||||
|
@commands = preset
|
||||||
|
@relative_path = File.join(*[@dir, @name].compact)
|
||||||
|
@extname = File.extname(@name)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Obtains source file path by substituting the preset's source directory
|
||||||
|
# for the destination directory.
|
||||||
|
#
|
||||||
|
# Returns source file path.
|
||||||
|
def path
|
||||||
|
File.join(@base, @dir.sub(@dst_dir, @src_dir), @name)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Use MiniMagick to create a derivative image at the destination
|
||||||
|
# specified (if the original is modified).
|
||||||
|
# +dest+ is the String path to the destination dir
|
||||||
|
#
|
||||||
|
# Returns false if the file was not modified since last time (no-op).
|
||||||
|
def write(dest)
|
||||||
|
dest_path = destination(dest)
|
||||||
|
|
||||||
|
return false if File.exist? dest_path and !modified?
|
||||||
|
self.class.mtimes[path] = mtime
|
||||||
|
|
||||||
|
FileUtils.mkdir_p(File.dirname(dest_path))
|
||||||
|
image = ::MiniMagick::Image.open(path)
|
||||||
|
image.combine_options do |c|
|
||||||
|
@commands.each_pair do |command, arg|
|
||||||
|
c.send command, arg
|
||||||
|
end
|
||||||
|
end
|
||||||
|
image.write dest_path
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
class MiniMagickGenerator < Generator
|
||||||
|
safe true
|
||||||
|
|
||||||
|
# Find all image files in the source directories of the presets specified
|
||||||
|
# in the site config. Add a GeneratedImageFile to the static_files stack
|
||||||
|
# for later processing.
|
||||||
|
def generate(site)
|
||||||
|
return unless site.config['mini_magick']
|
||||||
|
|
||||||
|
site.config['mini_magick'].each_pair do |name, preset|
|
||||||
|
Dir.chdir preset['source'] do
|
||||||
|
Dir.glob(File.join("**", "*.{png,jpg,jpeg,gif}")) do |source|
|
||||||
|
site.static_files << GeneratedImageFile.new(site, site.source, preset['destination'], source, preset.clone)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
14
_posts/2025-02-02-gallery.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "Eindrücke ..."
|
||||||
|
---
|
||||||
|
So könnte ein Bericht vom Event aussehen:
|
||||||
|
|
||||||
|
<h2>Stimmen:</h2>
|
||||||
|
{% include datatable.html datafile=site.data.count1 id="count1" %}
|
||||||
|
|
||||||
|
<h2>Video:</h2>
|
||||||
|
{% youtube "https://www.youtube.com/watch?v=ho8-vK0L1_8" %}
|
||||||
|
|
||||||
|
<h2>Fotos:</h2>
|
||||||
|
{% include album.html albumname="testgal" %}
|
||||||
14
_posts/2025-02-02-herald.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "Ankündigung: erster Termin am 22.2.2025 in Dresden"
|
||||||
|
---
|
||||||
|
|
||||||
|
Wir laden alle herzlich ein,
|
||||||
|
am 22. Februar auf dem Neumarkt in Dresden,
|
||||||
|
[zwischen Frauenkirche und Martin-Luther-Denkmal](https://www.openstreetmap.org/#map=19/51.051655/13.741195),
|
||||||
|
an unserem ersten Versuch teilzunehmen!
|
||||||
|
|
||||||
|
Abgestimmt werden kann zwischen 12 und 19 Uhr,
|
||||||
|
danach werden die Stimmen ausgezählt und
|
||||||
|
öffentlich vorgetragen.
|
||||||
|
|
||||||
34
_sass/main.scss
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
.current-site {
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-size: 24px;
|
||||||
|
max-width: 72ch;
|
||||||
|
}
|
||||||
|
.larger {
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
.xx-large {
|
||||||
|
font-size: xx-large;
|
||||||
|
}
|
||||||
|
.wrap {
|
||||||
|
display: flex;
|
||||||
|
max-width: max-content;
|
||||||
|
}
|
||||||
|
.wrap1 {
|
||||||
|
margin: 0px;
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
.wrap2 {
|
||||||
|
margin: 0px; /* remove all margins to fit two divs in the container */
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.wrap {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.wrap1,
|
||||||
|
.wrap2 {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
13
about.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
title: Über uns
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
# Über uns
|
||||||
|
|
||||||
|
Wir sind Bürger der Stadt Dresden,
|
||||||
|
ohne Zugehörigkeit zu politischen Parteien,
|
||||||
|
Vereinen oder Organisationen.
|
||||||
|
|
||||||
|
Wir suchen angesichts der gegenwärtigen
|
||||||
|
**Krise der Demokratie** (oder des Staates)
|
||||||
|
nach Ideen für eine Erneuerung des politischen Systems.
|
||||||
1443
assets/css/lightgallery-bundle.css
Normal file
1
assets/css/lightgallery-bundle.min.css
vendored
Normal file
3
assets/css/styles.scss
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
---
|
||||||
|
@import "main";
|
||||||
54
assets/fonts/lg.svg
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>
|
||||||
|
<json>
|
||||||
|
<![CDATA[
|
||||||
|
{
|
||||||
|
"fontFamily": "lg",
|
||||||
|
"majorVersion": 2,
|
||||||
|
"minorVersion": 0,
|
||||||
|
"fontURL": "",
|
||||||
|
"copyright": "",
|
||||||
|
"license": "",
|
||||||
|
"licenseURL": "",
|
||||||
|
"description": "Font generated by IcoMoon.",
|
||||||
|
"version": "Version 2.0",
|
||||||
|
"fontId": "lg",
|
||||||
|
"psName": "lg",
|
||||||
|
"subFamily": "Regular",
|
||||||
|
"fullName": "lg"
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</json>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="lg" horiz-adv-x="1024">
|
||||||
|
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||||
|
<missing-glyph horiz-adv-x="1024" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||||
|
<glyph unicode="" glyph-name="pause_circle_outline" data-tags="pause_circle_outline" d="M554 256.667v340h86v-340h-86zM512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM384 256.667v340h86v-340h-86z" />
|
||||||
|
<glyph unicode="" glyph-name="play_circle_outline" data-tags="play_circle_outline" d="M512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM426 234.667v384l256-192z" />
|
||||||
|
<glyph unicode="" glyph-name="stack-2" data-tags="stack-2" d="M384 853.334h426.667q53 0 90.5-37.5t37.5-90.5v-426.667q0-53-37.5-90.5t-90.5-37.5h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 53 37.5 90.5t90.5 37.5zM170.667 675.334v-547.333q0-17.667 12.5-30.167t30.167-12.5h547.333q-13.333-37.667-46.333-61.5t-74.333-23.833h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 41.333 23.833 74.333t61.5 46.333zM810.667 768h-426.667q-17.667 0-30.167-12.5t-12.5-30.167v-426.667q0-17.667 12.5-30.167t30.167-12.5h426.667q17.667 0 30.167 12.5t12.5 30.167v426.667q0 17.667-12.5 30.167t-30.167 12.5z" />
|
||||||
|
<glyph unicode="" glyph-name="clear" data-tags="clear" d="M810 664.667l-238-238 238-238-60-60-238 238-238-238-60 60 238 238-238 238 60 60 238-238 238 238z" />
|
||||||
|
<glyph unicode="" glyph-name="arrow-left" data-tags="arrow-left" d="M426.667 768q17.667 0 30.167-12.5t12.5-30.167q0-18-12.667-30.333l-225.667-225.667h665q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-665l225.667-225.667q12.667-12.333 12.667-30.333 0-17.667-12.5-30.167t-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 13-12.333 30.333t12.333 30.333l298.667 298.667q12.667 12.333 30.333 12.333z" />
|
||||||
|
<glyph unicode="" glyph-name="arrow-right" data-tags="arrow-right" d="M597.333 768q18 0 30.333-12.333l298.667-298.667q12.333-12.333 12.333-30.333t-12.333-30.333l-298.667-298.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l226 225.667h-665q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5h665l-226 225.667q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z" />
|
||||||
|
<glyph unicode="" glyph-name="vertical_align_bottom" data-tags="vertical_align_bottom" d="M170 128.667h684v-86h-684v86zM682 384.667l-170-172-170 172h128v426h84v-426h128z" />
|
||||||
|
<glyph unicode="" glyph-name="apps" data-tags="apps" d="M682 84.667v172h172v-172h-172zM682 340.667v172h172v-172h-172zM426 596.667v172h172v-172h-172zM682 768.667h172v-172h-172v172zM426 340.667v172h172v-172h-172zM170 340.667v172h172v-172h-172zM170 84.667v172h172v-172h-172zM426 84.667v172h172v-172h-172zM170 596.667v172h172v-172h-172z" />
|
||||||
|
<glyph unicode="" glyph-name="fullscreen" data-tags="fullscreen" d="M598 724.667h212v-212h-84v128h-128v84zM726 212.667v128h84v-212h-212v84h128zM214 512.667v212h212v-84h-128v-128h-84zM298 340.667v-128h128v-84h-212v212h84z" />
|
||||||
|
<glyph unicode="" glyph-name="fullscreen_exit" data-tags="fullscreen_exit" d="M682 596.667h128v-84h-212v212h84v-128zM598 128.667v212h212v-84h-128v-128h-84zM342 596.667v128h84v-212h-212v84h128zM214 256.667v84h212v-212h-84v128h-128z" />
|
||||||
|
<glyph unicode="" glyph-name="zoom_in" data-tags="zoom_in" d="M512 512.667h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z" />
|
||||||
|
<glyph unicode="" glyph-name="zoom_out" data-tags="zoom_out" d="M298 554.667h214v-42h-214v42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z" />
|
||||||
|
<glyph unicode="" glyph-name="share" data-tags="share" d="M768 252.667c68 0 124-56 124-124s-56-126-124-126-124 58-124 126c0 10 0 20 2 28l-302 176c-24-22-54-34-88-34-70 0-128 58-128 128s58 128 128 128c34 0 64-12 88-34l300 174c-2 10-4 20-4 30 0 70 58 128 128 128s128-58 128-128-58-128-128-128c-34 0-64 14-88 36l-300-176c2-10 4-20 4-30s-2-20-4-30l304-176c22 20 52 32 84 32z" />
|
||||||
|
<glyph unicode="" glyph-name="rotate_left" data-tags="rotate_left" d="M554 764.667q126-16 213-112t87-226-87-226-213-112v86q92 16 153 87t61 165-61 165-153 87v-166l-194 190 194 194v-132zM302 156.667l62 62q46-34 106-44v-86q-96 12-168 68zM260 384.667q10-58 42-106l-60-60q-56 74-68 166h86zM304 574.667q-36-52-44-106h-86q12 90 70 166z" />
|
||||||
|
<glyph unicode="" glyph-name="rotate_right" data-tags="rotate_right" d="M720 278.667q34 46 44 106h86q-12-92-68-166zM554 174.667q60 10 106 44l62-62q-72-56-168-68v86zM850 468.667h-86q-10 60-44 106l62 60q58-72 68-166zM664 702.667l-194-190v166q-92-16-153-87t-61-165 61-165 153-87v-86q-126 16-213 112t-87 226 87 226 213 112v132z" />
|
||||||
|
<glyph unicode="" glyph-name="swap_horiz" data-tags="swap_horiz" d="M896 554.667l-170-170v128h-300v84h300v128zM298 468.667v-128h300v-84h-300v-128l-170 170z" />
|
||||||
|
<glyph unicode="" glyph-name="swap_vert" data-tags="swap_vert" d="M384 810.667l170-170h-128v-300h-84v300h-128zM682 212.667h128l-170-170-170 170h128v300h84v-300z" />
|
||||||
|
<glyph unicode="" glyph-name="facebook-with-circle" data-tags="facebook-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM628.429 612.659h-73.882c-8.755 0-18.483-11.52-18.483-26.829v-53.35h92.416l-13.978-76.083h-78.438v-228.403h-87.194v228.403h-79.104v76.083h79.104v44.749c0 64.205 44.544 116.378 105.677 116.378h73.882v-80.947z" />
|
||||||
|
<glyph unicode="" glyph-name="google-with-circle" data-tags="google+-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM483.686 249.805c-30.874-15.002-64.102-16.589-76.954-16.589-2.458 0-3.84 0-3.84 0s-1.178 0-2.765 0c-20.070 0-119.962 4.608-119.962 95.59 0 89.395 108.8 96.41 142.131 96.41h0.87c-19.251 25.702-15.258 51.61-15.258 51.61-1.69-0.102-4.147-0.205-7.168-0.205-12.544 0-36.762 1.997-57.549 15.411-25.498 16.384-38.4 44.288-38.4 82.893 0 109.107 119.142 113.51 120.32 113.613h118.989v-2.611c0-13.312-23.91-15.923-40.192-18.125-5.53-0.819-16.64-1.894-19.763-3.482 30.157-16.128 35.021-41.421 35.021-79.104 0-42.906-16.794-65.587-34.611-81.51-11.059-9.882-19.712-17.613-19.712-28.006 0-10.189 11.878-20.582 25.702-32.717 22.579-19.917 53.555-47.002 53.555-92.723 0-47.258-20.326-81.050-60.416-100.454zM742.4 460.8h-76.8v-76.8h-51.2v76.8h-76.8v51.2h76.8v76.8h51.2v-76.8h76.8v-51.2zM421.018 401.92c-2.662 0-5.325-0.102-8.038-0.307-22.733-1.69-43.725-10.189-58.88-24.013-15.053-13.619-22.733-30.822-21.658-48.179 2.304-36.403 41.37-57.702 88.832-54.323 46.694 3.379 77.824 30.31 75.571 66.714-2.15 34.202-31.898 60.109-75.827 60.109zM465.766 599.808c-12.39 43.52-32.358 56.422-63.386 56.422-3.328 0-6.707-0.512-9.933-1.382-13.466-3.84-24.166-15.053-30.106-31.744-6.093-16.896-6.451-34.509-1.229-54.579 9.472-35.891 34.97-61.901 60.672-61.901 3.379 0 6.758 0.41 9.933 1.382 28.109 7.885 45.722 50.79 34.048 91.802z" />
|
||||||
|
<glyph unicode="" glyph-name="pinterest-with-circle" data-tags="pinterest-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM545.638 344.32c-31.539 2.406-44.749 18.022-69.427 32.973-13.568-71.219-30.157-139.52-79.309-175.206-15.206 107.725 22.221 188.518 39.629 274.381-29.645 49.92 3.533 150.323 66.099 125.645 76.954-30.515-66.662-185.6 29.747-205.005 100.659-20.173 141.773 174.694 79.36 237.978-90.214 91.494-262.502 2.099-241.306-128.87 5.12-32 38.246-41.728 13.21-85.914-57.702 12.8-74.957 58.317-72.704 118.989 3.533 99.328 89.242 168.909 175.155 178.483 108.698 12.083 210.688-39.885 224.819-142.182 15.821-115.405-49.101-240.282-165.274-231.27z" />
|
||||||
|
<glyph unicode="" glyph-name="twitter-with-circle" data-tags="twitter-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM711.936 549.683c0.205-4.198 0.256-8.397 0.256-12.493 0-128-97.331-275.507-275.405-275.507-54.682 0-105.574 15.974-148.378 43.52 7.526-0.922 15.258-1.28 23.091-1.28 45.363 0 87.091 15.411 120.218 41.421-42.342 0.819-78.080 28.774-90.419 67.174 5.888-1.075 11.93-1.69 18.176-1.69 8.806 0 17.408 1.178 25.498 3.379-44.288 8.909-77.67 48.026-77.67 94.925v1.178c13.056-7.219 28.006-11.622 43.878-12.134-26.010 17.408-43.059 47.002-43.059 80.64 0 17.715 4.762 34.406 13.107 48.691 47.77-58.573 119.040-97.075 199.526-101.222-1.69 7.117-2.509 14.49-2.509 22.118 0 53.402 43.315 96.819 96.819 96.819 27.802 0 52.992-11.776 70.656-30.618 22.067 4.403 42.752 12.39 61.44 23.501-7.219-22.579-22.528-41.574-42.547-53.606 19.61 2.406 38.246 7.578 55.603 15.309-12.954-19.405-29.389-36.506-48.282-50.125z" />
|
||||||
|
<glyph unicode="" glyph-name="message-circle" data-tags="message-circle" d="M938.667 448.128v21.205c0 0.725-0.043 1.621-0.085 2.475-5.803 99.755-47.488 190.336-112.725 258.176-68.352 71.125-162.731 117.419-268.843 123.264-0.683 0.043-1.536 0.085-2.347 0.085h-20.864c-59.947 0.683-122.965-13.227-181.931-43.008-52.181-26.496-97.749-63.488-133.931-108.16-56.405-69.717-89.899-158.080-89.941-253.696-0.597-54.4 10.795-111.36 35.157-165.419l-75.605-226.859c-2.816-8.363-3.072-17.835 0-26.965 7.467-22.357 31.616-34.432 53.973-26.965l226.731 75.563c49.493-22.485 105.984-35.243 165.376-35.115 58.539 0.384 115.797 13.141 168.149 36.949 81.579 37.163 151.040 101.248 193.749 186.667 27.477 53.291 43.307 115.84 43.136 181.803zM853.333 447.872c0.128-52.267-12.459-101.333-33.664-142.464-34.176-68.352-88.832-118.827-153.259-148.139-41.387-18.859-86.827-28.971-133.376-29.269-52.096-0.128-101.163 12.459-142.293 33.664-10.624 5.504-22.528 6.059-33.067 2.56l-162.261-54.101 54.101 162.261c3.755 11.221 2.56 22.912-2.389 32.725-23.552 46.677-34.304 96.171-33.792 142.421 0.043 76.331 26.411 145.92 70.955 200.917 28.629 35.371 64.768 64.725 106.24 85.76 46.592 23.552 96.085 34.304 142.336 33.792h19.456c83.712-4.565 158.037-41.003 212.011-97.152 51.285-53.376 84.139-124.416 89.003-202.795z" />
|
||||||
|
<glyph unicode="" glyph-name="maximize-2" data-tags="maximize-2" d="M793.003 768l-225.835-225.835c-16.683-16.683-16.683-43.691 0-60.331s43.691-16.683 60.331 0l225.835 225.835v-153.003c0-23.552 19.115-42.667 42.667-42.667s42.667 19.115 42.667 42.667v256c0 5.803-1.152 11.307-3.243 16.341s-5.163 9.728-9.216 13.781c-0.043 0.043-0.043 0.043-0.085 0.085-3.925 3.925-8.619 7.083-13.781 9.216-5.035 2.091-10.539 3.243-16.341 3.243h-256c-23.552 0-42.667-19.115-42.667-42.667s19.115-42.667 42.667-42.667zM230.997 85.334l225.835 225.835c16.683 16.683 16.683 43.691 0 60.331s-43.691 16.683-60.331 0l-225.835-225.835v153.003c0 23.552-19.115 42.667-42.667 42.667s-42.667-19.115-42.667-42.667v-256c0-23.552 19.115-42.667 42.667-42.667h256c23.552 0 42.667 19.115 42.667 42.667s-19.115 42.667-42.667 42.667z" />
|
||||||
|
<glyph unicode="" glyph-name="minimize-2" data-tags="minimize-2" d="M700.331 554.667l225.835 225.835c16.683 16.683 16.683 43.691 0 60.331s-43.691 16.683-60.331 0l-225.835-225.835v153.003c0 23.552-19.115 42.667-42.667 42.667s-42.667-19.115-42.667-42.667v-256c0-5.803 1.152-11.307 3.243-16.341s5.163-9.728 9.216-13.781c0.043-0.043 0.043-0.043 0.085-0.085 3.925-3.925 8.619-7.083 13.781-9.216 5.035-2.091 10.539-3.243 16.341-3.243h256c23.552 0 42.667 19.115 42.667 42.667s-19.115 42.667-42.667 42.667zM158.165 12.502l225.835 225.835v-153.003c0-23.552 19.115-42.667 42.667-42.667s42.667 19.115 42.667 42.667v256c0 5.803-1.152 11.307-3.243 16.341s-5.163 9.728-9.216 13.781c-0.043 0.043-0.043 0.043-0.085 0.085-4.096 4.053-8.789 7.125-13.781 9.216-5.035 2.091-10.539 3.243-16.341 3.243h-256c-23.552 0-42.667-19.115-42.667-42.667s19.115-42.667 42.667-42.667h153.003l-225.835-225.835c-16.683-16.683-16.683-43.691 0-60.331s43.691-16.683 60.331 0z" />
|
||||||
|
</font></defs></svg>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/fonts/lg.ttf
Normal file
BIN
assets/fonts/lg.woff
Normal file
BIN
assets/fonts/lg.woff2
Normal file
BIN
assets/img/albums/testgal/altman12.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
assets/img/albums/testgal/baerbock-selenskij2.jpg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
assets/img/albums/testgal/baerbock-un2.jpg
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
assets/img/albums/testgal/baerbock2.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
assets/img/albums/testgal/bourla2.jpg
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
assets/img/albums/testgal/fink-wef2.jpg
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
assets/img/albums/testgal/frank-elisabeth2.jpg
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
assets/img/albums/testgal/frank12.jpg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
assets/img/albums/testgal/gates2.jpg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
assets/img/albums/testgal/höcke2.jpg
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
assets/img/albums/testgal/lauterbach2.jpg
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
assets/img/albums/testgal/leyen-bourla2.jpg
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
assets/img/albums/testgal/leyen2.jpg
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
assets/img/albums/testgal/merz2.jpg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
assets/img/albums/testgal/musk2.jpg
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
assets/img/albums/testgal/papperger2.jpg
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
assets/img/albums/testgal/putin2.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
assets/img/albums/testgal/rutte-willem2.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
assets/img/albums/testgal/rutte2.jpg
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
assets/img/albums/testgal/schmidt2.jpg
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
assets/img/albums/testgal/scholz2.jpg
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
assets/img/albums/testgal/schwab-merkel-wef2.jpg
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
assets/img/albums/testgal/schwab2.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
assets/img/albums/testgal/strack2.jpg
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
assets/img/albums/testgal/söder2.jpg
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/img/albums/testgal/tedros2.jpg
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
assets/img/albums/testgal/thiel2.jpg
Normal file
|
After Width: | Height: | Size: 555 KiB |
BIN
assets/img/albums/testgal/trump-vereidigung2.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
assets/img/albums/testgal/trump2.jpg
Normal file
|
After Width: | Height: | Size: 730 KiB |
BIN
assets/img/albums/testgal/trump22.jpg
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
assets/img/albums/testgal/wagenknecht2.jpg
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
assets/img/albums/testgal/wahlurne2.jpg
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
assets/img/albums/testgal/weidel2.jpg
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
assets/img/albums/testgal/willem-beatrix2.jpg
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
assets/img/loading.gif
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
assets/img/scales-of-justice.jpg
Normal file
|
After Width: | Height: | Size: 77 KiB |
161
assets/img/scherbe_perikles.svg
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
assets/img/wahlurne.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
8
assets/js/lightgallery.min.js
vendored
Normal file
2788
assets/js/lightgallery.umd.js
Normal file
206
assets/js/plugins/lg-hash.umd.js
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
/*!
|
||||||
|
* lightgallery | 2.8.2 | November 28th 2024
|
||||||
|
* http://www.lightgalleryjs.com/
|
||||||
|
* Copyright (c) 2020 Sachin Neravath;
|
||||||
|
* @license GPLv3
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (global, factory) {
|
||||||
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||||
|
typeof define === 'function' && define.amd ? define(factory) :
|
||||||
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lgHash = factory());
|
||||||
|
}(this, (function () { 'use strict';
|
||||||
|
|
||||||
|
/*! *****************************************************************************
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
var __assign = function() {
|
||||||
|
__assign = Object.assign || function __assign(t) {
|
||||||
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||||
|
s = arguments[i];
|
||||||
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
return __assign.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of lightGallery events
|
||||||
|
* All events should be documented here
|
||||||
|
* Below interfaces are used to build the website documentations
|
||||||
|
* */
|
||||||
|
var lGEvents = {
|
||||||
|
afterAppendSlide: 'lgAfterAppendSlide',
|
||||||
|
init: 'lgInit',
|
||||||
|
hasVideo: 'lgHasVideo',
|
||||||
|
containerResize: 'lgContainerResize',
|
||||||
|
updateSlides: 'lgUpdateSlides',
|
||||||
|
afterAppendSubHtml: 'lgAfterAppendSubHtml',
|
||||||
|
beforeOpen: 'lgBeforeOpen',
|
||||||
|
afterOpen: 'lgAfterOpen',
|
||||||
|
slideItemLoad: 'lgSlideItemLoad',
|
||||||
|
beforeSlide: 'lgBeforeSlide',
|
||||||
|
afterSlide: 'lgAfterSlide',
|
||||||
|
posterClick: 'lgPosterClick',
|
||||||
|
dragStart: 'lgDragStart',
|
||||||
|
dragMove: 'lgDragMove',
|
||||||
|
dragEnd: 'lgDragEnd',
|
||||||
|
beforeNextSlide: 'lgBeforeNextSlide',
|
||||||
|
beforePrevSlide: 'lgBeforePrevSlide',
|
||||||
|
beforeClose: 'lgBeforeClose',
|
||||||
|
afterClose: 'lgAfterClose',
|
||||||
|
rotateLeft: 'lgRotateLeft',
|
||||||
|
rotateRight: 'lgRotateRight',
|
||||||
|
flipHorizontal: 'lgFlipHorizontal',
|
||||||
|
flipVertical: 'lgFlipVertical',
|
||||||
|
autoplay: 'lgAutoplay',
|
||||||
|
autoplayStart: 'lgAutoplayStart',
|
||||||
|
autoplayStop: 'lgAutoplayStop',
|
||||||
|
};
|
||||||
|
|
||||||
|
var hashSettings = {
|
||||||
|
hash: true,
|
||||||
|
galleryId: '1',
|
||||||
|
customSlideName: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
var Hash = /** @class */ (function () {
|
||||||
|
function Hash(instance, $LG) {
|
||||||
|
// get lightGallery core plugin instance
|
||||||
|
this.core = instance;
|
||||||
|
this.$LG = $LG;
|
||||||
|
// extend module default settings with lightGallery core settings
|
||||||
|
this.settings = __assign(__assign({}, hashSettings), this.core.settings);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
Hash.prototype.init = function () {
|
||||||
|
var _this = this;
|
||||||
|
if (!this.settings.hash) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.oldHash = window.location.hash;
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.buildFromHash();
|
||||||
|
}, 100);
|
||||||
|
// Change hash value on after each slide transition
|
||||||
|
this.core.LGel.on(lGEvents.afterSlide + ".hash", this.onAfterSlide.bind(this));
|
||||||
|
this.core.LGel.on(lGEvents.afterClose + ".hash", this.onCloseAfter.bind(this));
|
||||||
|
// Listen hash change and change the slide according to slide value
|
||||||
|
this.$LG(window).on("hashchange.lg.hash.global" + this.core.lgId, this.onHashchange.bind(this));
|
||||||
|
};
|
||||||
|
Hash.prototype.onAfterSlide = function (event) {
|
||||||
|
var slideName = this.core.galleryItems[event.detail.index].slideName;
|
||||||
|
slideName = this.settings.customSlideName
|
||||||
|
? slideName || event.detail.index
|
||||||
|
: event.detail.index;
|
||||||
|
if (history.replaceState) {
|
||||||
|
history.replaceState(null, '', window.location.pathname +
|
||||||
|
window.location.search +
|
||||||
|
'#lg=' +
|
||||||
|
this.settings.galleryId +
|
||||||
|
'&slide=' +
|
||||||
|
slideName);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
window.location.hash =
|
||||||
|
'lg=' + this.settings.galleryId + '&slide=' + slideName;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Get index of the slide from custom slideName. Has to be a public method. Used in hash plugin
|
||||||
|
* @param {String} hash
|
||||||
|
* @returns {Number} Index of the slide.
|
||||||
|
*/
|
||||||
|
Hash.prototype.getIndexFromUrl = function (hash) {
|
||||||
|
if (hash === void 0) { hash = window.location.hash; }
|
||||||
|
var slideName = hash.split('&slide=')[1];
|
||||||
|
var _idx = 0;
|
||||||
|
if (this.settings.customSlideName) {
|
||||||
|
for (var index = 0; index < this.core.galleryItems.length; index++) {
|
||||||
|
var dynamicEl = this.core.galleryItems[index];
|
||||||
|
if (dynamicEl.slideName === slideName) {
|
||||||
|
_idx = index;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_idx = parseInt(slideName, 10);
|
||||||
|
}
|
||||||
|
return isNaN(_idx) ? 0 : _idx;
|
||||||
|
};
|
||||||
|
// Build Gallery if gallery id exist in the URL
|
||||||
|
Hash.prototype.buildFromHash = function () {
|
||||||
|
// if dynamic option is enabled execute immediately
|
||||||
|
var _hash = window.location.hash;
|
||||||
|
if (_hash.indexOf('lg=' + this.settings.galleryId) > 0) {
|
||||||
|
// This class is used to remove the initial animation if galleryId present in the URL
|
||||||
|
this.$LG(document.body).addClass('lg-from-hash');
|
||||||
|
var index = this.getIndexFromUrl(_hash);
|
||||||
|
this.core.openGallery(index);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Hash.prototype.onCloseAfter = function () {
|
||||||
|
// Reset to old hash value
|
||||||
|
if (this.oldHash &&
|
||||||
|
this.oldHash.indexOf('lg=' + this.settings.galleryId) < 0) {
|
||||||
|
if (history.replaceState) {
|
||||||
|
history.replaceState(null, '', this.oldHash);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
window.location.hash = this.oldHash;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (history.replaceState) {
|
||||||
|
history.replaceState(null, document.title, window.location.pathname + window.location.search);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
window.location.hash = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Hash.prototype.onHashchange = function () {
|
||||||
|
if (!this.core.lgOpened)
|
||||||
|
return;
|
||||||
|
var _hash = window.location.hash;
|
||||||
|
var index = this.getIndexFromUrl(_hash);
|
||||||
|
// it galleryId doesn't exist in the url close the gallery
|
||||||
|
if (_hash.indexOf('lg=' + this.settings.galleryId) > -1) {
|
||||||
|
this.core.slide(index, false, false);
|
||||||
|
}
|
||||||
|
else if (this.core.lGalleryOn) {
|
||||||
|
this.core.closeGallery();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Hash.prototype.closeGallery = function () {
|
||||||
|
if (this.settings.hash) {
|
||||||
|
this.$LG(document.body).removeClass('lg-from-hash');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Hash.prototype.destroy = function () {
|
||||||
|
this.core.LGel.off('.lg.hash');
|
||||||
|
this.core.LGel.off('.hash');
|
||||||
|
this.$LG(window).off("hashchange.lg.hash.global" + this.core.lgId);
|
||||||
|
};
|
||||||
|
return Hash;
|
||||||
|
}());
|
||||||
|
|
||||||
|
return Hash;
|
||||||
|
|
||||||
|
})));
|
||||||
|
|
||||||
226
assets/js/plugins/lg-share.umd.js
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
/*!
|
||||||
|
* lightgallery | 2.8.2 | November 28th 2024
|
||||||
|
* http://www.lightgalleryjs.com/
|
||||||
|
* Copyright (c) 2020 Sachin Neravath;
|
||||||
|
* @license GPLv3
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (global, factory) {
|
||||||
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||||
|
typeof define === 'function' && define.amd ? define(factory) :
|
||||||
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lgShare = factory());
|
||||||
|
}(this, (function () { 'use strict';
|
||||||
|
|
||||||
|
/*! *****************************************************************************
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
var __assign = function() {
|
||||||
|
__assign = Object.assign || function __assign(t) {
|
||||||
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||||
|
s = arguments[i];
|
||||||
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
return __assign.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
function __spreadArrays() {
|
||||||
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
||||||
|
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
||||||
|
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
||||||
|
r[k] = a[j];
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
var shareSettings = {
|
||||||
|
share: true,
|
||||||
|
facebook: true,
|
||||||
|
facebookDropdownText: 'Facebook',
|
||||||
|
twitter: true,
|
||||||
|
twitterDropdownText: 'Twitter',
|
||||||
|
pinterest: true,
|
||||||
|
pinterestDropdownText: 'Pinterest',
|
||||||
|
additionalShareOptions: [],
|
||||||
|
sharePluginStrings: { share: 'Share' },
|
||||||
|
};
|
||||||
|
|
||||||
|
function getFacebookShareLink(galleryItem) {
|
||||||
|
var facebookBaseUrl = '//www.facebook.com/sharer/sharer.php?u=';
|
||||||
|
return (facebookBaseUrl +
|
||||||
|
encodeURIComponent(galleryItem.facebookShareUrl || window.location.href));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTwitterShareLink(galleryItem) {
|
||||||
|
var twitterBaseUrl = '//twitter.com/intent/tweet?text=';
|
||||||
|
var url = encodeURIComponent(galleryItem.twitterShareUrl || window.location.href);
|
||||||
|
var text = galleryItem.tweetText;
|
||||||
|
return twitterBaseUrl + text + '&url=' + url;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPinterestShareLink(galleryItem) {
|
||||||
|
var pinterestBaseUrl = 'http://www.pinterest.com/pin/create/button/?url=';
|
||||||
|
var description = galleryItem.pinterestText;
|
||||||
|
var media = encodeURIComponent(galleryItem.src);
|
||||||
|
var url = encodeURIComponent(galleryItem.pinterestShareUrl || window.location.href);
|
||||||
|
return (pinterestBaseUrl +
|
||||||
|
url +
|
||||||
|
'&media=' +
|
||||||
|
media +
|
||||||
|
'&description=' +
|
||||||
|
description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of lightGallery events
|
||||||
|
* All events should be documented here
|
||||||
|
* Below interfaces are used to build the website documentations
|
||||||
|
* */
|
||||||
|
var lGEvents = {
|
||||||
|
afterAppendSlide: 'lgAfterAppendSlide',
|
||||||
|
init: 'lgInit',
|
||||||
|
hasVideo: 'lgHasVideo',
|
||||||
|
containerResize: 'lgContainerResize',
|
||||||
|
updateSlides: 'lgUpdateSlides',
|
||||||
|
afterAppendSubHtml: 'lgAfterAppendSubHtml',
|
||||||
|
beforeOpen: 'lgBeforeOpen',
|
||||||
|
afterOpen: 'lgAfterOpen',
|
||||||
|
slideItemLoad: 'lgSlideItemLoad',
|
||||||
|
beforeSlide: 'lgBeforeSlide',
|
||||||
|
afterSlide: 'lgAfterSlide',
|
||||||
|
posterClick: 'lgPosterClick',
|
||||||
|
dragStart: 'lgDragStart',
|
||||||
|
dragMove: 'lgDragMove',
|
||||||
|
dragEnd: 'lgDragEnd',
|
||||||
|
beforeNextSlide: 'lgBeforeNextSlide',
|
||||||
|
beforePrevSlide: 'lgBeforePrevSlide',
|
||||||
|
beforeClose: 'lgBeforeClose',
|
||||||
|
afterClose: 'lgAfterClose',
|
||||||
|
rotateLeft: 'lgRotateLeft',
|
||||||
|
rotateRight: 'lgRotateRight',
|
||||||
|
flipHorizontal: 'lgFlipHorizontal',
|
||||||
|
flipVertical: 'lgFlipVertical',
|
||||||
|
autoplay: 'lgAutoplay',
|
||||||
|
autoplayStart: 'lgAutoplayStart',
|
||||||
|
autoplayStop: 'lgAutoplayStop',
|
||||||
|
};
|
||||||
|
|
||||||
|
var Share = /** @class */ (function () {
|
||||||
|
function Share(instance) {
|
||||||
|
this.shareOptions = [];
|
||||||
|
// get lightGallery core plugin instance
|
||||||
|
this.core = instance;
|
||||||
|
// extend module default settings with lightGallery core settings
|
||||||
|
this.settings = __assign(__assign({}, shareSettings), this.core.settings);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
Share.prototype.init = function () {
|
||||||
|
if (!this.settings.share) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.shareOptions = __spreadArrays(this.getDefaultShareOptions(), this.settings.additionalShareOptions);
|
||||||
|
this.setLgShareMarkup();
|
||||||
|
this.core.outer
|
||||||
|
.find('.lg-share .lg-dropdown')
|
||||||
|
.append(this.getShareListHtml());
|
||||||
|
this.core.LGel.on(lGEvents.afterSlide + ".share", this.onAfterSlide.bind(this));
|
||||||
|
};
|
||||||
|
Share.prototype.getShareListHtml = function () {
|
||||||
|
var shareHtml = '';
|
||||||
|
this.shareOptions.forEach(function (shareOption) {
|
||||||
|
shareHtml += shareOption.dropdownHTML;
|
||||||
|
});
|
||||||
|
return shareHtml;
|
||||||
|
};
|
||||||
|
Share.prototype.setLgShareMarkup = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.core.$toolbar.append("<button type=\"button\" aria-label=\"" + this.settings.sharePluginStrings['share'] + "\" aria-haspopup=\"true\" aria-expanded=\"false\" class=\"lg-share lg-icon\">\n <ul class=\"lg-dropdown\" style=\"position: absolute;\"></ul></button>");
|
||||||
|
this.core.outer.append('<div class="lg-dropdown-overlay"></div>');
|
||||||
|
var $shareButton = this.core.outer.find('.lg-share');
|
||||||
|
$shareButton.first().on('click.lg', function () {
|
||||||
|
_this.core.outer.toggleClass('lg-dropdown-active');
|
||||||
|
if (_this.core.outer.hasClass('lg-dropdown-active')) {
|
||||||
|
_this.core.outer.attr('aria-expanded', true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_this.core.outer.attr('aria-expanded', false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.core.outer
|
||||||
|
.find('.lg-dropdown-overlay')
|
||||||
|
.first()
|
||||||
|
.on('click.lg', function () {
|
||||||
|
_this.core.outer.removeClass('lg-dropdown-active');
|
||||||
|
_this.core.outer.attr('aria-expanded', false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Share.prototype.onAfterSlide = function (event) {
|
||||||
|
var _this = this;
|
||||||
|
var index = event.detail.index;
|
||||||
|
var currentItem = this.core.galleryItems[index];
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.shareOptions.forEach(function (shareOption) {
|
||||||
|
var selector = shareOption.selector;
|
||||||
|
_this.core.outer
|
||||||
|
.find(selector)
|
||||||
|
.attr('href', shareOption.generateLink(currentItem));
|
||||||
|
});
|
||||||
|
}, 100);
|
||||||
|
};
|
||||||
|
Share.prototype.getShareListItemHTML = function (type, text) {
|
||||||
|
return "<li><a class=\"lg-share-" + type + "\" rel=\"noopener\" target=\"_blank\"><span class=\"lg-icon\"></span><span class=\"lg-dropdown-text\">" + text + "</span></a></li>";
|
||||||
|
};
|
||||||
|
Share.prototype.getDefaultShareOptions = function () {
|
||||||
|
return __spreadArrays((this.settings.facebook
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
type: 'facebook',
|
||||||
|
generateLink: getFacebookShareLink,
|
||||||
|
dropdownHTML: this.getShareListItemHTML('facebook', this.settings.facebookDropdownText),
|
||||||
|
selector: '.lg-share-facebook',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []), (this.settings.twitter
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
type: 'twitter',
|
||||||
|
generateLink: getTwitterShareLink,
|
||||||
|
dropdownHTML: this.getShareListItemHTML('twitter', this.settings.twitterDropdownText),
|
||||||
|
selector: '.lg-share-twitter',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []), (this.settings.pinterest
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
type: 'pinterest',
|
||||||
|
generateLink: getPinterestShareLink,
|
||||||
|
dropdownHTML: this.getShareListItemHTML('pinterest', this.settings.pinterestDropdownText),
|
||||||
|
selector: '.lg-share-pinterest',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []));
|
||||||
|
};
|
||||||
|
Share.prototype.destroy = function () {
|
||||||
|
this.core.outer.find('.lg-dropdown-overlay').remove();
|
||||||
|
this.core.outer.find('.lg-share').remove();
|
||||||
|
this.core.LGel.off('.lg.share');
|
||||||
|
this.core.LGel.off('.share');
|
||||||
|
};
|
||||||
|
return Share;
|
||||||
|
}());
|
||||||
|
|
||||||
|
return Share;
|
||||||
|
|
||||||
|
})));
|
||||||
494
assets/js/plugins/lg-thumbnail.umd.js
Normal file
@ -0,0 +1,494 @@
|
|||||||
|
/*!
|
||||||
|
* lightgallery | 2.8.2 | November 28th 2024
|
||||||
|
* http://www.lightgalleryjs.com/
|
||||||
|
* Copyright (c) 2020 Sachin Neravath;
|
||||||
|
* @license GPLv3
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (global, factory) {
|
||||||
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||||
|
typeof define === 'function' && define.amd ? define(factory) :
|
||||||
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lgThumbnail = factory());
|
||||||
|
}(this, (function () { 'use strict';
|
||||||
|
|
||||||
|
/*! *****************************************************************************
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
var __assign = function() {
|
||||||
|
__assign = Object.assign || function __assign(t) {
|
||||||
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||||
|
s = arguments[i];
|
||||||
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
return __assign.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
var thumbnailsSettings = {
|
||||||
|
thumbnail: true,
|
||||||
|
animateThumb: true,
|
||||||
|
currentPagerPosition: 'middle',
|
||||||
|
alignThumbnails: 'middle',
|
||||||
|
thumbWidth: 100,
|
||||||
|
thumbHeight: '80px',
|
||||||
|
thumbMargin: 5,
|
||||||
|
appendThumbnailsTo: '.lg-components',
|
||||||
|
toggleThumb: false,
|
||||||
|
enableThumbDrag: true,
|
||||||
|
enableThumbSwipe: true,
|
||||||
|
thumbnailSwipeThreshold: 10,
|
||||||
|
loadYouTubeThumbnail: true,
|
||||||
|
youTubeThumbSize: 1,
|
||||||
|
thumbnailPluginStrings: {
|
||||||
|
toggleThumbnails: 'Toggle thumbnails',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of lightGallery events
|
||||||
|
* All events should be documented here
|
||||||
|
* Below interfaces are used to build the website documentations
|
||||||
|
* */
|
||||||
|
var lGEvents = {
|
||||||
|
afterAppendSlide: 'lgAfterAppendSlide',
|
||||||
|
init: 'lgInit',
|
||||||
|
hasVideo: 'lgHasVideo',
|
||||||
|
containerResize: 'lgContainerResize',
|
||||||
|
updateSlides: 'lgUpdateSlides',
|
||||||
|
afterAppendSubHtml: 'lgAfterAppendSubHtml',
|
||||||
|
beforeOpen: 'lgBeforeOpen',
|
||||||
|
afterOpen: 'lgAfterOpen',
|
||||||
|
slideItemLoad: 'lgSlideItemLoad',
|
||||||
|
beforeSlide: 'lgBeforeSlide',
|
||||||
|
afterSlide: 'lgAfterSlide',
|
||||||
|
posterClick: 'lgPosterClick',
|
||||||
|
dragStart: 'lgDragStart',
|
||||||
|
dragMove: 'lgDragMove',
|
||||||
|
dragEnd: 'lgDragEnd',
|
||||||
|
beforeNextSlide: 'lgBeforeNextSlide',
|
||||||
|
beforePrevSlide: 'lgBeforePrevSlide',
|
||||||
|
beforeClose: 'lgBeforeClose',
|
||||||
|
afterClose: 'lgAfterClose',
|
||||||
|
rotateLeft: 'lgRotateLeft',
|
||||||
|
rotateRight: 'lgRotateRight',
|
||||||
|
flipHorizontal: 'lgFlipHorizontal',
|
||||||
|
flipVertical: 'lgFlipVertical',
|
||||||
|
autoplay: 'lgAutoplay',
|
||||||
|
autoplayStart: 'lgAutoplayStart',
|
||||||
|
autoplayStop: 'lgAutoplayStop',
|
||||||
|
};
|
||||||
|
|
||||||
|
var Thumbnail = /** @class */ (function () {
|
||||||
|
function Thumbnail(instance, $LG) {
|
||||||
|
this.thumbOuterWidth = 0;
|
||||||
|
this.thumbTotalWidth = 0;
|
||||||
|
this.translateX = 0;
|
||||||
|
this.thumbClickable = false;
|
||||||
|
// get lightGallery core plugin instance
|
||||||
|
this.core = instance;
|
||||||
|
this.$LG = $LG;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
Thumbnail.prototype.init = function () {
|
||||||
|
// extend module default settings with lightGallery core settings
|
||||||
|
this.settings = __assign(__assign({}, thumbnailsSettings), this.core.settings);
|
||||||
|
this.thumbOuterWidth = 0;
|
||||||
|
this.thumbTotalWidth =
|
||||||
|
this.core.galleryItems.length *
|
||||||
|
(this.settings.thumbWidth + this.settings.thumbMargin);
|
||||||
|
// Thumbnail animation value
|
||||||
|
this.translateX = 0;
|
||||||
|
this.setAnimateThumbStyles();
|
||||||
|
if (!this.core.settings.allowMediaOverlap) {
|
||||||
|
this.settings.toggleThumb = false;
|
||||||
|
}
|
||||||
|
if (this.settings.thumbnail) {
|
||||||
|
this.build();
|
||||||
|
if (this.settings.animateThumb) {
|
||||||
|
if (this.settings.enableThumbDrag) {
|
||||||
|
this.enableThumbDrag();
|
||||||
|
}
|
||||||
|
if (this.settings.enableThumbSwipe) {
|
||||||
|
this.enableThumbSwipe();
|
||||||
|
}
|
||||||
|
this.thumbClickable = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.thumbClickable = true;
|
||||||
|
}
|
||||||
|
this.toggleThumbBar();
|
||||||
|
this.thumbKeyPress();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.build = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.setThumbMarkup();
|
||||||
|
this.manageActiveClassOnSlideChange();
|
||||||
|
this.$lgThumb.first().on('click.lg touchend.lg', function (e) {
|
||||||
|
var $target = _this.$LG(e.target);
|
||||||
|
if (!$target.hasAttribute('data-lg-item-id')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setTimeout(function () {
|
||||||
|
// In IE9 and bellow touch does not support
|
||||||
|
// Go to slide if browser does not support css transitions
|
||||||
|
if (_this.thumbClickable && !_this.core.lgBusy) {
|
||||||
|
var index = parseInt($target.attr('data-lg-item-id'));
|
||||||
|
_this.core.slide(index, false, true, false);
|
||||||
|
}
|
||||||
|
}, 50);
|
||||||
|
});
|
||||||
|
this.core.LGel.on(lGEvents.beforeSlide + ".thumb", function (event) {
|
||||||
|
var index = event.detail.index;
|
||||||
|
_this.animateThumb(index);
|
||||||
|
});
|
||||||
|
this.core.LGel.on(lGEvents.beforeOpen + ".thumb", function () {
|
||||||
|
_this.thumbOuterWidth = _this.core.outer.get().offsetWidth;
|
||||||
|
});
|
||||||
|
this.core.LGel.on(lGEvents.updateSlides + ".thumb", function () {
|
||||||
|
_this.rebuildThumbnails();
|
||||||
|
});
|
||||||
|
this.core.LGel.on(lGEvents.containerResize + ".thumb", function () {
|
||||||
|
if (!_this.core.lgOpened)
|
||||||
|
return;
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.thumbOuterWidth = _this.core.outer.get().offsetWidth;
|
||||||
|
_this.animateThumb(_this.core.index);
|
||||||
|
_this.thumbOuterWidth = _this.core.outer.get().offsetWidth;
|
||||||
|
}, 50);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.setThumbMarkup = function () {
|
||||||
|
var thumbOuterClassNames = 'lg-thumb-outer ';
|
||||||
|
if (this.settings.alignThumbnails) {
|
||||||
|
thumbOuterClassNames += "lg-thumb-align-" + this.settings.alignThumbnails;
|
||||||
|
}
|
||||||
|
var html = "<div class=\"" + thumbOuterClassNames + "\">\n <div class=\"lg-thumb lg-group\">\n </div>\n </div>";
|
||||||
|
this.core.outer.addClass('lg-has-thumb');
|
||||||
|
if (this.settings.appendThumbnailsTo === '.lg-components') {
|
||||||
|
this.core.$lgComponents.append(html);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.core.outer.append(html);
|
||||||
|
}
|
||||||
|
this.$thumbOuter = this.core.outer.find('.lg-thumb-outer').first();
|
||||||
|
this.$lgThumb = this.core.outer.find('.lg-thumb').first();
|
||||||
|
if (this.settings.animateThumb) {
|
||||||
|
this.core.outer
|
||||||
|
.find('.lg-thumb')
|
||||||
|
.css('transition-duration', this.core.settings.speed + 'ms')
|
||||||
|
.css('width', this.thumbTotalWidth + 'px')
|
||||||
|
.css('position', 'relative');
|
||||||
|
}
|
||||||
|
this.setThumbItemHtml(this.core.galleryItems);
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.enableThumbDrag = function () {
|
||||||
|
var _this = this;
|
||||||
|
var thumbDragUtils = {
|
||||||
|
cords: {
|
||||||
|
startX: 0,
|
||||||
|
endX: 0,
|
||||||
|
},
|
||||||
|
isMoved: false,
|
||||||
|
newTranslateX: 0,
|
||||||
|
startTime: new Date(),
|
||||||
|
endTime: new Date(),
|
||||||
|
touchMoveTime: 0,
|
||||||
|
};
|
||||||
|
var isDragging = false;
|
||||||
|
this.$thumbOuter.addClass('lg-grab');
|
||||||
|
this.core.outer
|
||||||
|
.find('.lg-thumb')
|
||||||
|
.first()
|
||||||
|
.on('mousedown.lg.thumb', function (e) {
|
||||||
|
if (_this.thumbTotalWidth > _this.thumbOuterWidth) {
|
||||||
|
// execute only on .lg-object
|
||||||
|
e.preventDefault();
|
||||||
|
thumbDragUtils.cords.startX = e.pageX;
|
||||||
|
thumbDragUtils.startTime = new Date();
|
||||||
|
_this.thumbClickable = false;
|
||||||
|
isDragging = true;
|
||||||
|
// ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723
|
||||||
|
_this.core.outer.get().scrollLeft += 1;
|
||||||
|
_this.core.outer.get().scrollLeft -= 1;
|
||||||
|
// *
|
||||||
|
_this.$thumbOuter
|
||||||
|
.removeClass('lg-grab')
|
||||||
|
.addClass('lg-grabbing');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$LG(window).on("mousemove.lg.thumb.global" + this.core.lgId, function (e) {
|
||||||
|
if (!_this.core.lgOpened)
|
||||||
|
return;
|
||||||
|
if (isDragging) {
|
||||||
|
thumbDragUtils.cords.endX = e.pageX;
|
||||||
|
thumbDragUtils = _this.onThumbTouchMove(thumbDragUtils);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$LG(window).on("mouseup.lg.thumb.global" + this.core.lgId, function () {
|
||||||
|
if (!_this.core.lgOpened)
|
||||||
|
return;
|
||||||
|
if (thumbDragUtils.isMoved) {
|
||||||
|
thumbDragUtils = _this.onThumbTouchEnd(thumbDragUtils);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_this.thumbClickable = true;
|
||||||
|
}
|
||||||
|
if (isDragging) {
|
||||||
|
isDragging = false;
|
||||||
|
_this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.enableThumbSwipe = function () {
|
||||||
|
var _this = this;
|
||||||
|
var thumbDragUtils = {
|
||||||
|
cords: {
|
||||||
|
startX: 0,
|
||||||
|
endX: 0,
|
||||||
|
},
|
||||||
|
isMoved: false,
|
||||||
|
newTranslateX: 0,
|
||||||
|
startTime: new Date(),
|
||||||
|
endTime: new Date(),
|
||||||
|
touchMoveTime: 0,
|
||||||
|
};
|
||||||
|
this.$lgThumb.on('touchstart.lg', function (e) {
|
||||||
|
if (_this.thumbTotalWidth > _this.thumbOuterWidth) {
|
||||||
|
e.preventDefault();
|
||||||
|
thumbDragUtils.cords.startX = e.targetTouches[0].pageX;
|
||||||
|
_this.thumbClickable = false;
|
||||||
|
thumbDragUtils.startTime = new Date();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$lgThumb.on('touchmove.lg', function (e) {
|
||||||
|
if (_this.thumbTotalWidth > _this.thumbOuterWidth) {
|
||||||
|
e.preventDefault();
|
||||||
|
thumbDragUtils.cords.endX = e.targetTouches[0].pageX;
|
||||||
|
thumbDragUtils = _this.onThumbTouchMove(thumbDragUtils);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$lgThumb.on('touchend.lg', function () {
|
||||||
|
if (thumbDragUtils.isMoved) {
|
||||||
|
thumbDragUtils = _this.onThumbTouchEnd(thumbDragUtils);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_this.thumbClickable = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// Rebuild thumbnails
|
||||||
|
Thumbnail.prototype.rebuildThumbnails = function () {
|
||||||
|
var _this = this;
|
||||||
|
// Remove transitions
|
||||||
|
this.$thumbOuter.addClass('lg-rebuilding-thumbnails');
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.thumbTotalWidth =
|
||||||
|
_this.core.galleryItems.length *
|
||||||
|
(_this.settings.thumbWidth + _this.settings.thumbMargin);
|
||||||
|
_this.$lgThumb.css('width', _this.thumbTotalWidth + 'px');
|
||||||
|
_this.$lgThumb.empty();
|
||||||
|
_this.setThumbItemHtml(_this.core.galleryItems);
|
||||||
|
_this.animateThumb(_this.core.index);
|
||||||
|
}, 50);
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.$thumbOuter.removeClass('lg-rebuilding-thumbnails');
|
||||||
|
}, 200);
|
||||||
|
};
|
||||||
|
// @ts-check
|
||||||
|
Thumbnail.prototype.setTranslate = function (value) {
|
||||||
|
this.$lgThumb.css('transform', 'translate3d(-' + value + 'px, 0px, 0px)');
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.getPossibleTransformX = function (left) {
|
||||||
|
if (left > this.thumbTotalWidth - this.thumbOuterWidth) {
|
||||||
|
left = this.thumbTotalWidth - this.thumbOuterWidth;
|
||||||
|
}
|
||||||
|
if (left < 0) {
|
||||||
|
left = 0;
|
||||||
|
}
|
||||||
|
return left;
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.animateThumb = function (index) {
|
||||||
|
this.$lgThumb.css('transition-duration', this.core.settings.speed + 'ms');
|
||||||
|
if (this.settings.animateThumb) {
|
||||||
|
var position = 0;
|
||||||
|
switch (this.settings.currentPagerPosition) {
|
||||||
|
case 'left':
|
||||||
|
position = 0;
|
||||||
|
break;
|
||||||
|
case 'middle':
|
||||||
|
position =
|
||||||
|
this.thumbOuterWidth / 2 - this.settings.thumbWidth / 2;
|
||||||
|
break;
|
||||||
|
case 'right':
|
||||||
|
position = this.thumbOuterWidth - this.settings.thumbWidth;
|
||||||
|
}
|
||||||
|
this.translateX =
|
||||||
|
(this.settings.thumbWidth + this.settings.thumbMargin) * index -
|
||||||
|
1 -
|
||||||
|
position;
|
||||||
|
if (this.translateX > this.thumbTotalWidth - this.thumbOuterWidth) {
|
||||||
|
this.translateX = this.thumbTotalWidth - this.thumbOuterWidth;
|
||||||
|
}
|
||||||
|
if (this.translateX < 0) {
|
||||||
|
this.translateX = 0;
|
||||||
|
}
|
||||||
|
this.setTranslate(this.translateX);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.onThumbTouchMove = function (thumbDragUtils) {
|
||||||
|
thumbDragUtils.newTranslateX = this.translateX;
|
||||||
|
thumbDragUtils.isMoved = true;
|
||||||
|
thumbDragUtils.touchMoveTime = new Date().valueOf();
|
||||||
|
thumbDragUtils.newTranslateX -=
|
||||||
|
thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;
|
||||||
|
thumbDragUtils.newTranslateX = this.getPossibleTransformX(thumbDragUtils.newTranslateX);
|
||||||
|
// move current slide
|
||||||
|
this.setTranslate(thumbDragUtils.newTranslateX);
|
||||||
|
this.$thumbOuter.addClass('lg-dragging');
|
||||||
|
return thumbDragUtils;
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.onThumbTouchEnd = function (thumbDragUtils) {
|
||||||
|
thumbDragUtils.isMoved = false;
|
||||||
|
thumbDragUtils.endTime = new Date();
|
||||||
|
this.$thumbOuter.removeClass('lg-dragging');
|
||||||
|
var touchDuration = thumbDragUtils.endTime.valueOf() -
|
||||||
|
thumbDragUtils.startTime.valueOf();
|
||||||
|
var distanceXnew = thumbDragUtils.cords.endX - thumbDragUtils.cords.startX;
|
||||||
|
var speedX = Math.abs(distanceXnew) / touchDuration;
|
||||||
|
// Some magical numbers
|
||||||
|
// Can be improved
|
||||||
|
if (speedX > 0.15 &&
|
||||||
|
thumbDragUtils.endTime.valueOf() - thumbDragUtils.touchMoveTime < 30) {
|
||||||
|
speedX += 1;
|
||||||
|
if (speedX > 2) {
|
||||||
|
speedX += 1;
|
||||||
|
}
|
||||||
|
speedX =
|
||||||
|
speedX +
|
||||||
|
speedX * (Math.abs(distanceXnew) / this.thumbOuterWidth);
|
||||||
|
this.$lgThumb.css('transition-duration', Math.min(speedX - 1, 2) + 'settings');
|
||||||
|
distanceXnew = distanceXnew * speedX;
|
||||||
|
this.translateX = this.getPossibleTransformX(this.translateX - distanceXnew);
|
||||||
|
this.setTranslate(this.translateX);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.translateX = thumbDragUtils.newTranslateX;
|
||||||
|
}
|
||||||
|
if (Math.abs(thumbDragUtils.cords.endX - thumbDragUtils.cords.startX) <
|
||||||
|
this.settings.thumbnailSwipeThreshold) {
|
||||||
|
this.thumbClickable = true;
|
||||||
|
}
|
||||||
|
return thumbDragUtils;
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.getThumbHtml = function (thumb, index, alt) {
|
||||||
|
var slideVideoInfo = this.core.galleryItems[index].__slideVideoInfo || {};
|
||||||
|
var thumbImg;
|
||||||
|
if (slideVideoInfo.youtube) {
|
||||||
|
if (this.settings.loadYouTubeThumbnail) {
|
||||||
|
thumbImg =
|
||||||
|
'//img.youtube.com/vi/' +
|
||||||
|
slideVideoInfo.youtube[1] +
|
||||||
|
'/' +
|
||||||
|
this.settings.youTubeThumbSize +
|
||||||
|
'.jpg';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
thumbImg = thumb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
thumbImg = thumb;
|
||||||
|
}
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.setAttribute('data-lg-item-id', index + '');
|
||||||
|
div.className = "lg-thumb-item " + (index === this.core.index ? 'active' : '');
|
||||||
|
div.style.cssText = "width: " + this.settings.thumbWidth + "px; height: " + this.settings.thumbHeight + "; margin-right: " + this.settings.thumbMargin + "px;";
|
||||||
|
var img = document.createElement('img');
|
||||||
|
img.alt = alt || '';
|
||||||
|
img.setAttribute('data-lg-item-id', index + '');
|
||||||
|
img.src = thumbImg;
|
||||||
|
div.appendChild(img);
|
||||||
|
return div;
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.setThumbItemHtml = function (items) {
|
||||||
|
for (var i = 0; i < items.length; i++) {
|
||||||
|
var thumb = this.getThumbHtml(items[i].thumb, i, items[i].alt);
|
||||||
|
this.$lgThumb.append(thumb);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.setAnimateThumbStyles = function () {
|
||||||
|
if (this.settings.animateThumb) {
|
||||||
|
this.core.outer.addClass('lg-animate-thumb');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// Manage thumbnail active calss
|
||||||
|
Thumbnail.prototype.manageActiveClassOnSlideChange = function () {
|
||||||
|
var _this = this;
|
||||||
|
// manage active class for thumbnail
|
||||||
|
this.core.LGel.on(lGEvents.beforeSlide + ".thumb", function (event) {
|
||||||
|
var $thumb = _this.core.outer.find('.lg-thumb-item');
|
||||||
|
var index = event.detail.index;
|
||||||
|
$thumb.removeClass('active');
|
||||||
|
$thumb.eq(index).addClass('active');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// Toggle thumbnail bar
|
||||||
|
Thumbnail.prototype.toggleThumbBar = function () {
|
||||||
|
var _this = this;
|
||||||
|
if (this.settings.toggleThumb) {
|
||||||
|
this.core.outer.addClass('lg-can-toggle');
|
||||||
|
this.core.$toolbar.append('<button type="button" aria-label="' +
|
||||||
|
this.settings.thumbnailPluginStrings['toggleThumbnails'] +
|
||||||
|
'" class="lg-toggle-thumb lg-icon"></button>');
|
||||||
|
this.core.outer
|
||||||
|
.find('.lg-toggle-thumb')
|
||||||
|
.first()
|
||||||
|
.on('click.lg', function () {
|
||||||
|
_this.core.outer.toggleClass('lg-components-open');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.thumbKeyPress = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.$LG(window).on("keydown.lg.thumb.global" + this.core.lgId, function (e) {
|
||||||
|
if (!_this.core.lgOpened || !_this.settings.toggleThumb)
|
||||||
|
return;
|
||||||
|
if (e.keyCode === 38) {
|
||||||
|
e.preventDefault();
|
||||||
|
_this.core.outer.addClass('lg-components-open');
|
||||||
|
}
|
||||||
|
else if (e.keyCode === 40) {
|
||||||
|
e.preventDefault();
|
||||||
|
_this.core.outer.removeClass('lg-components-open');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Thumbnail.prototype.destroy = function () {
|
||||||
|
if (this.settings.thumbnail) {
|
||||||
|
this.$LG(window).off(".lg.thumb.global" + this.core.lgId);
|
||||||
|
this.core.LGel.off('.lg.thumb');
|
||||||
|
this.core.LGel.off('.thumb');
|
||||||
|
this.$thumbOuter.remove();
|
||||||
|
this.core.outer.removeClass('lg-has-thumb');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return Thumbnail;
|
||||||
|
}());
|
||||||
|
|
||||||
|
return Thumbnail;
|
||||||
|
|
||||||
|
})));
|
||||||
987
assets/js/plugins/lg-zoom.umd.js
Normal file
@ -0,0 +1,987 @@
|
|||||||
|
/*!
|
||||||
|
* lightgallery | 2.8.2 | November 28th 2024
|
||||||
|
* http://www.lightgalleryjs.com/
|
||||||
|
* Copyright (c) 2020 Sachin Neravath;
|
||||||
|
* @license GPLv3
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (global, factory) {
|
||||||
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||||
|
typeof define === 'function' && define.amd ? define(factory) :
|
||||||
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lgZoom = factory());
|
||||||
|
}(this, (function () { 'use strict';
|
||||||
|
|
||||||
|
/*! *****************************************************************************
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
***************************************************************************** */
|
||||||
|
|
||||||
|
var __assign = function() {
|
||||||
|
__assign = Object.assign || function __assign(t) {
|
||||||
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||||
|
s = arguments[i];
|
||||||
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
return __assign.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
var zoomSettings = {
|
||||||
|
scale: 1,
|
||||||
|
zoom: true,
|
||||||
|
infiniteZoom: true,
|
||||||
|
actualSize: true,
|
||||||
|
showZoomInOutIcons: false,
|
||||||
|
actualSizeIcons: {
|
||||||
|
zoomIn: 'lg-zoom-in',
|
||||||
|
zoomOut: 'lg-zoom-out',
|
||||||
|
},
|
||||||
|
enableZoomAfter: 300,
|
||||||
|
zoomPluginStrings: {
|
||||||
|
zoomIn: 'Zoom in',
|
||||||
|
zoomOut: 'Zoom out',
|
||||||
|
viewActualSize: 'View actual size',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of lightGallery events
|
||||||
|
* All events should be documented here
|
||||||
|
* Below interfaces are used to build the website documentations
|
||||||
|
* */
|
||||||
|
var lGEvents = {
|
||||||
|
afterAppendSlide: 'lgAfterAppendSlide',
|
||||||
|
init: 'lgInit',
|
||||||
|
hasVideo: 'lgHasVideo',
|
||||||
|
containerResize: 'lgContainerResize',
|
||||||
|
updateSlides: 'lgUpdateSlides',
|
||||||
|
afterAppendSubHtml: 'lgAfterAppendSubHtml',
|
||||||
|
beforeOpen: 'lgBeforeOpen',
|
||||||
|
afterOpen: 'lgAfterOpen',
|
||||||
|
slideItemLoad: 'lgSlideItemLoad',
|
||||||
|
beforeSlide: 'lgBeforeSlide',
|
||||||
|
afterSlide: 'lgAfterSlide',
|
||||||
|
posterClick: 'lgPosterClick',
|
||||||
|
dragStart: 'lgDragStart',
|
||||||
|
dragMove: 'lgDragMove',
|
||||||
|
dragEnd: 'lgDragEnd',
|
||||||
|
beforeNextSlide: 'lgBeforeNextSlide',
|
||||||
|
beforePrevSlide: 'lgBeforePrevSlide',
|
||||||
|
beforeClose: 'lgBeforeClose',
|
||||||
|
afterClose: 'lgAfterClose',
|
||||||
|
rotateLeft: 'lgRotateLeft',
|
||||||
|
rotateRight: 'lgRotateRight',
|
||||||
|
flipHorizontal: 'lgFlipHorizontal',
|
||||||
|
flipVertical: 'lgFlipVertical',
|
||||||
|
autoplay: 'lgAutoplay',
|
||||||
|
autoplayStart: 'lgAutoplayStart',
|
||||||
|
autoplayStop: 'lgAutoplayStop',
|
||||||
|
};
|
||||||
|
|
||||||
|
var ZOOM_TRANSITION_DURATION = 500;
|
||||||
|
var Zoom = /** @class */ (function () {
|
||||||
|
function Zoom(instance, $LG) {
|
||||||
|
// get lightGallery core plugin instance
|
||||||
|
this.core = instance;
|
||||||
|
this.$LG = $LG;
|
||||||
|
this.settings = __assign(__assign({}, zoomSettings), this.core.settings);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
// Append Zoom controls. Actual size, Zoom-in, Zoom-out
|
||||||
|
Zoom.prototype.buildTemplates = function () {
|
||||||
|
var zoomIcons = this.settings.showZoomInOutIcons
|
||||||
|
? "<button id=\"" + this.core.getIdName('lg-zoom-in') + "\" type=\"button\" aria-label=\"" + this.settings.zoomPluginStrings['zoomIn'] + "\" class=\"lg-zoom-in lg-icon\"></button><button id=\"" + this.core.getIdName('lg-zoom-out') + "\" type=\"button\" aria-label=\"" + this.settings.zoomPluginStrings['zoomOut'] + "\" class=\"lg-zoom-out lg-icon\"></button>"
|
||||||
|
: '';
|
||||||
|
if (this.settings.actualSize) {
|
||||||
|
zoomIcons += "<button id=\"" + this.core.getIdName('lg-actual-size') + "\" type=\"button\" aria-label=\"" + this.settings.zoomPluginStrings['viewActualSize'] + "\" class=\"" + this.settings.actualSizeIcons.zoomIn + " lg-icon\"></button>";
|
||||||
|
}
|
||||||
|
this.core.outer.addClass('lg-use-transition-for-zoom');
|
||||||
|
this.core.$toolbar.first().append(zoomIcons);
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @desc Enable zoom option only once the image is completely loaded
|
||||||
|
* If zoomFromOrigin is true, Zoom is enabled once the dummy image has been inserted
|
||||||
|
*
|
||||||
|
* Zoom styles are defined under lg-zoomable CSS class.
|
||||||
|
*/
|
||||||
|
Zoom.prototype.enableZoom = function (event) {
|
||||||
|
var _this = this;
|
||||||
|
// delay will be 0 except first time
|
||||||
|
var _speed = this.settings.enableZoomAfter + event.detail.delay;
|
||||||
|
// set _speed value 0 if gallery opened from direct url and if it is first slide
|
||||||
|
if (this.$LG('body').first().hasClass('lg-from-hash') &&
|
||||||
|
event.detail.delay) {
|
||||||
|
// will execute only once
|
||||||
|
_speed = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Remove lg-from-hash to enable starting animation.
|
||||||
|
this.$LG('body').first().removeClass('lg-from-hash');
|
||||||
|
}
|
||||||
|
this.zoomableTimeout = setTimeout(function () {
|
||||||
|
if (!_this.isImageSlide(_this.core.index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_this.core.getSlideItem(event.detail.index).addClass('lg-zoomable');
|
||||||
|
if (event.detail.index === _this.core.index) {
|
||||||
|
_this.setZoomEssentials();
|
||||||
|
}
|
||||||
|
}, _speed + 30);
|
||||||
|
};
|
||||||
|
Zoom.prototype.enableZoomOnSlideItemLoad = function () {
|
||||||
|
// Add zoomable class
|
||||||
|
this.core.LGel.on(lGEvents.slideItemLoad + ".zoom", this.enableZoom.bind(this));
|
||||||
|
};
|
||||||
|
Zoom.prototype.getDragCords = function (e) {
|
||||||
|
return {
|
||||||
|
x: e.pageX,
|
||||||
|
y: e.pageY,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
Zoom.prototype.getSwipeCords = function (e) {
|
||||||
|
var x = e.touches[0].pageX;
|
||||||
|
var y = e.touches[0].pageY;
|
||||||
|
return {
|
||||||
|
x: x,
|
||||||
|
y: y,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
Zoom.prototype.getDragAllowedAxises = function (scale, scaleDiff) {
|
||||||
|
if (!this.containerRect) {
|
||||||
|
return {
|
||||||
|
allowX: false,
|
||||||
|
allowY: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var $image = this.core
|
||||||
|
.getSlideItem(this.core.index)
|
||||||
|
.find('.lg-image')
|
||||||
|
.first()
|
||||||
|
.get();
|
||||||
|
var height = 0;
|
||||||
|
var width = 0;
|
||||||
|
var rect = $image.getBoundingClientRect();
|
||||||
|
if (scale) {
|
||||||
|
height = $image.offsetHeight * scale;
|
||||||
|
width = $image.offsetWidth * scale;
|
||||||
|
}
|
||||||
|
else if (scaleDiff) {
|
||||||
|
height = rect.height + scaleDiff * rect.height;
|
||||||
|
width = rect.width + scaleDiff * rect.width;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
height = rect.height;
|
||||||
|
width = rect.width;
|
||||||
|
}
|
||||||
|
var allowY = height > this.containerRect.height;
|
||||||
|
var allowX = width > this.containerRect.width;
|
||||||
|
return {
|
||||||
|
allowX: allowX,
|
||||||
|
allowY: allowY,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
Zoom.prototype.setZoomEssentials = function () {
|
||||||
|
this.containerRect = this.core.$content.get().getBoundingClientRect();
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @desc Image zoom
|
||||||
|
* Translate the wrap and scale the image to get better user experience
|
||||||
|
*
|
||||||
|
* @param {String} scale - Zoom decrement/increment value
|
||||||
|
*/
|
||||||
|
Zoom.prototype.zoomImage = function (scale, scaleDiff, reposition, resetToMax) {
|
||||||
|
if (Math.abs(scaleDiff) <= 0)
|
||||||
|
return;
|
||||||
|
var offsetX = this.containerRect.width / 2 + this.containerRect.left;
|
||||||
|
var offsetY = this.containerRect.height / 2 +
|
||||||
|
this.containerRect.top +
|
||||||
|
this.scrollTop;
|
||||||
|
var originalX;
|
||||||
|
var originalY;
|
||||||
|
if (scale === 1) {
|
||||||
|
this.positionChanged = false;
|
||||||
|
}
|
||||||
|
var dragAllowedAxises = this.getDragAllowedAxises(0, scaleDiff);
|
||||||
|
var allowY = dragAllowedAxises.allowY, allowX = dragAllowedAxises.allowX;
|
||||||
|
if (this.positionChanged) {
|
||||||
|
originalX = this.left / (this.scale - scaleDiff);
|
||||||
|
originalY = this.top / (this.scale - scaleDiff);
|
||||||
|
this.pageX = offsetX - originalX;
|
||||||
|
this.pageY = offsetY - originalY;
|
||||||
|
this.positionChanged = false;
|
||||||
|
}
|
||||||
|
var possibleSwipeCords = this.getPossibleSwipeDragCords(scaleDiff);
|
||||||
|
var x;
|
||||||
|
var y;
|
||||||
|
var _x = offsetX - this.pageX;
|
||||||
|
var _y = offsetY - this.pageY;
|
||||||
|
if (scale - scaleDiff > 1) {
|
||||||
|
var scaleVal = (scale - scaleDiff) / Math.abs(scaleDiff);
|
||||||
|
_x =
|
||||||
|
(scaleDiff < 0 ? -_x : _x) +
|
||||||
|
this.left * (scaleVal + (scaleDiff < 0 ? -1 : 1));
|
||||||
|
_y =
|
||||||
|
(scaleDiff < 0 ? -_y : _y) +
|
||||||
|
this.top * (scaleVal + (scaleDiff < 0 ? -1 : 1));
|
||||||
|
x = _x / scaleVal;
|
||||||
|
y = _y / scaleVal;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var scaleVal = (scale - scaleDiff) * scaleDiff;
|
||||||
|
x = _x * scaleVal;
|
||||||
|
y = _y * scaleVal;
|
||||||
|
}
|
||||||
|
if (reposition) {
|
||||||
|
if (allowX) {
|
||||||
|
if (this.isBeyondPossibleLeft(x, possibleSwipeCords.minX)) {
|
||||||
|
x = possibleSwipeCords.minX;
|
||||||
|
}
|
||||||
|
else if (this.isBeyondPossibleRight(x, possibleSwipeCords.maxX)) {
|
||||||
|
x = possibleSwipeCords.maxX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (scale > 1) {
|
||||||
|
if (x < possibleSwipeCords.minX) {
|
||||||
|
x = possibleSwipeCords.minX;
|
||||||
|
}
|
||||||
|
else if (x > possibleSwipeCords.maxX) {
|
||||||
|
x = possibleSwipeCords.maxX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// @todo fix this
|
||||||
|
if (allowY) {
|
||||||
|
if (this.isBeyondPossibleTop(y, possibleSwipeCords.minY)) {
|
||||||
|
y = possibleSwipeCords.minY;
|
||||||
|
}
|
||||||
|
else if (this.isBeyondPossibleBottom(y, possibleSwipeCords.maxY)) {
|
||||||
|
y = possibleSwipeCords.maxY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// If the translate value based on index of beyond the viewport, utilize the available space to prevent image being cut out
|
||||||
|
if (scale > 1) {
|
||||||
|
//If image goes beyond viewport top, use the minim possible translate value
|
||||||
|
if (y < possibleSwipeCords.minY) {
|
||||||
|
y = possibleSwipeCords.minY;
|
||||||
|
}
|
||||||
|
else if (y > possibleSwipeCords.maxY) {
|
||||||
|
y = possibleSwipeCords.maxY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.setZoomStyles({
|
||||||
|
x: x,
|
||||||
|
y: y,
|
||||||
|
scale: scale,
|
||||||
|
});
|
||||||
|
this.left = x;
|
||||||
|
this.top = y;
|
||||||
|
if (resetToMax) {
|
||||||
|
this.setZoomImageSize();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Zoom.prototype.resetImageTranslate = function (index) {
|
||||||
|
if (!this.isImageSlide(index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var $image = this.core.getSlideItem(index).find('.lg-image').first();
|
||||||
|
this.imageReset = false;
|
||||||
|
$image.removeClass('reset-transition reset-transition-y reset-transition-x');
|
||||||
|
this.core.outer.removeClass('lg-actual-size');
|
||||||
|
$image.css('width', 'auto').css('height', 'auto');
|
||||||
|
setTimeout(function () {
|
||||||
|
$image.removeClass('no-transition');
|
||||||
|
}, 10);
|
||||||
|
};
|
||||||
|
Zoom.prototype.setZoomImageSize = function () {
|
||||||
|
var _this = this;
|
||||||
|
var $image = this.core
|
||||||
|
.getSlideItem(this.core.index)
|
||||||
|
.find('.lg-image')
|
||||||
|
.first();
|
||||||
|
setTimeout(function () {
|
||||||
|
var actualSizeScale = _this.getCurrentImageActualSizeScale();
|
||||||
|
if (_this.scale >= actualSizeScale) {
|
||||||
|
$image.addClass('no-transition');
|
||||||
|
_this.imageReset = true;
|
||||||
|
}
|
||||||
|
}, ZOOM_TRANSITION_DURATION);
|
||||||
|
setTimeout(function () {
|
||||||
|
var actualSizeScale = _this.getCurrentImageActualSizeScale();
|
||||||
|
if (_this.scale >= actualSizeScale) {
|
||||||
|
var dragAllowedAxises = _this.getDragAllowedAxises(_this.scale);
|
||||||
|
$image
|
||||||
|
.css('width', $image.get().naturalWidth + 'px')
|
||||||
|
.css('height', $image.get().naturalHeight + 'px');
|
||||||
|
_this.core.outer.addClass('lg-actual-size');
|
||||||
|
if (dragAllowedAxises.allowX && dragAllowedAxises.allowY) {
|
||||||
|
$image.addClass('reset-transition');
|
||||||
|
}
|
||||||
|
else if (dragAllowedAxises.allowX &&
|
||||||
|
!dragAllowedAxises.allowY) {
|
||||||
|
$image.addClass('reset-transition-x');
|
||||||
|
}
|
||||||
|
else if (!dragAllowedAxises.allowX &&
|
||||||
|
dragAllowedAxises.allowY) {
|
||||||
|
$image.addClass('reset-transition-y');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, ZOOM_TRANSITION_DURATION + 50);
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @desc apply scale3d to image and translate to image wrap
|
||||||
|
* @param {style} X,Y and scale
|
||||||
|
*/
|
||||||
|
Zoom.prototype.setZoomStyles = function (style) {
|
||||||
|
var $imageWrap = this.core
|
||||||
|
.getSlideItem(this.core.index)
|
||||||
|
.find('.lg-img-wrap')
|
||||||
|
.first();
|
||||||
|
var $image = this.core
|
||||||
|
.getSlideItem(this.core.index)
|
||||||
|
.find('.lg-image')
|
||||||
|
.first();
|
||||||
|
var $dummyImage = this.core.outer
|
||||||
|
.find('.lg-current .lg-dummy-img')
|
||||||
|
.first();
|
||||||
|
this.scale = style.scale;
|
||||||
|
$image.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');
|
||||||
|
$dummyImage.css('transform', 'scale3d(' + style.scale + ', ' + style.scale + ', 1)');
|
||||||
|
var transform = 'translate3d(' + style.x + 'px, ' + style.y + 'px, 0)';
|
||||||
|
$imageWrap.css('transform', transform);
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @param index - Index of the current slide
|
||||||
|
* @param event - event will be available only if the function is called on clicking/taping the imags
|
||||||
|
*/
|
||||||
|
Zoom.prototype.setActualSize = function (index, event) {
|
||||||
|
var _this = this;
|
||||||
|
if (this.zoomInProgress) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.zoomInProgress = true;
|
||||||
|
var currentItem = this.core.galleryItems[this.core.index];
|
||||||
|
this.resetImageTranslate(index);
|
||||||
|
setTimeout(function () {
|
||||||
|
// Allow zoom only on image
|
||||||
|
if (!currentItem.src ||
|
||||||
|
_this.core.outer.hasClass('lg-first-slide-loading')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var scale = _this.getCurrentImageActualSizeScale();
|
||||||
|
var prevScale = _this.scale;
|
||||||
|
if (_this.core.outer.hasClass('lg-zoomed')) {
|
||||||
|
_this.scale = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_this.scale = _this.getScale(scale);
|
||||||
|
}
|
||||||
|
_this.setPageCords(event);
|
||||||
|
_this.beginZoom(_this.scale);
|
||||||
|
_this.zoomImage(_this.scale, _this.scale - prevScale, true, true);
|
||||||
|
}, 50);
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');
|
||||||
|
}, 60);
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.zoomInProgress = false;
|
||||||
|
}, ZOOM_TRANSITION_DURATION + 110);
|
||||||
|
};
|
||||||
|
Zoom.prototype.getNaturalWidth = function (index) {
|
||||||
|
var $image = this.core.getSlideItem(index).find('.lg-image').first();
|
||||||
|
var naturalWidth = this.core.galleryItems[index].width;
|
||||||
|
return naturalWidth
|
||||||
|
? parseFloat(naturalWidth)
|
||||||
|
: $image.get().naturalWidth;
|
||||||
|
};
|
||||||
|
Zoom.prototype.getActualSizeScale = function (naturalWidth, width) {
|
||||||
|
var _scale;
|
||||||
|
var scale;
|
||||||
|
if (naturalWidth >= width) {
|
||||||
|
_scale = naturalWidth / width;
|
||||||
|
scale = _scale || 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
scale = 1;
|
||||||
|
}
|
||||||
|
return scale;
|
||||||
|
};
|
||||||
|
Zoom.prototype.getCurrentImageActualSizeScale = function () {
|
||||||
|
var $image = this.core
|
||||||
|
.getSlideItem(this.core.index)
|
||||||
|
.find('.lg-image')
|
||||||
|
.first();
|
||||||
|
var width = $image.get().offsetWidth;
|
||||||
|
var naturalWidth = this.getNaturalWidth(this.core.index) || width;
|
||||||
|
return this.getActualSizeScale(naturalWidth, width);
|
||||||
|
};
|
||||||
|
Zoom.prototype.getPageCords = function (event) {
|
||||||
|
var cords = {};
|
||||||
|
if (event) {
|
||||||
|
cords.x = event.pageX || event.touches[0].pageX;
|
||||||
|
cords.y = event.pageY || event.touches[0].pageY;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var containerRect = this.core.$content
|
||||||
|
.get()
|
||||||
|
.getBoundingClientRect();
|
||||||
|
cords.x = containerRect.width / 2 + containerRect.left;
|
||||||
|
cords.y =
|
||||||
|
containerRect.height / 2 + this.scrollTop + containerRect.top;
|
||||||
|
}
|
||||||
|
return cords;
|
||||||
|
};
|
||||||
|
Zoom.prototype.setPageCords = function (event) {
|
||||||
|
var pageCords = this.getPageCords(event);
|
||||||
|
this.pageX = pageCords.x;
|
||||||
|
this.pageY = pageCords.y;
|
||||||
|
};
|
||||||
|
Zoom.prototype.manageActualPixelClassNames = function () {
|
||||||
|
var $actualSize = this.core.getElementById('lg-actual-size');
|
||||||
|
$actualSize
|
||||||
|
.removeClass(this.settings.actualSizeIcons.zoomIn)
|
||||||
|
.addClass(this.settings.actualSizeIcons.zoomOut);
|
||||||
|
};
|
||||||
|
// If true, zoomed - in else zoomed out
|
||||||
|
Zoom.prototype.beginZoom = function (scale) {
|
||||||
|
this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');
|
||||||
|
if (scale > 1) {
|
||||||
|
this.core.outer.addClass('lg-zoomed');
|
||||||
|
this.manageActualPixelClassNames();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.resetZoom();
|
||||||
|
}
|
||||||
|
return scale > 1;
|
||||||
|
};
|
||||||
|
Zoom.prototype.getScale = function (scale) {
|
||||||
|
var actualSizeScale = this.getCurrentImageActualSizeScale();
|
||||||
|
if (scale < 1) {
|
||||||
|
scale = 1;
|
||||||
|
}
|
||||||
|
else if (scale > actualSizeScale) {
|
||||||
|
scale = actualSizeScale;
|
||||||
|
}
|
||||||
|
return scale;
|
||||||
|
};
|
||||||
|
Zoom.prototype.init = function () {
|
||||||
|
var _this = this;
|
||||||
|
if (!this.settings.zoom) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.buildTemplates();
|
||||||
|
this.enableZoomOnSlideItemLoad();
|
||||||
|
var tapped = null;
|
||||||
|
this.core.outer.on('dblclick.lg', function (event) {
|
||||||
|
if (!_this.$LG(event.target).hasClass('lg-image')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_this.setActualSize(_this.core.index, event);
|
||||||
|
});
|
||||||
|
this.core.outer.on('touchstart.lg', function (event) {
|
||||||
|
var $target = _this.$LG(event.target);
|
||||||
|
if (event.touches.length === 1 && $target.hasClass('lg-image')) {
|
||||||
|
if (!tapped) {
|
||||||
|
tapped = setTimeout(function () {
|
||||||
|
tapped = null;
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
clearTimeout(tapped);
|
||||||
|
tapped = null;
|
||||||
|
event.preventDefault();
|
||||||
|
_this.setActualSize(_this.core.index, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.core.LGel.on(lGEvents.containerResize + ".zoom " + lGEvents.rotateRight + ".zoom " + lGEvents.rotateLeft + ".zoom " + lGEvents.flipHorizontal + ".zoom " + lGEvents.flipVertical + ".zoom", function () {
|
||||||
|
if (!_this.core.lgOpened ||
|
||||||
|
!_this.isImageSlide(_this.core.index) ||
|
||||||
|
_this.core.touchAction) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var _LGel = _this.core
|
||||||
|
.getSlideItem(_this.core.index)
|
||||||
|
.find('.lg-img-wrap')
|
||||||
|
.first();
|
||||||
|
_this.top = 0;
|
||||||
|
_this.left = 0;
|
||||||
|
_this.setZoomEssentials();
|
||||||
|
_this.setZoomSwipeStyles(_LGel, { x: 0, y: 0 });
|
||||||
|
_this.positionChanged = true;
|
||||||
|
});
|
||||||
|
// Update zoom on resize and orientationchange
|
||||||
|
this.$LG(window).on("scroll.lg.zoom.global" + this.core.lgId, function () {
|
||||||
|
if (!_this.core.lgOpened)
|
||||||
|
return;
|
||||||
|
_this.scrollTop = _this.$LG(window).scrollTop();
|
||||||
|
});
|
||||||
|
this.core.getElementById('lg-zoom-out').on('click.lg', function () {
|
||||||
|
// Allow zoom only on image
|
||||||
|
if (!_this.isImageSlide(_this.core.index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var timeout = 0;
|
||||||
|
if (_this.imageReset) {
|
||||||
|
_this.resetImageTranslate(_this.core.index);
|
||||||
|
timeout = 50;
|
||||||
|
}
|
||||||
|
setTimeout(function () {
|
||||||
|
var scale = _this.scale - _this.settings.scale;
|
||||||
|
if (scale < 1) {
|
||||||
|
scale = 1;
|
||||||
|
}
|
||||||
|
_this.beginZoom(scale);
|
||||||
|
_this.zoomImage(scale, -_this.settings.scale, true, !_this.settings.infiniteZoom);
|
||||||
|
}, timeout);
|
||||||
|
});
|
||||||
|
this.core.getElementById('lg-zoom-in').on('click.lg', function () {
|
||||||
|
_this.zoomIn();
|
||||||
|
});
|
||||||
|
this.core.getElementById('lg-actual-size').on('click.lg', function () {
|
||||||
|
_this.setActualSize(_this.core.index);
|
||||||
|
});
|
||||||
|
this.core.LGel.on(lGEvents.beforeOpen + ".zoom", function () {
|
||||||
|
_this.core.outer.find('.lg-item').removeClass('lg-zoomable');
|
||||||
|
});
|
||||||
|
this.core.LGel.on(lGEvents.afterOpen + ".zoom", function () {
|
||||||
|
_this.scrollTop = _this.$LG(window).scrollTop();
|
||||||
|
// Set the initial value center
|
||||||
|
_this.pageX = _this.core.outer.width() / 2;
|
||||||
|
_this.pageY = _this.core.outer.height() / 2 + _this.scrollTop;
|
||||||
|
_this.scale = 1;
|
||||||
|
});
|
||||||
|
// Reset zoom on slide change
|
||||||
|
this.core.LGel.on(lGEvents.afterSlide + ".zoom", function (event) {
|
||||||
|
var prevIndex = event.detail.prevIndex;
|
||||||
|
_this.scale = 1;
|
||||||
|
_this.positionChanged = false;
|
||||||
|
_this.zoomInProgress = false;
|
||||||
|
_this.resetZoom(prevIndex);
|
||||||
|
_this.resetImageTranslate(prevIndex);
|
||||||
|
if (_this.isImageSlide(_this.core.index)) {
|
||||||
|
_this.setZoomEssentials();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Drag option after zoom
|
||||||
|
this.zoomDrag();
|
||||||
|
this.pinchZoom();
|
||||||
|
this.zoomSwipe();
|
||||||
|
// Store the zoomable timeout value just to clear it while closing
|
||||||
|
this.zoomableTimeout = false;
|
||||||
|
this.positionChanged = false;
|
||||||
|
this.zoomInProgress = false;
|
||||||
|
};
|
||||||
|
Zoom.prototype.zoomIn = function () {
|
||||||
|
// Allow zoom only on image
|
||||||
|
if (!this.isImageSlide(this.core.index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var scale = this.scale + this.settings.scale;
|
||||||
|
if (!this.settings.infiniteZoom) {
|
||||||
|
scale = this.getScale(scale);
|
||||||
|
}
|
||||||
|
this.beginZoom(scale);
|
||||||
|
this.zoomImage(scale, Math.min(this.settings.scale, scale - this.scale), true, !this.settings.infiniteZoom);
|
||||||
|
};
|
||||||
|
// Reset zoom effect
|
||||||
|
Zoom.prototype.resetZoom = function (index) {
|
||||||
|
this.core.outer.removeClass('lg-zoomed lg-zoom-drag-transition');
|
||||||
|
var $actualSize = this.core.getElementById('lg-actual-size');
|
||||||
|
var $item = this.core.getSlideItem(index !== undefined ? index : this.core.index);
|
||||||
|
$actualSize
|
||||||
|
.removeClass(this.settings.actualSizeIcons.zoomOut)
|
||||||
|
.addClass(this.settings.actualSizeIcons.zoomIn);
|
||||||
|
$item.find('.lg-img-wrap').first().removeAttr('style');
|
||||||
|
$item.find('.lg-image').first().removeAttr('style');
|
||||||
|
this.scale = 1;
|
||||||
|
this.left = 0;
|
||||||
|
this.top = 0;
|
||||||
|
// Reset pagx pagy values to center
|
||||||
|
this.setPageCords();
|
||||||
|
};
|
||||||
|
Zoom.prototype.getTouchDistance = function (e) {
|
||||||
|
return Math.sqrt((e.touches[0].pageX - e.touches[1].pageX) *
|
||||||
|
(e.touches[0].pageX - e.touches[1].pageX) +
|
||||||
|
(e.touches[0].pageY - e.touches[1].pageY) *
|
||||||
|
(e.touches[0].pageY - e.touches[1].pageY));
|
||||||
|
};
|
||||||
|
Zoom.prototype.pinchZoom = function () {
|
||||||
|
var _this = this;
|
||||||
|
var startDist = 0;
|
||||||
|
var pinchStarted = false;
|
||||||
|
var initScale = 1;
|
||||||
|
var prevScale = 0;
|
||||||
|
var $item = this.core.getSlideItem(this.core.index);
|
||||||
|
this.core.outer.on('touchstart.lg', function (e) {
|
||||||
|
$item = _this.core.getSlideItem(_this.core.index);
|
||||||
|
if (!_this.isImageSlide(_this.core.index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (e.touches.length === 2) {
|
||||||
|
e.preventDefault();
|
||||||
|
if (_this.core.outer.hasClass('lg-first-slide-loading')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
initScale = _this.scale || 1;
|
||||||
|
_this.core.outer.removeClass('lg-zoom-drag-transition lg-zoom-dragging');
|
||||||
|
_this.setPageCords(e);
|
||||||
|
_this.resetImageTranslate(_this.core.index);
|
||||||
|
_this.core.touchAction = 'pinch';
|
||||||
|
startDist = _this.getTouchDistance(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.core.$inner.on('touchmove.lg', function (e) {
|
||||||
|
if (e.touches.length === 2 &&
|
||||||
|
_this.core.touchAction === 'pinch' &&
|
||||||
|
(_this.$LG(e.target).hasClass('lg-item') ||
|
||||||
|
$item.get().contains(e.target))) {
|
||||||
|
e.preventDefault();
|
||||||
|
var endDist = _this.getTouchDistance(e);
|
||||||
|
var distance = startDist - endDist;
|
||||||
|
if (!pinchStarted && Math.abs(distance) > 5) {
|
||||||
|
pinchStarted = true;
|
||||||
|
}
|
||||||
|
if (pinchStarted) {
|
||||||
|
prevScale = _this.scale;
|
||||||
|
var _scale = Math.max(1, initScale + -distance * 0.02);
|
||||||
|
_this.scale =
|
||||||
|
Math.round((_scale + Number.EPSILON) * 100) / 100;
|
||||||
|
var diff = _this.scale - prevScale;
|
||||||
|
_this.zoomImage(_this.scale, Math.round((diff + Number.EPSILON) * 100) / 100, false, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.core.$inner.on('touchend.lg', function (e) {
|
||||||
|
if (_this.core.touchAction === 'pinch' &&
|
||||||
|
(_this.$LG(e.target).hasClass('lg-item') ||
|
||||||
|
$item.get().contains(e.target))) {
|
||||||
|
pinchStarted = false;
|
||||||
|
startDist = 0;
|
||||||
|
if (_this.scale <= 1) {
|
||||||
|
_this.resetZoom();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var actualSizeScale = _this.getCurrentImageActualSizeScale();
|
||||||
|
if (_this.scale >= actualSizeScale) {
|
||||||
|
var scaleDiff = actualSizeScale - _this.scale;
|
||||||
|
if (scaleDiff === 0) {
|
||||||
|
scaleDiff = 0.01;
|
||||||
|
}
|
||||||
|
_this.zoomImage(actualSizeScale, scaleDiff, false, true);
|
||||||
|
}
|
||||||
|
_this.manageActualPixelClassNames();
|
||||||
|
_this.core.outer.addClass('lg-zoomed');
|
||||||
|
}
|
||||||
|
_this.core.touchAction = undefined;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Zoom.prototype.touchendZoom = function (startCoords, endCoords, allowX, allowY, touchDuration) {
|
||||||
|
var distanceXnew = endCoords.x - startCoords.x;
|
||||||
|
var distanceYnew = endCoords.y - startCoords.y;
|
||||||
|
var speedX = Math.abs(distanceXnew) / touchDuration + 1;
|
||||||
|
var speedY = Math.abs(distanceYnew) / touchDuration + 1;
|
||||||
|
if (speedX > 2) {
|
||||||
|
speedX += 1;
|
||||||
|
}
|
||||||
|
if (speedY > 2) {
|
||||||
|
speedY += 1;
|
||||||
|
}
|
||||||
|
distanceXnew = distanceXnew * speedX;
|
||||||
|
distanceYnew = distanceYnew * speedY;
|
||||||
|
var _LGel = this.core
|
||||||
|
.getSlideItem(this.core.index)
|
||||||
|
.find('.lg-img-wrap')
|
||||||
|
.first();
|
||||||
|
var distance = {};
|
||||||
|
distance.x = this.left + distanceXnew;
|
||||||
|
distance.y = this.top + distanceYnew;
|
||||||
|
var possibleSwipeCords = this.getPossibleSwipeDragCords();
|
||||||
|
if (Math.abs(distanceXnew) > 15 || Math.abs(distanceYnew) > 15) {
|
||||||
|
if (allowY) {
|
||||||
|
if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {
|
||||||
|
distance.y = possibleSwipeCords.minY;
|
||||||
|
}
|
||||||
|
else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {
|
||||||
|
distance.y = possibleSwipeCords.maxY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (allowX) {
|
||||||
|
if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {
|
||||||
|
distance.x = possibleSwipeCords.minX;
|
||||||
|
}
|
||||||
|
else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {
|
||||||
|
distance.x = possibleSwipeCords.maxX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (allowY) {
|
||||||
|
this.top = distance.y;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
distance.y = this.top;
|
||||||
|
}
|
||||||
|
if (allowX) {
|
||||||
|
this.left = distance.x;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
distance.x = this.left;
|
||||||
|
}
|
||||||
|
this.setZoomSwipeStyles(_LGel, distance);
|
||||||
|
this.positionChanged = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Zoom.prototype.getZoomSwipeCords = function (startCoords, endCoords, allowX, allowY, possibleSwipeCords) {
|
||||||
|
var distance = {};
|
||||||
|
if (allowY) {
|
||||||
|
distance.y = this.top + (endCoords.y - startCoords.y);
|
||||||
|
if (this.isBeyondPossibleTop(distance.y, possibleSwipeCords.minY)) {
|
||||||
|
var diffMinY = possibleSwipeCords.minY - distance.y;
|
||||||
|
distance.y = possibleSwipeCords.minY - diffMinY / 6;
|
||||||
|
}
|
||||||
|
else if (this.isBeyondPossibleBottom(distance.y, possibleSwipeCords.maxY)) {
|
||||||
|
var diffMaxY = distance.y - possibleSwipeCords.maxY;
|
||||||
|
distance.y = possibleSwipeCords.maxY + diffMaxY / 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
distance.y = this.top;
|
||||||
|
}
|
||||||
|
if (allowX) {
|
||||||
|
distance.x = this.left + (endCoords.x - startCoords.x);
|
||||||
|
if (this.isBeyondPossibleLeft(distance.x, possibleSwipeCords.minX)) {
|
||||||
|
var diffMinX = possibleSwipeCords.minX - distance.x;
|
||||||
|
distance.x = possibleSwipeCords.minX - diffMinX / 6;
|
||||||
|
}
|
||||||
|
else if (this.isBeyondPossibleRight(distance.x, possibleSwipeCords.maxX)) {
|
||||||
|
var difMaxX = distance.x - possibleSwipeCords.maxX;
|
||||||
|
distance.x = possibleSwipeCords.maxX + difMaxX / 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
distance.x = this.left;
|
||||||
|
}
|
||||||
|
return distance;
|
||||||
|
};
|
||||||
|
Zoom.prototype.isBeyondPossibleLeft = function (x, minX) {
|
||||||
|
return x >= minX;
|
||||||
|
};
|
||||||
|
Zoom.prototype.isBeyondPossibleRight = function (x, maxX) {
|
||||||
|
return x <= maxX;
|
||||||
|
};
|
||||||
|
Zoom.prototype.isBeyondPossibleTop = function (y, minY) {
|
||||||
|
return y >= minY;
|
||||||
|
};
|
||||||
|
Zoom.prototype.isBeyondPossibleBottom = function (y, maxY) {
|
||||||
|
return y <= maxY;
|
||||||
|
};
|
||||||
|
Zoom.prototype.isImageSlide = function (index) {
|
||||||
|
var currentItem = this.core.galleryItems[index];
|
||||||
|
return this.core.getSlideType(currentItem) === 'image';
|
||||||
|
};
|
||||||
|
Zoom.prototype.getPossibleSwipeDragCords = function (scale) {
|
||||||
|
var $image = this.core
|
||||||
|
.getSlideItem(this.core.index)
|
||||||
|
.find('.lg-image')
|
||||||
|
.first();
|
||||||
|
var bottom = this.core.mediaContainerPosition.bottom;
|
||||||
|
var imgRect = $image.get().getBoundingClientRect();
|
||||||
|
var imageHeight = imgRect.height;
|
||||||
|
var imageWidth = imgRect.width;
|
||||||
|
if (scale) {
|
||||||
|
imageHeight = imageHeight + scale * imageHeight;
|
||||||
|
imageWidth = imageWidth + scale * imageWidth;
|
||||||
|
}
|
||||||
|
var minY = (imageHeight - this.containerRect.height) / 2;
|
||||||
|
var maxY = (this.containerRect.height - imageHeight) / 2 + bottom;
|
||||||
|
var minX = (imageWidth - this.containerRect.width) / 2;
|
||||||
|
var maxX = (this.containerRect.width - imageWidth) / 2;
|
||||||
|
var possibleSwipeCords = {
|
||||||
|
minY: minY,
|
||||||
|
maxY: maxY,
|
||||||
|
minX: minX,
|
||||||
|
maxX: maxX,
|
||||||
|
};
|
||||||
|
return possibleSwipeCords;
|
||||||
|
};
|
||||||
|
Zoom.prototype.setZoomSwipeStyles = function (LGel, distance) {
|
||||||
|
LGel.css('transform', 'translate3d(' + distance.x + 'px, ' + distance.y + 'px, 0)');
|
||||||
|
};
|
||||||
|
Zoom.prototype.zoomSwipe = function () {
|
||||||
|
var _this = this;
|
||||||
|
var startCoords = {};
|
||||||
|
var endCoords = {};
|
||||||
|
var isMoved = false;
|
||||||
|
// Allow x direction drag
|
||||||
|
var allowX = false;
|
||||||
|
// Allow Y direction drag
|
||||||
|
var allowY = false;
|
||||||
|
var startTime = new Date();
|
||||||
|
var endTime = new Date();
|
||||||
|
var possibleSwipeCords;
|
||||||
|
var _LGel;
|
||||||
|
var $item = this.core.getSlideItem(this.core.index);
|
||||||
|
this.core.$inner.on('touchstart.lg', function (e) {
|
||||||
|
// Allow zoom only on image
|
||||||
|
if (!_this.isImageSlide(_this.core.index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$item = _this.core.getSlideItem(_this.core.index);
|
||||||
|
if ((_this.$LG(e.target).hasClass('lg-item') ||
|
||||||
|
$item.get().contains(e.target)) &&
|
||||||
|
e.touches.length === 1 &&
|
||||||
|
_this.core.outer.hasClass('lg-zoomed')) {
|
||||||
|
e.preventDefault();
|
||||||
|
startTime = new Date();
|
||||||
|
_this.core.touchAction = 'zoomSwipe';
|
||||||
|
_LGel = _this.core
|
||||||
|
.getSlideItem(_this.core.index)
|
||||||
|
.find('.lg-img-wrap')
|
||||||
|
.first();
|
||||||
|
var dragAllowedAxises = _this.getDragAllowedAxises(0);
|
||||||
|
allowY = dragAllowedAxises.allowY;
|
||||||
|
allowX = dragAllowedAxises.allowX;
|
||||||
|
if (allowX || allowY) {
|
||||||
|
startCoords = _this.getSwipeCords(e);
|
||||||
|
}
|
||||||
|
possibleSwipeCords = _this.getPossibleSwipeDragCords();
|
||||||
|
// reset opacity and transition duration
|
||||||
|
_this.core.outer.addClass('lg-zoom-dragging lg-zoom-drag-transition');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.core.$inner.on('touchmove.lg', function (e) {
|
||||||
|
if (e.touches.length === 1 &&
|
||||||
|
_this.core.touchAction === 'zoomSwipe' &&
|
||||||
|
(_this.$LG(e.target).hasClass('lg-item') ||
|
||||||
|
$item.get().contains(e.target))) {
|
||||||
|
e.preventDefault();
|
||||||
|
_this.core.touchAction = 'zoomSwipe';
|
||||||
|
endCoords = _this.getSwipeCords(e);
|
||||||
|
var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);
|
||||||
|
if (Math.abs(endCoords.x - startCoords.x) > 15 ||
|
||||||
|
Math.abs(endCoords.y - startCoords.y) > 15) {
|
||||||
|
isMoved = true;
|
||||||
|
_this.setZoomSwipeStyles(_LGel, distance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.core.$inner.on('touchend.lg', function (e) {
|
||||||
|
if (_this.core.touchAction === 'zoomSwipe' &&
|
||||||
|
(_this.$LG(e.target).hasClass('lg-item') ||
|
||||||
|
$item.get().contains(e.target))) {
|
||||||
|
e.preventDefault();
|
||||||
|
_this.core.touchAction = undefined;
|
||||||
|
_this.core.outer.removeClass('lg-zoom-dragging');
|
||||||
|
if (!isMoved) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isMoved = false;
|
||||||
|
endTime = new Date();
|
||||||
|
var touchDuration = endTime.valueOf() - startTime.valueOf();
|
||||||
|
_this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Zoom.prototype.zoomDrag = function () {
|
||||||
|
var _this = this;
|
||||||
|
var startCoords = {};
|
||||||
|
var endCoords = {};
|
||||||
|
var isDragging = false;
|
||||||
|
var isMoved = false;
|
||||||
|
// Allow x direction drag
|
||||||
|
var allowX = false;
|
||||||
|
// Allow Y direction drag
|
||||||
|
var allowY = false;
|
||||||
|
var startTime;
|
||||||
|
var endTime;
|
||||||
|
var possibleSwipeCords;
|
||||||
|
var _LGel;
|
||||||
|
this.core.outer.on('mousedown.lg.zoom', function (e) {
|
||||||
|
// Allow zoom only on image
|
||||||
|
if (!_this.isImageSlide(_this.core.index)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var $item = _this.core.getSlideItem(_this.core.index);
|
||||||
|
if (_this.$LG(e.target).hasClass('lg-item') ||
|
||||||
|
$item.get().contains(e.target)) {
|
||||||
|
startTime = new Date();
|
||||||
|
_LGel = _this.core
|
||||||
|
.getSlideItem(_this.core.index)
|
||||||
|
.find('.lg-img-wrap')
|
||||||
|
.first();
|
||||||
|
var dragAllowedAxises = _this.getDragAllowedAxises(0);
|
||||||
|
allowY = dragAllowedAxises.allowY;
|
||||||
|
allowX = dragAllowedAxises.allowX;
|
||||||
|
if (_this.core.outer.hasClass('lg-zoomed')) {
|
||||||
|
if (_this.$LG(e.target).hasClass('lg-object') &&
|
||||||
|
(allowX || allowY)) {
|
||||||
|
e.preventDefault();
|
||||||
|
startCoords = _this.getDragCords(e);
|
||||||
|
possibleSwipeCords = _this.getPossibleSwipeDragCords();
|
||||||
|
isDragging = true;
|
||||||
|
_this.core.outer
|
||||||
|
.removeClass('lg-grab')
|
||||||
|
.addClass('lg-grabbing lg-zoom-drag-transition lg-zoom-dragging');
|
||||||
|
// reset opacity and transition duration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$LG(window).on("mousemove.lg.zoom.global" + this.core.lgId, function (e) {
|
||||||
|
if (isDragging) {
|
||||||
|
isMoved = true;
|
||||||
|
endCoords = _this.getDragCords(e);
|
||||||
|
var distance = _this.getZoomSwipeCords(startCoords, endCoords, allowX, allowY, possibleSwipeCords);
|
||||||
|
_this.setZoomSwipeStyles(_LGel, distance);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.$LG(window).on("mouseup.lg.zoom.global" + this.core.lgId, function (e) {
|
||||||
|
if (isDragging) {
|
||||||
|
endTime = new Date();
|
||||||
|
isDragging = false;
|
||||||
|
_this.core.outer.removeClass('lg-zoom-dragging');
|
||||||
|
// Fix for chrome mouse move on click
|
||||||
|
if (isMoved &&
|
||||||
|
(startCoords.x !== endCoords.x ||
|
||||||
|
startCoords.y !== endCoords.y)) {
|
||||||
|
endCoords = _this.getDragCords(e);
|
||||||
|
var touchDuration = endTime.valueOf() - startTime.valueOf();
|
||||||
|
_this.touchendZoom(startCoords, endCoords, allowX, allowY, touchDuration);
|
||||||
|
}
|
||||||
|
isMoved = false;
|
||||||
|
}
|
||||||
|
_this.core.outer.removeClass('lg-grabbing').addClass('lg-grab');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Zoom.prototype.closeGallery = function () {
|
||||||
|
this.resetZoom();
|
||||||
|
this.zoomInProgress = false;
|
||||||
|
};
|
||||||
|
Zoom.prototype.destroy = function () {
|
||||||
|
// Unbind all events added by lightGallery zoom plugin
|
||||||
|
this.$LG(window).off(".lg.zoom.global" + this.core.lgId);
|
||||||
|
this.core.LGel.off('.lg.zoom');
|
||||||
|
this.core.LGel.off('.zoom');
|
||||||
|
clearTimeout(this.zoomableTimeout);
|
||||||
|
this.zoomableTimeout = false;
|
||||||
|
};
|
||||||
|
return Zoom;
|
||||||
|
}());
|
||||||
|
|
||||||
|
return Zoom;
|
||||||
|
|
||||||
|
})));
|
||||||
10
blog.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Meldungen
|
||||||
|
---
|
||||||
|
|
||||||
|
{% for post in site.posts %}
|
||||||
|
- [**{{ post.title }}**]({{ post.url }})
|
||||||
|
{{ post.excerpt }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
68
index.html
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
title: Worum geht es?
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
<h1>Scherbengericht <i>jetzt</i></h1>
|
||||||
|
|
||||||
|
<p class="larger">
|
||||||
|
Braucht die real existierende <b>Demokratie</b> eine <b>Machtbegrenzung</b>?
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="wrap1">
|
||||||
|
<img src="assets/img/scherbe_perikles.svg" style="width: 200px;"/>
|
||||||
|
</div>
|
||||||
|
<div class="wrap2">
|
||||||
|
<p>
|
||||||
|
Im antiken griechischen Vorbild – der Demokratie von <b>Athen</b>
|
||||||
|
in der Zeit des <b>Perikles</b> – gab es dafür u.a. die Institution des
|
||||||
|
<b>Scherbengerichts</b> (οστρακισμος), bei der die Bürger jährlich
|
||||||
|
einen Politiker, wenn er der Errichtung der <b>Tyrannei</b> verdächtig
|
||||||
|
war, in die <b>Verbannung</b> wählen konnten. Verbannten wurde für
|
||||||
|
<b>10 Jahre</b> das Eigentum konfisziert, jegliche geschäftliche oder
|
||||||
|
politische Betätigung verboten und unter Androhung von Strafe
|
||||||
|
der Aufenthalt im Land untersagt. Zur Stimmabgabe nutzte man
|
||||||
|
die <b>Scherben</b> zerbrochener Tongefäße.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<p class="larger">
|
||||||
|
Lassen Sie es uns <b>wiederbeleben</b>, machen Sie mit!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="wrap1">
|
||||||
|
<img src="assets/img/scales-of-justice.jpg" style="width: 200px;"/>
|
||||||
|
</div>
|
||||||
|
<div class="wrap2">
|
||||||
|
Von welchem <b>Politiker</b> oder <b>Oligarchen</b>
|
||||||
|
geht derzeit die größte <b>Gefahr</b> für unser Land aus?
|
||||||
|
(etwa durch anhaltenden Machtmißbrauch
|
||||||
|
oder zu erwartende Machtergreifung –
|
||||||
|
oder wegen Kriegstreiberei)
|
||||||
|
Wen würden Sie deshalb (geheim)
|
||||||
|
in die <b>Verbannung</b> wählen?
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="larger">
|
||||||
|
<b>Schreiben</b> Sie den <b>Namen</b> ihrer Wahl
|
||||||
|
auf einen <b>Stimmzettel</b> (als moderne Scherbe)
|
||||||
|
und werfen ihn in die Urne!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="wrap1">
|
||||||
|
<img src="assets/img/wahlurne.jpg" style="width: 200px;"/>
|
||||||
|
</div>
|
||||||
|
<div class="wrap2">
|
||||||
|
Jeder Bürger hat nur <b>eine Stimme</b>!
|
||||||
|
Die Auszählung erfolgt abends vor Ort öffentlich.
|
||||||
|
|
||||||
|
Die Ergebnisse werden dann <b><a href="/vote.html">hier</a></b>
|
||||||
|
bekanntgegeben.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||