landers.base
Version:
landers.base
208 lines (192 loc) • 11 kB
JavaScript
; (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);