2014-04-01 18:00:42 +00:00
|
|
|
|
/*!
|
|
|
|
|
* artDialog 4.1.7
|
|
|
|
|
* Date: 2013-03-03 08:04
|
|
|
|
|
* http://code.google.com/p/artdialog/
|
|
|
|
|
* (c) 2009-2012 TangBin, http://www.planeArt.cn
|
|
|
|
|
*
|
|
|
|
|
* This is licensed under the GNU LGPL, version 2.1 or later.
|
|
|
|
|
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// change by warlee
|
|
|
|
|
//------------------------------------------------
|
|
|
|
|
// 对话框模块
|
|
|
|
|
//------------------------------------------------
|
|
|
|
|
var dialogList = {//加入人物列表
|
|
|
|
|
add:function(id,title){
|
|
|
|
|
try{
|
|
|
|
|
TaskTap.add(id,title);
|
|
|
|
|
} catch(e) {};
|
|
|
|
|
},
|
|
|
|
|
focus:function(id){
|
|
|
|
|
try{
|
|
|
|
|
TaskTap.focus(id);
|
|
|
|
|
} catch(e) {};
|
|
|
|
|
},
|
|
|
|
|
close:function(id){
|
|
|
|
|
try{
|
|
|
|
|
TaskTap.close(id);
|
|
|
|
|
} catch(e) {};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
//rightMenu.hidden();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;(function ($, window, undefined) {
|
|
|
|
|
$.noop = $.noop || function () {}; // jQuery 1.3.2
|
|
|
|
|
var _box, _thisScript,_path,
|
|
|
|
|
_count = 0,
|
|
|
|
|
_$window = $(window),
|
|
|
|
|
_$document = $(document),
|
|
|
|
|
_$html = $('html'),
|
|
|
|
|
_elem = document.documentElement,
|
|
|
|
|
_isMobile = 'createTouch' in document && !('onmousemove' in _elem)
|
|
|
|
|
|| /(iPhone|iPad|iPod)/i.test(navigator.userAgent),
|
|
|
|
|
_expando = 'artDialog' + + new Date,
|
|
|
|
|
_titleBarHeight = 0;
|
|
|
|
|
|
|
|
|
|
var artDialog = function (config, ok, cancel) {
|
|
|
|
|
config = config || {};
|
|
|
|
|
if (typeof config === 'string' || config.nodeType === 1) {
|
|
|
|
|
config = {content: config, fixed: !_isMobile};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var api,
|
|
|
|
|
defaults = artDialog.defaults,
|
|
|
|
|
elem = config.follow = this.nodeType === 1 && this || config.follow;
|
|
|
|
|
|
|
|
|
|
// 合并默认配置
|
|
|
|
|
for (var i in defaults) {
|
|
|
|
|
if (config[i] === undefined) config[i] = defaults[i];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 兼容v4.1.0之前的参数,未来版本将删除此
|
|
|
|
|
$.each({ok:"yesFn",cancel:"noFn",close:"closeFn",init:"initFn",okVal:"yesText",cancelVal:"noText"},
|
|
|
|
|
function(i,o){config[i]=config[i]!==undefined?config[i]:config[o]});
|
|
|
|
|
|
|
|
|
|
// 返回跟随模式或重复定义的ID
|
|
|
|
|
if (typeof elem === 'string') elem = $(elem)[0];
|
|
|
|
|
config.id = elem && elem[_expando + 'follow'] || config.id || _expando + _count;
|
|
|
|
|
api = artDialog.list[config.id];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (elem && api) return api.follow(elem).zIndex().focus();
|
|
|
|
|
if (api) return api.zIndex().focus().display(true);
|
|
|
|
|
|
|
|
|
|
// 目前主流移动设备对fixed支持不好
|
|
|
|
|
if (_isMobile) config.fixed = false;
|
|
|
|
|
|
|
|
|
|
// 按钮队列
|
|
|
|
|
if (!$.isArray(config.button)) {
|
|
|
|
|
config.button = config.button ? [config.button] : [];
|
|
|
|
|
};
|
|
|
|
|
if (ok !== undefined) config.ok = ok;
|
|
|
|
|
if (cancel !== undefined) config.cancel = cancel;
|
|
|
|
|
config.ok && config.button.push({
|
|
|
|
|
name: config.okVal,
|
|
|
|
|
callback: config.ok,
|
|
|
|
|
focus: true
|
|
|
|
|
});
|
|
|
|
|
config.cancel && config.button.push({
|
|
|
|
|
name: config.cancelVal,
|
|
|
|
|
callback: config.cancel
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// zIndex全局配置
|
|
|
|
|
artDialog.defaults.zIndex = config.zIndex;
|
|
|
|
|
_count ++;
|
|
|
|
|
|
|
|
|
|
//添加到任务栏
|
|
|
|
|
if (config.title !== false){
|
2014-07-06 18:24:21 +00:00
|
|
|
|
config.title = '<img src="'+config.ico+'" />'+config.title;
|
2014-04-01 18:00:42 +00:00
|
|
|
|
if (_count>=1) dialogList.add(config.id,config.title);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return artDialog.list[config.id] = _box ?
|
|
|
|
|
_box._init(config) : new artDialog.fn._init(config);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
artDialog.fn = artDialog.prototype = {
|
|
|
|
|
version: '4.1.7',
|
|
|
|
|
closed: true,
|
|
|
|
|
_init: function (config) {
|
|
|
|
|
var that = this, DOM,
|
|
|
|
|
icon = config.icon,
|
|
|
|
|
iconBg = icon && {'background-image': 'url(\'' + config.path + '/icons/' + icon + '.png\')','background-repeat':'no-repeat','background-position':'center'};
|
|
|
|
|
that.closed = false;
|
|
|
|
|
that.config = config;
|
|
|
|
|
that.DOM = DOM = that.DOM || that._getDOM();
|
|
|
|
|
|
|
|
|
|
//是否可以调节大小 对应样式处理
|
|
|
|
|
//可以调节窗口大小——那么对应可以最大最小化
|
|
|
|
|
if (config.resize && config.title != false) {
|
|
|
|
|
DOM.wrap.addClass('dialog-can-resize');
|
|
|
|
|
}
|
|
|
|
|
//是否可以调节大小 对应样式处理
|
|
|
|
|
if (config.simple && config.title != false) {
|
|
|
|
|
DOM.wrap.addClass('dialog-simple');
|
|
|
|
|
DOM.wrap.die('mouseenter').live('mouseenter',function(){
|
|
|
|
|
$(this).find('.aui_outer').addClass('dialog_mouse_in');
|
|
|
|
|
}).live('mouseleave',function(){
|
|
|
|
|
$(this).find('.aui_outer').removeClass('dialog_mouse_in');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
DOM.wrap.find('.dialog_menu').attr('id',config.id);
|
|
|
|
|
DOM.wrap.addClass(config.id);
|
|
|
|
|
DOM.close[config.cancel === false ? 'hide' : 'show']();
|
|
|
|
|
DOM.icon[0].style.display = icon ? '' : 'none';
|
|
|
|
|
DOM.iconBg.css(iconBg || {background: 'none'});
|
|
|
|
|
DOM.title.css('cursor', config.drag ? 'move' : 'auto');
|
|
|
|
|
DOM.content.css('padding', config.padding);
|
|
|
|
|
|
|
|
|
|
that[config.show ? 'show' : 'hide'](true)
|
|
|
|
|
that.button(config.button)
|
|
|
|
|
.title(config.title)
|
|
|
|
|
.content(config.content, true)
|
|
|
|
|
.size(config.width, config.height)
|
|
|
|
|
.time(config.time);
|
|
|
|
|
|
|
|
|
|
config.follow
|
|
|
|
|
? that.follow(config.follow)
|
|
|
|
|
: that.position(config.left, config.top);
|
|
|
|
|
|
|
|
|
|
that.zIndex().focus();
|
|
|
|
|
config.lock && that.lock();
|
|
|
|
|
|
|
|
|
|
that._addEvent();
|
|
|
|
|
_box = null;
|
|
|
|
|
|
|
|
|
|
config.init && config.init.call(that, window);
|
|
|
|
|
_titleBarHeight = DOM.title.css('height');
|
|
|
|
|
_titleBarHeight = _titleBarHeight.replace('px','');
|
2014-06-08 06:47:38 +00:00
|
|
|
|
|
2014-06-15 15:35:50 +00:00
|
|
|
|
// DOM.wrap
|
|
|
|
|
// .css({opacity:0.6,top:'-='+DOM.wrap.height()*0.02})
|
|
|
|
|
// .animate(
|
|
|
|
|
// {opacity:1,top:'+='+DOM.wrap.height()*0.02},
|
|
|
|
|
// {easing: 'swing',duration:200});
|
2014-04-01 18:00:42 +00:00
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 设置内容
|
|
|
|
|
* @param {String, HTMLElement} 内容 (可选)
|
|
|
|
|
* @return {this, HTMLElement} 如果无参数则返回内容容器DOM对象
|
|
|
|
|
*/
|
|
|
|
|
content: function (msg) {
|
|
|
|
|
var prev, next, parent, display,
|
|
|
|
|
that = this,
|
|
|
|
|
DOM = that.DOM,
|
|
|
|
|
wrap = DOM.wrap[0],
|
|
|
|
|
width = wrap.offsetWidth,
|
|
|
|
|
height = wrap.offsetHeight,
|
|
|
|
|
left = parseInt(wrap.style.left),
|
|
|
|
|
top = parseInt(wrap.style.top),
|
|
|
|
|
cssWidth = wrap.style.width,
|
|
|
|
|
$content = DOM.content,
|
|
|
|
|
content = $content[0];
|
|
|
|
|
|
|
|
|
|
that._elemBack && that._elemBack();
|
|
|
|
|
wrap.style.width = 'auto';
|
|
|
|
|
|
|
|
|
|
if (msg === undefined) return content;
|
|
|
|
|
if (typeof msg === 'string') {
|
|
|
|
|
$content.html(msg)
|
|
|
|
|
$frame = $content.find('iframe');
|
|
|
|
|
if($frame.length>0){
|
|
|
|
|
$content.append('<div class="aui_loading"><span>loading..</span></div>');
|
|
|
|
|
$frame.css('display','none');
|
|
|
|
|
$frame.load(function(){
|
|
|
|
|
$content.find('.aui_loading').fadeOut(600);
|
|
|
|
|
});
|
|
|
|
|
$frame.fadeIn(300);
|
|
|
|
|
}
|
|
|
|
|
} else if (msg && msg.nodeType === 1) {
|
|
|
|
|
// 让传入的元素在对话框关闭后可以返回到原来的地方
|
|
|
|
|
display = msg.style.display;
|
|
|
|
|
prev = msg.previousSibling;
|
|
|
|
|
next = msg.nextSibling;
|
|
|
|
|
parent = msg.parentNode;
|
|
|
|
|
that._elemBack = function () {
|
|
|
|
|
if (prev && prev.parentNode) {
|
|
|
|
|
prev.parentNode.insertBefore(msg, prev.nextSibling);
|
|
|
|
|
} else if (next && next.parentNode) {
|
|
|
|
|
next.parentNode.insertBefore(msg, next);
|
|
|
|
|
} else if (parent) {
|
|
|
|
|
parent.appendChild(msg);
|
|
|
|
|
};
|
|
|
|
|
msg.style.display = display;
|
|
|
|
|
that._elemBack = null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$content.html('');
|
|
|
|
|
content.appendChild(msg);
|
|
|
|
|
msg.style.display = 'block';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 新增内容后调整位置
|
|
|
|
|
if (!arguments[1]) {
|
|
|
|
|
if (that.config.follow) {
|
|
|
|
|
that.follow(that.config.follow);
|
|
|
|
|
} else {
|
|
|
|
|
width = wrap.offsetWidth - width;
|
|
|
|
|
height = wrap.offsetHeight - height;
|
|
|
|
|
left = left - width / 2;
|
|
|
|
|
top = top - height / 2;
|
|
|
|
|
wrap.style.left = Math.max(left, 0) + 'px';
|
|
|
|
|
wrap.style.top = Math.max(top, 0) + 'px';
|
|
|
|
|
};
|
|
|
|
|
if (cssWidth && cssWidth !== 'auto') {
|
|
|
|
|
wrap.style.width = wrap.offsetWidth + 'px';
|
|
|
|
|
};
|
|
|
|
|
that._autoPositionType();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
that._runScript(content);
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 设置标题
|
|
|
|
|
* @param {String, Boolean} 标题内容. 为false则隐藏标题栏
|
|
|
|
|
* @return {this, HTMLElement} 如果无参数则返回内容器DOM对象
|
|
|
|
|
*/
|
|
|
|
|
title: function (text) {
|
|
|
|
|
var DOM = this.DOM,
|
|
|
|
|
wrap = DOM.wrap,
|
|
|
|
|
title = DOM.title,
|
|
|
|
|
className = 'aui_state_noTitle';
|
|
|
|
|
|
|
|
|
|
if (text === undefined) return title[0];
|
|
|
|
|
if (text === false) {
|
|
|
|
|
title.hide().html('');
|
|
|
|
|
wrap.addClass(className);
|
|
|
|
|
} else {
|
|
|
|
|
title.show().html(text || '');
|
|
|
|
|
wrap.removeClass(className);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 位置(相对于可视区域)
|
|
|
|
|
* @param {Number, String}
|
|
|
|
|
* @param {Number, String}
|
|
|
|
|
*/
|
|
|
|
|
position: function (left, top) {
|
|
|
|
|
var that = this,
|
|
|
|
|
config = that.config,
|
|
|
|
|
wrap = that.DOM.wrap[0],
|
|
|
|
|
isFixed = config.fixed,
|
|
|
|
|
docLeft = _$document.scrollLeft(),
|
|
|
|
|
docTop = _$document.scrollTop(),
|
|
|
|
|
dl = isFixed ? 0 : docLeft,
|
|
|
|
|
dt = isFixed ? 0 : docTop,
|
|
|
|
|
ww = _$window.width(),
|
|
|
|
|
wh = _$window.height(),
|
|
|
|
|
ow = wrap.offsetWidth,
|
|
|
|
|
oh = wrap.offsetHeight,
|
|
|
|
|
style = wrap.style;
|
|
|
|
|
|
|
|
|
|
if (left || left === 0) {
|
|
|
|
|
that._left = left.toString().indexOf('%') !== -1 ? left : null;
|
|
|
|
|
left = that._toNumber(left, ww - ow);
|
|
|
|
|
|
|
|
|
|
if (typeof left === 'number') {
|
|
|
|
|
left += docLeft;
|
|
|
|
|
style.left = Math.max(left, dl) + 'px';
|
|
|
|
|
} else if (typeof left === 'string') {
|
|
|
|
|
style.left = left;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (top || top === 0) {
|
|
|
|
|
that._top = top.toString().indexOf('%') !== -1 ? top : null;
|
|
|
|
|
top = that._toNumber(top, wh - oh);
|
|
|
|
|
|
|
|
|
|
if (typeof top === 'number') {
|
|
|
|
|
top += docTop;
|
|
|
|
|
style.top = Math.max(top, dt) + 'px';
|
|
|
|
|
} else if (typeof top === 'string') {
|
|
|
|
|
style.top = top;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (left !== undefined && top !== undefined) {
|
|
|
|
|
that._follow = null;
|
|
|
|
|
that._autoPositionType();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 尺寸
|
|
|
|
|
* @param {Number, String} 宽度
|
|
|
|
|
* @param {Number, String} 高度
|
|
|
|
|
*/
|
|
|
|
|
size: function (width, height) {
|
|
|
|
|
var maxWidth, maxHeight, scaleWidth, scaleHeight,
|
|
|
|
|
that = this,
|
|
|
|
|
config = that.config,
|
|
|
|
|
DOM = that.DOM,
|
|
|
|
|
wrap = DOM.wrap,
|
|
|
|
|
main = DOM.main,
|
|
|
|
|
wrapStyle = wrap[0].style,
|
|
|
|
|
style = main[0].style;
|
|
|
|
|
|
|
|
|
|
if (width) {
|
|
|
|
|
that._width = width.toString().indexOf('%') !== -1 ? width : null;
|
|
|
|
|
maxWidth = _$window.width() - wrap[0].offsetWidth + main[0].offsetWidth;
|
|
|
|
|
scaleWidth = that._toNumber(width, maxWidth);
|
|
|
|
|
width = scaleWidth;
|
|
|
|
|
|
|
|
|
|
if (typeof width === 'number') {
|
|
|
|
|
wrapStyle.width = 'auto';
|
|
|
|
|
style.width = Math.max(that.config.minWidth, width) + 'px';
|
|
|
|
|
wrapStyle.width = wrap[0].offsetWidth + 'px'; // 防止未定义宽度的表格遇到浏览器右边边界伸缩
|
|
|
|
|
} else if (typeof width === 'string') {
|
|
|
|
|
style.width = width;
|
|
|
|
|
width === 'auto' && wrap.css('width', 'auto');
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (height) {
|
|
|
|
|
that._height = height.toString().indexOf('%') !== -1 ? height : null;
|
|
|
|
|
maxHeight = _$window.height() - wrap[0].offsetHeight + main[0].offsetHeight;
|
|
|
|
|
scaleHeight = that._toNumber(height, maxHeight);
|
|
|
|
|
height = scaleHeight;
|
|
|
|
|
|
|
|
|
|
if (typeof height === 'number') {
|
|
|
|
|
style.height = Math.max(that.config.minHeight, height) + 'px';
|
|
|
|
|
} else if (typeof height === 'string') {
|
|
|
|
|
style.height = height;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 跟随元素
|
|
|
|
|
* @param {HTMLElement, String}
|
|
|
|
|
*/
|
|
|
|
|
follow: function (elem) {
|
|
|
|
|
var $elem, that = this, config = that.config;
|
|
|
|
|
|
|
|
|
|
if (typeof elem === 'string' || elem && elem.nodeType === 1) {
|
|
|
|
|
$elem = $(elem);
|
|
|
|
|
elem = $elem[0];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 隐藏元素不可用
|
|
|
|
|
if (!elem || !elem.offsetWidth && !elem.offsetHeight) {
|
|
|
|
|
return that.position(that._left, that._top);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var expando = _expando + 'follow',
|
|
|
|
|
winWidth = _$window.width(),
|
|
|
|
|
winHeight = _$window.height(),
|
|
|
|
|
docLeft = _$document.scrollLeft(),
|
|
|
|
|
docTop = _$document.scrollTop(),
|
|
|
|
|
offset = $elem.offset(),
|
|
|
|
|
width = elem.offsetWidth,
|
|
|
|
|
height = elem.offsetHeight,
|
|
|
|
|
isFixed = config.fixed,
|
|
|
|
|
left = isFixed ? offset.left - docLeft : offset.left,
|
|
|
|
|
top = isFixed ? offset.top - docTop : offset.top,
|
|
|
|
|
wrap = that.DOM.wrap[0],
|
|
|
|
|
style = wrap.style,
|
|
|
|
|
wrapWidth = wrap.offsetWidth,
|
|
|
|
|
wrapHeight = wrap.offsetHeight,
|
|
|
|
|
setLeft = left - (wrapWidth - width) / 2,
|
|
|
|
|
setTop = top + height,
|
|
|
|
|
dl = isFixed ? 0 : docLeft,
|
|
|
|
|
dt = isFixed ? 0 : docTop;
|
|
|
|
|
|
|
|
|
|
setLeft = setLeft < dl ? left :
|
|
|
|
|
(setLeft + wrapWidth > winWidth) && (left - wrapWidth > dl)
|
|
|
|
|
? left - wrapWidth + width
|
|
|
|
|
: setLeft;
|
|
|
|
|
|
|
|
|
|
setTop = (setTop + wrapHeight > winHeight + dt)
|
|
|
|
|
&& (top - wrapHeight > dt)
|
|
|
|
|
? top - wrapHeight
|
|
|
|
|
: setTop;
|
|
|
|
|
|
|
|
|
|
style.left = setLeft + 'px';
|
|
|
|
|
style.top = setTop + 'px';
|
|
|
|
|
|
|
|
|
|
that._follow && that._follow.removeAttribute(expando);
|
|
|
|
|
that._follow = elem;
|
|
|
|
|
elem[expando] = config.id;
|
|
|
|
|
that._autoPositionType();
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 自定义按钮
|
|
|
|
|
* @example
|
|
|
|
|
button({
|
|
|
|
|
name: 'login',
|
|
|
|
|
callback: function () {},
|
|
|
|
|
disabled: false,
|
|
|
|
|
focus: true
|
|
|
|
|
}, .., ..)
|
|
|
|
|
*/
|
|
|
|
|
button: function () {
|
|
|
|
|
var that = this,
|
|
|
|
|
ags = arguments,
|
|
|
|
|
DOM = that.DOM,
|
|
|
|
|
buttons = DOM.buttons,
|
|
|
|
|
elem = buttons[0],
|
|
|
|
|
strongButton = 'aui_state_highlight',
|
|
|
|
|
listeners = that._listeners = that._listeners || {},
|
|
|
|
|
list = $.isArray(ags[0]) ? ags[0] : [].slice.call(ags);
|
|
|
|
|
|
|
|
|
|
if (ags[0] === undefined) return elem;
|
|
|
|
|
$.each(list, function (i, val) {
|
|
|
|
|
var name = val.name,
|
|
|
|
|
isNewButton = !listeners[name],
|
|
|
|
|
button = !isNewButton ?
|
|
|
|
|
listeners[name].elem :
|
|
|
|
|
document.createElement('button');
|
|
|
|
|
|
|
|
|
|
if (!listeners[name]) listeners[name] = {};
|
|
|
|
|
if (val.callback) listeners[name].callback = val.callback;
|
|
|
|
|
if (val.className) button.className = val.className;
|
|
|
|
|
if (val.focus) {
|
|
|
|
|
that._focus && that._focus.removeClass(strongButton);
|
|
|
|
|
that._focus = $(button).addClass(strongButton);
|
|
|
|
|
that.focus();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Internet Explorer 的默认类型是 "button",
|
|
|
|
|
// 而其他浏览器中(包括 W3C 规范)的默认值是 "submit"
|
|
|
|
|
// @see http://www.w3school.com.cn/tags/att_button_type.asp
|
|
|
|
|
button.setAttribute('type', 'button');
|
|
|
|
|
|
|
|
|
|
button[_expando + 'callback'] = name;
|
|
|
|
|
button.disabled = !!val.disabled;
|
|
|
|
|
|
|
|
|
|
if (isNewButton) {
|
|
|
|
|
button.innerHTML = name;
|
|
|
|
|
listeners[name].elem = button;
|
|
|
|
|
elem.appendChild(button);
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
buttons[0].style.display = list.length ? '' : 'none';
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
//控制隐藏和显示
|
|
|
|
|
display:function(type){
|
|
|
|
|
if(type == undefined) type = true;//默认显示
|
|
|
|
|
if (type){//显示
|
|
|
|
|
if (this.DOM.wrap.css('visibility') != 'hidden') return;
|
|
|
|
|
this.DOM.wrap.css({visibility:'visible',left:'-=10000'});
|
|
|
|
|
this.zIndex();
|
|
|
|
|
}else{//隐藏 left+10000;
|
|
|
|
|
if (this.DOM.wrap.css('visibility') == 'hidden') return;
|
|
|
|
|
this.DOM.wrap.css({visibility:'hidden',left:'+=10000'});
|
|
|
|
|
this.resetIndex();
|
|
|
|
|
}
|
|
|
|
|
return this;
|
|
|
|
|
},
|
|
|
|
|
//重置焦点对话框
|
|
|
|
|
resetIndex:function(){
|
|
|
|
|
// 定位当前焦点frame
|
|
|
|
|
var dialog_index = 0;
|
|
|
|
|
var dialog_this = '';
|
|
|
|
|
for (var i in artDialog.list) {
|
|
|
|
|
if (artDialog.list[i]['config'] == undefined) continue;
|
|
|
|
|
if (artDialog.list[i].DOM.wrap.css('visibility') == 'hidden') continue;
|
|
|
|
|
|
|
|
|
|
var this_index =artDialog.list[i]['config']['zIndex'];
|
|
|
|
|
if (dialog_index < this_index){
|
|
|
|
|
dialog_index = this_index;
|
|
|
|
|
dialog_this = artDialog.list[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (dialog_this !='') {
|
|
|
|
|
dialog_this.zIndex();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
refresh:function(){
|
|
|
|
|
var frame = this.DOM.wrap.find('iframe');
|
|
|
|
|
frame.attr('src',frame.attr('src'));
|
|
|
|
|
return this;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/** 显示对话框 */
|
|
|
|
|
show: function () {
|
|
|
|
|
this.DOM.wrap.show();
|
|
|
|
|
!arguments[0] && this._lockMaskWrap && this._lockMaskWrap.show();
|
|
|
|
|
return this;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/** 隐藏对话框 */
|
|
|
|
|
hide: function () {
|
|
|
|
|
this.DOM.wrap.hide();
|
|
|
|
|
!arguments[0] && this._lockMaskWrap && this._lockMaskWrap.hide();
|
|
|
|
|
return this;
|
|
|
|
|
},
|
2014-06-08 06:47:38 +00:00
|
|
|
|
|
2014-04-01 18:00:42 +00:00
|
|
|
|
/** 关闭对话框 */
|
|
|
|
|
close: function () {
|
|
|
|
|
if (this.closed) return this;
|
|
|
|
|
var that = this,
|
|
|
|
|
DOM = that.DOM,
|
|
|
|
|
wrap = DOM.wrap,
|
|
|
|
|
list = artDialog.list,
|
|
|
|
|
fn = that.config.close,
|
|
|
|
|
follow = that.config.follow;
|
2014-06-08 06:47:38 +00:00
|
|
|
|
|
2014-04-01 18:00:42 +00:00
|
|
|
|
that.time();
|
|
|
|
|
if (typeof fn === 'function' && fn.call(that, window) === false) {
|
|
|
|
|
return that;
|
2014-06-08 06:47:38 +00:00
|
|
|
|
};
|
2014-04-01 18:00:42 +00:00
|
|
|
|
that.unlock();
|
|
|
|
|
|
2014-06-08 06:47:38 +00:00
|
|
|
|
wrap.animate({opacity:0,top:'-='+wrap.height() * 0.03},
|
|
|
|
|
{easing:'swing',duration:250,complete:function(){
|
|
|
|
|
// 置空内容
|
|
|
|
|
that._elemBack && that._elemBack();
|
|
|
|
|
wrap[0].className = wrap[0].style.cssText = '';
|
|
|
|
|
DOM.title.html('');
|
|
|
|
|
DOM.content.html('');
|
|
|
|
|
DOM.buttons.html('');
|
|
|
|
|
|
|
|
|
|
if (artDialog.focus === that) artDialog.focus = null;
|
|
|
|
|
if (follow) follow.removeAttribute(_expando + 'follow');
|
|
|
|
|
|
|
|
|
|
//if (that.config.resize)
|
|
|
|
|
if (that.config.title !== false){
|
|
|
|
|
dialogList.close(that.config.id);
|
|
|
|
|
}
|
2014-04-01 18:00:42 +00:00
|
|
|
|
|
2014-06-08 06:47:38 +00:00
|
|
|
|
delete list[that.config.id];
|
|
|
|
|
that._removeEvent();
|
|
|
|
|
that.hide(true)._setAbsolute();
|
|
|
|
|
|
|
|
|
|
// 清空除this.DOM之外临时对象,恢复到初始状态,以便使用单例模式
|
|
|
|
|
for (var i in that) {
|
|
|
|
|
if (that.hasOwnProperty(i) && i !== 'DOM') delete that[i];
|
|
|
|
|
};
|
|
|
|
|
// 移除HTMLElement或重用
|
|
|
|
|
_box ? wrap.remove() : _box = that;
|
|
|
|
|
that.resetIndex();
|
|
|
|
|
return that;
|
|
|
|
|
}});
|
2014-04-01 18:00:42 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 定时关闭
|
|
|
|
|
* @param {Number} 单位为秒, 无参数则停止计时器
|
|
|
|
|
*/
|
|
|
|
|
time: function (second) {
|
|
|
|
|
var that = this,
|
|
|
|
|
cancel = that.config.cancelVal,
|
|
|
|
|
timer = that._timer;
|
|
|
|
|
|
|
|
|
|
timer && clearTimeout(timer);
|
|
|
|
|
|
|
|
|
|
if (second) {
|
|
|
|
|
that._timer = setTimeout(function(){
|
|
|
|
|
that._click(cancel);
|
|
|
|
|
}, 1000 * second);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/** 设置焦点 */
|
|
|
|
|
focus: function () {
|
|
|
|
|
try {
|
|
|
|
|
if (this.config.focus) {
|
|
|
|
|
var elem = this._focus && this._focus[0] || this.DOM.close[0];
|
|
|
|
|
elem && elem.focus();
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {}; // IE对不可见元素设置焦点会报错
|
|
|
|
|
return this;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/** 置顶对话框 */
|
|
|
|
|
zIndex: function () {
|
|
|
|
|
var that = this,
|
|
|
|
|
DOM = that.DOM,
|
|
|
|
|
wrap = DOM.wrap,
|
|
|
|
|
top = artDialog.focus,
|
|
|
|
|
index = artDialog.defaults.zIndex ++;
|
|
|
|
|
|
|
|
|
|
//if (that.config.resize)
|
|
|
|
|
if (that.config.title !== false){
|
|
|
|
|
dialogList.focus(that.config.id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置叠加高度
|
|
|
|
|
wrap.css('zIndex', index);
|
|
|
|
|
that._lockMask && that._lockMask.css('zIndex', index - 1);
|
|
|
|
|
|
|
|
|
|
// 设置最高层的样式
|
|
|
|
|
top && top.DOM.wrap.removeClass('aui_state_focus');
|
|
|
|
|
artDialog.focus = that;
|
|
|
|
|
wrap.addClass('aui_state_focus');
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/** 设置屏锁 */
|
|
|
|
|
lock: function () {
|
|
|
|
|
if (this._lock) return this;
|
|
|
|
|
|
|
|
|
|
var that = this,
|
|
|
|
|
index = artDialog.defaults.zIndex - 1,
|
|
|
|
|
wrap = that.DOM.wrap,
|
|
|
|
|
config = that.config,
|
|
|
|
|
docWidth = _$document.width(),
|
|
|
|
|
docHeight = _$document.height(),
|
|
|
|
|
lockMaskWrap = that._lockMaskWrap || $(document.body.appendChild(document.createElement('div'))),
|
|
|
|
|
lockMask = that._lockMask || $(lockMaskWrap[0].appendChild(document.createElement('div'))),
|
|
|
|
|
domTxt = '(document).documentElement',
|
|
|
|
|
sizeCss = _isMobile ? 'width:' + docWidth + 'px;height:' + docHeight
|
|
|
|
|
+ 'px' : 'width:100%;height:100%';
|
|
|
|
|
|
|
|
|
|
that.zIndex();
|
|
|
|
|
wrap.addClass('aui_state_lock');
|
|
|
|
|
lockMaskWrap[0].style.cssText = sizeCss + ';position:fixed;z-index:'
|
|
|
|
|
+ index + ';top:0;left:0;overflow:hidden;';
|
|
|
|
|
lockMask[0].style.cssText = 'height:100%;background:' + config.background
|
|
|
|
|
+ ';filter:alpha(opacity=0);opacity:0';
|
|
|
|
|
|
|
|
|
|
lockMask.stop();
|
|
|
|
|
lockMask.bind('click', function () {
|
|
|
|
|
that._reset();
|
|
|
|
|
}).bind('dblclick', function () {
|
|
|
|
|
that._click(that.config.cancelVal);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (config.duration === 0) {
|
|
|
|
|
lockMask.css({opacity: config.opacity});
|
|
|
|
|
} else {
|
|
|
|
|
lockMask.animate({opacity: config.opacity}, config.duration);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
that._lockMaskWrap = lockMaskWrap;
|
|
|
|
|
that._lockMask = lockMask;
|
|
|
|
|
|
|
|
|
|
that._lock = true;
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/** 解开屏锁 */
|
|
|
|
|
unlock: function () {
|
|
|
|
|
var that = this,
|
|
|
|
|
lockMaskWrap = that._lockMaskWrap,
|
|
|
|
|
lockMask = that._lockMask;
|
|
|
|
|
|
|
|
|
|
if (!that._lock) return that;
|
|
|
|
|
var style = lockMaskWrap[0].style;
|
|
|
|
|
var un = function () {
|
|
|
|
|
style.cssText = 'display:none';
|
|
|
|
|
_box && lockMaskWrap.remove();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
lockMask.stop().unbind();
|
|
|
|
|
that.DOM.wrap.removeClass('aui_state_lock');
|
|
|
|
|
if (!that.config.duration) {// 取消动画,快速关闭
|
|
|
|
|
un();
|
|
|
|
|
} else {
|
|
|
|
|
lockMask.animate({opacity: 0}, that.config.duration, un);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
that._lock = false;
|
|
|
|
|
return that;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 获取元素
|
|
|
|
|
_getDOM: function () {
|
|
|
|
|
var wrap = document.createElement('div'),
|
|
|
|
|
body = document.body;
|
|
|
|
|
wrap.style.cssText = 'position:absolute;left:0;top:0';
|
|
|
|
|
wrap.innerHTML = artDialog._templates;
|
|
|
|
|
body.insertBefore(wrap, body.firstChild);
|
|
|
|
|
|
|
|
|
|
var name, i = 0,
|
|
|
|
|
DOM = {wrap: $(wrap)},
|
|
|
|
|
els = wrap.getElementsByTagName('*'),
|
|
|
|
|
elsLen = els.length;
|
|
|
|
|
|
|
|
|
|
for (; i < elsLen; i ++) {
|
|
|
|
|
name = els[i].className.split('aui_')[1];
|
|
|
|
|
if (name) DOM[name] = $(els[i]);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return DOM;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// px与%单位转换成数值 (百分比单位按照最大值换算)
|
|
|
|
|
// 其他的单位返回原值
|
|
|
|
|
_toNumber: function (thisValue, maxValue) {
|
|
|
|
|
if (!thisValue && thisValue !== 0 || typeof thisValue === 'number') {
|
|
|
|
|
return thisValue;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var last = thisValue.length - 1;
|
|
|
|
|
if (thisValue.lastIndexOf('px') === last) {
|
|
|
|
|
thisValue = parseInt(thisValue);
|
|
|
|
|
} else if (thisValue.lastIndexOf('%') === last) {
|
|
|
|
|
thisValue = parseInt(maxValue * thisValue.split('%')[0] / 100);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return thisValue;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 解析HTML片段中自定义类型脚本,其this指向artDialog内部
|
|
|
|
|
// <script type="text/dialog">/* [code] */</script>
|
|
|
|
|
_runScript: function (elem) {
|
|
|
|
|
var fun, i = 0, n = 0,
|
|
|
|
|
tags = elem.getElementsByTagName('script'),
|
|
|
|
|
length = tags.length,
|
|
|
|
|
script = [];
|
|
|
|
|
|
|
|
|
|
for (; i < length; i ++) {
|
|
|
|
|
if (tags[i].type === 'text/dialog') {
|
|
|
|
|
script[n] = tags[i].innerHTML;
|
|
|
|
|
n ++;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (script.length) {
|
|
|
|
|
script = script.join('');
|
|
|
|
|
fun = new Function(script);
|
|
|
|
|
fun.call(this);
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 自动切换定位类型
|
|
|
|
|
_autoPositionType: function () {
|
|
|
|
|
this[this.config.fixed ? '_setFixed' : '_setAbsolute']();/////////////
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置静止定位
|
|
|
|
|
// IE6 Fixed @see: http://www.planeart.cn/?p=877
|
|
|
|
|
_setFixed: (function () {
|
|
|
|
|
$(function () {
|
|
|
|
|
var bg = 'backgroundAttachment';
|
|
|
|
|
if (_$html.css(bg) !== 'fixed' && $('body').css(bg) !== 'fixed') {
|
|
|
|
|
_$html.css({
|
|
|
|
|
zoom: 1,// 避免偶尔出现body背景图片异常的情况
|
|
|
|
|
backgroundAttachment: 'fixed'
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
return function () {
|
|
|
|
|
var $elem = this.DOM.wrap,style = $elem[0].style;
|
|
|
|
|
style.position = 'fixed';
|
|
|
|
|
};
|
|
|
|
|
}()),
|
|
|
|
|
|
|
|
|
|
// 设置绝对定位
|
|
|
|
|
_setAbsolute: function () {
|
|
|
|
|
var style = this.DOM.wrap[0].style;
|
|
|
|
|
style.position = 'absolute';
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 按钮回调函数触发
|
|
|
|
|
_click: function (name) {
|
|
|
|
|
var that = this,
|
|
|
|
|
fn = that._listeners[name] && that._listeners[name].callback;
|
|
|
|
|
return typeof fn !== 'function' || fn.call(that, window) !== false ?
|
|
|
|
|
that.close() : that;
|
|
|
|
|
},
|
|
|
|
|
_clickMax:function(){
|
|
|
|
|
var _dialogMaxFlag = this.config['dialogMaxFlag'];
|
|
|
|
|
if (this.DOM.wrap.hasClass(_dialogMaxFlag)) {//还原
|
|
|
|
|
this.DOM.wrap.removeClass(_dialogMaxFlag);
|
|
|
|
|
this.DOM.wrap.css({
|
|
|
|
|
'left':this.DOM.wrap.data('initSize').left + 'px',
|
|
|
|
|
'top':this.DOM.wrap.data('initSize').top + 'px',
|
|
|
|
|
'width':this.DOM.wrap.data('initSize').width + 'px'
|
|
|
|
|
});
|
|
|
|
|
this.DOM.main[0].style.height = this.DOM.wrap.data('initSize').height;
|
|
|
|
|
}else{//最大化
|
|
|
|
|
this.DOM.wrap.addClass(_dialogMaxFlag);
|
|
|
|
|
var dialogDom = this.DOM.wrap.context;
|
|
|
|
|
var size = {
|
|
|
|
|
left: dialogDom.offsetLeft,
|
|
|
|
|
top: dialogDom.offsetTop,
|
|
|
|
|
width: dialogDom.offsetWidth,
|
|
|
|
|
height:this.DOM.main[0].style.height
|
|
|
|
|
};
|
|
|
|
|
this.DOM.wrap.data('initSize',size);
|
|
|
|
|
this.DOM.wrap.css({
|
|
|
|
|
'left':0,
|
|
|
|
|
'top':0,
|
|
|
|
|
'width':_$window.width()
|
|
|
|
|
});
|
|
|
|
|
this.DOM.main[0].style.height = (_$window.height()-_titleBarHeight) + 'px';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
_clickMin:function(){
|
|
|
|
|
if (TaskTap!=undefined){
|
|
|
|
|
this.display(false);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 重置位置与尺寸
|
|
|
|
|
_reset: function (test) {
|
|
|
|
|
//最大化时,窗口调整保持
|
|
|
|
|
if (this.DOM.wrap.hasClass('dialogMax')) {
|
|
|
|
|
this.DOM.wrap.css('width',_$window.width());
|
|
|
|
|
this.DOM.main[0].style.height = (_$window.height()-_titleBarHeight) + 'px';
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var newSize,
|
|
|
|
|
that = this,
|
|
|
|
|
oldSize = that._winSize || _$window.width() * _$window.height(),
|
|
|
|
|
elem = that._follow,
|
|
|
|
|
width = that._width,
|
|
|
|
|
height = that._height,
|
|
|
|
|
left = that._left,
|
|
|
|
|
top = that._top;
|
|
|
|
|
|
|
|
|
|
if (test) {
|
|
|
|
|
// IE6~7 window.onresize bug
|
|
|
|
|
newSize = that._winSize = _$window.width() * _$window.height();
|
|
|
|
|
if (oldSize === newSize) return;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (width || height) that.size(width, height);
|
|
|
|
|
|
|
|
|
|
if (elem) {
|
|
|
|
|
that.follow(elem);
|
|
|
|
|
} else if (left || top) {
|
|
|
|
|
//change by warlee [resize don't change position]
|
|
|
|
|
//that.position(left, top);
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 事件代理
|
|
|
|
|
_addEvent: function () {
|
|
|
|
|
var resizeTimer,
|
|
|
|
|
that = this,
|
|
|
|
|
config = that.config,
|
|
|
|
|
isIE = 'CollectGarbage' in window,
|
|
|
|
|
DOM = that.DOM;
|
|
|
|
|
// 窗口调节事件
|
|
|
|
|
that._winResize = function () {
|
|
|
|
|
resizeTimer && clearTimeout(resizeTimer);
|
|
|
|
|
resizeTimer = setTimeout(function () {
|
|
|
|
|
that._reset(isIE);
|
|
|
|
|
}, 50);
|
|
|
|
|
};
|
|
|
|
|
_$window.bind('resize', that._winResize);
|
|
|
|
|
// 监听点击
|
|
|
|
|
DOM.wrap.bind('click', function (event) {
|
|
|
|
|
var target = event.target, callbackID;
|
|
|
|
|
if (target.disabled) return false; // IE BUG
|
|
|
|
|
|
|
|
|
|
var clickClass = $(target).attr('class');
|
|
|
|
|
//最大化 最小化 关闭
|
|
|
|
|
switch(clickClass){
|
|
|
|
|
case 'aui_min':that._clickMin();break;
|
|
|
|
|
case 'aui_max':that._clickMax();break;
|
|
|
|
|
case 'aui_close':
|
|
|
|
|
that._click(config.cancelVal);
|
|
|
|
|
return false;
|
|
|
|
|
default:
|
|
|
|
|
callbackID = target[_expando + 'callback'];
|
|
|
|
|
callbackID && that._click(callbackID);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.bind('mousedown', function () {
|
|
|
|
|
try{rightMenu.hidden();}catch(e){};
|
|
|
|
|
that.zIndex();
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 卸载事件代理
|
|
|
|
|
_removeEvent: function () {
|
|
|
|
|
var that = this,
|
|
|
|
|
DOM = that.DOM;
|
|
|
|
|
|
|
|
|
|
DOM.wrap.unbind();
|
|
|
|
|
_$window.unbind('resize', that._winResize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
artDialog.fn._init.prototype = artDialog.fn;
|
|
|
|
|
$.fn.dialog = $.fn.artDialog = function () {
|
|
|
|
|
var config = arguments;
|
|
|
|
|
this[this.live ? 'live' : 'bind']('click', function () {
|
|
|
|
|
artDialog.apply(this, config);
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
return this;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 最顶层的对话框API */
|
|
|
|
|
artDialog.focus = null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 获取某对话框API */
|
|
|
|
|
artDialog.get = function (id) {
|
|
|
|
|
return id === undefined
|
|
|
|
|
? artDialog.list
|
|
|
|
|
: artDialog.list[id];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
artDialog.list = {};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 全局快捷键
|
|
|
|
|
_$document.bind('keydown', function (event) {
|
|
|
|
|
var target = event.target,
|
|
|
|
|
nodeName = target.nodeName,
|
|
|
|
|
rinput = /^INPUT|TEXTAREA$/,
|
|
|
|
|
api = artDialog.focus,
|
|
|
|
|
keyCode = event.keyCode;
|
|
|
|
|
|
|
|
|
|
if (!api || !api.config.esc || rinput.test(nodeName) || api.config.resize || api.config.simple) return;
|
2014-06-08 06:47:38 +00:00
|
|
|
|
|
2014-04-01 18:00:42 +00:00
|
|
|
|
keyCode === 27 && api._click(api.config.cancelVal);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取artDialog路径
|
|
|
|
|
_path = window['_artDialog_path'] || (function (script, i, me) {
|
|
|
|
|
for (i in script) {
|
|
|
|
|
// 如果通过第三方脚本加载器加载本文件,请保证文件名含有"artDialog"字符
|
|
|
|
|
if (script[i].src && script[i].src.indexOf('artDialog') !== -1) me = script[i];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
_thisScript = me || script[script.length - 1];
|
|
|
|
|
me = _thisScript.src.replace(/\\/g, '/');
|
|
|
|
|
return me.lastIndexOf('/') < 0 ? '.' : me.substring(0, me.lastIndexOf('/'));
|
|
|
|
|
}(document.getElementsByTagName('script')));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 触发浏览器预先缓存背景图片
|
|
|
|
|
// _$window.bind('load', function () {
|
|
|
|
|
// setTimeout(function () {
|
|
|
|
|
// if (_count) return;
|
|
|
|
|
// artDialog({left: '-9999em',time: 9,fixed: false,lock: false,focus: false});
|
|
|
|
|
// }, 150);
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 使用uglifyjs压缩能够预先处理"+"号合并字符串
|
|
|
|
|
// uglifyjs: http://marijnhaverbeke.nl/uglifyjs
|
|
|
|
|
artDialog._templates =
|
2014-06-15 15:35:50 +00:00
|
|
|
|
'<div class="aui_outer pop_fadein"><div class="aui_mask"></div>'
|
2014-04-01 18:00:42 +00:00
|
|
|
|
+ '<table class="aui_border">'
|
|
|
|
|
+ '<tbody>'
|
|
|
|
|
+ '<tr>'
|
|
|
|
|
+ '<td class="aui_nw"></td>'
|
|
|
|
|
+ '<td class="aui_n"></td>'
|
|
|
|
|
+ '<td class="aui_ne"></td>'
|
|
|
|
|
+ '</tr>'
|
|
|
|
|
+ '<tr>'
|
|
|
|
|
+ '<td class="aui_w"></td>'
|
|
|
|
|
+ '<td class="aui_c">'
|
|
|
|
|
+ '<div class="aui_inner">'
|
|
|
|
|
+ '<table class="aui_dialog">'
|
|
|
|
|
+ '<tbody>'
|
|
|
|
|
+ '<tr>'
|
|
|
|
|
+ '<td colspan="2" class="aui_header">'
|
|
|
|
|
+ '<div class="aui_titleBar dialog_menu">'
|
|
|
|
|
+ '<div class="aui_title"></div>'
|
|
|
|
|
+ '<a class="aui_min">─</a>'
|
|
|
|
|
+ '<a class="aui_max">□</a>'
|
|
|
|
|
+ '<a class="aui_close">'
|
|
|
|
|
+ '\xd7'
|
|
|
|
|
+ '</a>'
|
|
|
|
|
+ '</div>'
|
|
|
|
|
+ '</td>'
|
|
|
|
|
+ '</tr>'
|
|
|
|
|
+ '<tr>'
|
|
|
|
|
+ '<td class="aui_icon">'
|
|
|
|
|
+ '<div class="aui_iconBg"></div>'
|
|
|
|
|
+ '</td>'
|
|
|
|
|
+ '<td class="aui_main">'
|
|
|
|
|
+ '<div class="aui_content"></div>'
|
|
|
|
|
+ '</td>'
|
|
|
|
|
+ '</tr>'
|
|
|
|
|
+ '<tr>'
|
|
|
|
|
+ '<td colspan="2" class="aui_footer">'
|
|
|
|
|
+ '<div class="aui_buttons"></div>'
|
|
|
|
|
+ '</td>'
|
|
|
|
|
+ '</tr>'
|
|
|
|
|
+ '</tbody>'
|
|
|
|
|
+ '</table>'
|
|
|
|
|
+ '</div>'
|
|
|
|
|
+ '</td>'
|
|
|
|
|
+ '<td class="aui_e"></td>'
|
|
|
|
|
+ '</tr>'
|
|
|
|
|
+ '<tr>'
|
|
|
|
|
+ '<td class="aui_sw"></td>'
|
|
|
|
|
+ '<td class="aui_s"></td>'
|
|
|
|
|
+ '<td class="aui_se"></td>'
|
|
|
|
|
+ '</tr>'
|
|
|
|
|
+ '</tbody>'
|
|
|
|
|
+ '</table>'
|
|
|
|
|
|
|
|
|
|
+ '<div class="resize-handle resize-top" resize="top"></div>'
|
|
|
|
|
+ '<div class="resize-handle resize-right" resize="right"></div>'
|
|
|
|
|
+ '<div class="resize-handle resize-bottom" resize="bottom"></div>'
|
|
|
|
|
+ '<div class="resize-handle resize-left" resize="left"></div>'
|
|
|
|
|
+ '<div class="resize-handle resize-top-right" resize="top-right"></div>'
|
|
|
|
|
+ '<div class="resize-handle resize-bottom-right" resize="bottom-right"></div>'
|
|
|
|
|
+ '<div class="resize-handle resize-bottom-left" resize="bottom-left"></div>'
|
|
|
|
|
+ '<div class="resize-handle resize-top-left" resize="top-left"></div>'
|
|
|
|
|
+'</div>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认配置
|
|
|
|
|
*/
|
|
|
|
|
artDialog.defaults = {
|
|
|
|
|
content: '', // 消息内容
|
|
|
|
|
title: '\u6d88\u606f', // 标题. 默认'消息'
|
|
|
|
|
button: null, // 自定义按钮
|
|
|
|
|
ok: null, // 确定按钮回调函数
|
|
|
|
|
cancel: null, // 取消按钮回调函数
|
|
|
|
|
init: null, // 对话框初始化后执行的函数
|
|
|
|
|
close: null, // 对话框关闭前执行的函数
|
|
|
|
|
okVal: '\u786E\u5B9A', // 确定按钮文本. 默认'确定'
|
|
|
|
|
cancelVal: '\u53D6\u6D88', // 取消按钮文本. 默认'取消'
|
|
|
|
|
width: 'auto', // 内容宽度
|
|
|
|
|
height: 'auto', // 内容高度
|
|
|
|
|
minWidth: 96, // 最小宽度限制
|
|
|
|
|
minHeight: 32, // 最小高度限制
|
|
|
|
|
padding: '20px 25px', // 内容与边界填充距离
|
|
|
|
|
icon: null, // 消息图标名称
|
|
|
|
|
time: null, // 自动关闭时间
|
|
|
|
|
esc: true, // 是否支持Esc键关闭
|
|
|
|
|
focus: true, // 是否支持对话框按钮自动聚焦
|
|
|
|
|
show: true, // 初始化后是否显示对话框
|
|
|
|
|
follow: null, // 跟随某元素(即让对话框在元素附近弹出)
|
|
|
|
|
path: _path, // artDialog路径
|
|
|
|
|
lock: false, // 是否锁屏
|
|
|
|
|
background: '#000', // 遮罩颜色
|
|
|
|
|
opacity: .7, // 遮罩透明度
|
|
|
|
|
duration: 300, // 遮罩透明度渐变动画速度
|
|
|
|
|
fixed: false, // 是否静止定位
|
|
|
|
|
left: '50%', // X轴坐标
|
|
|
|
|
top: '38.2%', // Y轴坐标
|
|
|
|
|
zIndex: 300, // 对话框叠加高度值(重要:此值不能超过浏览器最大限制)
|
|
|
|
|
|
2014-07-06 18:24:21 +00:00
|
|
|
|
ico:'./static/images/file_16/file.png',//默认标题小图标
|
2014-04-01 18:00:42 +00:00
|
|
|
|
resize: false, // 是否允许用户调节尺寸
|
|
|
|
|
dialogMaxFlag:'dialogMax', // 最大化状态标记class
|
|
|
|
|
dialogMinFlag:'dialogMin', // 最小化状态标记class
|
|
|
|
|
drag: true // 是否允许用户拖动位置
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
window.artDialog = $.dialog = $.artDialog = artDialog;
|
|
|
|
|
}(this.art || this.jQuery && (this.art = jQuery), this));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------
|
|
|
|
|
// 对话框模块-拖拽支持(可选外置模块)
|
|
|
|
|
//------------------------------------------------
|
|
|
|
|
;(function ($) {
|
|
|
|
|
|
|
|
|
|
var _dragEvent, _use,
|
|
|
|
|
_$window = $(window),
|
|
|
|
|
_$document = $(document),
|
|
|
|
|
_elem = document.documentElement,
|
|
|
|
|
_isLosecapture = 'onlosecapture' in _elem,
|
|
|
|
|
_isSetCapture = 'setCapture' in _elem;
|
|
|
|
|
|
|
|
|
|
// 拖拽事件
|
|
|
|
|
artDialog.dragEvent = function () {
|
|
|
|
|
var that = this,
|
|
|
|
|
proxy = function (name) {
|
|
|
|
|
var fn = that[name];
|
|
|
|
|
that[name] = function () {
|
|
|
|
|
return fn.apply(that, arguments);
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
proxy('start');
|
|
|
|
|
proxy('move');
|
|
|
|
|
proxy('end');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
artDialog.dragEvent.prototype = {
|
|
|
|
|
// 开始拖拽
|
|
|
|
|
onstart: $.noop,
|
|
|
|
|
start: function (event) {
|
|
|
|
|
_$document
|
|
|
|
|
.bind('mousemove', this.move)
|
|
|
|
|
.bind('mouseup', this.end);
|
|
|
|
|
this.onstart(event.clientX, event.clientY);
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 正在拖拽
|
|
|
|
|
onmove: $.noop,
|
|
|
|
|
move: function (event) {
|
|
|
|
|
this.onmove(event.clientX,event.clientY);
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 结束拖拽
|
|
|
|
|
onend: $.noop,
|
|
|
|
|
end: function (event) {
|
|
|
|
|
_$document
|
|
|
|
|
.unbind('mousemove', this.move)
|
|
|
|
|
.unbind('mouseup', this.end);
|
|
|
|
|
this.onend(event.clientX, event.clientY);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
_use = function (event) {
|
|
|
|
|
var startWidth, startHeight, startLeft, startTop, isResize,
|
|
|
|
|
api = artDialog.focus,
|
|
|
|
|
startX,startY,
|
|
|
|
|
screenWidth,screenHeight,
|
|
|
|
|
DOM = api.DOM,
|
|
|
|
|
wrap = DOM.wrap,
|
|
|
|
|
title = DOM.title,
|
|
|
|
|
main = DOM.main;
|
|
|
|
|
|
|
|
|
|
// 清除文本选择
|
|
|
|
|
var clsSelect = 'getSelection' in window ? function () {
|
|
|
|
|
window.getSelection().removeAllRanges();
|
|
|
|
|
} : function () {
|
|
|
|
|
try {
|
|
|
|
|
document.selection.empty();
|
|
|
|
|
} catch (e) {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 对话框准备拖动
|
|
|
|
|
_dragEvent.onstart = function (x, y) {
|
|
|
|
|
startX = x;startY = y;
|
|
|
|
|
screenHeight = $(window).height();
|
|
|
|
|
screenWidth = $(window).width();
|
|
|
|
|
if (isResize) {
|
|
|
|
|
startWidth = main[0].offsetWidth;
|
|
|
|
|
startHeight = main[0].offsetHeight;
|
|
|
|
|
|
|
|
|
|
startLeft = wrap[0].offsetLeft;
|
|
|
|
|
startTop = wrap[0].offsetTop;
|
|
|
|
|
} else {
|
|
|
|
|
startLeft = wrap[0].offsetLeft;
|
|
|
|
|
startTop = wrap[0].offsetTop;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
_$document.bind('dblclick', _dragEvent.end);
|
|
|
|
|
if (_isLosecapture) {
|
|
|
|
|
title.bind('losecapture', _dragEvent.end)
|
|
|
|
|
}else{
|
|
|
|
|
_$window.bind('blur', _dragEvent.end);
|
|
|
|
|
}
|
|
|
|
|
_isSetCapture && title[0].setCapture();
|
|
|
|
|
|
|
|
|
|
wrap.addClass('aui_state_drag');
|
|
|
|
|
api.focus();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 对话框拖动,8个方向调整大小
|
|
|
|
|
_dragEvent.onmove = function (x, y) {
|
|
|
|
|
if (wrap.hasClass(api.config['dialogMaxFlag'])) return;//最大化则不可拖动
|
|
|
|
|
|
|
|
|
|
x = (x >= screenWidth ? screenWidth : x);
|
|
|
|
|
y = (y >= screenHeight ? screenHeight : y);
|
|
|
|
|
x = (x <= 0 ? 0 : x);
|
|
|
|
|
y = (y <= 0 ? 0 : y);
|
|
|
|
|
|
|
|
|
|
x = x - startX;
|
|
|
|
|
y = y - startY;
|
|
|
|
|
|
|
|
|
|
if (isResize) {
|
|
|
|
|
if (resizeDirection == undefined) return;
|
|
|
|
|
var wrapStyle = wrap[0].style,style = main[0].style,
|
|
|
|
|
left = startLeft,
|
|
|
|
|
top = startTop,
|
|
|
|
|
width = startWidth,
|
|
|
|
|
height= startHeight;
|
|
|
|
|
|
|
|
|
|
switch(resizeDirection){
|
|
|
|
|
case 'top':
|
|
|
|
|
top = y + top;
|
|
|
|
|
height = -y + height;
|
|
|
|
|
break;
|
|
|
|
|
case 'right':
|
|
|
|
|
width = x + width;
|
|
|
|
|
break;
|
|
|
|
|
case 'bottom':
|
|
|
|
|
height = y + height;
|
|
|
|
|
break;
|
|
|
|
|
case 'left':
|
|
|
|
|
left = x + left;
|
|
|
|
|
width = -x + width;
|
|
|
|
|
break;
|
|
|
|
|
case 'top-left':
|
|
|
|
|
left = x + left;
|
|
|
|
|
top = y + top;
|
|
|
|
|
width = -x + width;
|
|
|
|
|
height = -y + height;
|
|
|
|
|
break;
|
|
|
|
|
case 'top-right':
|
|
|
|
|
top = y + top;
|
|
|
|
|
width = x + width;
|
|
|
|
|
height = -y + height;
|
|
|
|
|
break;
|
|
|
|
|
case 'bottom-right':
|
|
|
|
|
width = x + startWidth;
|
|
|
|
|
height = y + startHeight;
|
|
|
|
|
break;
|
|
|
|
|
case 'bottom-left':
|
|
|
|
|
left = x + left;
|
|
|
|
|
width = -x + startWidth;
|
|
|
|
|
height = y + startHeight;
|
|
|
|
|
break;
|
|
|
|
|
default:break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
left = (left<=0 ? 0:left);
|
|
|
|
|
top = (top<=0 ? 0:top);
|
|
|
|
|
|
|
|
|
|
wrapStyle.width = 'auto';
|
|
|
|
|
wrapStyle.width = wrap[0].offsetWidth + 'px';
|
|
|
|
|
wrapStyle.left = left + 'px';
|
|
|
|
|
wrapStyle.top = top + 'px';
|
|
|
|
|
|
|
|
|
|
style.width = Math.max(0, width) + 'px';
|
|
|
|
|
style.height = Math.max(0, height) + 'px';
|
|
|
|
|
} else {
|
|
|
|
|
var style = wrap[0].style;
|
|
|
|
|
style.left = x + startLeft + 'px';
|
|
|
|
|
style.top = y + startTop + 'px';
|
|
|
|
|
}
|
|
|
|
|
clsSelect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 对话框拖动结束
|
|
|
|
|
_dragEvent.onend = function (x, y) {
|
|
|
|
|
_$document.unbind('dblclick', _dragEvent.end);
|
|
|
|
|
_isLosecapture ? title.unbind('losecapture', _dragEvent.end) :
|
|
|
|
|
_$window.unbind('blur', _dragEvent.end);
|
|
|
|
|
_isSetCapture && title[0].releaseCapture();
|
|
|
|
|
|
|
|
|
|
!api.closed && api._autoPositionType();
|
|
|
|
|
wrap.removeClass('aui_state_drag');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
isResize = $(event.target).hasClass('resize-handle');
|
|
|
|
|
resizeDirection= $(event.target).attr('resize');
|
|
|
|
|
_dragEvent.start(event);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 代理 mousedown 事件触发对话框拖动
|
|
|
|
|
_$document.bind('mousedown', function (event) {
|
|
|
|
|
var api = artDialog.focus;
|
|
|
|
|
if (!api) return;
|
|
|
|
|
var target = event.target,
|
|
|
|
|
config = api.config,
|
|
|
|
|
DOM = api.DOM;
|
|
|
|
|
|
|
|
|
|
if (config.drag !== false && target === DOM.title[0]
|
|
|
|
|
|| config.resize !== false && $(target).hasClass('resize-handle')) {
|
|
|
|
|
_dragEvent = _dragEvent || new artDialog.dragEvent();
|
|
|
|
|
_use(event);
|
|
|
|
|
return false;// 防止firefox与chrome滚屏
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
})(this.art || this.jQuery && (this.art = jQuery));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//==========================================================================
|
|
|
|
|
//==========================================================================
|
|
|
|
|
/*!
|
|
|
|
|
* artDialog iframeTools
|
|
|
|
|
* Date: 2011-11-25 13:54
|
|
|
|
|
* http://code.google.com/p/artdialog/
|
|
|
|
|
* (c) 2009-2011 TangBin, http://www.planeArt.cn
|
|
|
|
|
*
|
|
|
|
|
* This is licensed under the GNU LGPL, version 2.1 or later.
|
|
|
|
|
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
;(function ($, window, artDialog, undefined) {
|
|
|
|
|
|
|
|
|
|
var _topDialog, _proxyDialog, _zIndex,
|
|
|
|
|
_data = '@ARTDIALOG.DATA',
|
|
|
|
|
_open = '@ARTDIALOG.OPEN',
|
|
|
|
|
_opener = '@ARTDIALOG.OPENER',
|
|
|
|
|
_winName = window.name = window.name
|
|
|
|
|
|| '@ARTDIALOG.WINNAME' + + new Date;
|
|
|
|
|
|
|
|
|
|
$(function () {
|
|
|
|
|
!window.jQuery && document.compatMode === 'BackCompat'
|
|
|
|
|
// 不支持怪异模式,请用主流的XHTML1.0或者HTML5的DOCTYPE申明
|
|
|
|
|
&& alert('artDialog Error: document.compatMode === "BackCompat"');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 获取 artDialog 可跨级调用的最高层的 window 对象 */
|
|
|
|
|
var _top = artDialog.top = function () {
|
|
|
|
|
var top = window,
|
|
|
|
|
test = function (name) {
|
|
|
|
|
try {
|
|
|
|
|
var doc = window[name].document; // 跨域|无权限
|
|
|
|
|
doc.getElementsByTagName; // chrome 本地安全限制
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return window[name].artDialog
|
|
|
|
|
// 框架集无法显示第三方元素
|
|
|
|
|
&& doc.getElementsByTagName('frameset').length === 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (test('top')) {
|
|
|
|
|
top = window.top;
|
|
|
|
|
} else if (test('parent')) {
|
|
|
|
|
top = window.parent;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return top;
|
|
|
|
|
}();
|
|
|
|
|
artDialog.parent = _top; // 兼容v4.1之前版本,未来版本将删除此
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_topDialog = _top.artDialog;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取顶层页面对话框叠加值
|
|
|
|
|
_zIndex = function () {
|
|
|
|
|
return _topDialog.defaults.zIndex;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 跨框架数据共享接口
|
|
|
|
|
* @see http://www.planeart.cn/?p=1554
|
|
|
|
|
* @param {String} 存储的数据名
|
|
|
|
|
* @param {Any} 将要存储的任意数据(无此项则返回被查询的数据)
|
|
|
|
|
*/
|
|
|
|
|
artDialog.data = function (name, value) {
|
|
|
|
|
var top = artDialog.top,
|
|
|
|
|
cache = top[_data] || {};
|
|
|
|
|
top[_data] = cache;
|
|
|
|
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
|
|
cache[name] = value;
|
|
|
|
|
} else {
|
|
|
|
|
return cache[name];
|
|
|
|
|
};
|
|
|
|
|
return cache;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 数据共享删除接口
|
|
|
|
|
* @param {String} 删除的数据名
|
|
|
|
|
*/
|
|
|
|
|
artDialog.removeData = function (name) {
|
|
|
|
|
var cache = artDialog.top[_data];
|
|
|
|
|
if (cache && cache[name]) delete cache[name];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 跨框架普通对话框 */
|
|
|
|
|
artDialog.through = _proxyDialog = function () {
|
|
|
|
|
var api = _topDialog.apply(this, arguments);
|
|
|
|
|
|
|
|
|
|
// 缓存从当前 window(可能为iframe)调出所有跨框架对话框,
|
|
|
|
|
// 以便让当前 window 卸载前去关闭这些对话框。
|
|
|
|
|
// 因为iframe注销后也会从内存中删除其创建的对象,这样可以防止回调函数报错
|
|
|
|
|
if (_top !== window) artDialog.list[api.config.id] = api;
|
|
|
|
|
return api;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 框架页面卸载前关闭所有穿越的对话框
|
|
|
|
|
_top !== window && $(window).bind('unload', function () {
|
|
|
|
|
var list = artDialog.list, config;
|
|
|
|
|
for (var i in list) {
|
|
|
|
|
if (list[i]) {
|
|
|
|
|
config = list[i].config;
|
|
|
|
|
if (config) config.duration = 0; // 取消动画
|
|
|
|
|
list[i].close();
|
|
|
|
|
//delete list[i];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 弹窗 (iframe)
|
|
|
|
|
* @param {String} 地址
|
|
|
|
|
* @param {Object} 配置参数. 这里传入的回调函数接收的第1个参数为iframe内部window对象
|
|
|
|
|
* @param {Boolean} 是否允许缓存. 默认true
|
|
|
|
|
*/
|
|
|
|
|
artDialog.open = function (url, options, cache) {
|
|
|
|
|
options = options || {};
|
|
|
|
|
|
|
|
|
|
var api, DOM,
|
|
|
|
|
$content, $main, iframe, $iframe, $idoc, iwin, ibody,$frame,
|
|
|
|
|
top = artDialog.top,
|
|
|
|
|
initCss = 'position:absolute;left:-9999em;top:-9999em;border:none 0;background:transparent',
|
|
|
|
|
loadCss = 'width:100%;height:100%;border:none 0';
|
|
|
|
|
|
|
|
|
|
if (cache === false) {
|
|
|
|
|
var ts = + new Date,
|
|
|
|
|
ret = url.replace(/([?&])_=[^&]*/, "$1_=" + ts );
|
|
|
|
|
url = ret + ((ret === url) ? (/\?/.test(url) ? "&" : "?") + "_=" + ts : "");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var load = function () {
|
|
|
|
|
var iWidth, iHeight,aConfig = api.config;
|
|
|
|
|
DOM.content.find('.aui_loading').remove();
|
|
|
|
|
$content.addClass('aui_state_full');
|
|
|
|
|
try {
|
|
|
|
|
iwin = iframe.contentWindow;
|
|
|
|
|
$idoc = $(iwin.document);
|
|
|
|
|
ibody = iwin.document.body;
|
|
|
|
|
} catch (e) {// 跨域
|
|
|
|
|
iframe.style.cssText = loadCss;
|
|
|
|
|
|
|
|
|
|
aConfig.follow
|
|
|
|
|
? api.follow(aConfig.follow)
|
|
|
|
|
: api.position(aConfig.left, aConfig.top);
|
|
|
|
|
|
|
|
|
|
options.init && options.init.call(api, iwin, top);
|
|
|
|
|
options.init = null;
|
|
|
|
|
return;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 获取iframe内部尺寸
|
|
|
|
|
iWidth = aConfig.width === 'auto'
|
|
|
|
|
? $idoc.width() + parseInt($(ibody).css('marginLeft'))
|
|
|
|
|
: aConfig.width;
|
|
|
|
|
|
|
|
|
|
iHeight = aConfig.height === 'auto'
|
|
|
|
|
? $idoc.height()
|
|
|
|
|
: aConfig.height;
|
|
|
|
|
|
|
|
|
|
// 适应iframe尺寸
|
|
|
|
|
iframe.style.cssText = loadCss;
|
|
|
|
|
api.size(iWidth, iHeight);
|
|
|
|
|
|
|
|
|
|
// 调整对话框位置
|
|
|
|
|
aConfig.follow
|
|
|
|
|
? api.follow(aConfig.follow)
|
|
|
|
|
: api.position(aConfig.left, aConfig.top);
|
|
|
|
|
|
|
|
|
|
options.init && options.init.call(api, iwin, top);
|
|
|
|
|
options.init = null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var config = {
|
|
|
|
|
zIndex: _zIndex(),
|
|
|
|
|
init: function () {
|
|
|
|
|
api = this;
|
|
|
|
|
DOM = api.DOM;
|
|
|
|
|
$main = DOM.main;
|
|
|
|
|
$content = DOM.content;
|
|
|
|
|
DOM.content.append('<div class="aui_loading"><span>loading..</span></div>');
|
|
|
|
|
|
|
|
|
|
iframe = api.iframe = top.document.createElement('iframe');
|
|
|
|
|
iframe.src = url;
|
|
|
|
|
iframe.name = 'Open' + api.config.id;
|
|
|
|
|
iframe.style.cssText = initCss;
|
|
|
|
|
iframe.setAttribute('frameborder', 0, 0);
|
|
|
|
|
iframe.setAttribute('allowTransparency', true);
|
|
|
|
|
|
|
|
|
|
$iframe = $(iframe);
|
|
|
|
|
api.content().appendChild(iframe);
|
|
|
|
|
iwin = iframe.contentWindow;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
iwin.name = iframe.name;
|
|
|
|
|
artDialog.data(iframe.name + _open, api);
|
|
|
|
|
artDialog.data(iframe.name + _opener, window);
|
|
|
|
|
} catch (e) {};
|
|
|
|
|
|
|
|
|
|
$iframe.one('load', load);
|
|
|
|
|
//$frame.css('display','none');
|
|
|
|
|
},
|
|
|
|
|
close: function () {
|
|
|
|
|
$iframe.css('display', 'none').unbind('load', load);
|
|
|
|
|
|
|
|
|
|
if (options.close && options.close.call(this, iframe.contentWindow, top) === false) {
|
|
|
|
|
return false;
|
|
|
|
|
};
|
|
|
|
|
$content.removeClass('aui_state_full');
|
|
|
|
|
|
|
|
|
|
// 重要!需要重置iframe地址,否则下次出现的对话框在IE6、7无法聚焦input
|
|
|
|
|
// IE删除iframe后,iframe仍然会留在内存中出现上述问题,置换src是最容易解决的方法
|
|
|
|
|
$iframe[0].src = 'about:blank';
|
|
|
|
|
$iframe.remove();
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
artDialog.removeData(iframe.name + _open);
|
|
|
|
|
artDialog.removeData(iframe.name + _opener);
|
|
|
|
|
} catch (e) {};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 回调函数第一个参数指向iframe内部window对象
|
|
|
|
|
if (typeof options.ok === 'function') config.ok = function () {
|
|
|
|
|
return options.ok.call(api, iframe.contentWindow, top);
|
|
|
|
|
};
|
|
|
|
|
if (typeof options.cancel === 'function') config.cancel = function () {
|
|
|
|
|
return options.cancel.call(api, iframe.contentWindow, top);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
delete options.content;
|
|
|
|
|
|
|
|
|
|
for (var i in options) {
|
|
|
|
|
if (config[i] === undefined) config[i] = options[i];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return _proxyDialog(config);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 引用open方法扩展方法(在open打开的iframe内部私有方法) */
|
|
|
|
|
artDialog.open.api = artDialog.data(_winName + _open);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 引用open方法触发来源页面window(在open打开的iframe内部私有方法) */
|
|
|
|
|
artDialog.opener = artDialog.data(_winName + _opener) || window;
|
|
|
|
|
artDialog.open.origin = artDialog.opener; // 兼容v4.1之前版本,未来版本将删除此
|
|
|
|
|
|
|
|
|
|
/** artDialog.open 打开的iframe页面里关闭对话框快捷方法 */
|
|
|
|
|
artDialog.close = function () {
|
|
|
|
|
var api = artDialog.data(_winName + _open);
|
|
|
|
|
api && api.close();
|
|
|
|
|
return false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 点击iframe内容切换叠加高度
|
|
|
|
|
_top != window && $(document).bind('mousedown', function () {
|
|
|
|
|
var api = artDialog.open.api;
|
|
|
|
|
api && api.zIndex();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Ajax填充内容
|
|
|
|
|
* @param {String} 地址
|
|
|
|
|
* @param {Object} 配置参数
|
|
|
|
|
* @param {Boolean} 是否允许缓存. 默认true
|
|
|
|
|
*/
|
|
|
|
|
artDialog.load = function(url, options, cache){
|
|
|
|
|
cache = cache || false;
|
|
|
|
|
var opt = options || {};
|
|
|
|
|
|
|
|
|
|
var config = {
|
|
|
|
|
zIndex: _zIndex(),
|
|
|
|
|
init: function(here){
|
|
|
|
|
var api = this,
|
|
|
|
|
aConfig = api.config;
|
|
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
|
url: url,
|
|
|
|
|
success: function (content) {
|
|
|
|
|
api.content(content);
|
|
|
|
|
opt.init && opt.init.call(api, here);
|
|
|
|
|
},
|
|
|
|
|
cache: cache
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
delete options.content;
|
|
|
|
|
|
|
|
|
|
for (var i in opt) {
|
|
|
|
|
if (config[i] === undefined) config[i] = opt[i];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return _proxyDialog(config);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 警告
|
|
|
|
|
* @param {String} 消息内容
|
|
|
|
|
*/
|
|
|
|
|
artDialog.alert = function (content, callback) {
|
|
|
|
|
return _proxyDialog({
|
|
|
|
|
id: 'Alert',
|
|
|
|
|
zIndex: _zIndex(),
|
|
|
|
|
icon: 'warning',
|
|
|
|
|
fixed: true,
|
|
|
|
|
lock: true,
|
|
|
|
|
content: content,
|
|
|
|
|
ok: true,
|
|
|
|
|
close: callback
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 确认
|
|
|
|
|
* @param {String} 消息内容
|
|
|
|
|
* @param {Function} 确定按钮回调函数
|
|
|
|
|
* @param {Function} 取消按钮回调函数
|
|
|
|
|
*/
|
|
|
|
|
artDialog.confirm = function (content, yes, no) {
|
|
|
|
|
return _proxyDialog({
|
|
|
|
|
id: 'Confirm',
|
|
|
|
|
zIndex: _zIndex(),
|
|
|
|
|
icon: 'question',
|
|
|
|
|
fixed: true,
|
|
|
|
|
lock: true,
|
|
|
|
|
opacity: .1,
|
|
|
|
|
content: content,
|
|
|
|
|
ok: function (here) {
|
|
|
|
|
return yes.call(this, here);
|
|
|
|
|
},
|
|
|
|
|
cancel: function (here) {
|
|
|
|
|
return no && no.call(this, here);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 提问
|
|
|
|
|
* @param {String} 提问内容
|
|
|
|
|
* @param {Function} 回调函数. 接收参数:输入值
|
|
|
|
|
* @param {String} 默认值
|
|
|
|
|
*/
|
|
|
|
|
artDialog.prompt = function (content, yes, value) {
|
|
|
|
|
value = value || '';
|
|
|
|
|
var input;
|
|
|
|
|
|
|
|
|
|
return _proxyDialog({
|
|
|
|
|
id: 'Prompt',
|
|
|
|
|
zIndex: _zIndex(),
|
|
|
|
|
icon: 'question',
|
|
|
|
|
fixed: true,
|
|
|
|
|
lock: true,
|
|
|
|
|
opacity: .1,
|
|
|
|
|
content: [
|
|
|
|
|
'<div style="margin-bottom:5px;font-size:12px">',
|
|
|
|
|
content,
|
|
|
|
|
'</div>',
|
|
|
|
|
'<div>',
|
|
|
|
|
'<input value="',
|
|
|
|
|
value,
|
|
|
|
|
'" style="width:18em;padding:6px 4px" />',
|
|
|
|
|
'</div>'
|
|
|
|
|
].join(''),
|
|
|
|
|
init: function () {
|
|
|
|
|
input = this.DOM.content.find('input')[0];
|
|
|
|
|
input.select();
|
|
|
|
|
input.focus();
|
|
|
|
|
},
|
|
|
|
|
ok: function (here) {
|
|
|
|
|
return yes && yes.call(this, input.value, here);
|
|
|
|
|
},
|
|
|
|
|
cancel: true
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 短暂提示
|
|
|
|
|
* @param {String} 提示内容
|
|
|
|
|
* @param {Number} 显示时间 (默认1.5秒)
|
|
|
|
|
*/
|
|
|
|
|
artDialog.tips = function (content, time) {
|
|
|
|
|
return _proxyDialog({
|
|
|
|
|
id: 'Tips',
|
|
|
|
|
zIndex: _zIndex(),
|
|
|
|
|
title: false,
|
|
|
|
|
cancel: false,
|
|
|
|
|
fixed: true,
|
|
|
|
|
lock: false
|
|
|
|
|
})
|
|
|
|
|
.content('<div style="padding: 0 1em;">' + content + '</div>')
|
|
|
|
|
.time(time || 1.5);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 增强artDialog拖拽体验
|
|
|
|
|
// - 防止鼠标落入iframe导致不流畅
|
|
|
|
|
// - 对超大对话框拖动优化
|
|
|
|
|
$(function () {
|
|
|
|
|
var event = artDialog.dragEvent;
|
|
|
|
|
if (!event) return;
|
|
|
|
|
|
|
|
|
|
var $window = $(window),
|
|
|
|
|
$document = $(document),
|
|
|
|
|
positionType = 'fixed',
|
|
|
|
|
dragEvent = event.prototype,
|
|
|
|
|
mask = document.createElement('div'),
|
|
|
|
|
style = mask.style;
|
|
|
|
|
|
|
|
|
|
style.cssText = 'display:none;position:' + positionType + ';left:0;top:0;width:100%;height:100%;'
|
|
|
|
|
+ 'cursor:move;filter:alpha(opacity=0);opacity:0;background:#FFF';
|
|
|
|
|
|
|
|
|
|
document.body.appendChild(mask);
|
|
|
|
|
dragEvent._start = dragEvent.start;
|
|
|
|
|
dragEvent._end = dragEvent.end;
|
|
|
|
|
|
|
|
|
|
dragEvent.start = function () {
|
|
|
|
|
var DOM = artDialog.focus.DOM,
|
|
|
|
|
main = DOM.main[0],
|
|
|
|
|
iframe = DOM.content[0].getElementsByTagName('iframe')[0];
|
|
|
|
|
|
|
|
|
|
dragEvent._start.apply(this, arguments);
|
|
|
|
|
style.display = 'block';
|
|
|
|
|
style.zIndex = artDialog.defaults.zIndex + 3;
|
|
|
|
|
|
|
|
|
|
if (positionType === 'absolute') {
|
|
|
|
|
style.width = $window.width() + 'px';
|
|
|
|
|
style.height = $window.height() + 'px';
|
|
|
|
|
style.left = $document.scrollLeft() + 'px';
|
|
|
|
|
style.top = $document.scrollTop() + 'px';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// if (iframe && main.offsetWidth * main.offsetHeight > 307200) {
|
|
|
|
|
// main.style.visibility = 'hidden';
|
|
|
|
|
// };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
dragEvent.end = function () {
|
|
|
|
|
var dialog = artDialog.focus;
|
|
|
|
|
dragEvent._end.apply(this, arguments);
|
|
|
|
|
style.display = 'none';
|
|
|
|
|
//if (dialog) dialog.DOM.main[0].style.visibility = 'visible';
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
})(this.art || this.jQuery, this, this.artDialog);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (typeof(LNG) != 'undefined') {
|
|
|
|
|
artDialog.defaults.okVal = LNG.button_ok;
|
|
|
|
|
artDialog.defaults.cancelVal = LNG.button_cancle;
|
|
|
|
|
};
|
|
|
|
|
|