﻿/**
* jquery.expose 1.0.0 - Make HTML elements stand out
* 
* Copyright (c) 2009 Tero Piirainen
* http://flowplayer.org/tools/expose.html
*
* Dual licensed under MIT and GPL 2+ licenses
* http://www.opensource.org/licenses
*
* Launch  : June 2008
* Version : 1.0.0 - Sun Feb 15 2009 13:55:48 GMT-0000 (GMT+00:00)
*/
(function($) { function fireEvent(opts, name, self) { var fn = opts[name]; if ($.isFunction(fn)) { try { return fn.call(self); } catch (error) { if (opts.alert) { alert("Error calling expose." + name + ": " + error); } else { throw error; } return false; } } return true; } var mask = null; var exposed, conf = null; $.expose = { getVersion: function() { return [1, 0, 0]; }, getMask: function() { return mask; }, getExposed: function() { return exposed; }, getConf: function() { return conf; }, isLoaded: function() { return mask && mask.is(":visible"); }, load: function(els, opts) { if (this.isLoaded()) { return this; } if (els) { exposed = els; conf = opts; } else { els = exposed; opts = conf; } if (!els || !els.length) { return this; } if (!mask) { mask = $('<div id="' + opts.maskId + '"></div>').css({ position: 'absolute', top: 0, left: 0, width: '100%', height: $(document).height(), display: 'none', opacity: 0, zIndex: opts.zIndex }); $("body").append(mask); $(document).bind("keypress.unexpose", function(evt) { if (evt.keyCode == 27) { $.expose.close(); } }); if (opts.closeOnClick) { mask.bind("click.unexpose", function() { $.expose.close(); }); } } if (fireEvent(opts, "onBeforeLoad", this) === false) { return this; } $.each(els, function() { var el = $(this); if (!/relative|absolute/i.test(el.css("position"))) { el.css("position", "relative"); } }); els.css({ zIndex: opts.zIndex + 1 }); if (opts.color) { mask.css("backgroundColor", opts.color); } if (!this.isLoaded()) { mask.css({ opacity: 0, display: 'block' }).fadeTo(opts.loadSpeed, opts.opacity, function() { fireEvent(opts, "onLoad", $.expose); }); } return this; }, close: function() { var self = this; if (!this.isLoaded()) { return self; } if (fireEvent(conf, "onBeforeClose", self) === false) { return self; } mask.fadeOut(conf.closeSpeed, function() { exposed.css({ zIndex: conf.zIndex - 1 }); fireEvent(conf, "onClose", self); }); } }; $.prototype.expose = function(conf) { if (!this.length) { return this; } var opts = { alert: true, maskId: 'exposeMask', loadSpeed: 'slow', closeSpeed: 'fast', closeOnClick: true, zIndex: 9998, opacity: 0.8, color: '#333' }; if (typeof conf == 'string') { conf = { color: conf }; } $.extend(opts, conf); $.expose.load(this, opts); return this; }; })(jQuery);