External Site Link Favorite Icons Using MooTools and CSS

By  on  

I recently came upon an interesting jQuery article about how you can retrieve all external links within a page, build the address of the site's favorite icon, and place the favorite icon along side the link. I've chosen a different approach which uses CSS to position the favorite icon as a background image.

The CSS

.favicon	{ background-repeat:no-repeat; padding:2px 0 3px 22px; }

This CSS code will provide padding and background image placement for the link.

The MooTools JavaScript

/* when the dom is ready... */
window.addEvent('domready',function() {
	/* grab all complete linked anchors */
	$$('a[href^="http://"]').each(function(a) {
		/* if it's not on the davidwalsh.name domain */
		if(!a.get('href').contains(window.location.host)) {
			/* get the favicon */
			var favicon = a.get('href').replace(/^(http:\/\/[^\/]+).*$/, '$1') + '/favicon.ico';
			/* place it in the anchor */
			a.setStyle('background-image','url(' + favicon + ')').addClass('favicon');
		}
	});
});

I've chosen to include the favorite icon as a background image as opposed to the jQuery article's method of injecting an image.

Would you use this method on your website?

Recent Features

  • By
    Page Visibility API

    One event that's always been lacking within the document is a signal for when the user is looking at a given tab, or another tab. When does the user switch off our site to look at something else? When do they come back?

  • By
    5 Ways that CSS and JavaScript Interact That You May Not Know About

    CSS and JavaScript:  the lines seemingly get blurred by each browser release.  They have always done a very different job but in the end they are both front-end technologies so they need do need to work closely.  We have our .js files and our .css, but...

Incredible Demos

  • By
    Introducing MooTools ScrollSide

    This post is a proof of concept post -- the functionality is yet to be perfected. Picture this: you've found yourself on a website that uses horizontal scrolling instead of vertical scrolling. It's an artistic site so you accept that the site scrolls left to right.

  • By
    Fancy Navigation with MooTools JavaScript

    Navigation menus are traditionally boring, right? Most of the time the navigation menu consists of some imagery with a corresponding mouseover image. Where's the originality? I've created a fancy navigation menu that highlights navigation items and creates a chain effect. The XHTML Just some simple...

Discussion

  1. This is great, simple and effective, thanks David.

  2. You can also use the new MooTools More URI syntax which also works with base-tags.

    window.addEvent('domready',function(){
        var baseHost = URI.base.get('host');
        $$('a[href^="http://"]').each(function(a){
            var uri = new URI(a);
            if(baseHost != uri.get('host')){
                var favicon = new URI('/favicon.ico', { base: uri });
                a.setStyle('background-image','url(' + favicon + ')').addClass('favicon');
            }
        });
    });
    
  3. Jan

    Grat one, even better idea!!! I created something similar adding icon to for all external links using URI subclass http://mootools.net/docs/more/Native/URI

     window.addEvent('domready',function() {
            var host = window.location.host;
            var links = $$('a');
            links.each(function(elem,i){ 
                var myURI = new URI(elem.get('href'));
                var hostExtern = myURI.get('host');
                    if(hostExtern!=host) {
                      elem.addClass('web');
                    }
             })
    })
    
  4. Actually, since you’re not using the link URI for anything else you don’t have to create another object.

    Just use uri.set('value', '/favicon.ico'); Set value will take relative paths.

  5. Nice one David! Simple but very effective!

  6. dirkf

    Cool idea !

    As not all website are having a favicon, I added some stuff to check if the favicon is properly loaded.
    If not, the background-image should not be changed, and remains the default image I use to indicate external links.

    My inner code block looks like this:

    var favicon = href.replace(/^(http:\/\/[^\/]+).*$/, '$1') + '/favicon.ico',
         img = new Image();
    
    img.onload = function(){
        a.setStyle('background-image','url(' + favicon + ')');
    }
    img.src = favicon; //load it now.
    
  7. Nice idea, this could be usefull for my next linklist ^^

  8. Facundo

    Complete offtopic: Can you move the site search box to a more prominent place? It took me some time to find it….

  9. Here is a simple step by step tutorials to create your own FAVICON easily on
    photoshop cs version.
    How to create FAVICON using Photoshop?

  10. karev

    really usefull but how can i disable this feature for linked images ???????

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!