@openeuropa/bcl-theme-default 1.10.0 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/oe-bcl-ckeditor5.min.css +1 -1
- package/css/oe-bcl-ckeditor5.min.css.map +1 -1
- package/css/oe-bcl-default.css +896 -1
- package/css/oe-bcl-default.css.map +1 -1
- package/css/oe-bcl-default.min.css +1 -1
- package/css/oe-bcl-default.min.css.map +1 -1
- package/js/oe-bcl-default.bundle.js +107 -60
- package/js/oe-bcl-default.bundle.js.map +1 -1
- package/js/oe-bcl-default.bundle.min.js +1 -1
- package/js/oe-bcl-default.bundle.min.js.map +1 -1
- package/js/oe-bcl-default.esm.js +107 -60
- package/js/oe-bcl-default.esm.js.map +1 -1
- package/js/oe-bcl-default.esm.min.js +1 -1
- package/js/oe-bcl-default.esm.min.js.map +1 -1
- package/js/oe-bcl-default.umd.js +107 -60
- package/js/oe-bcl-default.umd.js.map +1 -1
- package/js/oe-bcl-default.umd.min.js +1 -1
- package/js/oe-bcl-default.umd.min.js.map +1 -1
- package/package.json +8 -7
- package/src/js/accessible-toggle/accessible-toggle.js +11 -3
- package/src/js/gallery/gallery.js +118 -62
- package/src/scss/_accordion.scss +4 -0
- package/src/scss/_multiselect-2.scss +1 -1
- package/src/scss/_multiselect.scss +21 -0
- package/src/scss/_timeline.scss +2 -0
- package/src/scss/base/_variables.scss +2 -3
- package/templates/bcl-accordion/accordion.html.twig +8 -3
- package/templates/bcl-dropdown/dropdown.html.twig +1 -1
- package/templates/bcl-file/file-translations.html.twig +2 -2
- package/templates/bcl-gallery/gallery-item.html.twig +1 -0
- package/templates/bcl-gallery/gallery.html.twig +2 -2
- package/templates/bcl-inpage-navigation/inpage-navigation.html.twig +4 -4
- package/templates/bcl-language-switcher/language-switcher.html.twig +2 -2
- package/templates/bcl-modal/modal.html.twig +2 -2
- package/templates/bcl-timeline/timeline.html.twig +2 -2
|
@@ -3369,7 +3369,7 @@
|
|
|
3369
3369
|
const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;
|
|
3370
3370
|
const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;
|
|
3371
3371
|
const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
|
|
3372
|
-
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$5}`;
|
|
3372
|
+
const EVENT_KEYDOWN_DATA_API$1 = `keydown${EVENT_KEY$8}${DATA_API_KEY$5}`;
|
|
3373
3373
|
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$5}`;
|
|
3374
3374
|
const CLASS_NAME_SHOW$6 = 'show';
|
|
3375
3375
|
const CLASS_NAME_DROPUP = 'dropup';
|
|
@@ -3695,8 +3695,8 @@
|
|
|
3695
3695
|
* Data API implementation
|
|
3696
3696
|
*/
|
|
3697
3697
|
|
|
3698
|
-
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
|
|
3699
|
-
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
|
|
3698
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API$1, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
|
|
3699
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API$1, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
|
|
3700
3700
|
EventHandler.on(document, EVENT_CLICK_DATA_API$4, Dropdown.clearMenus);
|
|
3701
3701
|
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
|
|
3702
3702
|
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$3, function (event) {
|
|
@@ -6507,23 +6507,16 @@
|
|
|
6507
6507
|
|
|
6508
6508
|
/**
|
|
6509
6509
|
* --------------------------------------------------------------------------
|
|
6510
|
-
* Bootstrap (v5.1.3): gallery.js
|
|
6510
|
+
* Bootstrap (v5.1.3): gallery.js (Refactored)
|
|
6511
6511
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
6512
6512
|
* --------------------------------------------------------------------------
|
|
6513
6513
|
*/
|
|
6514
6514
|
|
|
6515
|
-
|
|
6516
|
-
/**
|
|
6517
|
-
* ------------------------------------------------------------------------
|
|
6518
|
-
* Constants
|
|
6519
|
-
* ------------------------------------------------------------------------
|
|
6520
|
-
*/
|
|
6521
|
-
|
|
6522
|
-
const Default = {};
|
|
6523
6515
|
const NAME = 'gallery';
|
|
6524
6516
|
const DATA_KEY = 'bs.gallery';
|
|
6525
6517
|
const EVENT_KEY = `.${DATA_KEY}`;
|
|
6526
6518
|
const DATA_API_KEY = '.data-api';
|
|
6519
|
+
const Default = {};
|
|
6527
6520
|
const CAROUSEL_SELECTOR = '.carousel';
|
|
6528
6521
|
const CAROUSEL_PAGER_SELECTOR = '.carousel-pager span';
|
|
6529
6522
|
const CAROUSEL_ACTIVE_SELECTOR = '.carousel-item.active';
|
|
@@ -6533,72 +6526,115 @@
|
|
|
6533
6526
|
const EVENT_MODAL_HIDE = 'hide.bs.modal';
|
|
6534
6527
|
const CAROUSEL_EVENT = 'slide.bs.carousel';
|
|
6535
6528
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
6536
|
-
|
|
6537
|
-
/**
|
|
6538
|
-
* ------------------------------------------------------------------------
|
|
6539
|
-
* Class Definition
|
|
6540
|
-
* ------------------------------------------------------------------------
|
|
6541
|
-
*/
|
|
6542
|
-
|
|
6529
|
+
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;
|
|
6543
6530
|
class Gallery extends BaseComponent {
|
|
6544
6531
|
constructor(element, config) {
|
|
6545
6532
|
super(element, config);
|
|
6546
|
-
/* eslint no-underscore-dangle: ["error", { "allow": ["_element"] }] */
|
|
6547
6533
|
this.carousel = SelectorEngine.findOne(CAROUSEL_SELECTOR, this._element);
|
|
6548
6534
|
this.carouselPager = SelectorEngine.findOne(CAROUSEL_PAGER_SELECTOR, this._element);
|
|
6549
|
-
this.carouselStartIndex = element.getAttribute('data-gallery-start');
|
|
6550
|
-
this.carouselActiveItem = SelectorEngine.find(CAROUSEL_ITEM_SELECTOR, this.carousel)[this.carouselStartIndex];
|
|
6551
|
-
this.carouselPager.textContent = Number(this.carouselStartIndex) + 1;
|
|
6552
6535
|
this.modal = SelectorEngine.findOne(MODAL_SELECTOR, this._element);
|
|
6553
|
-
this.
|
|
6554
|
-
|
|
6536
|
+
this.carouselStartIndex = element.getAttribute('data-gallery-start') || 0;
|
|
6537
|
+
const allCarouselItems = SelectorEngine.find(CAROUSEL_ITEM_SELECTOR, this.carousel);
|
|
6538
|
+
const startIndexNum = Math.max(0, Math.min(Number(this.carouselStartIndex), allCarouselItems.length - 1));
|
|
6539
|
+
this.carouselPager.textContent = startIndexNum + 1;
|
|
6540
|
+
this.carouselActiveItem = allCarouselItems[startIndexNum];
|
|
6541
|
+
this._carouselLazyLoad(this.carouselActiveItem);
|
|
6542
|
+
EventHandler.on(this.carousel, CAROUSEL_EVENT, event => this._handleCarouselSlide(event));
|
|
6543
|
+
EventHandler.on(this.modal, EVENT_MODAL_HIDE, () => this._stopSlide());
|
|
6555
6544
|
}
|
|
6556
6545
|
|
|
6557
6546
|
// Getters
|
|
6558
6547
|
static get NAME() {
|
|
6559
6548
|
return NAME;
|
|
6560
6549
|
}
|
|
6550
|
+
static get Default() {
|
|
6551
|
+
return Default;
|
|
6552
|
+
}
|
|
6561
6553
|
|
|
6562
|
-
|
|
6563
|
-
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6554
|
+
/**
|
|
6555
|
+
* Handle the carousel "slide.bs.carousel" event
|
|
6556
|
+
* @param {Event} event
|
|
6557
|
+
*/
|
|
6558
|
+
_handleCarouselSlide(event) {
|
|
6559
|
+
const previousSlide = SelectorEngine.findOne(CAROUSEL_ACTIVE_SELECTOR, this.carousel);
|
|
6560
|
+
const currentSlide = event.relatedTarget;
|
|
6561
|
+
this._carouselLazyLoad(currentSlide);
|
|
6567
6562
|
this.carouselPager.textContent = event.to + 1;
|
|
6568
|
-
this.
|
|
6563
|
+
this._stopVideo(previousSlide);
|
|
6569
6564
|
}
|
|
6570
|
-
|
|
6565
|
+
|
|
6566
|
+
/**
|
|
6567
|
+
* Stop the current carousel slide (when modal hides or component is disposed)
|
|
6568
|
+
*/
|
|
6569
|
+
_stopSlide() {
|
|
6571
6570
|
const currentSlide = SelectorEngine.findOne(CAROUSEL_ACTIVE_SELECTOR, this.carousel);
|
|
6572
|
-
this.
|
|
6571
|
+
this._stopVideo(currentSlide);
|
|
6573
6572
|
}
|
|
6574
|
-
|
|
6573
|
+
|
|
6574
|
+
/**
|
|
6575
|
+
* Stop any video or iframe in the given slide
|
|
6576
|
+
* @param {HTMLElement} slide
|
|
6577
|
+
*/
|
|
6578
|
+
_stopVideo(slide) {
|
|
6579
|
+
if (!slide) {
|
|
6580
|
+
return;
|
|
6581
|
+
}
|
|
6575
6582
|
const iframe = SelectorEngine.findOne('iframe', slide);
|
|
6576
6583
|
const video = SelectorEngine.findOne('video', slide);
|
|
6577
|
-
if (iframe) {
|
|
6584
|
+
if (iframe && iframe.dataset.src) {
|
|
6578
6585
|
iframe.src = iframe.dataset.src;
|
|
6579
6586
|
} else if (video) {
|
|
6580
6587
|
video.pause();
|
|
6581
6588
|
}
|
|
6582
6589
|
}
|
|
6583
6590
|
|
|
6584
|
-
|
|
6585
|
-
|
|
6591
|
+
/**
|
|
6592
|
+
* Lazy load media (img, iframe, video, etc.) by copying data-src into src
|
|
6593
|
+
* @param {HTMLElement} slide
|
|
6594
|
+
*/
|
|
6595
|
+
_carouselLazyLoad(slide) {
|
|
6596
|
+
if (!slide) {
|
|
6597
|
+
return;
|
|
6598
|
+
}
|
|
6586
6599
|
const media = SelectorEngine.findOne('[data-src]', slide);
|
|
6587
6600
|
if (media && !media.src) {
|
|
6588
6601
|
media.src = media.dataset.src;
|
|
6589
6602
|
}
|
|
6590
6603
|
}
|
|
6591
|
-
addEventListeners() {
|
|
6592
|
-
EventHandler.on(this.carousel, CAROUSEL_EVENT, event => this.setSlide(event));
|
|
6593
|
-
EventHandler.on(this.modal, EVENT_MODAL_HIDE, event => this.stopSlide(event));
|
|
6594
|
-
}
|
|
6595
6604
|
|
|
6596
|
-
|
|
6597
|
-
|
|
6598
|
-
|
|
6605
|
+
/**
|
|
6606
|
+
* Internal helper to open the modal and jump to a specific slide
|
|
6607
|
+
* @param {HTMLElement} gallery
|
|
6608
|
+
* @param {HTMLElement} targetLink
|
|
6609
|
+
*/
|
|
6610
|
+
static _openModalAndShowSlide(gallery, targetLink) {
|
|
6611
|
+
if (!gallery || !targetLink) {
|
|
6612
|
+
return;
|
|
6613
|
+
}
|
|
6614
|
+
const firstSlide = Number(targetLink.getAttribute('data-bs-slide-to') || 0);
|
|
6615
|
+
gallery.dataset.galleryStart = firstSlide;
|
|
6616
|
+
const instance = Gallery.getOrCreateInstance(gallery);
|
|
6617
|
+
const overlay = SelectorEngine.findOne('.bcl-gallery__item-overlay', targetLink);
|
|
6618
|
+
if (overlay) {
|
|
6619
|
+
const modalId = overlay.getAttribute('data-bs-target');
|
|
6620
|
+
const modalElement = document.querySelector(modalId);
|
|
6621
|
+
if (modalElement) {
|
|
6622
|
+
const modal = bootstrap.Modal.getOrCreateInstance(modalElement);
|
|
6623
|
+
modal.show();
|
|
6624
|
+
}
|
|
6625
|
+
}
|
|
6626
|
+
setTimeout(() => {
|
|
6627
|
+
const carousel = SelectorEngine.findOne(CAROUSEL_SELECTOR, instance._element);
|
|
6628
|
+
const carouselInstance = bootstrap.Carousel.getOrCreateInstance(carousel);
|
|
6629
|
+
carouselInstance.to(firstSlide);
|
|
6630
|
+
const pager = SelectorEngine.findOne(CAROUSEL_PAGER_SELECTOR, instance._element);
|
|
6631
|
+
if (pager) {
|
|
6632
|
+
pager.textContent = firstSlide + 1;
|
|
6633
|
+
}
|
|
6634
|
+
}, 50);
|
|
6599
6635
|
}
|
|
6600
6636
|
static jQueryInterface(config) {
|
|
6601
|
-
return this.each(function
|
|
6637
|
+
return this.each(function () {
|
|
6602
6638
|
const data = Gallery.getOrCreateInstance(this);
|
|
6603
6639
|
if (typeof config !== 'string') {
|
|
6604
6640
|
return;
|
|
@@ -6613,24 +6649,28 @@
|
|
|
6613
6649
|
|
|
6614
6650
|
/**
|
|
6615
6651
|
* ------------------------------------------------------------------------
|
|
6616
|
-
* Data
|
|
6652
|
+
* Data API implementation
|
|
6617
6653
|
* ------------------------------------------------------------------------
|
|
6618
6654
|
*/
|
|
6619
6655
|
|
|
6656
|
+
const isEnterOrSpace = event => {
|
|
6657
|
+
return event.key === 'Enter' || event.key === ' ';
|
|
6658
|
+
};
|
|
6620
6659
|
EventHandler.on(document, EVENT_CLICK_DATA_API, THUMBNAIL_SELECTOR, event => {
|
|
6660
|
+
event.preventDefault();
|
|
6661
|
+
const targetLink = event.target.closest('a');
|
|
6621
6662
|
const gallery = event.target.closest('div.bcl-gallery');
|
|
6622
|
-
|
|
6623
|
-
|
|
6624
|
-
|
|
6663
|
+
Gallery._openModalAndShowSlide(gallery, targetLink);
|
|
6664
|
+
});
|
|
6665
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, THUMBNAIL_SELECTOR, event => {
|
|
6666
|
+
if (!isEnterOrSpace(event)) {
|
|
6667
|
+
return;
|
|
6668
|
+
}
|
|
6669
|
+
event.preventDefault();
|
|
6670
|
+
const targetLink = event.target.closest('a');
|
|
6671
|
+
const gallery = event.target.closest('div.bcl-gallery');
|
|
6672
|
+
Gallery._openModalAndShowSlide(gallery, targetLink);
|
|
6625
6673
|
});
|
|
6626
|
-
|
|
6627
|
-
/**
|
|
6628
|
-
* ------------------------------------------------------------------------
|
|
6629
|
-
* jQuery
|
|
6630
|
-
* ------------------------------------------------------------------------
|
|
6631
|
-
* add .gallery to jQuery only if jQuery is present
|
|
6632
|
-
*/
|
|
6633
|
-
|
|
6634
6674
|
defineJQueryPlugin$1(Gallery);
|
|
6635
6675
|
|
|
6636
6676
|
/**
|
|
@@ -6660,9 +6700,16 @@
|
|
|
6660
6700
|
this.addEventListeners();
|
|
6661
6701
|
}
|
|
6662
6702
|
addAriaAttributes() {
|
|
6663
|
-
if (this.
|
|
6664
|
-
this.triggerElement
|
|
6665
|
-
|
|
6703
|
+
if (this.type === 'modal') {
|
|
6704
|
+
if (this.triggerElement) {
|
|
6705
|
+
this.triggerElement.setAttribute('aria-haspopup', 'dialog');
|
|
6706
|
+
}
|
|
6707
|
+
}
|
|
6708
|
+
if (this.type === 'offcanvas') {
|
|
6709
|
+
if (this.triggerElement) {
|
|
6710
|
+
this.triggerElement.setAttribute('aria-haspopup', 'dialog');
|
|
6711
|
+
this.triggerElement.setAttribute('aria-expanded', 'false');
|
|
6712
|
+
}
|
|
6666
6713
|
}
|
|
6667
6714
|
}
|
|
6668
6715
|
addEventListeners() {
|