Skip to content

Instantly share code, notes, and snippets.

@atr000
Forked from acdha/bookmarklet-template.js
Created June 27, 2009 19:04
Show Gist options
  • Select an option

  • Save atr000/137079 to your computer and use it in GitHub Desktop.

Select an option

Save atr000/137079 to your computer and use it in GitHub Desktop.

Revisions

  1. @acdha acdha created this gist Apr 3, 2009.
    67 changes: 67 additions & 0 deletions bookmarklet-template.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,67 @@
    /*
    To avoid polluting the global namespace this uses an anonymous
    function which is called with either the URL for an external
    JavaScript file or a function. In either case jQuery will be loaded
    from the Google CDN before your code is executed so it's free to
    depend on jQuery without checking for it and can do things like
    jQuery.getScript() to load other components (e.g. jQuery UI),
    stylesheets, etc.
    */
    (function (target, msg) {
    var loader = function() {
    // Avoid executing this function twice:
    if (arguments.callee._executed) return;
    arguments.callee._executed = true;

    if (typeof target === "function") {
    target();
    } else {
    jQuery.getScript(target);
    }

    // Now that we're done with the actual work, let's display a
    // confirmation message so the user knows it's ready:
    var el = document.createElement('div');
    el.style.position='absolute';
    el.style.height='30px';
    el.style.width='200px';
    el.style.margin='0 auto 0 auto';
    el.style.top='0';
    el.style.left='40%';
    el.style.padding='5px 10px 5px 10px';
    el.style.backgroundColor='#f99';
    el.innerHTML=msg;
    document.body.appendChild(el);

    window.setTimeout( function() { jQuery(el).fadeOut('slow', function() { jQuery(this).remove(); } ); }, 2500 );
    };

    if (typeof jQuery !== 'undefined') {
    // Nice - this page already uses jQuery!
    loader();
    } else {
    var s = document.createElement('script');
    s.type = "text/javascript";
    s.setAttribute('src', document.location.protocol + '//ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js');

    if (s.addEventListener) { // Mozilla / WebKit
    s.addEventListener("load", loader, false);
    } else if ("onreadystatechange" in s) { // IE
    s.onreadystatechange = function () {
    if (this.readyState == 'complete' || this.readyState == 'loaded') { loader(); }
    };
    } else {
    // Chances are if your browser is this old jQuery won't even work but just in case:
    window.setTimeout(loader(), 2500);
    }

    document.getElementsByTagName('head')[0].appendChild(s);
    }

    // Note the use of document.location.protocol to avoid http/https
    // mismatches. Obviously this requires a server such as pantheon which
    // can handle either protocol:
    })(document.location.protocol + '//path.to.example.com/something.js', "Page Enhanced!");

    // If you just need a little jQuery, pass a function instead of the URL to a .js file:
    //})(function(){ jQuery('body').append('<p>Hello!</p>'); }, "Page vandalized!");