/* moopop: unobtrusive javascript popups via late binding using mootools 1.2 copyright (c) 2007-2008 by gonchuki - http://blog.gonchuki.com version: 1.1 released: June 23, 2008 This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License. http://creativecommons.org/licenses/by-sa/3.0/ */ /* Basic usage: add a rel attribute to your tags to be like this: foobar or foobar where: "popup" is the default string token to match against so the popup behavior can be attached. "[600,400]" is the (optional) size of the newly created window. optionally, you can specify an "r" parameter like this: "[600,400,r]" that will allow the window to be resizable. */ var moopop = new Class({ Implements: [Options], width: 0, height: 0, options : { attrVal :'popup' }, initialize: function(options){ this.setOptions(options); this.captureByRel(this.options.attrVal); }, /* Function: captureByRel standard capturing method, it's autorun onDomReady and you can manually use it to capture a different set of popup windows. Syntax: moopop.captureByRel(value, element); Arguments: value - The partial string to match against the rel attribute of your links. element - [optional] a DOM element to restrict which links should be processed. */ captureByRel: function(attrVal, parent) { this.capture((parent || document).getElements('a[rel*=' + (this.options.attrVal || 'popup') +']')); }, /* Function: capture multipurpose function allowing for different methods of capturing the popups. Syntax: moopop.capture(obj, width, height); Arguments: obj - (mixed) can be either a DOM element, an Array of elements or a className. width - [optional] (integer) default width for popups without a given size, if specified you must also specify the height. height - [optional] (integer) default height for popups without a given size. */ capture: function(el, width, height) { if ($defined(width) && $defined(height)) { this.width = width; this.height = height; } switch ($type(el)) { case 'string': el = $$(el); break; case 'element': case 'array': $splat(el).each(this.add_pop_to, this); } this.width = null; this.height = null; }, /* Function: add_pop_to Primarily used internally but you can also use it to manually attach the popup behavior to a single DOM element. Syntax: moopop.add_pop_to(element); Arguments: element - a DOM element to process. */ add_pop_to: function(el) { el.addEvent('click', function(e){ e.stop(); this.popup(el); }.bind(this)); var size = el.get('rel').match(/\[(\d+),\s*(\d+)/) || ['', this.width, this.height]; var resizable = el.get('rel').match(/,(r)/) || []; if (size[1]) { el.store('popupprops', 'width=' + size[1] + ', height=' + size[2] + (resizable[1] ? ', scrollbars=yes, resizable=yes' : '') );} }, /* Function: popup Triggers the popup behavior on a given link. Used internally but you can also use it to force a given unprocessed link to open in a new window. Syntax: moopop.popup(element); Arguments: element - a DOM element to process. */ popup: function(el) { window.open(el.get('href'), el.get('name') || '', el.retrieve('popupprops') || ''); } }); /* process all links with rel="popup" by default. */