1; 2(function ($){ 3 /* 4 * Implémentation de mediabox basée sur Lity 5 * https://sorgalla.com/lity/ 6 */ 7 8 var litySpip = { 9 nameSpace: 'mediabox', 10 config: { 11 forceFocusInside: true, 12 }, 13 strings: { 14 }, 15 callbacks: { 16 onOpen: [], 17 onShow: [], 18 onClose: [] 19 }, 20 focusedItem: [], 21 isTransition: false, 22 adjustHeight: function(instance) { 23 var $content = instance.content(); 24 var $containerHeight = instance.element().find('.lity-container').height(); 25 if ($containerHeight) { 26 var h = Math.round($containerHeight) + 'px'; 27 $content 28 .css('max-height', h) 29 .find('[data-'+litySpip.nameSpace+'-force-max-height]') 30 .css('max-height', h); 31 } 32 }, 33 template: function(cfg, type, groupName, groupPosition, groupLength) { 34 var className = ''; 35 if (!!cfg.className){ 36 className = ' ' + cfg.className; 37 } 38 if (cfg.transitionOnOpen) { 39 className += ' lity-transition-on-open-'+cfg.transitionOnOpen; 40 } 41 if (!!cfg.noTransition) { 42 className += ' lity-no-transition'; 43 } 44 if (!!cfg.slideShow) { 45 className += ' lity-slideshow'; 46 } 47 48 var styles = []; 49 var styles_container = ''; 50 var styles_content = ''; 51 // Offcanvas 52 if (cfg.sideBar) { 53 className += ' lity-sidebar lity-sidebar-' + cfg.sideBar; 54 // Garde-fou : forcer hauteur et largeur 55 if (cfg.sideBar === 'start' || cfg.sideBar === 'end') { 56 className += ' lity-sidebar-inline'; 57 cfg.height = '100vh'; 58 cfg.maxHeight = '100vh'; 59 } 60 if (cfg.sideBar === 'top' || cfg.sideBar === 'bottom') { 61 className += ' lity-sidebar-block'; 62 cfg.width = '100vw'; 63 cfg.maxWidth = '100vw'; 64 } 65 } 66 if (cfg.maxWidth) { 67 styles.push("max-width:" + cfg.maxWidth.replace("%","vw")); 68 } 69 if (cfg.maxHeight) { 70 styles.push("max-height:" + cfg.maxHeight.replace("%","vh")); 71 } 72 if (cfg.width) { 73 styles.push("width:" + cfg.width.replace("%","vw")); 74 className += ' lity-width-set'; 75 } 76 if (cfg.height) { 77 styles.push("height:" + cfg.height.replace("%","vh")); 78 className += ' lity-height-set'; 79 // si il y a un min-height il faut l'appliquer sur le container aussi du coup 80 if (cfg.minHeight) { 81 styles.push("min-height:" + cfg.minHeight.replace("%","vh")); 82 } 83 } 84 if (styles.length) { 85 styles_container = ' style="' + styles.join(';') + '"'; 86 } 87 88 styles = []; 89 var max; 90 if (cfg.minWidth) { 91 max = (cfg.maxWidth ? cfg.maxWidth.replace("%","vw") : '95vw'); 92 styles.push("min-width:min(" + max + "," + cfg.minWidth.replace("%","vw") + ')'); 93 } 94 if (cfg.minHeight && !cfg.height) { 95 max = (cfg.maxHeight ? cfg.maxHeight.replace("%","vw") : '95vh'); 96 styles.push("min-height:min(" + max + "," + cfg.minHeight.replace("%","vh") + ')'); 97 } 98 if (styles.length) { 99 styles_content = ' style="' + styles.join(';') + '"'; 100 } 101 102 var button_next_prev = '', 103 button_start_stop = '', 104 group_info_text = '', 105 group_info = ''; 106 if (groupName && groupLength) { 107 if (groupLength > 1) { 108 var newPosition = (groupPosition <= 0 ? groupLength - 1 : groupPosition - 1); 109 button_next_prev += '<button class="lity-previous" type="button" data-group-name="'+groupName+'" data-group-position="'+newPosition+'" aria-label="' + litySpip.strings.previous + '" data-lity-previous' 110 +'><b title="' + litySpip.strings.previous +'">â®</b></button>'; 111 newPosition = (groupPosition >= groupLength - 1 ? 0 : groupPosition + 1); 112 button_next_prev += '<button class="lity-next" type="button" data-group-name="'+groupName+'" data-group-position="'+newPosition+'" aria-label="' + litySpip.strings.next + '" data-lity-next' 113 +'><b title="' + litySpip.strings.next +'">â¯</b></button>'; 114 } 115 group_info_text = " " + litySpip.strings.current; 116 group_info_text = group_info_text.replace('{current}',(groupPosition+1)+''); 117 group_info_text = group_info_text.replace('{total}',groupLength+''); 118 119 button_start_stop += '<button class="lity-start-stop" type="button" data-lity-stop-start>' 120 +'<b class="lity-start" aria-label="' + litySpip.strings.slideshowStart + '" title="' + litySpip.strings.slideshowStart +'">â¶</b>' 121 +'<b class="lity-stop" aria-label="' + litySpip.strings.slideshowStop + '" title="' + litySpip.strings.slideshowStop +'">â¡</b>' 122 +'</button>'; 123 124 group_info = '<div class="lity-group-caption">' 125 + '<span class="lity-group-start-stop">' + button_start_stop + '</span>' 126 + '<span class="lity-group-current">' + group_info_text + '</span>' 127 + '<span class="lity-group-next-prev">' + button_next_prev + '</span>' 128 + '<span class="lity-group-progress-bar"><span class="lity-group-progress-bar-status" style="width:0"></span></span>' 129 + '</div>'; 130 } 131 var close_button_aria_label = litySpip.strings.close + ' (' + litySpip.strings.press_escape + ')' ; 132 var dialog_title = (type === 'image' ? litySpip.strings.dialog_title_med : litySpip.strings.dialog_title_def); 133 dialog_title += group_info_text + ' (' + litySpip.strings.press_escape + ')' ; 134 135 var t = 136 '<dialog class="box_mediabox box_modalbox lity' + className + '" role="dialog" aria-label="' + dialog_title + '" tabindex="-1">'
137 + '<div class="lity-wrap"' + (cfg.overlayClose === false ? '' : ' data-lity-close') + ' role="document">' 138 + '<div class="lity-loader" aria-hidden="true" aria-label="' + litySpip.strings.loading + '"><span class="box-loading"></span></div>' 139 + '<div class="lity-container"' + styles_container + '>' 140 + '<button class="lity-close" type="button" aria-label="' + close_button_aria_label + '" data-lity-close><b data-lity-close title="' + litySpip.strings.close +'">×</b></button>' 141 + '<div class="lity-content"' + styles_content + '></div>' 142 + group_info 143 + '</div>' 144 + '</div>' 145 + '</dialog>'; 146 return t; 147 }, 148 failHandler: function (target, instance) { 149 return '<div class="error lity-error">Failed loading content</div>'; 150 }, 151 ajaxHandler: function (target, instance){ 152 // prise en charge de la syntaxe "url selector" comme jQuery.load() 153 var selector, 154 off = target.indexOf(" "); 155 if (off> -1){ 156 selector = target.slice(off); 157 selector = selector.match(/[^\x20\t\r\n\f]+/g) || []; 158 selector = selector.join(" "); 159 target = target.slice(0, off); 160 } 161 162 if (jQuery.spip.preloaded_urls[target]){ 163 //console.log("CACHE for "+target); 164 var content = jQuery.spip.preloaded_urls[target]; 165 if (selector){ 166 // If a selector was specified, locate the right elements in a dummy div 167 // Exclude scripts to avoid IE 'Permission Denied' errors 168 content = $("<div>").append($.parseHTML(content)).find(selector); 169 } 170 return $('<div class="lity-content-inner"></div>').append(content); 171 } 172 173 var _deferred = $.Deferred; 174 var deferred = _deferred(); 175 var failed = function (){ 176 deferred.reject($('<span class="error lity-error"></span>').append('Failed loading ajax')); 177 }; 178 $.get(target) 179 .done(function (content){ 180 jQuery.spip.preloaded_urls[target] = content; 181 if (selector){ 182 // If a selector was specified, locate the right elements in a dummy div 183 // Exclude scripts to avoid IE 'Permission Denied' errors 184 content = $("<div>").append($.parseHTML(content)).find(selector); 185 } 186 deferred.resolve($('<div class="lity-content-inner"></div>').append(content)); 187 }) 188 .fail(failed); 189 return deferred.promise(); 190 }, 191 imageBuildContent: function(img, desc, longdesc, defaultCaptionClass) { 192 img.attr('alt', desc ? desc : ''); 193 desc = (longdesc ? longdesc : desc); 194 if (desc){ 195 defaultCaptionClass = (defaultCaptionClass ? defaultCaptionClass : 'expanded'); 196 var id = 'lity-image-caption-' + Date.now().toString(36) + Math.random().toString(36).substr(2); 197 img.attr('aria-describedby', id); 198 img = $('<figure class="lity-image-figure"></figure>').append(img).append('<figcaption id="'+id+'" class="lity-image-caption '+defaultCaptionClass+'"><div class="lity-image-caption-text">'+desc+'</div></figcaption>'); 199 } 200 else { 201 img = $('<figure class="lity-image-figure"></figure>').append(img); 202 } 203 return img; 204 }, 205 imageHandler: function (target, instance){ 206 var _deferred = $.Deferred; 207 var desc = ''; 208 var longdesc = ''; 209 var defaultCaptionClass = (instance.options().defaultCaptionState === 'min' ? 'min' : 'expanded'); 210 var opener = instance.opener(); 211 if (opener){ 212 desc = opener.attr('title') || $('img[alt]', opener).eq(0).attr('alt') || ''; 213 var by = opener.attr('aria-describedby') || $('img[aria-describedby]', opener).eq(0).attr('aria-describedby') || ''; 214 if (by){ 215 longdesc = $('#'+by).html(); 216 longdesc = longdesc.trim(); 217 } 218 if (!desc){ 219 desc = desc || instance.opener().attr('aria-label') || ''; 220 } 221 desc = desc.trim(); 222 } 223 224 var img; 225 var cache = opener.data('lity-image-cache') || {}; 226 if (cache[target]) { 227 //console.log("CACHE for "+target); 228 img = cache[target]; 229 img = litySpip.imageBuildContent(img, desc, longdesc, defaultCaptionClass); 230 return img; 231 } 232 233 img = $('<img src="'+target+'" class="lity-image-img" data-'+litySpip.nameSpace+'-force-max-height />'); 234 var deferred = _deferred(); 235 var failed = function (){ 236 deferred.reject($('<span class="error lity-error"></span>').append('Failed loading image')); 237 }; 238 img 239 .on('load', function (){
240 if (this.naturalWidth===0){ 241 //console.log("image "+target+" naturalWidth=0"); 242 // forcons une largeur arbitraire pour rendre l'image visible... 243 img.attr("style", "width:25vw;"); 244 } 245 cache[target] = img; 246 opener.data('lity-image-cache', cache); 247 248 deferred.resolve(litySpip.imageBuildContent(img, desc, longdesc, defaultCaptionClass)); 249 }) 250 .on('error', failed) 251 ; 252 253 return deferred.promise(); 254 }, 255 groupElements: function(groupName) { 256 return $('.lity-enabled[data-'+litySpip.nameSpace+'-group'+'='+groupName+']'); 257 }, 258 eventSet:{}, 259 setEvents: function(what) { 260 if (!litySpip.eventSet[what]) { 261 switch (what) { 262 case 'opener': 263 $(document).on('click', '.lity-enabled', litySpip.onClickOpener); 264 break; 265 case 'listener': 266 $(document).on('click', '.lity-previous,.lity-next', litySpip.onPrevNext); 267 $(document).on('click', '.lity-start-stop', litySpip.onSlideShowToggle); 268 $(window).on('keyup', litySpip.onKeyUp); 269 $(document).on('click', '.lity-image-caption', litySpip.onCaptionToggle); 270 break; 271 } 272 litySpip.eventSet[what] = true; 273 } 274 }, 275 onKeyUp: function(event) { 276 var c = {37: "previous", 39: "next"}[event.keyCode]; 277 //console.log(['keyup', event.keyCode, c]); 278 if (c) { 279 var current = lity.current(); 280 if (current) { 281 jQuery('.lity-' + c, current.element()).trigger('click'); 282 } 283 } 284 }, 285 onCaptionToggle: function(event) { 286 var $caption = $(this); 287 $caption.toggleClass('min expanded'); 288 }, 289 openerFromPrevNext($button) { 290 var groupName = $button.data('group-name'); 291 var groupPosition = $button.data('group-position'); 292 return litySpip.groupElements(groupName).eq(groupPosition); 293 }, 294 onPrevNext: function(event) { 295 var $button = $(this); 296 var newEl = litySpip.openerFromPrevNext($button); 297 if (newEl) { 298 var element = lity.current().element(); 299 litySpip.isTransition = {oldClosed:false, newOpened:true}; 300 element.addClass('lity-no-transition').css('visibility','hidden'); 301 litySpip.slideshowStop(element); 302 var options = {transitionOnOpen: $button.is('.lity-next') ? 'slide-from-right' : 'slide-from-left'}; 303 if (element.is('.lity-slideshow')) { 304 options.slideShow = true; 305 } 306 lity.current().close(); 307 litySpip.elementOpener(newEl, options); 308 } 309 }, 310 slideshowStart: function(element) { 311 var $progress = element.find('.lity-group-progress-bar-status'); 312 $progress.attr('style',''); 313 $progress.css('width','100%'); 314 var delay = litySpip.config.slideshowSpeed; 315 setTimeout(function(){ 316 $progress.css('transition','width ' + ((delay-200)/1000) + 's linear'); 317 $progress.css('width','0'); 318 },200); 319 timer = setTimeout(function(){element.find('.lity-next').trigger('click')}, delay); 320 element.data('lity-timer', timer); 321 $('.lity-start', element).attr('aria-hidden', 'true'); 322 $('.lity-stop', element).attr('aria-hidden', 'false'); 323 jQuery('.lity-start-stop',element).focus(); 324 }, 325 slideshowStop: function(element) { 326 timer = element.data('lity-timer'); 327 if (timer) { 328 clearTimeout(timer); 329 } 330 }, 331 onSlideShowToggle: function(event) { 332 var $button = $(this); 333 var element = $button.closest('.lity'); 334 var slideShowState = (element.is('.lity-slideshow') ? true : false); 335 var timer; 336 337 if (!slideShowState) { 338 litySpip.slideshowStart(element); 339 } 340 else { 341 litySpip.slideshowStop(element); 342 $('.lity-start', element).attr('aria-hidden', 'false'); 343 $('.lity-stop', element).attr('aria-hidden', 'true'); 344 } 345 element.toggleClass('lity-slideshow'); 346 347 }, 348 onClickOpener: function(event) { 349 event.preventDefault(); 350 351 var opener = $(this); 352 litySpip.elementOpener(opener); 353 }, 354 elementOpener: function(opener, options) { 355 var cfg = opener.data('mediabox-options'); 356 if (options) { 357 cfg = $.extend({}, cfg, options); 358 } 359 var target = opener.data('href-popin') || opener.data('href') || opener.attr('href') || opener.attr('src'); 360 361 litySpip.lityOpener(target, cfg, opener.get(0)); 362 }, 363 lityOpener: function(target, cfg, opener) { 364 litySpip.setEvents('listener'); 365 if (!litySpip.isTransition) { 366 // routage des callbacks 367 litySpip.callbacks.onOpen.push(cfg.onOpen || false); 368 litySpip.callbacks.onShow.push(cfg.onShow || false); 369 litySpip.callbacks.onClose.push(cfg.onClose || false); 370 371 // memoriser le focus 372 litySpip.focusedItem.push($(document.activeElement)); 373 } 374 375 var type = cfg.type || ''; 376 if (!type && opener) { 377 type = $(opener).data(litySpip.nameSpace+'-type') || ''; 378 } 379 380 var handlers = lity.handlers();
381 // ajouter le handler ajax si besoin 382 if (type==='ajax'){ 383 handlers.ajax = litySpip.ajaxHandler; 384 } 385 handlers.image = litySpip.imageHandler; 386 // si on est inline, router sur le handler fail si la cible n'existe pas 387 if (type==='inline'){ 388 var el = []; 389 try { 390 el = $(target); 391 } catch (e) { 392 el = []; 393 } 394 if (!el.length){ 395 handlers.inline = litySpip.failHandler; 396 } 397 } 398 cfg = $.extend({handlers: handlers}, cfg); 399 if (type && ['image', 'inline', 'ajax', 'iframe'].indexOf(type)!== -1){ 400 cfg.handler = type; 401 } 402 403 if (opener && typeof($.parseMediaboxOptions) !== "undefined") { 404 cfg = $.extend(cfg, $.parseMediaboxOptions(litySpip.nameSpace, opener)); 405 } 406 407 if (!!cfg.preloadOnly) { 408 litySpip.lityPreLoader(target, cfg, opener); 409 } 410 else { 411 // est-ce une galerie ? 412 var groupPosition = 0; 413 var groupLength = 0; 414 if (opener) { 415 var groupName = cfg.rel || (opener ? $(opener).data(litySpip.nameSpace+'-group') : ''); 416 if (groupName) { 417 var elements = litySpip.groupElements(groupName); 418 groupPosition = elements.index($(opener)); 419 groupLength = elements.length; 420 } 421 //console.log({type:type, groupName: groupName, groupPosition: groupPosition, groupLength: groupLength}); 422 } 423 424 cfg = $.extend({template: litySpip.template(cfg, type, groupName, groupPosition, groupLength)}, cfg); 425 //console.log("Call lity "+cfg.handler+' '+target); 426 427 // est-ce qu'on veut rester sur le meme niveau de popin (pas d'empilage) ? 428 //console.log("samePopin", cfg.samePopin, lity.current()); 429 if (cfg.samePopin) { 430 var l = lity.current(); 431 if (l) { 432 l.close(); 433 } 434 } 435 436 lity(target, cfg, opener); 437 } 438 439 }, 440 lityPreLoader: function (target, cfg, opener) { 441 //console.log("lityPreLoader " + target); 442 if (cfg.handler && cfg.handlers[cfg.handler]) { 443 if (cfg.handler === 'image' || cfg.handler === 'ajax') { 444 var instance = { 445 opener: function() { return $(opener);}, 446 options: function() { return cfg} 447 }; 448 var content = cfg.handlers[cfg.handler](target, instance); 449 } 450 } 451 }, 452 // Rechargement ajax d'une liste d'éléments séparés par des virgules 453 ajaxReloadElements: function(elements) { 454 const targets = elements 455 .split(',') 456 .map(s => s.trim()) 457 .filter(Boolean); 458 targets.forEach(function(target) { 459 try { 460 // Soit c'est un sélecteur CSS (autre qu'une balise) : .truc #truc [truc] 461 if (/^[.#[]/.test(target)) { 462 const $element = $(target); 463 if ($element.length) { 464 $element.ajaxReload(); 465 } 466 // Soit c'est un identifiant ajax 467 } else { 468 ajaxReload(target); 469 } 470 } catch (e) { 471 console.warn("Mediabox ajaxReloadElements : erreur lors du traitement de '" + target + "'.", e); 472 } 473 }); 474 } 475 } 476 477 jQuery.fn.extend({ 478 479 mediabox: function (options){ 480 var cfg = $.extend({}, litySpip.config, options); 481 482 483 if (this===jQuery.fn){ 484 var href = cfg.href || ""; // content 485 litySpip.lityOpener(href, cfg, null); 486 return this; 487 } else { 488 489 if (cfg.rel) { 490 this.attr('data-'+litySpip.nameSpace+'-group', cfg.rel); 491 } 492 else { 493 this.each(function() { 494 var rel = $(this).attr('rel'); 495 if (rel) { 496 $(this).attr('data-'+litySpip.nameSpace+'-group', rel); 497 } 498 }); 499 } 500 501 litySpip.setEvents('opener'); 502 503 this 504 .data('mediabox-options', cfg) 505 .addClass('lity-enabled'); 506 507 (cfg.preload ? this : this.filter('[data-'+litySpip.nameSpace+'-preload]')).each(function() { 508 litySpip.elementOpener($(this),{preloadOnly: true}); 509 }); 510 511 return this; 512 } 513 }, 514 515 mediaboxClose: function (){ 516 var $current = lity.current(); 517 if ($current){ 518 $current.close(); 519 return true; 520 } 521 return false; 522 } 523 524 }); 525 526 var initConfig = function (){ 527 528 // recuperer les préférences de l'utilisateur 529 var b = typeof (mediabox_settings)=='object' ? mediabox_settings : {}; 530 litySpip.nameSpace = b.ns ? b.ns : 'mediabox'; 531 532 litySpip.strings.slideshowStart = b.str_ssStart; 533 litySpip.strings.slideshowStop = b.str_ssStop; 534 litySpip.strings.current = b.str_cur; 535 litySpip.strings.previous = b.str_prev; 536 litySpip.strings.next = b.str_next; 537 litySpip.strings.close = b.str_close; 538 litySpip.strings.loading = b.str_loading; 539 litySpip.strings.press_escape = b.str_petc; 540 litySpip.strings.dialog_title_def = b.str_dialTitDef; 541 litySpip.strings.dialog_title_med = b.str_dialTitMed; 542 litySpip.config.slideshowSpeed = (b.lity.slideshow_speed ? b.lity.slideshow_speed : 5000); 543 litySpip.config.defaultCaptionState = (b.lity.defaultCaptionState ? b.lity.defaultCaptionState : 'expanded'); 544 545 var styles = { 546 'container': '', 547 'content': '', 548 }; 549 var max; 550 if (b.lity.minWidth) { 551 max = (b.lity.maxWidth ? b.lity.maxWidth.replace('%','vw') : '95vw'); 552 styles.content += "min-width:min(" + max + ","+b.lity.minWidth.replace('%','vw')+');'; 553 } 554 if (b.lity.maxWidth) { 555 styles.container += "max-width:"+b.lity.maxWidth.replace('%','vw')+';'; 556 } 557 if (b.lity.minHeight) { 558 max = (b.lity.maxHeight ? b.lity.maxHeight.replace('%','vw') : '95vh'); 559 styles.content += "min-height:min(" + max + ","+b.lity.minHeight.replace('%','vh')+');'; 560 } 561 if (b.lity.maxHeight) { 562 styles.container += "max-height:"+b.lity.maxHeight.replace('%','vh')+';'; 563 } 564 var insert = ''; 565 for (let key in styles) { 566 if (styles[key]) { 567 insert += '.box_mediabox .lity-' + key + '{' + styles[key] + '}'; 568 } 569 } 570 if (b.lity.opacite) { 571 insert += '.box_mediabox:before{opacity:'+b.lity.opacite+'}'; 572 } 573 if (insert) { 574 $('head').append($('<style type="text/css">'+insert+'</style>')); 575 } 576 577 578 $(document).on('lity:open', function(event, instance) { 579 // Si un élément de la page est actuellement en plein écran natif, la box reste invisible
580 // tant qu'elle n'est pas un descendant de cet élément : on la déplace donc dedans 581 if (document.fullscreenElement) { 582 document.fullscreenElement.appendChild(instance.element().get(0)); 583 } 584 585 if (!instance.element().is('.lity-slideshow')){ 586 jQuery('.lity-close', instance.element()).focus(); 587 } 588 if (!litySpip.isTransition){ 589 //console.log('Lity opened'); 590 //instance.element.is('.lity-no-transition-on-open').removeClass('lity-no-transition-on-open'); 591 // placer le focus sur le bouton close 592 var callback = litySpip.callbacks.onOpen.pop(); 593 if (callback){ 594 callback(event, instance); 595 } 596 } 597 }); 598 $(document).on('lity:ready', function(event, instance) { 599 litySpip.adjustHeight(instance); 600 if (jQuery.spip) { 601 jQuery.spip.triggerAjaxLoad(instance.element().get(0)) 602 } 603 if (instance.element().addClass('lity-ready').is('.lity-slideshow')) { 604 litySpip.slideshowStart(instance.element()); 605 } 606 if (!litySpip.isTransition){ 607 //console.log('Lity ready'); 608 var callback = litySpip.callbacks.onShow.pop(); 609 if (callback){ 610 callback(event, instance); 611 } 612 } 613 else { 614 litySpip.isTransition.newOpened = true; 615 if (litySpip.isTransition.oldClosed) { 616 litySpip.isTransition = false; // transition terminee 617 } 618 // trigger un resize, c'est un minimum 619 instance.content().trigger('lity:resize', [instance]); 620 } 621 // preloader le next si on est dans une galerie 622 var $next = instance.element().find('.lity-next'); 623 if ($next.length) { 624 $next = litySpip.openerFromPrevNext($next); 625 if ($next) { 626 litySpip.elementOpener($next, {preloadOnly: true}); 627 } 628 } 629 }); 630 $(document).on('lity:close', function(event, instance) { 631 if (!litySpip.isTransition){ 632 //console.log('Lity close'); 633 // depiler si la box a ete fermee avant d'etre ready 634 if (litySpip.callbacks.onShow.length > litySpip.callbacks.onOpen.length) { 635 litySpip.callbacks.onShow.pop(); 636 } 637 var callback = litySpip.callbacks.onClose.pop(); 638 if (callback) { 639 callback(event, instance); 640 } 641 // Option ajaxReloadonClose 642 let options = instance.options(); 643 let ajaxReloadArgs = options.ajaxReloadOnClose; 644 if (ajaxReloadArgs && typeof(ajaxReloadArgs) === 'string') { 645 litySpip.ajaxReloadElements(ajaxReloadArgs); 646 } 647 } 648 }); 649 $(document).on('lity:remove', function(event, instance) { 650 if (!litySpip.isTransition){ 651 //console.log('Lity remove'); 652 var focused = litySpip.focusedItem.pop(); 653 if (focused){ 654 try { 655 focused.focus(); 656 } catch (e) { 657 // Ignore exceptions, eg. for SVG elements which can't be 658 // focused in IE11 659 } 660 } 661 } 662 else { 663 litySpip.isTransition.oldClosed = true; 664 if (litySpip.isTransition.newOpened) { 665 litySpip.isTransition = false; // transition terminee 666 } 667 } 668 }); 669 $(document).on('lity:resize', function(event, instance) { 670 //console.log('Lity resize'); 671 litySpip.adjustHeight(instance); 672 }); 673 674 } 675 // on écrase la config juste une fois 676 initConfig(); 677 678})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.