lightgallery
Version:
lightGallery is a feature-rich, modular JavaScript gallery plugin for building beautiful image and video galleries for the web and the mobile
380 lines • 12.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.$LG = exports.lgQuery = void 0;
function initLgPolyfills() {
(function () {
if (typeof window.CustomEvent === 'function')
return false;
function CustomEvent(event, params) {
params = params || {
bubbles: false,
cancelable: false,
detail: null,
};
var evt = document.createEvent('CustomEvent');
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
return evt;
}
window.CustomEvent = CustomEvent;
})();
(function () {
if (!Element.prototype.matches) {
Element.prototype.matches =
Element.prototype.msMatchesSelector ||
Element.prototype.webkitMatchesSelector;
}
})();
}
var lgQuery = /** @class */ (function () {
function lgQuery(selector) {
this.cssVenderPrefixes = [
'TransitionDuration',
'TransitionTimingFunction',
'Transform',
'Transition',
];
this.selector = this._getSelector(selector);
this.firstElement = this._getFirstEl();
return this;
}
lgQuery.generateUUID = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
};
lgQuery.prototype._getSelector = function (selector, context) {
if (context === void 0) { context = document; }
if (typeof selector !== 'string') {
return selector;
}
context = context || document;
var fl = selector.substring(0, 1);
if (fl === '#') {
return context.querySelector(selector);
}
else {
return context.querySelectorAll(selector);
}
};
lgQuery.prototype._each = function (func) {
if (!this.selector) {
return this;
}
if (this.selector.length !== undefined) {
[].forEach.call(this.selector, func);
}
else {
func(this.selector, 0);
}
return this;
};
lgQuery.prototype._setCssVendorPrefix = function (el, cssProperty, value) {
// prettier-ignore
var property = cssProperty.replace(/-([a-z])/gi, function (s, group1) {
return group1.toUpperCase();
});
if (this.cssVenderPrefixes.indexOf(property) !== -1) {
el.style[property.charAt(0).toLowerCase() + property.slice(1)] = value;
el.style['webkit' + property] = value;
el.style['moz' + property] = value;
el.style['ms' + property] = value;
el.style['o' + property] = value;
}
else {
el.style[property] = value;
}
};
lgQuery.prototype._getFirstEl = function () {
if (this.selector && this.selector.length !== undefined) {
return this.selector[0];
}
else {
return this.selector;
}
};
lgQuery.prototype.isEventMatched = function (event, eventName) {
var eventNamespace = eventName.split('.');
return event
.split('.')
.filter(function (e) { return e; })
.every(function (e) {
return eventNamespace.indexOf(e) !== -1;
});
};
lgQuery.prototype.attr = function (attr, value) {
if (value === undefined) {
if (!this.firstElement) {
return '';
}
return this.firstElement.getAttribute(attr);
}
this._each(function (el) {
el.setAttribute(attr, value);
});
return this;
};
lgQuery.prototype.find = function (selector) {
return $LG(this._getSelector(selector, this.selector));
};
lgQuery.prototype.first = function () {
if (this.selector && this.selector.length !== undefined) {
return $LG(this.selector[0]);
}
else {
return $LG(this.selector);
}
};
lgQuery.prototype.eq = function (index) {
return $LG(this.selector[index]);
};
lgQuery.prototype.parent = function () {
return $LG(this.selector.parentElement);
};
lgQuery.prototype.get = function () {
return this._getFirstEl();
};
lgQuery.prototype.removeAttr = function (attributes) {
var attrs = attributes.split(' ');
this._each(function (el) {
attrs.forEach(function (attr) { return el.removeAttribute(attr); });
});
return this;
};
lgQuery.prototype.wrap = function (className) {
if (!this.firstElement) {
return this;
}
var wrapper = document.createElement('div');
wrapper.className = className;
this.firstElement.parentNode.insertBefore(wrapper, this.firstElement);
this.firstElement.parentNode.removeChild(this.firstElement);
wrapper.appendChild(this.firstElement);
return this;
};
lgQuery.prototype.addClass = function (classNames) {
if (classNames === void 0) { classNames = ''; }
this._each(function (el) {
// IE doesn't support multiple arguments
classNames.split(' ').forEach(function (className) {
if (className) {
el.classList.add(className);
}
});
});
return this;
};
lgQuery.prototype.removeClass = function (classNames) {
this._each(function (el) {
// IE doesn't support multiple arguments
classNames.split(' ').forEach(function (className) {
if (className) {
el.classList.remove(className);
}
});
});
return this;
};
lgQuery.prototype.hasClass = function (className) {
if (!this.firstElement) {
return false;
}
return this.firstElement.classList.contains(className);
};
lgQuery.prototype.hasAttribute = function (attribute) {
if (!this.firstElement) {
return false;
}
return this.firstElement.hasAttribute(attribute);
};
lgQuery.prototype.toggleClass = function (className) {
if (!this.firstElement) {
return this;
}
if (this.hasClass(className)) {
this.removeClass(className);
}
else {
this.addClass(className);
}
return this;
};
lgQuery.prototype.css = function (property, value) {
var _this = this;
this._each(function (el) {
_this._setCssVendorPrefix(el, property, value);
});
return this;
};
// Need to pass separate namespaces for separate elements
lgQuery.prototype.on = function (events, listener) {
var _this = this;
if (!this.selector) {
return this;
}
events.split(' ').forEach(function (event) {
if (!Array.isArray(lgQuery.eventListeners[event])) {
lgQuery.eventListeners[event] = [];
}
lgQuery.eventListeners[event].push(listener);
_this.selector.addEventListener(event.split('.')[0], listener);
});
return this;
};
// @todo - test this
lgQuery.prototype.once = function (event, listener) {
var _this = this;
this.on(event, function () {
_this.off(event);
listener(event);
});
return this;
};
lgQuery.prototype.off = function (event) {
var _this = this;
if (!this.selector) {
return this;
}
Object.keys(lgQuery.eventListeners).forEach(function (eventName) {
if (_this.isEventMatched(event, eventName)) {
lgQuery.eventListeners[eventName].forEach(function (listener) {
_this.selector.removeEventListener(eventName.split('.')[0], listener);
});
lgQuery.eventListeners[eventName] = [];
}
});
return this;
};
lgQuery.prototype.trigger = function (event, detail) {
if (!this.firstElement) {
return this;
}
var customEvent = new CustomEvent(event.split('.')[0], {
detail: detail || null,
});
this.firstElement.dispatchEvent(customEvent);
return this;
};
// Does not support IE
lgQuery.prototype.load = function (url) {
var _this = this;
fetch(url)
.then(function (res) { return res.text(); })
.then(function (html) {
_this.selector.innerHTML = html;
});
return this;
};
lgQuery.prototype.html = function (html) {
if (html === undefined) {
if (!this.firstElement) {
return '';
}
return this.firstElement.innerHTML;
}
this._each(function (el) {
el.innerHTML = html;
});
return this;
};
lgQuery.prototype.append = function (html) {
this._each(function (el) {
if (typeof html === 'string') {
el.insertAdjacentHTML('beforeend', html);
}
else {
el.appendChild(html);
}
});
return this;
};
lgQuery.prototype.prepend = function (html) {
this._each(function (el) {
el.insertAdjacentHTML('afterbegin', html);
});
return this;
};
lgQuery.prototype.remove = function () {
this._each(function (el) {
el.parentNode.removeChild(el);
});
return this;
};
lgQuery.prototype.empty = function () {
this._each(function (el) {
el.innerHTML = '';
});
return this;
};
lgQuery.prototype.scrollTop = function (scrollTop) {
if (scrollTop !== undefined) {
document.body.scrollTop = scrollTop;
document.documentElement.scrollTop = scrollTop;
return this;
}
else {
return (window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop ||
0);
}
};
lgQuery.prototype.scrollLeft = function (scrollLeft) {
if (scrollLeft !== undefined) {
document.body.scrollLeft = scrollLeft;
document.documentElement.scrollLeft = scrollLeft;
return this;
}
else {
return (window.pageXOffset ||
document.documentElement.scrollLeft ||
document.body.scrollLeft ||
0);
}
};
lgQuery.prototype.offset = function () {
if (!this.firstElement) {
return {
left: 0,
top: 0,
};
}
var rect = this.firstElement.getBoundingClientRect();
var bodyMarginLeft = $LG('body').style().marginLeft;
// Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value
return {
left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(),
top: rect.top + this.scrollTop(),
};
};
lgQuery.prototype.style = function () {
if (!this.firstElement) {
return {};
}
return (this.firstElement.currentStyle ||
window.getComputedStyle(this.firstElement));
};
// Width without padding and border even if box-sizing is used.
lgQuery.prototype.width = function () {
var style = this.style();
return (this.firstElement.clientWidth -
parseFloat(style.paddingLeft) -
parseFloat(style.paddingRight));
};
// Height without padding and border even if box-sizing is used.
lgQuery.prototype.height = function () {
var style = this.style();
return (this.firstElement.clientHeight -
parseFloat(style.paddingTop) -
parseFloat(style.paddingBottom));
};
lgQuery.eventListeners = {};
return lgQuery;
}());
exports.lgQuery = lgQuery;
function $LG(selector) {
initLgPolyfills();
return new lgQuery(selector);
}
exports.$LG = $LG;
//# sourceMappingURL=lgQuery.js.map