UNPKG

landers.dialog

Version:

landers.dialog

251 lines (233 loc) 11.3 kB
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);