Skip to content

Commit

Permalink
Update and commit dist file, including latest zip package.
Browse files Browse the repository at this point in the history
  • Loading branch information
Adam A.G. Shamblin committed Apr 11, 2014
1 parent e5e5d7f commit a70e736
Show file tree
Hide file tree
Showing 4 changed files with 194 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Gruntfile.js
Expand Up @@ -22,7 +22,7 @@ module.exports = function (grunt) {
' * high-resolution images to devices with retina displays.\n' +
' */\n',

clean: ['build', 'pkg'],
clean: ['dist'],

jshint: {
options: {
Expand Down Expand Up @@ -61,7 +61,7 @@ module.exports = function (grunt) {
compress: {
pkg: {
options: {
archive: 'pkg/retina-<%= pkg.version %>.zip'
archive: 'dist/retina-<%= pkg.version %>.zip'
},
files: [{
src: ['**'],
Expand Down
Binary file added dist/retina-1.3.0.zip
Binary file not shown.
182 changes: 182 additions & 0 deletions dist/retina.js
@@ -0,0 +1,182 @@
/*!
* Retina.js v1.3.0
*
* Copyright 2014 Imulus, LLC
* Released under the MIT license
*
* Retina.js is an open source script that makes it easy to serve
* high-resolution images to devices with retina displays.
*/

(function() {
var root = (typeof exports === 'undefined' ? window : exports);
var config = {
// An option to choose a suffix for 2x images
retinaImageSuffix : '@2x',

// Ensure Content-Type is an image before trying to load @2x image
// https://github.com/imulus/retinajs/pull/45)
check_mime_type: true,

// Resize high-resolution images to original image's pixel dimensions
// https://github.com/imulus/retinajs/issues/8
force_original_dimensions: true
};

function Retina() {}

root.Retina = Retina;

Retina.configure = function(options) {
if (options === null) {
options = {};
}

for (var prop in options) {
if (options.hasOwnProperty(prop)) {
config[prop] = options[prop];
}
}
};

Retina.init = function(context) {
if (context === null) {
context = root;
}

var existing_onload = context.onload || function(){};

context.onload = function() {
var images = document.getElementsByTagName('img'), retinaImages = [], i, image;
for (i = 0; i < images.length; i += 1) {
image = images[i];
if (!!!image.getAttributeNode('data-no-retina')) {
retinaImages.push(new RetinaImage(image));
}
}
existing_onload();
};
};

Retina.isRetina = function(){
var mediaQuery = '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)';

if (root.devicePixelRatio > 1) {
return true;
}

if (root.matchMedia && root.matchMedia(mediaQuery).matches) {
return true;
}

return false;
};


var regexMatch = /\.\w+$/;
function suffixReplace (match) {
return config.retinaImageSuffix + match;
}

function RetinaImagePath(path, at_2x_path) {
this.path = path || '';
if (typeof at_2x_path !== 'undefined' && at_2x_path !== null) {
this.at_2x_path = at_2x_path;
this.perform_check = false;
} else {
if (undefined !== document.createElement) {
var locationObject = document.createElement('a');
locationObject.href = this.path;
locationObject.pathname = locationObject.pathname.replace(regexMatch, suffixReplace);
this.at_2x_path = locationObject.href;
} else {
var parts = this.path.split('?');
parts[0] = parts[0].replace(regexMatch, suffixReplace);
this.at_2x_path = parts.join('?');
}
this.perform_check = true;
}
}

root.RetinaImagePath = RetinaImagePath;

RetinaImagePath.confirmed_paths = [];

RetinaImagePath.prototype.is_external = function() {
return !!(this.path.match(/^https?\:/i) && !this.path.match('//' + document.domain) );
};

RetinaImagePath.prototype.check_2x_variant = function(callback) {
var http, that = this;
if (this.is_external()) {
return callback(false);
} else if (!this.perform_check && typeof this.at_2x_path !== 'undefined' && this.at_2x_path !== null) {
return callback(true);
} else if (this.at_2x_path in RetinaImagePath.confirmed_paths) {
return callback(true);
} else {
http = new XMLHttpRequest();
http.open('HEAD', this.at_2x_path);
http.onreadystatechange = function() {
if (http.readyState !== 4) {
return callback(false);
}

if (http.status >= 200 && http.status <= 399) {
if (config.check_mime_type) {
var type = http.getResponseHeader('Content-Type');
if (type === null || !type.match(/^image/i)) {
return callback(false);
}
}

RetinaImagePath.confirmed_paths.push(that.at_2x_path);
return callback(true);
} else {
return callback(false);
}
};
http.send();
}
};


function RetinaImage(el) {
this.el = el;
this.path = new RetinaImagePath(this.el.getAttribute('src'), this.el.getAttribute('data-at2x'));
var that = this;
this.path.check_2x_variant(function(hasVariant) {
if (hasVariant) {
that.swap();
}
});
}

root.RetinaImage = RetinaImage;

RetinaImage.prototype.swap = function(path) {
if (typeof path === 'undefined') {
path = this.path.at_2x_path;
}

var that = this;
function load() {
if (! that.el.complete) {
setTimeout(load, 5);
} else {
if (config.force_original_dimensions) {
that.el.setAttribute('width', that.el.offsetWidth);
that.el.setAttribute('height', that.el.offsetHeight);
}

that.el.setAttribute('src', path);
}
}
load();
};


if (Retina.isRetina()) {
Retina.init(root);
}
})();
10 changes: 10 additions & 0 deletions dist/retina.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a70e736

Please sign in to comment.