UNPKG

landers.base

Version:

landers.base

208 lines (192 loc) 11 kB
; (function (window, $, Landers) { Landers = Landers || {}; var classname = 'landers-response'; var sizes = { big: {width:120, height:120, icon_size:90, text_size: 18, text_bottom: 10}, small: {width:70, height:70, icon_size:54, text_size: 12, text_bottom: 4}, 'long': {width:200, height:75, icon_size:54, text_size: 13, text_bottom: 7}, xlong: {width:300, height:75, icon_size:54, text_size: 13, text_bottom: 7} }; Landers.response = { mod_complete:false, init_mod:function(){ var that = this; if (that.mod_complete) return; var sizeK = Landers.utils.isMobile() ? 1 : 1; for (var i in sizes) { for (var j in sizes[i]) { sizes[i][j] *= sizeK; } }; Landers.css.add('.' + classname + '{position:fixed; overflow:hidden; z-index:5001;}'); Landers.css.add('.' + classname + '.absolute{position:absolute; overflow:hidden;}'); Landers.css.add('.' + classname + ' .response-mask{background-color:#000000; filter:alpha(opacity=70);opacity:0.7; width:100%; height:100%;border-radius:10px;}'); Landers.css.add('.' + classname + ' .response-main{width:100%; height:100%; left:0px; top:0px; position:absolute; padding:0px}'); Landers.css.add('.' + classname + ' .response-main .text{position:absolute; width:100%; left:0px; bottom:; text-align:center; color:#FFFFFF; font-family:"Microsoft Yahei"; font-size:18px; line-height:150%; letter-spacing:0px; padding:0px; float:none;}'); Landers.css.add('.' + classname + ' .response-main .icon{position:relative; margin:0 auto; }'); Landers.css.add('.' + classname + ' .response-main .icon.alone{position:absolute; left:50%; top:50%;}'); Landers.css.add('.' + classname + ' .response-main .icon.success{background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAHGSURBVFiF5Zc9L0RBFIbfKwpZQRRCKUGBWqUQShKR1RCJTiNRoBGikKg1Ko3GV8Iv2FKhWFtQ+Ej8ABRINCSER2E2ubFm5t7de23hJJPczDtn3ufMnju7GwCqZtRU1f0/AhQkYcbJXwJkJOUkdYXmeiTlBKQ92oEdLJG2eSewbTMHCFJ8DeskbUmatuifkl7T7IFNSaMO/UHSQFpHvwF8Ok7+BhgDlLRxC7Di+syBS2CimJOkeT2w5DF/AsbDeUkCLAL3HoBJoCGcVxtqijlJveb5RtJGjIZbkDQvqdWif0ialXRQohiSKeAlRPpu5gJP1YFZ9+6o+hZYtu1RfLDFGJCxJGeM7opHYNVVhA/gDhixJA8b3RVrQHMlAADnQPZHYhY48+StA20u8zDAFvDm2OwamAmNK8faD7Ofr39KXsNt4NlTlS+egd0oxr8BNAGHFQIcmX3KAhDQDeyVab5v8mNdYL9NdhD/JA75/u6PfYPahEaggPuCwegFsz62uQsg4PuiufAAXJh1kTo+DkBx9AGnFvOC0csyjgogYBA4/mF+DAxVah4VoHgSeWOeT6LyuAAC+g1Af1LmgNL8VRwp/t1/w5L4AvrA0tNR4xPOAAAAAElFTkSuQmCC) no-repeat center 40%;background-size:60% 60%;}'); Landers.css.add('.' + classname + ' .response-main .icon.error{background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALUSURBVHja1Jm9SxxBGIfX7e4ggWv2ao8LHFcFrhCra0ISjoNtEkhz2B2xC/dXpBHLuFYiwkHSGAThSJNKCGzAyohGrM9CENF0Xn4T3pFxMrPzsWvivvA0c7OzjzM773w4N5vNAo9ogQXwFLTBPKiDR0KdSzAFp+AA7INv4ND1ZXMOkhUQgx54ASKPP+4MTMAu+Ax+WT3FJC14BbZnxcY2tWt8v6knm2AZvAVVxe+HNIT7NKSnNMR1+gTa9Eks0CcixzVYAx/AT5+e7IIdRQ9cgzEYgMhyJCKqP6bn5dih9ymf1zX6EuwpGvsEYksxHTG1I8cevddKsqsQPAYjUM0pyKlSe8cK0a5JsqkY4q+gX5CcTJ/al4e+mSW5ohBcvCdBzqJCdEUnydLBlTTE/XsWFHtUHPorMT3xShVFHhz9I0HOSJFHK6LkG8UsNk2ShodIzTCZ5FnPvIKQ0mVPSJ1sqdqiRKuLBKSg47Aksron9GygSexb0lLZ48m8BaaC/djQG4lQ9xx0LHqwQ3V5JBl1x0I95tUKackSNwu7Fj3Cowa+GHr0GdWpSW3UNPXF90d//GC6Kpj/sFjq2HeVSt+OrkeHipUlNXybEXnwWGWFE6Fgw2ECmER9BDkbwjMTVnAkFLxznKk60TyCAXnwOGIFF0LBc4+UohLNIxiQB48LVnAjFDzxzH1pxubWVTAgDx43suRjz9WCSZwUJBiQx61kKE3/euAXr0FDUd6gFOQadzxCOtXxmPdocJixirBc+JHquITocRnSmYRHuwDBdfBdsYy6iIoeU988qcuDiWEyDS3b/itPuq44JsEgp6hyxVmSGhkUIJhHdCDVXfLZBZ1bCmaJpi67IP7DpnSuji23XYlHws/KnbF0Lt/MszNnou89En6SIajdmZfqjFOK02Jpzt2lucEoxV1QaW7VHtz9ZOlvektzZ/4g/vvgIvnf/o/zW4ABACoGPR3pRRjzAAAAAElFTkSuQmCC) no-repeat center 40%;background-size:65% 65%;}'); this.mod_complete = true; }, create:function(size, $wrap, opts){ var that = this, html = ''; opts = opts || {}; size = sizes[size]; that.init_mod(); that.hide($wrap); html += '<div class="' + classname + '">'; html += ' <div class="response-mask"></div>'; html += ' <div class="response-main">'; html += ' <div class="icon"></div>'; html += ' <div class="text"></div>'; html += ' </div>'; html += '</div>'; var $o = $(html).boxsize(size).appendTo($wrap).setCenter().hide(); if ( !$o.closest('.art_dialog').length ) { $o.css('top', '35%'); } $o.find('.text').css({ 'font-size': size.text_size + 'px', 'bottom': size.text_bottom + 'px' }); $o.find('.icon').width(size.icon_size).height(size.icon_size); if ($wrap.tag() != 'body') { $o.addClass('absolute'); var top = Math.abs( ($wrap.outerHeight()- $o.height())/2 ); top += $wrap.get(0).scrollTop - parseInt($o.css('margin-top')); $o.css('top', top ); }; var effect = opts.effect || 'default'; if (effect == 'random') effect = Landers.animate.random(); Landers.animate.show($o, effect); return $o; //return $o.fadeIn(600); }, _parse:function(args){ var ret = Landers.helpers.parse_args(args, { 'number' : 'delay', 'jobject': 'wrap', 'array' : 'data', 'json' : 'data', 'string' : 'size', 'function': 'callback', }); ret.wrap = ret.wrap || $('body'); return ret; }, success:function(text, delay){ this.show([0, text], delay); }, error:function(text, delay){ this.show([10, text], delay); }, msgbox:function(rspn, delay, $wrap) { this.show(rspn, delay, $wrap); }, show:function(){ var that = this, opts; var args = arguments; if (args.length == 1) { if (Landers.utils.is_json(args[0])) { opts = args[0]; } else { opts = that._parse(args[0]); } } else { opts = that._parse(args); }; var data = opts.data; var $wrap = opts.wrap; var callback = opts.callback; if (!data) return that.hide($wrap, 500, callback); if (Landers.utils.is_array(data)) { var is_error = data[0], text = data[1]; } else { var is_error = !data.success, text = data.message; if (!text && data.errors) { text = []; for (var k in data.errors) { var t = data.errors[k][0] ? data.errors[k][0] : data.errors[k]; text.push(t); } if (text.length > 1) { text = text.map(function(item, i){ return (i+1) + '. ' + item; }); } text = text.join('\n'); } }; if (!text) return that.hide($wrap, 500, callback); //text为空为未定义 var len = Landers.utils.str.len(text); if ( len >= 42 || text.indexOf('\n') >= 0) { that.hide($wrap, 500, callback); return Landers.msgbox({ succes: false, message : text }); }; if ( len >= 18) opts.size = 'xlong'; var delay = opts.delay || (opts.delay !== false ? 3000 : 0); var icon = is_error ? 'error' : 'success'; var size = opts.size || 'long'; var $o = that.create(size, $wrap, opts); $o.find('.text').html(text); $o.find('.icon').addClass(icon); if (delay >= 0) that.hide($wrap, delay, callback); }, loading:function(){ var args = Landers.helpers.parse_args(arguments, { 'json' : 'opts', 'function' : 'callback' }); var opts = args.opts || {}; var callback = args.callback || opts.callback; var that = this, theme = opts.theme || 'ispin', size = opts.size || 'small'; var sizeK = Landers.utils.is_mobile() ? 1 : 1; var $wrap = opts.wrap || $('body'), defaults = {lines: 12, shadow: true, speed: 1, trail: 40, hwaccel: true, color: '#fff', reshow: true}, themes = { ispin: { big: {width: 4 * sizeK, length: 12 * sizeK, radius: 13 * sizeK}, small: {width: 2 * sizeK, length: 7 * sizeK, radius: 7.5 * sizeK}, 'long':{width: 2 * sizeK, length: 6 * sizeK, radius: 7.5 * sizeK}, xlong:{width: 2 * sizeK, length: 6 * sizeK, radius: 7.5 * sizeK} } }; delete opts.theme; delete opts.size; delete opts.wrap; delete opts.callback; opts = $.extend(defaults, themes[theme][size], opts); $wrap.data('options', opts); if (opts.text === true) opts.text = 'LOADING'; setTimeout(function(){ var $o = that.create(size, $wrap, opts); $wrap.overlay('show', {opacity: ~~opts.bgopacity, bgcolor:opts.bgcolor}); var $icon = $o.find('.icon').showSpin(opts); if (opts.text) $o.find('.text').html(opts.text); else $icon.addClass('alone').setCenter(); callback && callback(function() { var opts = that._parse(arguments); opts.size = opts.size || 'long'; opts.wrap = $wrap; that.show(opts); }); }, opts.delay || 200); }, hide: function() { var that = this; if (!that.mod_complete) that.init_mod(); var opts = that._parse(arguments); var $o = opts.wrap.overlay('hide').children('.' + classname); try {$o.find('.icon').data().stop();} catch(e){}; var _ = function(){ Landers.animate.hide($o, 'default', function(){ $o.remove(); opts.callback && opts.callback(); }); }; if (opts.delay) setTimeout(_, opts.delay); else _(); return that; } }; })(this, jQuery, Landers);