/** * weebox.js * * weebox js * * @category javascript * @package jquery * @author Jack * @copyright Copyright (c) 2006-2008 9wee Com. (http://www.9wee.com) * @license http://www.9wee.com/license/ * @version */ (function($) { /*if(typeof($.fn.bgIframe) == 'undefined') { $.ajax({ type: "GET", url: '/js/jquery/bgiframe.js',//路径不好处理 success: function(js){eval(js);}, async: false }); }*/ var weebox = function(content, options) { var self = this; this._dragging = false; this._content = content; this._options = options; this.dh = null; this.mh = null; this.dt = null; this.dc = null; this.bo = null; this.bc = null; this.selector = null; this.ajaxurl = null; this.options = null; this.defaults = { boxid: null, boxclass: null, type: 'dialog', title: '', width: 0, height: 0, timeout: 0, draggable: true, modal: true, focus: null, position: 'center', overlay: 75, showTitle: true, showButton: true, showCancel: true, showOk: true, okBtnName: '确定', cancelBtnName: '取消', contentType: 'text', contentChange: false, clickClose: false, zIndex: 999, animate: false, trigger: null, onclose: null, onopen: null, onok: null }; this.types = new Array( "dialog", "error", "warning", "success", "prompt", "box" ); this.titles = { "error": "!! Error !!", "warning": "Warning!", "success": "Success", "prompt": "Please Choose", "dialog": "Dialog", "box": "" }; this.initOptions = function() { if (typeof(self._options) == "undefined") { self._options = {}; } if (typeof(self._options.type) == "undefined") { self._options.type = 'dialog'; } if(!$.inArray(self._options.type, self.types)) { self._options.type = self.types[0]; } if (typeof(self._options.boxclass) == "undefined") { self._options.boxclass = self._options.type+"box"; } if (typeof(self._options.title) == "undefined") { self._options.title = self.titles[self._options.type]; } if (content.substr(0, 1) == "#") { self._options.contentType = 'selector'; self.selector = content; } self.options = $.extend({}, self.defaults, self._options); }; this.initBox = function() { var html = ''; if (self.options.type == 'wee') { html = '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '  ' + ' ' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
'; } else { html = "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "" + "" + "
" + "
"; } self.dh = $(html).appendTo('body').hide().css({ position: 'absolute', overflow: 'hidden', zIndex: self.options.zIndex }); self.dt = self.dh.find('.dialog-title'); self.dc = self.dh.find('.dialog-content'); self.bo = self.dh.find('.dialog-ok'); self.bc = self.dh.find('.dialog-cancel'); if (self.options.boxid) { self.dh.attr('id', self.options.boxid); } if (self.options.boxclass) { self.dh.addClass(self.options.boxclass); } if (self.options.height>0) { self.dc.css('height', self.options.height); } if (self.options.width>0) { self.dh.css('width', self.options.width); } self.dh.bgiframe(); } this.initMask = function() { if (self.options.modal) { self.mh = $("
") .appendTo('body').hide().css({ opacity: self.options.overlay/100, filter: 'alpha(opacity='+self.options.overlay+')', width: self.bwidth(), height: self.bheight(), zIndex: self.options.zIndex-1 }); } } this.initContent = function(content) { self.dh.find(".dialog-ok").val(self.options.okBtnName); self.dh.find(".dialog-cancel").val(self.options.cancelBtnName); self.dh.find('.dialog-title').html(self.options.title); if (!self.options.showTitle) { self.dh.find('.dialog-header').hide(); } if (!self.options.showButton) { self.dh.find('.dialog-button').hide(); } if (!self.options.showCancel) { self.dh.find('.dialog-cancel').hide(); } if (!self.options.showOk) { self.dh.find(".dialog-ok").hide(); } if (self.options.contentType == "selector") { self.selector = self._content; self._content = $(self.selector).html(); self.setContent(self._content); //if have checkbox do var cs = $(self.selector).find(':checkbox'); self.dh.find('.dialog-content').find(':checkbox').each(function(i){ this.checked = cs[i].checked; }); $(self.selector).empty(); self.onopen(); self.show(); self.focus(); } else if (self.options.contentType == "ajax") { self.ajaxurl = self._content; self.setContent('
'); self.show(); $.get(self.ajaxurl, function(data) { self._content = data; self.setContent(self._content); self.onopen(); self.focus(); }); } else { self.setContent(self._content); self.onopen(); self.show(); self.focus(); } } this.initEvent = function() { self.dh.find(".dialog-close, .dialog-cancel, .dialog-ok").unbind('click').click(function(){self.close();}); if (typeof(self.options.onok) == "function") { self.dh.find(".dialog-ok").unbind('click').click(self.options.onok); } if (typeof(self.options.oncancel) == "function") { self.dh.find(".dialog-cancel").unbind('click').click(self.options.oncancel); } if (self.options.timeout>0) { window.setTimeout(self.close, (self.options.timeout * 1000)); } this.draggable(); } this.draggable = function() { if (self.options.draggable && self.options.showTitle) { self.dh.find('.dialog-header').mousedown(function(event){ self._ox = self.dh.position().left; self._oy = self.dh.position().top; self._mx = event.clientX; self._my = event.clientY; self._dragging = true; }); if (self.mh) { var handle = self.mh; } else { var handle = $(document); } $(document).mousemove(function(event){ if (self._dragging == true) { //window.status = "X:"+event.clientX+"Y:"+event.clientY; self.dh.css({ left: self._ox+event.clientX-self._mx, top: self._oy+event.clientY-self._my }); } }).mouseup(function(){ self._mx = null; self._my = null; self._dragging = false; }); var e = self.dh.find('.dialog-header').get(0); e.unselectable = "on"; e.onselectstart = function() { return false; }; if (e.style) { e.style.MozUserSelect = "none"; } } } this.onopen = function() { if (typeof(self.options.onopen) == "function") { self.options.onopen(); } } this.show = function() { if (self.options.position == 'center') { self.setCenterPosition(); } if (self.options.position == 'element') { self.setElementPosition(); } if (self.options.animate) { self.dh.fadeIn("slow"); if (self.mh) { self.mh.fadeIn("normal"); } } else { self.dh.show(); if (self.mh) { self.mh.show(); } } } this.focus = function() { if (self.options.focus) { self.dh.find(self.options.focus).focus(); } else { self.dh.find('.dialog-cancel').focus(); } } this.find = function(selector) { return self.dh.find(selector); } this.setTitle = function(title) { self.dh.find('.dialog-title').html(title); } this.getTitle = function() { return self.dh.find('.dialog-title').html(); } this.setContent = function(content) { self.dh.find('.dialog-content').html(content); } this.getContent = function() { return self.dh.find('.dialog-content').html(); } this.hideButton = function(btname) { self.dh.find('.dialog-'+btname).hide(); } this.showButton = function(btname) { self.dh.find('.dialog-'+btname).show(); } this.setButtonTitle = function(btname, title) { self.dh.find('.dialog-'+btname).val(title); } this.close = function() { if (self.animate) { self.dh.fadeOut("slow", function () { self.dh.hide(); }); if (self.mh) { self.mh.fadeOut("normal", function () { self.mh.hide(); }); } } else { self.dh.hide(); if (self.mh) { self.mh.hide(); } } if (self.options.contentType == 'selector') { if (self.options.contentChange) { //if have checkbox do var cs = self.find(':checkbox'); $(self.selector).html(self.getContent()); if (cs.length > 0) { $(self.selector).find(':checkbox').each(function(i){ this.checked = cs[i].checked; }); } } else { $(self.selector).html(self._content); } } if (typeof(self.options.onclose) == "function") { self.options.onclose(); } self.dh.remove(); if (self.mh) { self.mh.remove(); } } this.bheight = function() { if ($.browser.msie && $.browser.version < 7) { var scrollHeight = Math.max( document.documentElement.scrollHeight, document.body.scrollHeight ); var offsetHeight = Math.max( document.documentElement.offsetHeight, document.body.offsetHeight ); if (scrollHeight < offsetHeight) { return $(window).height(); } else { return scrollHeight; } } else { return $(document).height(); } } this.bwidth = function() { if ($.browser.msie && $.browser.version < 7) { var scrollWidth = Math.max( document.documentElement.scrollWidth, document.body.scrollWidth ); var offsetWidth = Math.max( document.documentElement.offsetWidth, document.body.offsetWidth ); if (scrollWidth < offsetWidth) { return $(window).width(); } else { return scrollWidth; } } else { return $(document).width(); } } this.setCenterPosition = function() { var wnd = $(window), doc = $(document), pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), minTop = pTop; pTop += (wnd.height() - self.dh.height()) / 2; pTop = Math.max(pTop, minTop); pLeft += (wnd.width() - self.dh.width()) / 2; self.dh.css({top: pTop, left: pLeft}); } this.setElementPosition = function() { var trigger = $("#"+self.options.trigger); if (trigger.length == 0) { alert('请设置位置的相对元素'); self.close(); return false; } var scrollWidth = 0; if (!$.browser.msie || $.browser.version >= 7) { scrollWidth = $(window).width() - document.body.scrollWidth; } var left = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft)+trigger.position().left; if (left+self.dh.width() > document.body.clientWidth) { left = trigger.position().left + trigger.width() + scrollWidth - self.dh.width(); } var top = Math.max(document.documentElement.scrollTop, document.body.scrollTop)+trigger.position().top; if (top+self.dh.height()+trigger.height() > document.documentElement.clientHeight) { top = top - self.dh.height() - 5; } else { top = top + trigger.height() + 5; } self.dh.css({top: top, left: left}); return true; } //PNG透明图片 this.correctPNG = function() { for(var i=0; i" img.outerHTML = strNewHTML; i = i-1; } } } //窗口初始化 this.initialize = function() { self.initOptions(); self.initMask(); self.initBox(); self.initContent(); self.initEvent(); //self.correctPNG(); return self; } //初始化 this.initialize(); } var weeboxs = function() { var self = this; this._onbox = false; this._opening = false; this.boxs = new Array(); this.zIndex = 999; this.push = function(box) { this.boxs.push(box); } this.pop = function() { if (this.boxs.length > 0) { return this.boxs.pop(); } else { return false; } } this.open = function(content, options) { self._opening = true; if (typeof(options) == "undefined") { options = {}; } if (options.boxid) { this.close(options.boxid); } options.zIndex = this.zIndex; this.zIndex += 10; var box = new weebox(content, options); box.dh.click(function(){ self._onbox = true; }); this.push(box); return box; } this.close = function(id) { if (id) { for(var i=0; i 0) { var box = self.getTopBox(); if (box.options.position == "center") { self.getTopBox().setCenterPosition(); } } }); $(document).click(function() { if (self.length()>0) { var box = self.getTopBox(); if(!self._opening && !self._onbox && box.options.clickClose) { box.close(); } } self._opening = false; self._onbox = false; }); } $.extend({weeboxs: new weeboxs()}); })(jQuery);