react_toast_horse
Version:
react toast 消息提示
999 lines (936 loc) • 35.4 kB
JavaScript
/**
* Activity Util
*/
var isInApp = function(){
return !!navigator.userAgent.match(/ctripwireless/i);
},
isInWechat = function(){
return !!navigator.userAgent.match(/micromessenger/i);
},
isInIOS = function() {
return !!navigator.userAgent.match(/iphone|ipad|ipod/i);
},
getEnv = function(){
//return "uat";
var host = location.host;
if (host.match(/localhost|127\.0|\.fat\d*\.qa\.nt\.ctripcorp\.com|ctriptravel\.com/i)) {
return "fat";
} else if (host.match(/\.uat\.qa\.nt\.ctripcorp\.com/i)) {
return "uat";
} else {
return "pro";
}
},
domReady = (function(){
var cache = [],
ready = false;
document.addEventListener("DOMContentLoaded", function(){
var fn;
while(fn = cache.shift()) fn();
ready = true;
});
return function(fn){
if(ready === true) fn();
else cache.push(fn);
}
})();
/**
* Ready
*/
function ready(fn, ubt, other){
setUBT.done !== true && setUBT(ubt);
other && other.captcha && setCaptcha.done !== true && setCaptcha();
other && other.hideHeader && CtripBar.app_set_navbar_hidden(true);
domReady(function(){
if(isInApp()){
LizardLite.HybridReady(fn);
}
else{
LizardLite.ready(fn);
}
});
}
/**
* 加载UBT统计
*/
function setUBT(obj){
if(setUBT.done) return;
obj = obj || {};
let val = obj.h5 || '';
if(isInApp()) val = obj.app || val;
if(isInWechat()) val = obj.wx || val;
const input = document.createElement('input');
input.type = 'hidden';
input.id = "page_id";
input.value = val;
document.body.appendChild(input);
const script = document.createElement('script');
script.src = '//webresource.c-ctrip.com/code/ubt/_mubt.min.js';
document.body.appendChild(script);
//设置已完成状态
setUBT.done = true;
}
/**
* 执行captcha
*/
var captcha = function(fn){
captcha.cache.push(fn);
}
captcha.cache = [];
/**
* 加载滑块JS
*/
function setCaptcha(){
if(setCaptcha.done) return;
var script = document.createElement('script');
script.src = '//' + {
fat: 'webresource.fws.qa.nt.ctripcorp.com',
uat: 'webresource.uat.qa.nt.ctripcorp.com',
pro: 'webresource.c-ctrip.com'
}[getEnv()] + '/ares/infosec/captcha/*/default/js/captcha.min.js';
script.onload = function(){
var fn;
while(fn = captcha.cache.shift()) fn();
captcha = function(fn){
fn();
}
}
document.head.appendChild(script);
//设置已完成状态
setCaptcha.done = true;
}
/**
* Loading浮层
*/
var loading = (function(){
var html = document.createElement('div');
html.innerHTML = [
'<div id="loading_layer">',
'<div class="loading_box">游游努力加载中</div>',
'</div>'
].join('');
var css = document.createElement('style');
css.type = 'text/css';
css.innerHTML = [
'#loading_layer{display:none;position:fixed;left:0;top:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:10000;}',
'.loading_box{position:absolute;left:50%;top:50%;margin-left:-56px;margin-top:-56px;background:#fff;width:112px;height:27px;padding-top:85px;border-radius:7px;color:#666;font-size:12px;text-align:center;}',
'.loading_box:before,.loading_box:after{content:"";position:absolute;background-size:135px;background-repeat:no-repeat;background-image:url(data:image/png;base64,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)}',
'.loading_box:before{top:20px;left:25px;width:64px;height:57px;background-position:-72px 0;}',
'.loading_box:after{top:10px;left:20px;width:69px;height:69px;background-position:0 0;-webkit-animation:loading 1s linear 0s infinite;animation:loading 1s linear 0s infinite;}',
'@-webkit-keyframes loading{0%{-webkit-transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);}}',
'@keyframes loading{0%{transform:rotate(0deg);}100%{transform:rotate(360deg);}}'
].join('');
domReady(function(){
document.head.appendChild(css);
document.body.appendChild(html);
loading.show();
});
return {
el: function(){
return document.querySelector('#loading_layer');
},
show : function(){
this.el()?this.el().style.display = 'block':null;
},
hide : function(){
this.el()?this.el().style.display = 'none':null;
}
}
})();
/**
* 打开链接
* http://crn.site.ctripcorp.com/hapi/classes/CtripUtil.html#method_app_open_url
*/
function jump(url, mode){
CtripUtil.app_open_url(url, mode||2);
}
/**
* 后退按钮逻辑
*/
function back(){
var queryObj=getQueryParams();
var from=queryObj["from"];
if(from){
var targetMode=getUrlTargetMode(decodeURIComponent(from));
jump(decodeURIComponent(from),targetMode);
return;
}
if(isInApp()){
CtripUtil.app_back_to_home();
return;
}
jump(window.location.protocol+"//m.ctrip.com/html5/");
}
/**
* 获取目标页面模式
*/
function getUrlTargetMode(url){
url =url.toLowerCase();
if(url.indexOf("ctrip://")==0){
return 1;
}
return 2;
}
/**
* 设置分享
* http://10.2.57.11/hapi/classes/CtripShare.html
*/
var appShare = function(){};
function setShare(shareData, success, failure){
if(isInApp()){
LizardLite.HybridReady(function(){
var nav_json = {
"right": [{"tagname": "share"}]
}
window.app = {
callback: function(obj) {
var tagname = obj.tagname;
if(tagname === 'share'){
(appShare = function(){
CtripShare.wrap_call_default_share(shareData.icon, shareData.title, shareData.desc, shareData.href);
})();
}
if(tagname === 'call_custom_share'){
if(!obj.error_code){
success && success();
}else{
obj.error_code.match(/-20[12]/) && failure && failure();
}
}
}
};
var json_str = JSON.stringify(nav_json);
CtripBar.app_refresh_nav_bar(json_str);
});
}
if(isInWechat()){
//微信调用的分享方法
LizardLite.weixinReady(function(cShell){
if(!cShell){
console.log("调用微信失败!");
return;
}
cShell.share(shareData).done(function(){
success && success();
}).fail(function (err) {
failure && failure();
});
});
}
}
/*
* APP分享
*/
function setShareInApp(shareData){
if(!isInApp()){
return;
}
LizardLite.HybridReady(function(){
//调用分享API
CtripShare.wrap_call_default_share(shareData.icon, shareData.title, shareData.desc, shareData.href);
});
}
/*
* 微信分享
*/
function setShareInWeChat(shareData, success, failure){
if(!isInWechat()){
return;
}
//微信调用的分享方法
LizardLite.weixinReady(function(cShell){
if(!cShell){
console.log("调用微信失败!");
return;
}
cShell.share(shareData).done(function(){
success && success();
}).fail(function (err) {
failure && failure();
});
});
}
/**
* 设置Hybrid标题
* 默认值document.title
*/
var setTitle = function(title){
//设置Hybrid标题
if(isInApp()){
LizardLite.HybridReady(function(){
var nav_json = {
"center": [{"tagname": "title", "value": title || document.title}]
}
var json_str = JSON.stringify(nav_json);
CtripBar.app_refresh_nav_bar(json_str);
});
}
}
/**
* 获取微信wx对象
*/
function weixinGlobal(success, failure){
if(isInWechat()){
//微信调用的分享方法
LizardLite.weixinReady(function(cShell){
cShell.weiXinGlobal().done(function(wx){
success && success(wx);
}).fail(function(err){
failure && failure();
});
});
}
}
/**
* 判断是否登录
*/
function isLogin(){
return !!LizardLite.UserStore.isLogin();
}
/**
* 登录回调
*/
function login(callback){
LizardLite.Member.isLogin(function(isLogin){
if(isLogin){
callback && callback();
}else{
LizardLite.Member.memberLogin({
param: 'from='+encodeURIComponent(location.href)
});
}
});
}
/**
* SOA2接口
*
* @portID 服务ID
* @envionment 主动选择请求环境 fat、uat、pro
* @fatDonotNeedSubEnv fat环境是否需要添加环境变量
*/
function Model(portID, envionment, fatDonotNeedSubEnv) {
var domain = {
fat: "gateway.m.fws.qa.nt.ctripcorp.com",
uat: "gateway.m.uat.qa.ctripcorp.com",
pro: "m.ctrip.com"
},
env = envionment || getEnv();
return function(apiStr, params, success, failure, spinner){
if (typeof spinner == 'undefined') spinner = true;
spinner && loading.show();
var model = LizardLite.Model({
url: location.protocol+'//'+domain[env]+'/restapi/soa2/'+portID+'/json/'+apiStr+(env=='fat' && !fatDonotNeedSubEnv ?"?subEnv=fws":""),
param: params
});
model.execute(function(data){
spinner && loading.hide();
success.call(this, data);
}, function(e){
spinner && loading.hide();
failure.call(this, e);
});
}
}
/**
* 获取业绩统计参数
*/
function getAlliance() {
var getCookie = function (k, r, n) {
var i = new RegExp("(^| )" + k + "=([^;]*)(;|$)"),
a = document.cookie.match(i);
return a ? n ? f.decode(a[2]) : a[2] : r || ""
};
var getCookieObj = function (t, e) {
var r, n = { __k: t }, i = [], a = getCookie(t, "", e);
if (a) {
i = a.split("&") || [];
for (var o = 0; o < i.length; o++) r = i[o].split("="), r.length > 1 && (n[r[0]] = r[1])
}
return n;
};
var n = getCookieObj("Union") || {};
return {
pushcode: getQuery("pushcode"),
aid: n.AllianceID || 0,
sid: n.SID || 0,
ouid: n.OUID || ""
};
}
/**
* 获取VID
*/
function getVID() {
var _bfa = document.cookie.match(/_bfa=([^;]*);/);
if (!!_bfa && _bfa.length >= 2) {
return _bfa[1];
} else {
return '';
}
}
/**
* 文本转base64
* 唤醒App使用
*/
function base64() {
// private property
var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
var encode = function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;
};
// public method for decoding
var decode = function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = _keyStr.indexOf(input.charAt(i++));
enc2 = _keyStr.indexOf(input.charAt(i++));
enc3 = _keyStr.indexOf(input.charAt(i++));
enc4 = _keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = _utf8_decode(output);
return output;
};
// private method for UTF-8 encoding
function _utf8_encode(string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
// private method for UTF-8 decoding
function _utf8_decode(utftext) {
var string = "";
var i = 0;
var c = 0, c1 = 0, c2 = 0, c3 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
return {
encode: encode,
decode: decode
}
}
/**
* 唤醒App方法
*/
var activateApp = (function(){
/*
//标准唤醒方法
var wakeupApp = function(url, isDownload, callback) {
url = url || 'ctrip://wireless';
//非ctrip协议地址,转换为ctrip协议直连地址
if(url.substr(0, 8) !== "ctrip://"){
url = "ctrip://wireless/h5?url=" + base64().encode(url) + "&type=2";
}
isDownload = typeof isDownload !== 'undefined' ? isDownload : false;
callback = callback || function () {};
//延时唤醒App
if (isInWechat()) {
//微信唤醒
typeof Mkt.Weixin.wxLanuch3rd === 'function' && Mkt.Weixin.wxLanuch3rd({
schema: url,
isdown: isDownload,
callback: function () {
callback();
}
});
} else {
//H5唤醒
if (typeof window["__wakeup"] === "undefined") {
window["__wakeup"] = [];
}
window["__wakeup"].push({
'url': url, //http协议
'isdown': isDownload, //唤醒失败是否需要下载,true需要下载。false不下载
'backurl': url, //ctrip协议
'waking': function () {
callback();
}
});
}
}
//提前使用唤醒方法
//方法可用时自动执行
var cache = [],
ready = false;
if(isInWechat()){
var timeid = setInterval(function(){
if (typeof Mkt !== 'undefined' && Mkt.Weixin) {
clearInterval(timeid);
var args;
while(args = cache.shift())
wakeupApp.apply(null, args);
ready = true;
}
}, 250);
}else{
ready = true;
}
return function(){
if(ready) wakeupApp.apply(null, arguments);
else cache.push(arguments);
}
*/
});
/**
* 格式化日期
* 转化SOA2的特殊日期格式类型
*/
function formatDate(data){
return JSON.parse(
JSON.stringify(data).replace(/\/Date\(\-?(\d+)(?:\-|\+)(?:\d+)\)\//g, function () {
return new Date(Number(arguments[1])+8*3600*1000).
toISOString().replace(/^(.*)T(.*)\.\d+Z$/,'$1 $2');
})
)
}
/**
* 取URL参数
*/
function getQuery(name) {
var reg = new RegExp("(?:^|&)"+ name +"=([^&]*)(?:&|$)"),
ret = location.search.substr(1).match(reg);
if(ret) return unescape(ret[1]);
return '';
}
/**
* 取URL路由
*/
function getRoute(){
var ret = location.pathname.slice(1).split('/');
if(ret.length > 3) return ret[3];
return '';
}
/**
* 事件订阅及触发
* 用于React组件通讯
*/
var eventEmitter = {
list: {},
on: function(key,listener){
if (!this.list[key]) this.list[key] = [];
if (Object.keys(this.list).indexOf(listener) == -1 && typeof listener == 'function')
this.list[key].push(listener);
return this;
},
trigger: function(key){
if (!this.list[key]) return;
var args = Array.prototype.slice.call(arguments, 1) || [];
var listeners = this.list[key];
for(var i = 0, item; item = listeners[i++];){
item.apply(this,args);
}
return this;
},
off: function(key,listener){
if (!key && !listener) return;
if (key && !listener) delete this.list[key];
if (key && listener) {
var listeners = this.list[key];
var index = listeners.indexOf(listener);
index > -1 && listeners.splice(index, 1);
}
return this;
}
}
/**
* 初始化设置
*/
//设置app标题
setTitle();
/**
* 定位服务
*/
var locationServer={
//callback, error, posCallback, posError, isAccurate, cityCallBack, cityErrorCallBack,isForceLocate,needBaidu
//使用方法如参数所示,默认返回都是高德坐标,needBaidu为true时,会转成百度坐标返回
requestCityInfo :function(params){
var callback=params.callback;
var error=params.error;
var posCallback=params.posCallback;
var posError=params.posError;
var isAccurate=params.isAccurate; //精确定位
var cityCallBack=params.cityCallBack;
var cityErrorCallBack=params.cityErrorCallBack;
var isForceLocate=params.isForceLocate;
var needBaidu=params.needBaidu;
if(callback && typeof callback !="function"){
console.log("callback is not a function in requestCityInfo");
return;
}
if(error &&typeof error !="function"){
console.log("error is not a function in requestCityInfo");
return;
}
if(posCallback &&typeof posCallback !="function"){
console.log("posCallback is not a function in requestCityInfo");
return;
}
if(cityCallBack &&typeof cityCallBack !="function"){
console.log("cityCallBack is not a function in requestCityInfo");
return;
}
if(cityErrorCallBack &&typeof cityErrorCallBack !="function"){
console.log("cityErrorCallBack is not a function in requestCityInfo");
return;
}
if(isAccurate!==false){
isAccurate=true;
}
if(isForceLocate!==false){
isForceLocate=true;
}
if(needBaidu!==true){
needBaidu=false;
}
alert(LizardLite.requestCityInfo);
LizardLite.requestCityInfo (callback, error, posCallback, posError, isAccurate, cityCallBack, cityErrorCallBack,isForceLocate,needBaidu);
},
requestCityInfo2:function(params){
var callback=params.callback;
if(callback && typeof callback !="function"){
console.log("callback is not a function in requestCityInfo");
return;
}
LizardLite.requestCityInfo (callback);
},
requestGeographic:function (params){
if(!params){
return;
}
var onSuccess=params.onSuccess;
var onError=params.onError;
var timeOut=20000; //超时
if(typeof onSuccess !="function"){
console.log(" onSuccess is not a function in requestGeographic");
return;
}
if(typeof onError !="function"){
console.log(" onError is not a function in requestGeographic");
return;
}
if(params.timeOut>0){
timeOut=params.timeOut;
}
LizardLite.requestGeographic(onSuccess,onError,timeOut);
}
};
function getQueryParams() {
var paramListObj={};
var list=window.location.href.split('?');
if(list.length>1){
var paramList=list[1].split('&');
for (var i = 0; i < paramList.length; i++) {
var key = paramList[i].split("=")[0];
var value = paramList[i].split("=")[1];
paramListObj[key]=value;
};
}
return paramListObj;
}
var pubsub = {
topics : {},
subUid : -1,
//发布消息
publish:function(topic, args) {
if(!this.topics[topic]) {return;}
var subs = this.topics[topic],
len = subs.length;
while(len--) {
subs[len].func(topic, args);
}
return this;
},
//订阅事件
subscribe:function(topic, func) {
this.topics[topic] = this.topics[topic] ? this.topics[topic] : [];
var token = (++this.subUid).toString();
this.topics[topic].push({
token : token,
func : func
});
return token;
},
//取消订阅
off:function(msgname,token){
for(var name in this.topics ){
var msgObj=this.topics[name];
for(var i=0;i<msgObj.length;i++){
if(msgObj[i].token==token){
msgObj.splice(i,1);
break;
}
}
}
}
};
function isArray(object){
return object && typeof object==='object' &&
Array == object.constructor;
}
var localStorage={
set:function(key,value){
if(typeof value=="object"){
value=JSON.stringify(value);
}
window.localStorage.setItem(key,value);
},
get:function(key){
try{
return JSON.parse(window.localStorage.getItem(key));
}
catch(ex){
console.log(ex);
return window.localStorage.getItem(key);
}
},
remove:function(key){
window.localStorage.removeItem(key);
},
clear:function(){
window.localStorage.clear();
}
};
var cookieStorage = {
//写cookies
set: function(name, value, time) {
if(typeof value=="object"){
value=JSON.stringify(value);
}
var strsec = this.getsec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec * 1);
document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
},
//读取cookies
get: function(name) {
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
var isExist=false;
if (document.cookie.match(reg)) {
arr=document.cookie.match(reg);
isExist=true;
}
if(!isExist){
return null;
}
try {
return JSON.parse(unescape(arr[2]));
} catch (e) {
return unescape(arr[2]);
}
return null;
},
//删除cookies
remove: function (name,domain,path) {
var exp = new Date();
exp.setTime(exp.getTime() - 1000 * 60 * 60 * 24 * 365);
var cval = this.getCookie(name);
if (cval != null) {
if(Horse.validate.isNull(path)){
path="/";
}
if(Horse.validate.isNull(domain)){
document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
return;
}
document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString() + ";domain=" + domain + ";path=" + path;
}
},
getsec: function(str) {
var str1 = str.substring(1, str.length) * 1;
var str2 = str.substring(0, 1);
if (str2 == "s") {
return str1 * 1000;
}
if (str2 == "h") {
return str1 * 60 * 60 * 1000;
}
if (str2 == "d") {
return str1 * 24 * 60 * 60 * 1000;
}
}
};
var touchEvent = function(params) {
var el = params.el;
var isPreventDefault=params.isPreventDefault;
var touchLeft = params.touchLeft;
var touchRight = params.touchRight;
var touchBottom = params.touchBottom;
var touchTop = params.touchTop;
var startx;
var starty;
var endx;
var endy;
function cons() {
var l = Math.abs(startx - endx);
var h = Math.abs(starty - endy);
if (l > h) {
if (startx > endx) {
touchLeft && typeof touchLeft == "function" && touchLeft();
} else {
touchRight && typeof touchRight == "function" && touchRight();
}
} else {
if (starty > endy) {
touchTop && typeof touchTop == "function" && touchTop();
} else {
touchBottom && typeof touchBottom == "function" && touchBottom();
}
}
}
el.addEventListener('touchstart', function (e) {
if(isPreventDefault){
e.preventDefault();
}
var touch = e.changedTouches;
startx = touch[0].clientX;
starty = touch[0].clientY;
});
el.addEventListener('touchend', function (e) {
var touch = e.changedTouches;
endx = touch[0].clientX;
endy = touch[0].clientY;
cons();
});
};
//滚动条在Y轴上的滚动距离
function getScrollTop(){
var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0;
if(document.body){
bodyScrollTop = document.body.scrollTop;
}
if(document.documentElement){
documentScrollTop = document.documentElement.scrollTop;
}
scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
return scrollTop;
};
//文档的总高度
function getScrollHeight(){
var scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0;
if(document.body){
bodyScrollHeight = document.body.scrollHeight;
}
if(document.documentElement){
documentScrollHeight = document.documentElement.scrollHeight;
}
scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;
return scrollHeight;
};
//浏览器视口的高度
function getWindowHeight(){
var windowHeight = 0;
if(document.compatMode == "CSS1Compat"){
windowHeight = document.documentElement.clientHeight;
}else{
windowHeight = document.body.clientHeight;
}
return windowHeight;
};
module.exports = {
isInApp : isInApp,
isInWechat : isInWechat,
isInIOS : isInIOS,
getEnv : getEnv,
domReady : domReady,
ready : ready,
captcha : function(){captcha.apply(null, arguments)},
showLoading : function(){loading.show()},
hideLoading : function(){loading.hide()},
jump : function(){jump.apply(null, arguments)},
back : back,
setShare : setShare,
appShare : appShare,
setShareInApp:setShareInApp,
setShareInWeChat:setShareInWeChat,
setTitle : setTitle,
weixinGlobal : weixinGlobal,
isLogin : isLogin,
login : login,
Model : Model,
getAlliance : getAlliance,
getVID : getVID,
base64 : base64,
activateApp : activateApp,
formatDate : formatDate,
getQuery : getQuery,
getRoute : getRoute,
list : eventEmitter.list,
on : eventEmitter.on,
trigger : eventEmitter.trigger,
off : eventEmitter.off,
requestGeographic:locationServer.requestGeographic,
requestCityInfo:locationServer.requestCityInfo,
requestCityInfo2:locationServer.requestCityInfo2,
getQueryParams:getQueryParams,
pubsub : pubsub,
isArray : isArray,
localStorage : localStorage,
cookieStorage: cookieStorage,
touchEvent : touchEvent,
getScrollTop : getScrollTop,
getScrollHeight:getScrollHeight,
getWindowHeight:getWindowHeight
};