(function(global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? (module.exports = factory()) : typeof define === 'function' && define.amd ? define(factory) : (global.retinajs = factory()); })(this, function() { 'use strict'; var hasWindow = typeof window !== 'undefined'; var environment = Math.round(hasWindow ? window.devicePixelRatio || 1 : 1); var srcReplace = /(\.[A-z]{3,4}\/?(\?.*)?)$/; var inlineReplace = /url\(('|")?([^)'"]+)('|")?\)/i; var selector = '[data-rjs]'; var processedAttr = 'data-rjs-processed'; function arrayify(object) { return Array.prototype.slice.call(object); } function chooseCap(cap) { var numericCap = parseInt(cap, 10); if (environment < numericCap) { return environment; } else { return numericCap; } } function forceOriginalDimensions(image) { if (!image.hasAttribute('data-no-resize')) { if (image.offsetWidth === 0 && image.offsetHeight === 0) { image.setAttribute('width', image.naturalWidth); image.setAttribute('height', image.naturalHeight); } else { image.setAttribute('width', image.offsetWidth); image.setAttribute('height', image.offsetHeight); } } return image; } function setSourceIfAvailable(image, retinaURL) { var imgType = image.nodeName.toLowerCase(); var testImage = document.createElement('img'); testImage.addEventListener('load', function() { if (imgType === 'img') { forceOriginalDimensions(image).setAttribute('src', retinaURL); } else { image.style.backgroundImage = 'url(' + retinaURL + ')'; } }); testImage.setAttribute('src', retinaURL); image.setAttribute(processedAttr, true); } function dynamicSwapImage(image, src) { var rjs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; var cap = chooseCap(rjs); if (src && cap > 1) { var newSrc = src.replace(srcReplace, '@' + cap + 'x$1'); setSourceIfAvailable(image, newSrc); } } function manualSwapImage(image, src, hdsrc) { if (environment > 1) { setSourceIfAvailable(image, hdsrc); } } function getImages(images) { if (!images) { return typeof document !== 'undefined' ? arrayify(document.querySelectorAll(selector)) : []; } else { return typeof images.forEach === 'function' ? images : arrayify(images); } } function cleanBgImg(img) { return img.style.backgroundImage.replace(inlineReplace, '$2'); } function retina(images) { getImages(images).forEach(function(img) { if (!img.getAttribute(processedAttr)) { var isImg = img.nodeName.toLowerCase() === 'img'; var src = isImg ? img.getAttribute('src') : cleanBgImg(img); var rjs = img.getAttribute('data-rjs'); var rjsIsNumber = !isNaN(parseInt(rjs, 10)); if (rjs === null) { return; } if (rjsIsNumber) { dynamicSwapImage(img, src, rjs); } else { manualSwapImage(img, src, rjs); } } }); } if (hasWindow) { window.addEventListener('load', function() { retina(); }); window.retinajs = retina; } return retina; });