|
|
|
@ -12,7 +12,7 @@ export class SphinxGalleria {
|
|
|
|
|
self.node_figure = document.createElement('figure'); |
|
|
|
|
self.button_modal = document.createElement('button'); |
|
|
|
|
self.button_modal.setAttribute('aria-haspopup', 'dialog'); |
|
|
|
|
self.button_modal.setAttribute('class', 'button-modal'); |
|
|
|
|
self.button_modal.classList.add('button-modal'); |
|
|
|
|
|
|
|
|
|
self.node_image = document.createElement('img'); |
|
|
|
|
self.node_caption = document.createElement('figcaption'); |
|
|
|
@ -20,22 +20,22 @@ export class SphinxGalleria {
|
|
|
|
|
self.node_alt.setAttribute('id', self.target+'-'+'alt'); |
|
|
|
|
self.node_image.setAttribute('aria-describedby', self.target+'-'+'alt'); |
|
|
|
|
self.node_thumbnails = document.createElement('ul'); |
|
|
|
|
self.node_thumbnails.setAttribute('class', 'thumbnails'); |
|
|
|
|
self.node_thumbnails.classList.add('thumbnails'); |
|
|
|
|
self.node_dialog = document.createElement('dialog'); |
|
|
|
|
self.node_mask = document.createElement('div'); |
|
|
|
|
self.node_mask.setAttribute('class', 'mask'); |
|
|
|
|
self.node_mask.classList.add('mask'); |
|
|
|
|
self.node_mask.hidden = true; |
|
|
|
|
var node_submask = document.createElement('div'); |
|
|
|
|
node_submask.setAttribute('class', 'submask'); |
|
|
|
|
node_submask.classList.add('submask'); |
|
|
|
|
|
|
|
|
|
self.node_div_caption = document.createElement('div'); |
|
|
|
|
self.node_div_caption.setAttribute('class', 'caption'); |
|
|
|
|
self.node_div_caption.classList.add('caption'); |
|
|
|
|
|
|
|
|
|
var figure_row = document.createElement('div'); |
|
|
|
|
figure_row.setAttribute('class', 'row'); |
|
|
|
|
figure_row.classList.add('row'); |
|
|
|
|
|
|
|
|
|
self.dialog_button_close = document.createElement('button'); |
|
|
|
|
self.dialog_button_close.setAttribute('class', 'close'); |
|
|
|
|
self.dialog_button_close.classList.add('close'); |
|
|
|
|
|
|
|
|
|
self.dialog_button_close_icon = document.createElement('button'); |
|
|
|
|
self.dialog_button_close_icon.setAttribute('aria-label', self.options.label_close); |
|
|
|
@ -50,7 +50,7 @@ export class SphinxGalleria {
|
|
|
|
|
if(self.oneimage) { |
|
|
|
|
self.node_thumbnails.hidden = true; |
|
|
|
|
self.node_thumbnails.setAttribute('aria-hidden', true); |
|
|
|
|
self.node_thumbnails.style.visibility = 'hidden'; |
|
|
|
|
self.node_thumbnails.style.display = 'none'; |
|
|
|
|
} else { |
|
|
|
|
self.node_slider = document.createElement('input'); |
|
|
|
|
self.node_slider.setAttribute('type', 'range'); |
|
|
|
@ -59,17 +59,17 @@ export class SphinxGalleria {
|
|
|
|
|
self.node_slider.setAttribute('value', 1); |
|
|
|
|
|
|
|
|
|
self.button_prev = document.createElement('button'); |
|
|
|
|
self.button_prev.setAttribute('class', 'prev'); |
|
|
|
|
self.button_prev.classList.add('prev'); |
|
|
|
|
self.button_prev.setAttribute('aria-label', self.options.label_prev); |
|
|
|
|
|
|
|
|
|
self.button_next = document.createElement('button'); |
|
|
|
|
self.button_next.setAttribute('class', 'next'); |
|
|
|
|
self.button_next.classList.add('next'); |
|
|
|
|
self.button_next.setAttribute('aria-label', self.options.label_next); |
|
|
|
|
|
|
|
|
|
self.dialog_button_prev = document.createElement('button'); |
|
|
|
|
self.dialog_button_prev.setAttribute('class', 'prev'); |
|
|
|
|
self.dialog_button_prev.classList.add('prev'); |
|
|
|
|
self.dialog_button_next = document.createElement('button'); |
|
|
|
|
self.dialog_button_next.setAttribute('class', 'next'); |
|
|
|
|
self.dialog_button_next.classList.add('next'); |
|
|
|
|
self.dialog_button_prev.appendChild(document.createTextNode(self.options.label_prev)); |
|
|
|
|
self.dialog_button_next.appendChild(document.createTextNode(self.options.label_next)); |
|
|
|
|
|
|
|
|
@ -107,18 +107,20 @@ export class SphinxGalleria {
|
|
|
|
|
init() { |
|
|
|
|
var self = this; |
|
|
|
|
self.node_target = document.getElementById(self.target); |
|
|
|
|
if(self.options.no_transition || self.oneimage) { |
|
|
|
|
if(!self.node_target.classList.contains('no-transition')) { |
|
|
|
|
self.node_target.classList.add('no-transition'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
self.node_target.innerHTML = ''; |
|
|
|
|
self.node_target.setAttribute( |
|
|
|
|
'class', |
|
|
|
|
self.node_target.getAttribute('class') + " sphinxgalleria-core" |
|
|
|
|
); |
|
|
|
|
self.node_target.classList.add("sphinxgalleria-core"); |
|
|
|
|
self.node_target.appendChild(self.node_figure); |
|
|
|
|
self.node_target.appendChild(self.node_thumbnails); |
|
|
|
|
self.node_target.appendChild(self.node_mask); |
|
|
|
|
|
|
|
|
|
var onmodal = function(event) { |
|
|
|
|
var key = event.keyCode || event.charCode || event.which; |
|
|
|
|
if(event.type==='keypress' && key!==13 && key!==32) { |
|
|
|
|
var key = event.key; |
|
|
|
|
if(event.type==='keypress' && key!==" " && key!=="Enter") { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
event.preventDefault(); |
|
|
|
@ -128,8 +130,8 @@ export class SphinxGalleria {
|
|
|
|
|
self.button_modal.addEventListener('keypress', onmodal); |
|
|
|
|
|
|
|
|
|
var onclose = function(event) { |
|
|
|
|
var key = event.keyCode || event.charCode || event.which; |
|
|
|
|
if(event.type==='keypress' && key!==13 && key!==32) { |
|
|
|
|
var key = event.key; |
|
|
|
|
if(event.type==='keypress' && key!==" " && key!=="Enter") { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
event.preventDefault(); |
|
|
|
@ -145,8 +147,8 @@ export class SphinxGalleria {
|
|
|
|
|
|
|
|
|
|
if(!self.oneimage) { |
|
|
|
|
var onprev = function(event) { |
|
|
|
|
var key = event.keyCode || event.charCode || event.which; |
|
|
|
|
if(event.type==='keypress' && key!==13 && key!==32) { |
|
|
|
|
var key = event.key; |
|
|
|
|
if(event.type==='keypress' && key!==" " && key!=="Enter") { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
event.preventDefault(); |
|
|
|
@ -154,8 +156,8 @@ export class SphinxGalleria {
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
var onnext = function(event) { |
|
|
|
|
var key = event.keyCode || event.charCode || event.which; |
|
|
|
|
if(event.type==='keypress' && key!==13 && key!==32) { |
|
|
|
|
var key = event.key; |
|
|
|
|
if(event.type==='keypress' && key!==" " && key!=="Enter") { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
event.preventDefault(); |
|
|
|
@ -195,7 +197,7 @@ export class SphinxGalleria {
|
|
|
|
|
var image_element = document.createElement('li'); |
|
|
|
|
var image_button = document.createElement('input'); |
|
|
|
|
image_button.setAttribute('type', 'radio'); |
|
|
|
|
image_button.setAttribute('value', image_data.image); |
|
|
|
|
image_button.setAttribute('value', image_data.path); |
|
|
|
|
image_button.setAttribute('name', self.target); |
|
|
|
|
image_button.setAttribute('data-index', idx); |
|
|
|
|
image_button.setAttribute('id', self.target+'-'+idx); |
|
|
|
@ -211,6 +213,8 @@ export class SphinxGalleria {
|
|
|
|
|
|
|
|
|
|
var image_thumb = document.createElement('img'); |
|
|
|
|
image_thumb.setAttribute('src', image_data.thumb); |
|
|
|
|
image_thumb.setAttribute('width', image_data.thumbsize[0]); |
|
|
|
|
image_thumb.setAttribute('heigh', image_data.thumbsize[1]); |
|
|
|
|
|
|
|
|
|
if(image_data.alt) { |
|
|
|
|
image_button.setAttribute('data-alt', image_data.alt); |
|
|
|
@ -229,28 +233,37 @@ export class SphinxGalleria {
|
|
|
|
|
image_button.setAttribute('data-hide-title', true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(image_data.transition) { |
|
|
|
|
image_thumb.setAttribute('data-transition', image_data.transition); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
image_label.appendChild(image_thumb); |
|
|
|
|
self.node_thumbnails.appendChild(image_element); |
|
|
|
|
|
|
|
|
|
image_button.addEventListener('change', function() {self.changeImage();}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
self.node_target.addEventListener('keypress', function(event) { |
|
|
|
|
var key = event.keyCode || event.charCode || event.which; |
|
|
|
|
document.addEventListener('keydown', function(event) { |
|
|
|
|
var key = event.key; |
|
|
|
|
|
|
|
|
|
if(!self.oneimage && key===37) { |
|
|
|
|
if(!self.node_dialog.open && !self.node_target.contains(document.activeElement)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(!self.oneimage && key==="ArrowLeft") { |
|
|
|
|
self.prev(); |
|
|
|
|
} else if(!self.oneimage && key===39) { |
|
|
|
|
event.preventDefault(); |
|
|
|
|
} else if(!self.oneimage && key==="ArrowRight") { |
|
|
|
|
self.next(); |
|
|
|
|
} else if(key===27) { |
|
|
|
|
event.preventDefault(); |
|
|
|
|
} else if(key==="Escape") { |
|
|
|
|
self.closeModal(); |
|
|
|
|
event.preventDefault(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
if(self.node_dialog.showModal) { |
|
|
|
|
self.node_dialog.addEventListener('close', function() { |
|
|
|
|
self.closeModal(); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self.changeImage(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -291,6 +304,11 @@ export class SphinxGalleria {
|
|
|
|
|
var hide_caption = true; |
|
|
|
|
var idx = parseInt(current.getAttribute('data-index')); |
|
|
|
|
|
|
|
|
|
if(!self.options.no_transition && !self.oneimage) { |
|
|
|
|
self.node_image.style.opacity = 0.2; |
|
|
|
|
self.dialog_image.style.opacity = 0.2; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(!self.oneimage) { |
|
|
|
|
if(self.node_slider.value !== idx+1) { |
|
|
|
|
self.node_slider.value = idx + 1; |
|
|
|
@ -338,8 +356,19 @@ export class SphinxGalleria {
|
|
|
|
|
self.node_div_caption.hidden = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self.node_image.setAttribute('src', url); |
|
|
|
|
self.dialog_image.setAttribute('src', url); |
|
|
|
|
if(self.options.no_transition || self.oneimage) { |
|
|
|
|
self.node_image.setAttribute('src', url); |
|
|
|
|
self.dialog_image.setAttribute('src', url); |
|
|
|
|
} else { |
|
|
|
|
setTimeout(function() { |
|
|
|
|
self.node_image.setAttribute('src', url); |
|
|
|
|
self.dialog_image.setAttribute('src', url); |
|
|
|
|
setTimeout(function() { |
|
|
|
|
self.node_image.style.opacity = 1; |
|
|
|
|
self.dialog_image.style.opacity = 1; |
|
|
|
|
}, 200); |
|
|
|
|
}, 200); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
showModal() { |
|
|
|
|