(function (){
'use strict';
function initLightboxes(){
document.querySelectorAll('.pnm-property-page').forEach(function (page){
var dialog=page.querySelector('.pnm-lightbox');
if(!dialog){
return;
}
var triggers=Array.prototype.slice.call(page.querySelectorAll('.pnm-lightbox-trigger[data-full]'));
var image=dialog.querySelector('img');
var counter=dialog.querySelector('.pnm-lightbox-counter');
var close=dialog.querySelector('.pnm-lightbox-close');
var previous=dialog.querySelector('.pnm-lightbox-prev');
var next=dialog.querySelector('.pnm-lightbox-next');
var currentIndex=0;
function show(index){
if(!triggers.length||!image){
return;
}
currentIndex=(index + triggers.length) % triggers.length;
var trigger=triggers[currentIndex];
var url=trigger.getAttribute('data-full');
if(!url){
return;
}
image.src=url;
image.alt=trigger.getAttribute('data-alt')||trigger.querySelector('img')?.alt||'Expanded property image';
if(counter){
counter.textContent=(currentIndex + 1) + ' of ' + triggers.length;
}}
function open(index){
show(index);
if(typeof dialog.showModal==='function'){
dialog.showModal();
}else{
window.open(triggers[index].getAttribute('data-full'), '_blank', 'noopener');
}}
function closeDialog(){
if(dialog.open){
dialog.close();
}
if(image){
image.removeAttribute('src');
}}
triggers.forEach(function (trigger, index){
trigger.addEventListener('click', function (){
open(index);
});
});
if(close){
close.addEventListener('click', closeDialog);
}
if(previous){
previous.addEventListener('click', function (){ show(currentIndex - 1); });
}
if(next){
next.addEventListener('click', function (){ show(currentIndex + 1); });
}
dialog.addEventListener('click', function (event){
if(event.target===dialog){
closeDialog();
}});
dialog.addEventListener('keydown', function (event){
if(event.key==='ArrowLeft'){
event.preventDefault();
show(currentIndex - 1);
}else if(event.key==='ArrowRight'){
event.preventDefault();
show(currentIndex + 1);
}else if(event.key==='Escape'){
closeDialog();
}});
});
}
function initMediaPickers(){
document.querySelectorAll('[data-pnm-media-picker]').forEach(function (field){
var input=field.querySelector('.pnm-media-url');
var select=field.querySelector('.pnm-select-media');
var clear=field.querySelector('.pnm-clear-media');
var preview=field.querySelector('.pnm-media-preview');
var frame=null;
function updatePreview(url){
if(!preview){
return;
}
preview.innerHTML='';
if(!url){
preview.classList.add('is-empty');
var note=document.createElement('span');
note.textContent='The WordPress site logo will be used automatically.';
preview.appendChild(note);
return;
}
preview.classList.remove('is-empty');
var image=document.createElement('img');
image.src=url;
image.alt='Fallback property image preview';
preview.appendChild(image);
}
if(select&&input){
select.addEventListener('click', function (){
if(!window.wp||!window.wp.media){
return;
}
if(frame){
frame.open();
return;
}
frame=window.wp.media({
title: 'Choose fallback property image',
button: { text: 'Use this image' },
library: { type: 'image' },
multiple: false
});
frame.on('select', function (){
var attachment=frame.state().get('selection').first().toJSON();
input.value=attachment.url||'';
updatePreview(input.value);
});
frame.open();
});
}
if(clear&&input){
clear.addEventListener('click', function (){
input.value='';
updatePreview('');
});
}
if(input){
input.addEventListener('change', function (){
updatePreview(input.value.trim());
});
}});
}
function confirmSyncButtons(){
document.querySelectorAll('.pnm-action-buttons form').forEach(function (form){
var action=form.querySelector('input[name="action"]');
if(!action||action.value!=='pn_mantis_sync_now'){
return;
}
form.addEventListener('submit', function (event){
if(!window.confirm('Run a full Mantis sync now? This may take a minute when several listing types are selected.')){
event.preventDefault();
}});
});
}
document.addEventListener('DOMContentLoaded', function (){
initLightboxes();
initMediaPickers();
confirmSyncButtons();
});
}());