PageSourceSearch

https://takinoyu.co.jp/common/js/libs/lity/lity.js

js takinoyu.co.jp collected 2026-09-25 04:26:43 UTC 12,409 bytes, 437 lines download raw bytes

vendor: 4,399 bytes, lines 1-150
1/*! Lity - v1.6.6 - 2016-04-22
2* http://sorgalla.com/lity/
3* Copyright (c) 2016 Jan Sorgalla; Licensed MIT */
4(function(window, factory) {
5    if (typeof define === 'function' && define.amd) {
6        define(['jquery'], function($) {
7            return factory(window, $);
8        });
9    } else if (typeof module === 'object' && typeof module.exports === 'object') {
10        module.exports = factory(window, require('jquery'));
11    } else {
12        window.lity = factory(window, window.jQuery || window.Zepto);
13    }
14}(typeof window !== "undefined" ? window : this, function(window, $) {
15    'use strict';
16
17    var document = window.document;
18
19    var _win = $(window);
20    var _html = $('html');
21    var _instanceCount = 0;
22
23    var _imageRegexp = /(^data:image\/)|(\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\?\S*)?$)/i;
24    var _youtubeRegex = /(youtube(-nocookie)?\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11})(.*)?/i;
25    var _vimeoRegex =  /(vimeo(pro)?.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/;
26    var _googlemapsRegex = /((maps|www)\.)?google\.([^\/\?]+)\/?((maps\/?)?\?)(.*)/i;
27
28    var _defaultHandlers = {
29        image: imageHandler,
30        inline: inlineHandler,
31        iframe: iframeHandler
32    };
33
34    var _defaultOptions = {
35        esc: true,
36        handler: null,
37        template: '<div class="lity" tabindex="-1"><div class="lity-wrap" data-lity-close><div class="lity-loader">Loading...</div><div class="lity-container"><div class="lity-content"></div><button class="lity-close" type="button" title="Close (Esc)" data-lity-close>×</button></div></div></div>'
38    };
39
40    function globalToggle() {
41        _html[_instanceCount > 0 ? 'addClass' : 'removeClass']('lity-active');
42    }
43
44    var transitionEndEvent = (function() {
45        var el = document.createElement('div');
46
47        var transEndEventNames = {
48            WebkitTransition: 'webkitTransitionEnd',
49            MozTransition: 'transitionend',
50            OTransition: 'oTransitionEnd otransitionend',
51            transition: 'transitionend'
52        };
53
54        for (var name in transEndEventNames) {
55            if (el.style[name] !== undefined) {
56                return transEndEventNames[name];
57            }
58        }
59
60        return false;
61    })();
62
63    function transitionEnd(element) {
64        var deferred = $.Deferred();
65
66        if (!transitionEndEvent) {
67            deferred.resolve();
68        } else {
69            element.one(transitionEndEvent, deferred.resolve);
70            setTimeout(deferred.resolve, 500);
71        }
72
73        return deferred.promise();
74    }
75
76    function settings(currSettings, key, value) {
77        if (arguments.length === 1) {
78            return $.extend({}, currSettings);
79        }
80
81        if (typeof key === 'string') {
82            if (typeof value === 'undefined') {
83                return typeof currSettings[key] === 'undefined' ?
84                    null :
85                    currSettings[key];
86            }
87            currSettings[key] = value;
88        } else {
89            $.extend(currSettings, key);
90        }
91
92        return this;
93    }
94
95    function parseQueryParams(params){
96        var pairs = decodeURI(params).split('&');
97        var obj = {}, p;
98
99        for (var i = 0, n = pairs.length; i < n; i++) {
100            if (!pairs[i]) {
101                continue;
102            }
103
104            p = pairs[i].split('=');
105            obj[p[0]] = p[1];
106        }
107
108        return obj;
109    }
110
111    function appendQueryParams(url, params) {
112        return url + (url.indexOf('?') > -1 ? '&' : '?') + $.param(params);
113    }
114
115    function error(msg) {
116        return $('<span class="lity-error"/>').append(msg);
117    }
118
119    function imageHandler(target) {
120        if (!_imageRegexp.test(target)) {
121            return false;
122        }
123
124        var img = $('<img src="' + target + '">');
125        var deferred = $.Deferred();
126        var failed = function() {
127            deferred.reject(error('Failed loading image'));
128        };
129
130        img
131            .on('load', function() {
132                if (this.naturalWidth === 0) {
133                    return failed();
134                }
135
136                deferred.resolve(img);
137            })
138            .on('error', failed)
139        ;
140
141        return deferred.promise();
142    }
143
144    function inlineHandler(target) {
145        var el;
146
147        try {
148            el = $(target);
149        } catch (e) {
150            return false;
151        }
152
153        if (!el.length) {
154            return false;
155        }
156
157        var placeholder = $('<span style="display:none !important" class="lity-inline-placeholder"/>');
158
159        return el
160            .after(placeholder)
161            .on('lity:ready', function(e, instance) {
162                instance.one('lity:remove', function() {
163                    placeholder
164                        .before(el.addClass('lity-hide'))
165                        .remove()
166                    ;
167                });
168            })
169        ;
170    }
171
172    function iframeHandler(target) {
173        var matches, url = target;
174
175        matches = _youtubeRegex.exec(target);
176
177        if (matches) {
178            url = appendQueryParams(
179                'https://www.youtube' + (matches[2] || '') + '.com/embed/' + matches[4],
180                $.extend(
181                    {
182                        autoplay: 1
183                    },
184                    parseQueryParams(matches[5] || '')
185                )
186            );
187        }
188
189        matches = _vimeoRegex.exec(target);
190
191        if (matches) {
192            url = appendQueryParams(
193                'https://player.vimeo.com/video/' + matches[3],
194                $.extend(
195                    {
196                        autoplay: 1
197                    },
198                    parseQueryParams(matches[4] || '')
199                )
200            );
201        }
202
203        matches = _googlemapsRegex.exec(target);
204
205        if (matches) {
206            url = appendQueryParams(
207                'https://www.google.' + matches[3] + '/maps?' + matches[6],
208                {
209                    output: matches[6].indexOf('layer=c') > 0 ? 'svembed' : 'embed'
210                }
211            );
212        }
213
214        return '<div class="lity-iframe-container"><iframe frameborder="0" allowfullscreen src="' + url + '"></iframe></div>';
215    }
216
217    function lity(options) {
218        var _options = {},
219            _handlers = {},
220            _instance,
221            _content,
222            _ready = $.Deferred().resolve();
223
224        function keyup(e) {
225            if (e.keyCode === 27) {
226                close();
227            }
228        }
229
230        function resize() {
231            var height = document.documentElement.clientHeight ? document.documentElement.clientHeight : Math.round(_win.height());
232
233            _content
234                .css('max-height', Math.floor(height) + 'px')
235                .trigger('lity:resize', [_instance])
236            ;
237        }
238
239        function ready(el, content) {
240            if (!_instance) {
241                return;
242            }
243
244            _content = $(content);
245
246            _win.on('resize', resize);
247            resize();
248
249            _instance
250                .find('.lity-loader')
251                .each(function() {
252                    var el = $(this);
253                    transitionEnd(el).always(function() {
254                        el.remove();
255                    });
256                })
257            ;
258
259            _instance
260                .removeClass('lity-loading')
261                .find('.lity-content')
262                .empty()
263                .append(_content)
264            ;
265
266            _content
267                .removeClass('lity-hide')
268                .trigger('lity:ready', [_instance, el])
269            ;
270
271            _ready.resolve();
272        }
273
274        function init(handler, content, options, el) {
275            _ready = $.Deferred();
276
277            _instanceCount++;
278            globalToggle();
279
280            _instance = $(options.template)
281                .addClass('lity-loading')
282                .appendTo('body');
283
284            if (!!options.esc) {
285                _win.on('keyup', keyup);
286            }
287
288            setTimeout(function() {
289                _instance
290                    .addClass('lity-opened lity-' + handler)
291                    .on('click', '[data-lity-close]', function(e) {
292                        if ($(e.target).is('[data-lity-close]')) {
293                            close();
294                        }
295                    })
296                    .trigger('lity:open', [_instance, el])
297                ;
298
299                $.when(content).always($.proxy(ready, null, el));
300            }, 0);
301        }
302
303        function open(target, options, el) {
304            var handler, content, handlers = $.extend({}, _defaultHandlers, _handlers);
305
306            options = $.extend(
307                {},
308                _defaultOptions,
309                _options,
310                options
311            );
312
313            if (options.handler && handlers[options.handler]) {
314                content = handlers[options.handler](target, popup);
315                handler = options.handler;
316            } else {
317                var lateHandlers = {};
318
319                // Run inline and iframe handlers after all other handlers
320                $.each(['inline', 'iframe'], function(i, name) {
321                    if (handlers[name]) {
322                        lateHandlers[name] = handlers[name];
323                    }
324
325                    delete handlers[name];
326                });
327
328                var call = function(name, callback) {
329                    // Handler might be "removed" by setting callback to null
330                    if (!callback) {
331                        return true;
332                    }
333
334                    content = callback(target, popup);
335
336                    if (!!content) {
337                        handler = name;
338                        return false;
339                    }
340                };
341
342                $.each(handlers, call);
343
344                if (!handler) {
345                    $.each(lateHandlers, call);
346                }
347            }
348
349            if (content) {
350                $.when(close()).done($.proxy(init, null, handler, content, options, el));
351            }
352
353            return !!content;
354        }
355
356        function close() {
357            if (!_instance) {
358                return;
359            }
360
361            var deferred = $.Deferred();
362
363            _ready.done(function() {
364                _instanceCount--;
365                globalToggle();
366
367                _win
368                    .off('resize', resize)
369                    .off('keyup', keyup)
370                ;
371
372                _content.trigger('lity:close', [_instance]);
373
374                _instance
375                    .removeClass('lity-opened')
376                    .addClass('lity-closed')
377                ;
378
379                var instance = _instance, content = _content;
380                _instance = null;
381                _content = null;
382
383                transitionEnd(content.add(instance)).always(function() {
384                    content.trigger('lity:remove', [instance]);
385                    instance.remove();
386                    deferred.resolve();
387                });
388            });
389
390            return deferred.promise();
391        }
392
393        function popup(event) {
394            // If not an event, act as alias of popup.open
395            if (!event.preventDefault) {
396                return popup.open(event);
397            }
398
399            var el = $(this);
400            var target = el.data('lity-target') || el.attr('href') || el.attr('src');
401
402            if (!target) {
403                return;
404            }
405
406            var options = el.data('lity-options') || el.data('lity');
407
408            if (open(target, options, el)) {
409                el.blur();
410                event.preventDefault();
411            }
412        }
413
414        popup.handlers = $.proxy(settings, popup, _handlers);
415        popup.options = $.proxy(settings, popup, _options);
416
417        popup.open = function(target, options, el) {
418            open(target, options, el);
419            return popup;
420        };
421
422        popup.close = function() {
423            close();
424            return popup;
425        };
426
427        return popup.options(options);
428    }
429
430    lity.version = '1.6.6';
431    lity.handlers = $.proxy(settings, lity, _defaultHandlers);
432    lity.options = $.proxy(settings, lity, _defaultOptions);
433
434    $(document).on('click', '[data-lity]', lity());
435
436    return lity;
437}));

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.