landers.dialog
Version:
landers.dialog
251 lines (233 loc) • 11.3 kB
JavaScript
Landers.css.add([
'.art-dialog-lockmask{-webkit-filter: blur(3px); -moz-filter: blur(3px); -ms-filter: blur(3px); filter: blur(3px); filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=3, MakeShadow=false); }',
'.art-dialog {width: 100%; height: 100%; vertical-align: top; overflow: hidden; position: relative; }',
'.art-dialog table {width: 100%; }',
'.aui_bottom {position:absolute; bottom:49px; height:40px; left:0px; right:0px; background-color:#efefef; border-top:1px solid #e1e1e1}',
'.aui_bottom .pagination {margin:3px 5px 0px 0px}',
'.aui_bottom .pageinfo {margin:10px 0px 0px 5px}'
]);
!function (window, $) {
window.Landers = window.Landers || {};
Landers.dialog = Landers.dialog || {
mod_complete:true,
background:'#000000', opacity:0.2,
blur:true,
data:{},
loadmod:function(skin, callback){
if (window.art) return callback && callback();
var mods = ['landers.dialog,skins/' + (skin || 'ulan') + '.css'];
if (!Landers.loader) {
throw 'plesse load landers.loader!';
}
Landers.loader.jsm(mods, function(){
setTimeout(callback, 200);
}, {loading:true});
},
get:function(id){
return art.dialog.list[id];
},
tip:function(msg,time){
return art.dialog.tips(msg,time);
},
show:function(opts){
var me = this;
/*解析参数 opts={id:s,title:s,loadhtml:s,html:s,url:s,width:n,height:n,min:bool
onload:fn, onclose:fn, yes:fun, no:fun, tplkey:string }*/
opts = opts || {}; var txt1 = '确定', txt2 = '关闭', me = this;
if (opts.left === undefined) opts.left = '50%';
if (opts.top === undefined) opts.top = '30%';
if (opts.height === undefined) opts.height = 'auto';
opts.scroll = opts.scroll || false;
opts.padding = opts.padding || 0;
opts.resize = opts.resize || false;
if (opts.fixed === undefined) opts.fixed = true;
if (opts.effect === undefined || opts.effect === true ) opts.effect = 'fade2';
if ($.isNumeric(opts.padding)) opts.padding = opts.padding + 'px ' + opts.padding + 'px';
if (typeof opts.yes == 'function') opts.yes = {text:txt1, fn:opts.yes};
if (typeof opts.yes == 'string') opts.yes = {text:opts.yes, fn:true};
if (typeof opts.no == 'function' || typeof opts.no == 'boolean') opts.no = {text:txt2, fn:opts.no};
if (typeof opts.no == 'string') opts.no = {text:opts.no, fn:true};
opts.ok = opts.yesFn = opts.yesFn || (opts.yes ? opts.yes.fn : null);
opts.okVal = opts.yesText = opts.yesText || (opts.yes ? opts.yes.text || txt1 : txt1);
opts.cancel = opts.noFn = opts.noFn || (opts.no ? opts.no.fn : null);
opts.cancelVal = opts.noText = opts.noText || (opts.no ? opts.no.text || txt2 : txt2);
opts.init = opts.initFn = function(){
var dlg = this, config = dlg.config, $dlg = dlg.getContent();
$dlg.addClass('art_dialog art-dialog').scroll(function(e){
e.stopPropagation();
e.preventDefault();
return false;
});
dlg.status('free');
if (config.show === false) dlg.unlock();
if (config.effect && !config.url) dlg.transition(config.effect).show();
if (config.loading) dlg.loading(config.loading);
//Firefox 63.0.1(64位) windows,执行trigger时报 Error:Permission denied to access property "apply", 故改用 triggerHandler
dlg.getOuter().unbind('click').click(function(){dlg.zIndex()}).triggerHandler('click');
if (config.scroll) dlg.scroll();
if (config.min && dlg.minimize) dlg.minimize();
if (config.noclose) dlg.noclose();
if (config.angular) {
var angular_compile = function(){
var scope = config.angular.scope;
var tpl1 = $dlg.html();
if ( tpl1 ) {
var ele1 = config.angular.compile(tpl1)(scope);
angular.element($dlg).empty().append(ele1);
}
var $statusbar = dlg.statusBar();
var tpl2 = $statusbar.html();
if ( tpl2 ) {
var ele2 = config.angular.compile(tpl2)(scope);
angular.element($statusbar).empty().append(ele2);
} else {
$statusbar.remove();
}
var $bottombar = dlg.bottomBar();
var tpl3 = $bottombar.html();
if ( tpl3 ) {
var ele3 = config.angular.compile(tpl3)(scope);
angular.element($bottombar).empty().append(ele3);
} else {
$bottombar.remove();
}
if (!scope.$$phase) scope.$apply();
}
if (!config.angular.timeout) angular_compile();
else config.angular.timeout(angular_compile);
};
config.onload && config.onload.call(dlg);
};
if (opts.lock !== false) {
opts.lock = true;
opts.background = opts.background || me.background;
opts.opacity = opts.opacity || me.opacity;
};
if (opts.follow) opts.fixed = false;
if (opts.noclose) opts.esc = false;
if (opts.min) opts.title += ' ';
opts.close = opts.closeFn = function(){
var ret, dlg = this, status = dlg.getStatus(), config = dlg.config;
switch (status) {
case 'free' :
if ( config.onclose === undefined ||
config.onclose.call(dlg) !== false
)
{
var effect = config.effect;
if (effect) {
dlg.transition(config.effect).hide();
ret = false;
} else {
dlg.status('closing');
ret = true;
}
} else {
ret = false;
};
break;
case 'closing' :
ret = true;
break;
case 'busy' :; default:
var msg = (config.busytext || '系统繁忙...!'); // + '(' + status + ')';
ret = confirm(msg + '是否强制关闭窗口?' + '\n提示:强制关闭窗口可能导致当前窗口内的数据丢失或其它意外情况。');
if (ret) {
dlg.status('free');
return arguments.callee.call(dlg);
}
break;
};
if (ret) dlg.status('closed');
if (config.scroll) {
if ($.fn.mCustomScrollbar) {
dlg.getContent().mCustomScrollbar('destroy');
}
}
delete me.data[dlg.md5_id];
return ret;
};
if (!opts.content){
if (opts.tplkey) {
var tplid1 = 'dlg_' + opts.tplkey;
var tplid2 = 'dialog-' + opts.tplkey;
if ($('#' + tplid1).length) {
opts.content = $('#' + tplid1).html();
} else if ($('#' + tplid2).length) {
opts.content = $('#' + tplid2).html();
} else {
opts.content = '';
}
} else if (opts.html){
if (typeof opts.html == 'string'){
opts.content = opts.html;
} else if (opts.html !== null && typeof opts.html == 'object'){
if (opts.html instanceof jQuery) {
opts.html = opts.html.get(0);
}
opts.content = opts.html.outerHTML;
}
} else {
opts.content = '';
};
};
var dlg;
if (opts.url) {
dlg = art.dialog.open(opts.url, opts);
} else {
dlg = art.dialog(opts);
}
// 直到浏览器bug修复后,才可开启
// if (me.blur && opts.blur !== false) {
// var not = '.aui_state_lock, .aui_state_focus, .iresponse, script, link';
// dlg.getLockMask().siblings().not(not).children().addClass('art_dialog-lockmask art-dialog-lockmask');
// }
var $statusbar = dlg.statusBar().empty();
if ( opts.statusbar ) {
$statusbar.append(opts.statusbar);
} else {
$statusbar.remove();
}
var $bottombar = dlg.bottomBar().empty();
if (opts.bottombar) {
dlg.getContent().css('padding-bottom', '42px');
$bottombar.append(opts.bottombar);
} else {
dlg.getContent().css('padding-bottom', '0px');
$bottombar.remove();
}
opts.callback && opts.callback.call(dlg);
dlg.md5_id = (new Date()).getTime().toString();
this.data[dlg.md5_id] = dlg;
dlg.getContent().parent().on('mousewheel DOMMouseScroll', function(event){
if (event.preventDefault) event.preventDefault();
// 判断默认行为是否已经被禁用
if (event.cancelable && !event.defaultPrevented) {
event.preventDefault();
}
event.returnValue = false; //禁止页面滚动
return false;
});
return dlg;
},
clear:function(){
for (var md5_id in this.data) {
var dlg = this.data[md5_id];
try {
dlg.close();
delete this.data[md5_id];
} catch(e){
//无需操作
// console.log(md5_id);
};
}
},
transition:function(dlgout, dlgin, callback, effect) {
var $out = dlgout.getWraper();
var $in = dlgin.getWraper().hide();
Landers.animate.transitive($out, effect, $in, effect, function(){
dlgin.show().position(); callback && callback();
}, false);
}
};
}(window, jQuery);