Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jrief/angular-retina
Add support for Retina displays when using element attribute "ng-src"
https://github.com/jrief/angular-retina
Last synced: 27 days ago
JSON representation
Add support for Retina displays when using element attribute "ng-src"
- Host: GitHub
- URL: https://github.com/jrief/angular-retina
- Owner: jrief
- License: mit
- Created: 2013-03-07T17:42:41.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2018-08-18T14:42:42.000Z (over 6 years ago)
- Last Synced: 2024-11-09T17:51:39.323Z (about 1 month ago)
- Language: JavaScript
- Size: 330 KB
- Stars: 120
- Watchers: 6
- Forks: 32
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# angular-retina
Replaces the AngularJS directive ```ng-src``` by a version which supports Retina displays.
If the browser runs on a Retina display and the referenced image is available in double
resolution, then load the high resolution version of that image from the server.[![Build Status](https://travis-ci.org/jrief/angular-retina.png)](https://travis-ci.org/jrief/angular-retina)
[![Code Climate](https://codeclimate.com/github/jrief/angular-retina/badges/gpa.svg)](https://codeclimate.com/github/jrief/angular-retina)## Install
If you prefer to host Javascript files locally instead of using a CDN, install them with:```npm install angular-retina```
[min]: https://raw.github.com/jrief/angular-retina/master/dist/angular-retina.min.js
[max]: https://raw.github.com/jrief/angular-retina/master/dist/angular-retina.js## Client usage
Into the main HTML code, add the required URLs from the CDN or include the files locally:```html
```
Please note, that *angular-retina* requires ```angularjs-1.2.1``` or later.In Javascript, initialize the main module for your AngularJS application:
```javascript
var my_app = angular.module('MyApp', [...other dependencies..., 'ngRetina']);
```In the body of any HTML code, access static referenced images using:
```html
```or reference the image using AngularJS's markup:
```html
```Note that when using this module, adding the element attributes ```width="..."```
and/or ```height="..."``` becomes mandatory, as the displayed image
otherwise gets scaled to its double size.Just use it in your HTML-code as you would use the common AngularJS directive
[ngSrc](http://docs.angularjs.org/api/ng.directive:ngSrc):## Alternative infix
When this library was written, Apple Inc. recommended to use ```@2x``` as infix, for images
optimized for Retina displays. In late 2013, they changed their mind, and now
[suggest to use the infix](https://developer.apple.com/library/safari/documentation/NetworkingInternet/Conceptual/SafariImageDeliveryBestPractices/ServingImagestoRetinaDisplays/ServingImagestoRetinaDisplays.html) ```_2x```.Since Apple's former recommendation, the proposed infix has been hard coded into some server-side
libraries for image generation. Therefore, in version 0.3.0 of *angular-retina*, a configuration function
has been added, which shall be used to set the infix to the newly proposed ```_2x``` – but of course
only, if the server-side also supports it!```javascript
my_app.config(function(ngRetinaProvider) {
ngRetinaProvider.setInfix('_2x');
});
```## Hide images until loaded, avoiding "broken image" display
To hide (`opacity: 0`) images until the library has determined what resolution to use, set the `src` and the image has finished downloading, use the following config:```javascript
my_app.config(function(ngRetinaProvider) {
ngRetinaProvider.setFadeInWhenLoaded(true);
});
```## Images with embedded hash
When using a framework that embeds a digest/hash to the asset URL, the problem
is that a high-resolution verison would have a different hash and would not follow the
usual pattern that ends with @2x. Instead the hash is added at the end, i.e.
`/images/image@2x-{hash2}.jpg`, so the automatic detection of image URL would fail.The solution is to supply the high-resolution URL image from the outside of the library
using the `data-at2x` attribute:```html
```## On the server
Applications supporting Retina displays should include two separate files for
each image resource. One file provides a standard-resolution version of a given
image, and the second provides a high-resolution version of the same image.
The naming conventions for each pair of image files is as follows:
+ Standard: ```.```
+ High resolution: ```@2x.```If the browser runs on a high-resolution display, and if the referenced image
is available in high-resolution, the corresponding `````` tag
is interpreted, such that the image in high-resolution is referenced.This module can also be used to reference static image urls, to load the
high resolution version on Retina displays.## Same Origin Policy
In order to verify if the image exists in high resolution, *angular-retina* invokes
a HEAD request with the URL of the high-res image.For security reasons, Javascript may not access files on servers starting with a
different domain name. This is known as the
[Same Origin Policy](http://www.w3.org/Security/wiki/Same_Origin_Policy).
Therefore please ensure, that all images accessed through ```ng-src``` can be loaded
from the same domain as the main HTML file.## Release History
+ 0.1.0 - initial revision.
+ 0.1.3 - fixed problems with minified JS code.
+ 0.2.0 - using sessionStorage instead of $cacheFactory to boost performance.
+ 0.3.0 - added ```setInfix``` to configure the used infix for Retina images.
+ 0.3.1 - added a noretina attribute support to conditionally disable the "retinification" for an element.## License
© 2015 Jacob RiefMIT licensed.