This commit is contained in:
Tomáš Dvořák
2025-08-28 08:03:57 +02:00
parent 6a9873d774
commit 3e6aec1236
3 changed files with 533 additions and 555 deletions
+189
View File
@@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8"?>
<team>
<category name="men">
<member>
<name>Janečka Martin</name>
<number>13</number>
<role>Hráč</role>
<image>img/muzi/Janečka_Martin_1.png</image>
</member>
<member>
<name>Hubinka Adam</name>
<number>5</number>
<role>Hráč</role>
<image>img/muzi/Hubinka_Adam_1.png</image>
</member>
<member>
<name>Zapletal Martin</name>
<number>8</number>
<role>Hráč</role>
<image>img/muzi/Zapletal_Martin_1.png</image>
</member>
<member>
<name>Drobný Michal</name>
<number>3</number>
<role>Hráč</role>
<image>img/muzi/Drobný_Michal_1.png</image>
</member>
<member>
<name>Prokeš Martin</name>
<number>12</number>
<role>Hráč</role>
<image>img/muzi/Prokeš_Martin_1.png</image>
</member>
<member>
<name>Janečka Radek</name>
<number>16</number>
<role>Brankář</role>
<image>img/muzi/Janečka_Radek_1.png</image>
</member>
<member>
<name>Mačuda Jakub</name>
<number></number>
<role></role>
<image>img/muzi/Mačuda_Jakub_1.png</image>
</member>
<member>
<name>Svízela Jakub</name>
<number>19</number>
<role>Hráč</role>
<image>img/muzi/Svízela_Jakub_1.png</image>
</member>
<member>
<name>Šipka Jan</name>
<number>14</number>
<role>Hráč</role>
<image>img/muzi/Šipka_Jan_1.png</image>
</member>
<member>
<name>Polák David</name>
<number>9</number>
<role>Hráč</role>
<image>img/muzi/Polák_David_1.png</image>
</member>
<member>
<name>Kočiš Lukáš</name>
<number>6</number>
<role>Hráč</role>
<image>img/muzi/Kočiš_Lukáš_1.png</image>
</member>
<member>
<name>Malý Lukáš</name>
<number>21</number>
<role>Hráč</role>
<image>img/muzi/Malý_Lukáš_1.png</image>
</member>
<member>
<name>Řičica Jakub</name>
<number></number>
<role>sekretář klubu</role>
<image>img/muzi/Řičica_Jakub_1.png</image>
</member>
<member>
<name>Moravec David</name>
<number></number>
<role>místopředseda klubu</role>
<image>img/muzi/Moravec_David_1.png</image>
</member>
<member>
<name>Janečková Vladimíra</name>
<number></number>
<role>vedoucí týmu</role>
<image>img/muzi/Janečková_Vladimíra_1.png</image>
</member>
<member>
<name>Stodůlka Štěpán</name>
<number></number>
<role>PR manažer klubu</role>
<image>img/muzi/Stodůlka_Štěpán_1.png</image>
</member>
<member>
<name>Stojaspal Marek</name>
<number></number>
<role></role>
<image>img/muzi/Stojaspal_Marek_1.png</image>
</member>
<member>
<name>Puškáč Lubomír</name>
<number></number>
<role></role>
<image>img/muzi/Puškáč_Lubomír_1.png</image>
</member>
<member>
<name>Náplava Jaroslav</name>
<number></number>
<role></role>
<image>img/muzi/Náplava_Jaroslav_1.png</image>
</member>
</category>
<category name="women">
<member>
<name>Šrámková Sára</name>
<number>12</number>
<role>hráč</role>
<image>img/zeny/Šrámková_Sára_1.png</image>
</member>
<member>
<name>Baná Barbora</name>
<number>21</number>
<role>hráč</role>
<image>img/zeny/Baná_Barbora_1.png</image>
</member>
<member>
<name>Majerechová Eliška</name>
<number>69</number>
<role>hráč</role>
<image>img/zeny/Majerechová_Eliška_1.png</image>
</member>
<member>
<name>Maleňáková Adriana</name>
<number>11</number>
<role>hráč</role>
<image>img/zeny/Maleňáková_Adriana_1.png</image>
</member>
<member>
<name>Adamíková Andrea</name>
<number>6</number>
<role>hráč</role>
<image>img/zeny/Adamíková_Andrea_1.png</image>
</member>
<member>
<name>Dufková Martina</name>
<number>17</number>
<role>hráč</role>
<image>img/zeny/Dufková_Martina_1.png</image>
</member>
<member>
<name>Gorčíková Anna</name>
<number>16</number>
<role>hráč</role>
<image>img/zeny/Gorčíková_Anna_1.png</image>
</member>
<member>
<name>Mrázková Denisa</name>
<number>4</number>
<role>hráč</role>
<image>img/zeny/Mrázková_Denisa_1.png</image>
</member>
<member>
<name>Prokešová Terezie</name>
<number>1</number>
<role>hráč</role>
<image>img/zeny/Prokešová_Terezie_1.png</image>
</member>
<member>
<name>Sekaninová Markéta</name>
<number>7</number>
<role>hráč</role>
<image>img/zeny/Sekaninová_Markéta_1.png</image>
</member>
<member>
<name>Štichová Tereza</name>
<number>10</number>
<role>hráč</role>
<image>img/zeny/Štichová_Tereza_1.png</image>
</member>
</category>
</team>
+10 -555
View File
@@ -751,567 +751,21 @@
</div>
</div>
</div>
</div>
<div class="elementor-element elementor-element-074577d e-con-full lte-background-black e-flex e-con e-parent" data-id="074577d" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}" data-core-v316-plus="true">
<div class="elementor-element elementor-element-dddf621 lte-team-offset elementor-widget elementor-widget-lte-team" data-id="dddf621" data-element_type="widget" data-widget_type="lte-team.default">
<div class="elementor-widget-container">
<div class="lte-swiper-slider-wrapper">
<div class="lte-swiper-slider swiper-container lte-team-list lte-team-layout-default " data-space-between="30" data-arrows="sides-outside" data-autoplay="0" data-autoplay-interaction="" data-loop="" data-speed="1000" data-effect="coverflow" data-slides-per-group="-1" data-touch-move="0.2" data-breakpoints="5;4;4;3;3;1">
<div class="swiper-wrapper">
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen3.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-linkedin-in"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">13</div>
<a href="img/clen3.png" target="_blank">
<h4 class="lte-header">Janečka Martin</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen5.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-linkedin-in"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">5</div>
<a href="img/clen5.png" target="_blank">
<h4 class="lte-header">Lapčík Martin</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen6.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">8</div>
<a href="img/clen6.png" target="_blank">
<h4 class="lte-header">Zapletal Martin</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen7.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">3</div>
<a href="img/clen7.png" target="_blank">
<h4 class="lte-header">Drobný Michal</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen9.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">12</div>
<a href="img/clen9.png" target="_blank">
<h4 class="lte-header">Brázdil Petr</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen11.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">16</div>
<a href="img/clen11.png" target="_blank">
<h4 class="lte-header">Janečka Radek</h4>
</a>
<p class="lte-subheader">
<span>Brankář</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen12.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">19</div>
<a href="img/clen12.png" target="_blank">
<h4 class="lte-header">Svízela Jakub</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen13.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">14</div>
<a href="img/clen13.png" target="_blank">
<h4 class="lte-header">Šipka Jan</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen14.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">18</div>
<a href="img/clen14.png" target="_blank">
<h4 class="lte-header">Hubinka Adam</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a" class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen16.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">9</div>
<a href="img/clen16.png" target="_blank">
<h4 class="lte-header">Příplata Filip</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen15.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">6</div>
<a href="img/clen15.png" target="_blank">
<h4 class="lte-header">Kočiš Lukáš</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a" class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen17.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num">21</div>
<a href="img/clen17.png" target="_blank">
<h4 class="lte-header">Malý Lukáš</h4>
</a>
<p class="lte-subheader">
<span>Hráč</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen8.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num"></div>
<a href="img/clen8.png" target="_blank">
<h4 class="lte-header">Řičica Jakub</h4>
</a>
<p class="lte-subheader">sekretář <span>klubu</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen10.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-google-plus-g"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-instagram"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num"></div>
<a href="img/clen10.png" target="_blank">
<h4 class="lte-header">Moravec David</h4>
</a>
<p class="lte-subheader">místopředseda <span>klubu</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen4.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-linkedin-in"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num"></div>
<a href="img/clen4.png" target="_blank">
<h4 class="lte-header">Janečková Vladimíra</h4>
</a>
<p class="lte-subheader">vedoucí <span>týmu</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen1.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-linkedin-in"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num"></div>
<a href="img/clen1.png" target="_blank">
<h4 class="lte-header">Stodůlka Štěpán</h4>
</a>
<p class="lte-subheader">PR manažer <span>klubu</span>
</p>
</div>
</div>
</div>
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="img/clen2.png" class="attachment-full size-full" />
</a>
<div class="lte-social-wrapper">
<span class="lte-social-icon"></span>
<ul class="lte-social">
<li>
<a href="#" class="cybron_fa5_icons fab fa-linkedin-in"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-facebook-f"></a>
</li>
<li>
<a href="#" class="cybron_fa5_icons fab fa-twitter"></a>
</li>
</ul>
</div>
<div class="lte-descr">
<div class="lte-num"></div>
<a href="img/clen2.png" target="_blank">
<h4 class="lte-header">Náplava Jaroslav</h4>
</a>
<p class="lte-subheader">předseda <span>klubu</span>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="lte-team-descr"></div>
</div>
<div id="gender-switcher" aria-label="Přepínač pohlaví týmu">
<button type="button" class="switch-btn active" data-gender="men">Muži</button>
<button type="button" class="switch-btn" data-gender="women">Ženy</button>
</div>
</div>
<div class="elementor-element elementor-element-074577d e-con-full lte-background-black e-flex e-con e-parent" data-id="074577d" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}" data-core-v316-plus="true">
<div id="team-section-1" class="elementor-element elementor-element-074577d e-con-full lte-background-black e-flex e-con e-parent" data-id="074577d" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}" data-core-v316-plus="true">
<div class="elementor-element elementor-element-dddf621 lte-team-offset elementor-widget elementor-widget-lte-team" data-id="dddf621" data-element_type="widget" data-widget_type="lte-team.default">
<div class="elementor-widget-container">
<div class="team-preloader" id="team-preloader-1" aria-hidden="true">
<div class="spinner"></div>
<div class="loading-text">Načítání…</div>
</div>
<div class="lte-swiper-slider-wrapper">
<div class="lte-swiper-slider swiper-container lte-team-list lte-team-layout-default " data-space-between="30" data-arrows="sides-outside" data-autoplay="0" data-autoplay-interaction="" data-loop="" data-speed="1000" data-effect="coverflow" data-slides-per-group="-1" data-touch-move="0.2" data-breakpoints="5;4;4;3;3;1">
<div class="swiper-wrapper">
<div class="swiper-wrapper" id="team-swiper-wrapper-1">
<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
@@ -2686,5 +2140,6 @@
});
</script>
<script src="js/facr-frontend.js"></script>
<script src="js/team-switcher.js"></script>
</body>
</html>
+334
View File
@@ -0,0 +1,334 @@
// team-switcher.js
// Loads team data from XML and populates the team slider. Adds a men/women switcher.
(function () {
const XML_URL = 'data/team.xml';
const SWITCHER_ID = 'gender-switcher';
const WRAPPER_ID = 'team-swiper-wrapper-1';
const PRELOADER_ID = 'team-preloader-1';
const SECTION_ID = 'team-section-1';
let teamData = null; // cached parsed XML data
let currentGender = 'men';
// Autoscroll timers
let autoTimer = null;
let resumeTimer = null;
const AUTO_DELAY = 2000; // 5s
const RESUME_AFTER = 10000; // resume 10s after user interaction
function qs(sel, root = document) { return root.querySelector(sel); }
function qsa(sel, root = document) { return Array.from(root.querySelectorAll(sel)); }
async function loadXML() {
if (teamData) return teamData;
const res = await fetch(XML_URL, { cache: 'no-cache' });
if (!res.ok) throw new Error('Failed to fetch team.xml');
const text = await res.text();
const parser = new DOMParser();
const xml = parser.parseFromString(text, 'application/xml');
const parseError = xml.querySelector('parsererror');
if (parseError) throw new Error('Invalid XML in team.xml');
teamData = xml;
return xml;
}
function getMembersByCategory(xml, categoryName) {
const cat = Array.from(xml.querySelectorAll('team > category'))
.find(c => (c.getAttribute('name') || '').toLowerCase() === categoryName);
if (!cat) return [];
return Array.from(cat.querySelectorAll('member')).map(m => ({
name: (m.querySelector('name')?.textContent || '').trim(),
number: (m.querySelector('number')?.textContent || '').trim(),
role: (m.querySelector('role')?.textContent || '').trim(),
image: (m.querySelector('image')?.textContent || '').trim(),
}));
}
function slideHTML(member) {
const numHTML = member.number ? `<div class="lte-num">${member.number}</div>` : '<div class="lte-num"></div>';
const safeImg = member.image || '';
return (
`<div class="lte-item swiper-slide">
<div class="lte-team-item">
<a class="lte-image" style="background-image: url()">
<img loading="lazy" decoding="async" width="800" height="1200" src="${safeImg}" class="attachment-full size-full" />
</a>
<div class="lte-descr">
${numHTML}
<a href="${safeImg}" target="_blank">
<h4 class="lte-header">${member.name}</h4>
</a>
<p class="lte-subheader" style="color: #c42221">${member.role}
</p>
</div>
</div>
</div>`
);
}
function renderMembers(members) {
const wrapper = document.getElementById(WRAPPER_ID);
if (!wrapper) return;
const swiperEl = wrapper.closest('.swiper-container');
const swiper = swiperEl && swiperEl.swiper;
// Use DOM-based rendering to match theme's slider expectations
wrapper.innerHTML = members.map(slideHTML).join('');
// Strong refresh
if (swiper) {
try {
if (typeof swiper.updateSlides === 'function') swiper.updateSlides();
if (typeof swiper.updateSize === 'function') swiper.updateSize();
if (typeof swiper.updateAutoHeight === 'function') swiper.updateAutoHeight(0);
if (typeof swiper.slideTo === 'function') swiper.slideTo(0, 0, false);
if (typeof swiper.update === 'function') swiper.update();
} catch (e) {}
}
// Ask the theme to re-init this slider completely so arrows/loop/order are consistent
const sliderContainer = wrapper.closest('.lte-swiper-slider');
// For consistent sequential navigation, disable coverflow loop and multi-view
if (sliderContainer && sliderContainer.dataset) {
sliderContainer.dataset.effect = 'slide'; // avoid forced loop in coverflow
sliderContainer.dataset.loop = '0';
sliderContainer.dataset.breakpoints = '1;1;1;1;1;1'; // 1 per view on all widths
}
if (sliderContainer) sliderContainer.classList.remove('lte-inited');
if (typeof window.initSwiperWrappers === 'function') {
try { window.initSwiperWrappers(); } catch (_) {}
}
// Remove any duplicate arrow bars the theme may have added on re-init
cleanupDuplicateArrows();
setTimeout(() => window.dispatchEvent(new Event('resize')), 0);
// Ensure arrows exist and are bound; manual endless wrap
setupEndlessNavigation(swiperEl);
setupDragWrap(swiper);
// Restart autoscroll on fresh render
stopAutoScroll();
startAutoScroll();
}
// Keep only one arrows bar; prefer the one whose anchors already have our data-ts-bound
function cleanupDuplicateArrows() {
const wrapper = document.getElementById(WRAPPER_ID);
if (!wrapper) return;
const slider = wrapper.closest('.lte-swiper-slider');
if (!slider) return;
// Arrows can be siblings of slider or children inside slider depending on theme config
const candidates = [];
const parent = slider.parentElement;
if (parent) {
Array.from(parent.children).forEach((el) => { if (el.classList && el.classList.contains('lte-arrows')) candidates.push(el); });
}
Array.from(slider.children).forEach((el) => { if (el.classList && el.classList.contains('lte-arrows')) candidates.push(el); });
if (candidates.length <= 1) return;
// Prefer the one that already has data-ts-bound anchors
const hasBound = candidates.find(a => a.querySelector('a[data-ts-bound="1"]'));
const keep = hasBound || candidates[0];
candidates.forEach((a) => { if (a !== keep && a.parentElement) a.parentElement.removeChild(a); });
}
async function switchGender(gender) {
currentGender = gender;
try {
showPreloader();
const xml = await loadXML();
// Keep the order as in XML so the first visible is the first listed (e.g., Janečka Martin)
const list = getMembersByCategory(xml, gender);
renderMembers(list);
updateActiveButton();
markReady();
hidePreloader();
} catch (e) {
console.error(e);
hidePreloader();
}
}
function updateActiveButton() {
const container = document.getElementById(SWITCHER_ID);
if (!container) return;
qsa('button[data-gender]', container).forEach(btn => {
btn.classList.toggle('active', btn.dataset.gender === currentGender);
});
}
function bindUI() {
const container = document.getElementById(SWITCHER_ID);
if (!container) return;
container.addEventListener('click', (e) => {
const btn = e.target.closest('button[data-gender]');
if (!btn) return;
const gender = btn.dataset.gender;
if (gender && gender !== currentGender) switchGender(gender);
});
}
function ensureBasicStyles() {
const css = `
#${SWITCHER_ID}{display:flex;gap:.5rem;justify-content:center;margin:10px 0}
#${SWITCHER_ID} .switch-btn{background:#eee;border:1px solid #ccc;border-radius:20px;padding:.35rem .9rem;font-weight:600;cursor:pointer}
#${SWITCHER_ID} .switch-btn.active{background:#111;color:#fff;border-color:#111}
#${PRELOADER_ID}{display:none;align-items:center;justify-content:center;gap:.6rem;color:#fff;padding:8px 0}
#${PRELOADER_ID}.visible{display:flex}
#${PRELOADER_ID} .spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:ts-spin .8s linear infinite}
@keyframes ts-spin{to{transform:rotate(360deg)}}
#${SECTION_ID}.not-ready .lte-swiper-slider-wrapper{visibility:hidden}
`;
const style = document.createElement('style');
style.textContent = css;
document.head.appendChild(style);
}
function getSwiperInstance() {
const wrapper = document.getElementById(WRAPPER_ID);
const swiperEl = wrapper && wrapper.closest('.swiper-container');
return swiperEl && swiperEl.swiper ? { el: swiperEl, api: swiperEl.swiper } : null;
}
function setupEndlessNavigation(swiperContainerEl) {
const inst = getSwiperInstance();
if (!inst) return;
const { el, api } = inst;
// Ensure only one set of arrows remains before binding
cleanupDuplicateArrows();
// Theme uses .lte-arrow-left / .lte-arrow-right (see frontend.js init)
let nextBtn = el.parentElement && el.parentElement.querySelector('.lte-arrows .lte-arrow-right');
let prevBtn = el.parentElement && el.parentElement.querySelector('.lte-arrows .lte-arrow-left');
// Fallback to common Swiper classes if theme structure changes
if (!nextBtn) nextBtn = el.querySelector('.swiper-button-next, .lte-swiper-button-next, .lte-next, .lte-arrow-next, .lte-arrow-right');
if (!prevBtn) prevBtn = el.querySelector('.swiper-button-prev, .lte-swiper-button-prev, .lte-prev, .lte-arrow-prev, .lte-arrow-left');
// Do not create fallback arrows; rely on theme arrows only
function bind(btn, dir) {
if (!btn || btn.dataset.tsBound) return;
btn.addEventListener('click', (e) => {
e.preventDefault();
if (!api) return;
// User override: pause and schedule resume
stopAutoScroll();
scheduleAutoResume();
if (dir === 'next') {
if (typeof api.slideNext === 'function') api.slideNext(400);
else api.slideTo((api.activeIndex || 0) + 1, 400, false);
} else {
if (typeof api.slidePrev === 'function') api.slidePrev(400);
else api.slideTo(Math.max((api.activeIndex || 0) - 1, 0), 400, false);
}
});
btn.dataset.tsBound = '1';
}
bind(nextBtn, 'next');
bind(prevBtn, 'prev');
// Hover pause/resume on the whole slider area
if (el && !el.__tsHoverBound) {
el.addEventListener('mouseenter', () => stopAutoScroll());
el.addEventListener('mouseleave', () => startAutoScroll());
el.__tsHoverBound = true;
}
}
function setupDragWrap(swiper) {
if (!swiper || !swiper.on) return;
if (!swiper.__tsWrapBound) {
swiper.on('reachEnd', () => { swiper.slideTo(0, 400, false); });
swiper.on('reachBeginning', () => {
const last = (swiper.slides && swiper.slides.length ? swiper.slides.length - 1 : 0);
swiper.slideTo(last, 400, false);
});
swiper.__tsWrapBound = true;
}
// Pause autoscroll on user touch/drag and schedule resume on release
if (!swiper.__tsAutoBound) {
try {
swiper.on('touchStart', () => { stopAutoScroll(); });
swiper.on('touchEnd', () => { scheduleAutoResume(); });
swiper.on('pointerDown', () => { stopAutoScroll(); });
swiper.on('pointerUp', () => { scheduleAutoResume(); });
} catch (_) {}
swiper.__tsAutoBound = true;
}
}
function startAutoScroll() {
const inst = getSwiperInstance();
if (!inst) return;
const { api } = inst;
stopAutoScroll();
autoTimer = window.setInterval(() => {
if (!api) return;
try {
// If not looping, wrap to first when at end
const loop = api.params && api.params.loop;
if (!loop && api.isEnd) {
api.slideTo(0, 600, false);
} else if (typeof api.slideNext === 'function') {
api.slideNext(600);
}
} catch (_) {}
}, AUTO_DELAY);
}
function stopAutoScroll() {
if (autoTimer) {
clearInterval(autoTimer);
autoTimer = null;
}
if (resumeTimer) {
clearTimeout(resumeTimer);
resumeTimer = null;
}
}
function scheduleAutoResume() {
if (resumeTimer) {
clearTimeout(resumeTimer);
resumeTimer = null;
}
resumeTimer = window.setTimeout(() => {
startAutoScroll();
}, RESUME_AFTER);
}
function showPreloader() {
const el = document.getElementById(PRELOADER_ID);
if (el) el.classList.add('visible');
}
function hidePreloader() {
const el = document.getElementById(PRELOADER_ID);
if (el) el.classList.remove('visible');
}
function markNotReady() {
const sec = document.getElementById(SECTION_ID);
if (sec) sec.classList.add('not-ready');
}
function markReady() {
const sec = document.getElementById(SECTION_ID);
if (sec) sec.classList.remove('not-ready');
}
document.addEventListener('DOMContentLoaded', () => {
ensureBasicStyles();
markNotReady();
showPreloader();
bindUI();
});
// Defer initial population until all assets and theme scripts (e.g., sliders) are fully initialized
window.addEventListener('load', () => {
switchGender(currentGender);
});
})();