/o//commerce-media/accounts/-1/images/18398697?download=true

QRCode Display Portlet
Data Modeling, Process & Business Logic
18398615
qrcode-display-portlet-5.png
(function () { let currentIndex = 0; let images = []; const carouselNextBtn = document.querySelector('.nav-button.next'); const carouselPrevBtn = document.querySelector('.nav-button.prev'); const carouselMainImage = document.getElementById('main-image'); const thumbnailsContainer = document.querySelector('.thumbnails'); const viewFullGalleryBtn = document.querySelector('.view-full-gallery'); function loadImages() { images = [ { src: "http://marketplace.lxc.liferay.com/o/commerce-media/accounts/-1/images/18398666?download=true", alt: "qrcode-display-portlet-5.png" }, { src: "http://marketplace.lxc.liferay.com/o/commerce-media/accounts/-1/images/18398830?download=true", alt: "qrcode-display-portlet-1.png" }, { src: "http://marketplace.lxc.liferay.com/o/commerce-media/accounts/-1/images/18398860?download=true", alt: "qrcode-display-portlet-2.png" }, { src: "http://marketplace.lxc.liferay.com/o/commerce-media/accounts/-1/images/18398890?download=true", alt: "qrcode-display-portlet-3.png" }, { src: "http://marketplace.lxc.liferay.com/o/commerce-media/accounts/-1/images/18398920?download=true", alt: "qrcode-display-portlet-4.png" } ] } function renderThumbnails() { const maxVisible = 5; let start = currentIndex - 2; if (start < 0) start = 0; if (start > images.length - maxVisible) start = Math.max(images.length - maxVisible, 0); const end = Math.min(images.length, start + maxVisible); thumbnailsContainer.innerHTML = ''; for (let i = start; i < end; i++) { const img = document.createElement('img'); img.className = 'thumbnail' + (i === currentIndex ? ' selected' : ''); img.src = images[i].src; img.alt = images[i].alt; img.dataset.index = i; img.addEventListener('click', () => updateMainImage(i)); thumbnailsContainer.appendChild(img); } } function updateMainImage(index) { currentIndex = index; carouselMainImage.src = images[index].src; carouselMainImage.alt = images[index].alt; carouselPrevBtn.disabled = index === 0; carouselNextBtn.disabled = index === images.length - 1; renderThumbnails(); } function setupNavigationButtons() { carouselPrevBtn.addEventListener('click', () => { if (currentIndex > 0) updateMainImage(currentIndex - 1); }); carouselNextBtn.addEventListener('click', () => { if (currentIndex < images.length - 1) updateMainImage(currentIndex + 1); }); } function setupModalTriggers() { carouselMainImage.addEventListener('click', () => openModalGallery(currentIndex)); if (viewFullGalleryBtn) { viewFullGalleryBtn.addEventListener('click', () => openModalGallery(currentIndex)); } } function openModalGallery(startIndex) { let current = startIndex; const template = document.getElementById('modal-gallery'); const clone = template.content.cloneNode(true); const container = document.createElement('div'); container.appendChild(clone); Liferay.Util.openModal({ bodyHTML: container.innerHTML, center: true, headerHTML: '<h2 class="modal-gallery-header" id="modal-header-title"><svg class="lexicon-icon lexicon-icon-picture" role="presentation" ><use xlink:href="https://marketplace.liferay.com/o/classic-theme/images/clay/icons.svg#picture" /></svg> Image <span id="modal-index-display"></span></h2>', size: "full-screen", onOpen: () => { const modalContainer = document.querySelector('.modal-content'); if (modalContainer) { modalContainer.classList.add('custom-gallery-modal'); } const modalImage = document.querySelector('[data-role="modal-image"]'); const modalNext = document.querySelector('[data-role="modal-next"]'); const modalPrev = document.querySelector('[data-role="modal-prev"]'); const indexDisplay = document.getElementById('modal-index-display'); function updateModalImage(index) { const img = images[index]; modalImage.src = img.src; modalImage.alt = img.alt; modalNext.disabled = index === images.length - 1; modalPrev.disabled = index === 0; if (indexDisplay) { indexDisplay.textContent = (index + 1) + ' de ' + images.length; } } modalNext.addEventListener('click', () => { if (current < images.length - 1) { current++; updateModalImage(current); } }); modalPrev.addEventListener('click', () => { if (current > 0) { current--; updateModalImage(current); } }); updateModalImage(current); } }); } function main() { loadImages(); setupNavigationButtons(); setupModalTriggers(); updateMainImage(0); } main(); })();
Descrição
This portlet displays QRCode with styling based on PortalURL, CurrentURL or custom URL/Text specified in the configuration of the portlet.
This portlet displays QRCode with styling based on PortalURL, CurrentURL or custom URL/Text specified in the configuration of the portlet.
DEVELOPER

Desenvolvedor


Publisher Date

January 22, 2024


Deployment Method

Liferay Self-Hosted

Liferay PaaS


App Type

DXP

Versão

1.1

Standard Price

Free

Help and Support


Compartilhar link

DEVELOPER
03/06/13 00:00
Published date
03/06/13 00:00
Published Date
03/06/13 00:00
SUPPORTED OFFERINGS
Liferay PaaS
Supported Versions
Resource Requirements
Edition
Community
PRICE
Free
help & support
SHARE LINK
Copy & Share

HTML Example

A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.