Skip to content
forked from imsky/holder

Holder renders image placeholders entirely on the client side.

Notifications You must be signed in to change notification settings

Dsyko/meteor-holder

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Holder in a Meteor package

Holder uses the canvas element and the data URI scheme to render image placeholders entirely in browser.

Bootstrap uses Holder for thumbnails.

How to use it

Add the package declaration:

"holder" : {
  "git": "https://github.com/Dsyko/meteor-holder.git"
}

To the packages object in the smart.json of your meteor app.

"packages": {
	"holder" : {
		  "git": "https://github.com/Dsyko/meteor-holder.git"
	}
}

Add to meteor using meteorite add command:

mrt add holder

Including the package should automatically include holder.js in your HTML:

<script src="holder.js"></script>

Holder will then process all images with a specific src attribute, like this one:

<img src="holder.js/200x300">

The above tag will render as a placeholder 200 pixels wide and 300 pixels tall.

If Holder isn't processing the imgs try calling Holder.run() in meteor's template.rendered callback:

Holder.run()

To avoid console 404 errors, you can use data-src instead of src.

Holder also includes support for themes, to help placeholders blend in with your layout. There are 3 default themes: gray, industrial, and social. You can use them like this:

<img src="holder.js/200x300/industrial">

Customizing themes

Themes have 4 properties: foreground, background, size, and font. The size property specifies the minimum font size for the theme. You can create a sample theme like this:

Holder.add_theme("dark", {background:"#000", foreground:"#aaa", size:11, font: "Monaco"})

Using custom themes

There are two ways to use custom themes with Holder:

  • Include theme at runtime to render placeholders already using the theme name
  • Include theme at any point and re-render placeholders that are using the theme name

The first approach is the easiest. After you include holder.js, add a script tag that adds the theme you want:

<script src="holder.js"></script>
<script> Holder.add_theme("bright", { background: "white", foreground: "gray", size: 12 })</script>

The second approach requires that you call run after you add the theme, like this:

Holder.add_theme("bright", { background: "white", foreground: "gray", size: 12}).run()

Using custom themes and domain on specific images

You can use Holder in different areas on different images with custom themes:

<img data-src="example.com/100x100/simple" id="new">
Holder.run({
    domain: "example.com",
    themes: {
        "simple":{
            background:"#fff",
            foreground:"#000",
            size:12
            }
    },
    images: "#new"
    })

Using custom colors on specific images

Custom colors on a specific image can be specified in the background:foreground format using hex notation, like this:

<img data-src="holder.js/100x200/#000:#fff">

The above will render a placeholder with a black background and white text.

Custom text

You can specify custom text using the text: operator:

<img data-src="holder.js/200x200/text:hello world">

If you have a group of placeholders where you'd like to use particular text, you can do so by adding a text property to the theme:

Holder.add_theme("thumbnail", { background: "#fff", text: "Thumbnail" })

Fluid placeholders

Specifying a dimension in percentages creates a fluid placeholder that responds to media queries.

<img data-src="holder.js/100%x75/social">

By default, the fluid placeholder will show its current size in pixels.

Automatically sized placeholders

If you'd like to avoid Holder enforcing an image size, use the auto flag like so:

<img data-src="holder.js/200x200/auto">

The above will render a placeholder without any embedded CSS for height or width.

Background placeholders

Holder can render placeholders as background images for elements with the holderjs class, like this:

#sample {background:url(?holder.js/200x200/social) no-repeat}
<div id="sample" class="holderjs"></div>

The Holder URL in CSS should have a ? in front. You can change the default class by specifying a selector as the bgnodes property when calling Holder.run.

Customizing only the settings you need

Holder extends its default settings with the settings you provide, so you only have to include those settings you want changed. For example, you can run Holder on a specific domain like this:

Holder.run({domain:"example.com"})

Using custom settings on load

You can prevent Holder from running its default configuration by executing Holder.run with your custom settings right after including holder.js. However, you'll have to execute Holder.run again to render any placeholders that use the default configuration.

Inserting an image with optional custom theme

You can add a placeholder programmatically by chaining Holder calls:

Holder.add_theme("new",{foreground:"#ccc", background:"#000", size:10}).add_image("holder.js/200x100/new", "body").run()

The first argument in add_image is the src attribute, and the second is a CSS selector of the parent element.

Using with lazyload.js

Holder is compatible with lazyload.js and works with both fluid and fixed-width images. For best results, run .lazyload({skip_invisible:false}).

Browser support

  • Chrome 1+
  • Firefox 3+
  • Safari 4+
  • Internet Explorer 9+, with fallback for IE6-8
  • Android 1+

License

Holder is provided under the Apache 2.0 License. Commercial use requires attribution.

Credits

Holder is a project by Ivan Malopinsky.

About

Holder renders image placeholders entirely on the client side.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%