vendor: 18,470 bytes, lines 1-647
1/*! Lity - v2.2.2 - 2016-12-14 2* http://sorgalla.com/lity/ 3* Copyright (c) 2015-2016 Jan Sorgalla; Licensed MIT */ 4 5 6 7 8 9(function(window, factory) { 10 if (typeof define === 'function' && define.amd) { 11 define(['jquery'], function($) { 12 return factory(window, $); 13 }); 14 } else if (typeof module === 'object' && typeof module.exports === 'object') { 15 module.exports = factory(window, require('jquery')); 16 } else { 17 window.lity = factory(window, window.jQuery || window.Zepto); 18 } 19}(typeof window !== "undefined" ? window : this, function(window, $) { 20 'use strict'; 21 22 var document = window.document; 23 24 var _win = $(window); 25 var _deferred = $.Deferred; 26 var _html = $('html'); 27 var _instances = []; 28 29 var _attrAriaHidden = 'aria-hidden'; 30 var _dataAriaHidden = 'lity-' + _attrAriaHidden; 31 32 var _focusableElementsSelector = 'a[href],area[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),button:not([disabled]),iframe,object,embed,[contenteditable],[tabindex]:not([tabindex^="-"])'; 33 34 35 36 37 38 var _defaultOptions = { 39 handler: null, 40 handlers: { 41 image: imageHandler, 42 inline: inlineHandler, 43 youtube: youtubeHandler, 44 vimeo: vimeoHandler, 45 googlemaps: googlemapsHandler, 46 facebookvideo: facebookvideoHandler, 47 iframe: iframeHandler 48 }, 49 template: '<div class="lity" role="dialog" aria-label="Dialog Window (Pressione ESC para fechar)" tabindex="-1"><div class="lity-wrap" data-lity-close role="document"><div class="lity-loader" aria-hidden="true">Carregando...</div><div class="lity-container"><div class="lity-content"></div><button class="lity-close" type="button" aria-label="Close (Pressione ESC para fechar)" data-lity-close>×</button></div></div></div>' 50 }; 51 52 var _imageRegexp = /(^data:image\/)|(\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\?\S*)?$)/i; 53 var _youtubeRegex = /(youtube(-nocookie)?\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11})(.*)?/i; 54 var _vimeoRegex = /(vimeo(pro)?.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/; 55 var _googlemapsRegex = /((maps|www)\.)?google\.([^\/\?]+)\/?((maps\/?)?\?)(.*)/i; 56 var _facebookvideoRegex = /(facebook\.com)\/([a-z0-9_-]*)\/videos\/([0-9]*)(.*)?$/i; 57 58 var _transitionEndEvent = (function() { 59 var el = document.createElement('div'); 60 61 var transEndEventNames = { 62 WebkitTransition: 'webkitTransitionEnd', 63 MozTransition: 'transitionend', 64 OTransition: 'oTransitionEnd otransitionend', 65 transition: 'transitionend' 66 }; 67 68 for (var name in transEndEventNames) { 69 if (el.style[name] !== undefined) { 70 return transEndEventNames[name]; 71 } 72 } 73 74 return false; 75 })(); 76 77 function transitionEnd(element) { 78 var deferred = _deferred(); 79 80 if (!_transitionEndEvent || !element.length) { 81 deferred.resolve(); 82 } else { 83 element.one(_transitionEndEvent, deferred.resolve); 84 setTimeout(deferred.resolve, 500); 85 } 86 87 return deferred.promise(); 88 } 89 90 function settings(currSettings, key, value) { 91 if (arguments.length === 1) { 92 return $.extend({}, currSettings); 93 } 94 95 if (typeof key === 'string') { 96 if (typeof value === 'undefined') { 97 return typeof currSettings[key] === 'undefined' 98 ? null 99 : currSettings[key]; 100 } 101 102 currSettings[key] = value; 103 } else { 104 $.extend(currSettings, key); 105 } 106 107 return this; 108 } 109 110 function parseQueryParams(params) { 111 var pairs = decodeURI(params.split('#')[0]).split('&'); 112 var obj = {}, p; 113 114 for (var i = 0, n = pairs.length; i < n; i++) { 115 if (!pairs[i]) { 116 continue; 117 } 118 119 p = pairs[i].split('='); 120 obj[p[0]] = p[1]; 121 } 122 123 return obj; 124 } 125 126 function appendQueryParams(url, params) { 127 return url + (url.indexOf('?') > -1 ? '&' : '?') + $.param(params); 128 } 129 130 function transferHash(originalUrl, newUrl) { 131 var pos = originalUrl.indexOf('#'); 132 133 if (-1 === pos) { 134 return newUrl; 135 } 136 137 if (pos > 0) { 138 originalUrl = originalUrl.substr(pos); 139 } 140 141 return newUrl + originalUrl; 142 } 143 144 function error(msg) { 145 return $('<span class="lity-error"/>').append(msg); 146 } 147 148 function imageHandler(target, instance) { 149 150 var desc = (instance.opener() && instance.opener().data('lity-desc')) || 'Imagem'; 151 var img = $('<img src="' + target + '" alt="' + desc + '"/>'); 152 var deferred = _deferred(); 153 var failed = function() { 154 deferred.reject(error('Não foi possÃvel carregar a imagem')); 155 }; 156 157 img 158 .on('load', function() { 159 if (this.naturalWidth === 0) { 160 return failed(); 161 } 162 163 deferred.resolve(img); 164 }) 165 .on('error', failed) 166 ; 167 168 return deferred.promise(); 169 } 170 171 imageHandler.test = function(target) { 172 return _imageRegexp.test(target); 173 }; 174 175 function inlineHandler(target, instance) { 176 var el, placeholder, hasHideClass; 177 178 try { 179 el = $(target); 180 } catch (e) { 181 return false; 182 } 183 184 if (!el.length) { 185 return false; 186 } 187 188 placeholder = $('<i style="display:none !important"/>'); 189 hasHideClass = el.hasClass('lity-hide'); 190 191 instance 192 .element() 193 .one('lity:remove', function() { 194 placeholder 195 .before(el) 196 .remove() 197 ; 198 199 if (hasHideClass && !el.closest('.lity-content').length) { 200 el.addClass('lity-hide'); 201 } 202 }) 203 ; 204 205 return el 206 .removeClass('lity-hide') 207 .after(placeholder) 208 ; 209 } 210 211 function youtubeHandler(target) { 212 var matches = _youtubeRegex.exec(target); 213 214 if (!matches) { 215 return false; 216 } 217 218 return iframeHandler( 219 transferHash( 220 target, 221 appendQueryParams( 222 'https://www.youtube' + (matches[2] || '') + '.com/embed/' + matches[4], 223 $.extend( 224 { 225 autoplay: 1 226 }, 227 parseQueryParams(matches[5] || '') 228 ) 229 ) 230 ) 231 ); 232 } 233 234 function vimeoHandler(target) { 235 var matches = _vimeoRegex.exec(target); 236 237 if (!matches) { 238 return false; 239 } 240 241 return iframeHandler( 242 transferHash( 243 target, 244 appendQueryParams( 245 'https://player.vimeo.com/video/' + matches[3], 246 $.extend( 247 { 248 autoplay: 1 249 }, 250 parseQueryParams(matches[4] || '') 251 ) 252 ) 253 ) 254 ); 255 } 256 257 function facebookvideoHandler(target) { 258 var matches = _facebookvideoRegex.exec(target); 259 260 if (!matches) { 261 return false; 262 } 263 264 if (0 !== target.indexOf('http')) { 265 target = 'https:' + target; 266 } 267 268 return iframeHandler( 269 transferHash( 270 target, 271 appendQueryParams( 272 'https://www.facebook.com/plugins/video.php?href=' + target, 273 $.extend( 274 { 275 autoplay: 1 276 }, 277 parseQueryParams(matches[4] || '') 278 ) 279 ) 280 ) 281 ); 282 } 283 284 function googlemapsHandler(target) { 285 var matches = _googlemapsRegex.exec(target); 286 287 if (!matches) { 288 return false; 289 } 290 291 return iframeHandler( 292 transferHash( 293 target, 294 appendQueryParams( 295 'https://www.google.' + matches[3] + '/maps?' + matches[6], 296 { 297 output: matches[6].indexOf('layer=c') > 0 ? 'svembed' : 'embed' 298 } 299 ) 300 ) 301 ); 302 } 303 304 function iframeHandler(target) { 305 return '<div class="lity-iframe-container"><iframe frameborder="0" allowfullscreen src="' + target + '"/></div>'; 306 } 307 308 function winHeight() { 309 return document.documentElement.clientHeight 310 ? document.documentElement.clientHeight 311 : Math.round(_win.height()); 312 } 313 314 function keydown(e) { 315 var current = currentInstance(); 316 317 if (!current) { 318 return; 319 } 320 321 // ESC key 322 if (e.keyCode === 27) { 323 current.close(); 324 } 325 326 // TAB key 327 if (e.keyCode === 9) { 328 handleTabKey(e, current); 329 } 330 } 331 332 function handleTabKey(e, instance) { 333 var focusableElements = instance.element().find(_focusableElementsSelector); 334 var focusedIndex = focusableElements.index(document.activeElement); 335 336 if (e.shiftKey && focusedIndex <= 0) { 337 focusableElements.get(focusableElements.length - 1).focus(); 338 e.preventDefault(); 339 } else if (!e.shiftKey && focusedIndex === focusableElements.length - 1) { 340 focusableElements.get(0).focus(); 341 e.preventDefault(); 342 } 343 } 344 345 function resize() { 346 $.each(_instances, function(i, instance) { 347 instance.resize(); 348 }); 349 } 350 351 function registerInstance(instanceToRegister) { 352 if (1 === _instances.unshift(instanceToRegister)) { 353 _html.addClass('lity-active'); 354 355 _win 356 .on({ 357 resize: resize, 358 keydown: keydown 359 }) 360 ; 361 } 362 363 $('body > *').not(instanceToRegister.element()) 364 .addClass('lity-hidden') 365 .each(function() { 366 var el = $(this); 367 368 if (undefined !== el.data(_dataAriaHidden)) { 369 return; 370 } 371 372 el.data(_dataAriaHidden, el.attr(_attrAriaHidden) || null); 373 }) 374 .attr(_attrAriaHidden, 'true') 375 ; 376 } 377 378 function removeInstance(instanceToRemove) { 379 var show; 380 381 instanceToRemove 382 .element() 383 .attr(_attrAriaHidden, 'true') 384 ; 385 386 if (1 === _instances.length) { 387 _html.removeClass('lity-active'); 388 389 _win 390 .off({ 391 resize: resize, 392 keydown: keydown 393 }) 394 ; 395 } 396 397 _instances = $.grep(_instances, function(instance) { 398 return instanceToRemove !== instance; 399 }); 400 401 if (!!_instances.length) { 402 show = _instances[0].element(); 403 } else { 404 show = $('.lity-hidden'); 405 } 406 407 show 408 .removeClass('lity-hidden') 409 .each(function() { 410 var el = $(this), oldAttr = el.data(_dataAriaHidden); 411 412 if (!oldAttr) { 413 el.removeAttr(_attrAriaHidden); 414 } else { 415 el.attr(_attrAriaHidden, oldAttr); 416 } 417 418 el.removeData(_dataAriaHidden); 419 }) 420 ; 421 } 422 423 function currentInstance() { 424 if (0 === _instances.length) { 425 return null; 426 } 427 428 return _instances[0]; 429 } 430 431 function factory(target, instance, handlers, preferredHandler) { 432 var handler = 'inline', content; 433 434 var currentHandlers = $.extend({}, handlers); 435 436 if (preferredHandler && currentHandlers[preferredHandler]) { 437 content = currentHandlers[preferredHandler](target, instance); 438 handler = preferredHandler; 439 } else { 440 // Run inline and iframe handlers after all other handlers 441 $.each(['inline', 'iframe'], function(i, name) { 442 delete currentHandlers[name]; 443 444 currentHandlers[name] = handlers[name]; 445 }); 446 447 $.each(currentHandlers, function(name, currentHandler) { 448 // Handler might be "removed" by setting callback to null 449 if (!currentHandler) { 450 return true; 451 } 452 453 if ( 454 currentHandler.test && 455 !currentHandler.test(target, instance) 456 ) { 457 return true; 458 } 459 460 content = currentHandler(target, instance); 461 462 if (false !== content) { 463 handler = name; 464 return false; 465 } 466 }); 467 } 468 469 return {handler: handler, content: content || ''}; 470 } 471 472 function Lity(target, options, opener, activeElement) { 473 var self = this; 474 var result; 475 var isReady = false; 476 var isClosed = false; 477 var element; 478 var content; 479 480 options = $.extend( 481 {}, 482 _defaultOptions, 483 options 484 ); 485 486 element = $(options.template); 487 488 // -- API -- 489 490 self.element = function() { 491 return element; 492 }; 493 494 self.opener = function() { 495 return opener; 496 }; 497 498 self.options = $.proxy(settings, self, options); 499 self.handlers = $.proxy(settings, self, options.handlers); 500 501 self.resize = function() { 502 if (!isReady || isClosed) { 503 return; 504 } 505 506 content 507 .css('max-height', winHeight() + 'px') 508 .trigger('lity:resize', [self]) 509 ; 510 }; 511 512 self.close = function() { 513 if (!isReady || isClosed) { 514 return; 515 } 516 517 isClosed = true; 518 519 removeInstance(self); 520 521 var deferred = _deferred(); 522 523 // We return focus only if the current focus is inside this instance 524 if ( 525 activeElement && 526 ( 527 document.activeElement === element[0] || 528 $.contains(element[0], document.activeElement) 529 ) 530 ) { 531 try { 532 activeElement.focus(); 533 } catch (e) { 534 // Ignore exceptions, eg. for SVG elements which can't be 535 // focused in IE11 536 } 537 } 538 539 content.trigger('lity:close', [self]); 540 541 element 542 .removeClass('lity-opened') 543 .addClass('lity-closed') 544 ; 545 546 transitionEnd(content.add(element)) 547 .always(function() { 548 content.trigger('lity:remove', [self]); 549 element.remove(); 550 element = undefined; 551 deferred.resolve(); 552 }) 553 ; 554 555 return deferred.promise(); 556 }; 557 558 // -- Initialization -- 559 560 result = factory(target, self, options.handlers, options.handler); 561 562 element 563 .attr(_attrAriaHidden, 'false') 564 .addClass('lity-loading lity-opened lity-' + result.handler) 565 .appendTo('body') 566 .focus() 567 .on('click', '[data-lity-close]', function(e) { 568 if ($(e.target).is('[data-lity-close]')) { 569 self.close(); 570 } 571 }) 572 .trigger('lity:open', [self]) 573 ; 574 575 registerInstance(self); 576 577 $.when(result.content) 578 .always(ready) 579 ; 580 581 function ready(result) { 582 content = $(result) 583 .css('max-height', winHeight() + 'px') 584 ; 585 586 element 587 .find('.lity-loader') 588 .each(function() { 589 var loader = $(this); 590 591 transitionEnd(loader) 592 .always(function() { 593 loader.remove(); 594 }) 595 ; 596 }) 597 ; 598 599 element 600 .removeClass('lity-loading') 601 .find('.lity-content') 602 .empty() 603 .append(content) 604 ; 605 606 isReady = true; 607 608 content 609 .trigger('lity:ready', [self]) 610 ; 611 } 612 } 613 614 function lity(target, options, opener) { 615 if (!target.preventDefault) { 616 opener = $(opener); 617 } else { 618 target.preventDefault(); 619 opener = $(this); 620 target = opener.data('lity-target') || opener.attr('href') || opener.attr('src'); 621 } 622 623 var instance = new Lity( 624 target, 625 $.extend( 626 {}, 627 opener.data('lity-options') || opener.data('lity'), 628 options 629 ), 630 opener, 631 document.activeElement 632 ); 633 634 if (!target.preventDefault) { 635 return instance; 636 } 637 } 638 639 lity.version = '2.2.2'; 640 lity.options = $.proxy(settings, lity, _defaultOptions); 641 lity.handlers = $.proxy(settings, lity, _defaultOptions.handlers); 642 lity.current = currentInstance; 643 644 $(document).on('click.lity', '[data-lity]', lity); 645 646 return lity; 647}));
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.