PageSourceSearch

https://www.puc-rio.br/js/puc_efeito_lity/dist/lity.js

js puc-rio.br collected 2026-09-24 08:31:05 UTC 18,470 bytes, 647 lines download raw bytes

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>&times;</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.