zoomla
Version:
16年专业研发|中文alexa排名第一的CMS品牌-基于dotNET core、功能强大,集成站群、微信开发、小程序与ERP及OA办公系统,支持国际语言和多民族语言,世界五百强与大型门户专用高端网站内核CMS系统
841 lines (831 loc) • 28.6 kB
JavaScript
angular.module('starter.services', [])
.factory('Chats', function() {
// Might use a resource here that returns a JSON array
// Some fake testing data
var chats = [{
id: 0,
name: 'Ben Sparrow',
lastText: 'You on your way?',
face: 'img/ben.png'
}, {
id: 1,
name: 'Max Lynx',
lastText: 'Hey, it\'s me',
face: 'img/max.png'
}, {
id: 2,
name: 'Adam Bradleyson',
lastText: 'I should buy a boat',
face: 'img/adam.jpg'
}, {
id: 3,
name: 'Perry Governor',
lastText: 'Look at my mukluks!',
face: 'img/perry.png'
}, {
id: 4,
name: 'Mike Harrington',
lastText: 'This is wicked good ice cream.',
face: 'img/mike.png'
}];
return {
all: function() {
return chats;
},
remove: function(chat) {
chats.splice(chats.indexOf(chat), 1);
},
get: function(chatId) {
for (var i = 0; i < chats.length; i++) {
if (chats[i].id === parseInt(chatId)) {
return chats[i];
}
}
return null;
}
};
})
.factory('NodeInfo', function () {
return {
Name: function (nid, callback) {
var opts = {
action: 'GetCustom',
key: '',
alias: 'nodeinfo',
psize: 1,
cpage: 1,
nodeid: nid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if (data.retcode == 1) {
var node = JSON.parse(data.result);
if (node.length > 0)
callback(node[0].nodename)
}
})
}
}
})
.factory('Product', function(User){
return {
list:function(psize,cpage,nid,callback){
var opts={
action:'GetCustom',
key:'',
alias:'shoplist',
psize:psize,
cpage:cpage,
nodeid:nid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(data);
}
});
},
info:function(proid,callback){
var opts={
action:'GetCustom',
key:'',
alias:'proinfo',
psize:'1',
cpage:'1',
proid:proid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(JSON.parse(data.result)[0])
}
});
},
getsearch:function(psize,cpage,proname,callback){
var opts={
action:'GetCustom',
key:'',
alias:'prosearch',
psize:psize,
cpage:cpage,
proname:proname
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(data);
}
});
},
hot:function(psize,cpage,nodeid,callback)
{
var opts={
action:'GetCustom',
key:'',
alias:'hotshop',
psize:psize,
cpage:cpage,
nodeid:nodeid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(data);
}
});
},
usershoplist:function(psize,cpage,type,callback){
var opts={
action:'GetCustom',
key:'',
alias:'usershoplist',
psize:psize,
cpage:cpage,
shoptype:''
};
if(type=="1")
opts.shoptype="普通店铺";
else if(type=="2")
opts.shoptype="有机农庄";
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(data);
}
});
},
usershopdetail:function(gid,callback){
var opts={
action:'GetCustom',
key:'',
alias:'usershopdetail',
psize:1,
cpage:1,
generalid:gid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(data);
}
});
},
userprolist:function(usershopid,psize,cpage,callback){
var opts={
action:'GetCustom',
key:'',
alias:'userprolist',
psize:psize,
cpage:cpage,
usershopid:usershopid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
like:function(pubid,id,opts,callback){
var getlogin = User.getlogin();
var getOpenID = function () { return ""; };
if(getlogin && getlogin != null)
getOpenID = function () { return User.getlogin().openid; }
SmartAjax.spost(appcfg.server+"API/Mod/Pub.ashx?action=add&pubid="+pubid+"&id="+id+"&openid="+getOpenID(),{data:JSON.stringify(opts)}, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
isliked:function(pubid,id,pubcontentid,callback){
var getlogin = User.getlogin();
var getOpenID = function () { return ""; };
if(getlogin && getlogin != null)
getOpenID = function () { return User.getlogin().openid; }
SmartAjax.spost(appcfg.server+"API/Mod/Pub.ashx?action=proliked&pubid="+pubid+"&id="+id+"&pubcontentid="+pubcontentid+"&openid="+getOpenID(),"", function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
}
};
})
.factory('User', function ($state) {
var apiUrl = appcfg.server + "API/Mod/UserAPP.ashx?action=";
return {
autoLogin: function (callback) { var ref = this; ref.login("admin", "admin66.cn", function (data) { callback(data); }); },
reg: function (mu, callback) {
SmartAjax.spost(apiUrl + "reg", mu, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) {
callback(model);
} else { console.log("login", model.retmsg); }
callback(model);
});
},
login: function (uname, upwd, callback) {
var ref = this;
SmartAjax.spost(apiUrl + "login", { "uname": uname, "upwd": upwd }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) {
ref.setlogin(model.result);
callback(model);
} else { console.log("login", model.retmsg); }
//不论登录成功或失败均返回
callback(model);
});
},
getlogin: function () {
//先检测缓存中是否有数据,缓存有数据且未过期,则取缓存中
var mu = localStorage.getItem("User");
if (mu && mu != null)
{
mu = JSON.parse(mu);
}
return mu;
//var opts = { action: 'getlogin', openid: openid };
//SmartAjax.spost("http://x005.2013.hx008.com/API/Mod/UserAPP.ashx", opts, function (data) {
// callback(data);
//});
},
//缓存用户信息
setlogin: function (mu) {
localStorage.setItem("User", JSON.stringify(mu));
},
logout: function () {
if (localStorage.getItem("User")) { localStorage.removeItem("User"); }
//$state.go("", {}, {});返回登录或指定页
},
list:function(psize,cpage,callback){
var opts={
action:'GetCustom',
key:'',
alias:'userlist',
psize:psize,
cpage:cpage,
};
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
}
};
})
.factory("Cart", function (User) {
var apiUrl = appcfg.server + "API/Mod/shop_cart.ashx?action=";
var getlogin = User.getlogin();
var getOpenID = function () { return ""; };
if(getlogin && getlogin != null)
getOpenID = function () { return getlogin.openid; }
return {
add: function (proid, pronum, callback) {
SmartAjax.spost(apiUrl + "add", { "openid": getOpenID(), "proid": proid, "pronum": pronum }, function (data) {
if (data.retcode == 1) { callback(data); }
else { console.log(data.retmsg); }
});
},
//购物车IDS
del: function (ids, callback) {
SmartAjax.spost(apiUrl + "del", { "openid": getOpenID(), "ids": ids }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
list: function (callback) {
SmartAjax.spost(apiUrl + "list", { "openid": getOpenID() }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
setnum: function () { },
get: function (id) { }
}
})
.factory("Order", function (User,Debug) {
var apiUrl = appcfg.server + "API/Mod/shop_order.ashx?action=";
var getlogin = User.getlogin();
var getOpenID = function () { return ""; };
if(getlogin && getlogin != null)
getOpenID = function () { return getlogin.openid; }
return {
carttoorder: function (ids, callback) {
SmartAjax.spost(apiUrl + "carttoorder", { "openid": getOpenID(), "ids": ids }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { Debug.pop(model.retmsg); }
});
},
//创建支付单,进入支付流程
createpayment: function (orderMod, callback) {
//fareList:按店铺划分的选定的快递方式 [{storeid:expid}]
var opts = { "openid": getOpenID(), "ids": orderMod.ids, "receID": orderMod.receid, "fareList": JSON.stringify(orderMod.fareList) };
SmartAjax.spost(apiUrl + "createpayment", opts, function (data) {
var model = APIResult.getModel(data);
if (model.retcode == 1) { callback(model); }
else { console.log("createpayment", model.retmsg); }
});
},
list: function (pageMod, callback) {
//pageMod={cpage:1,psize:10,skey:""};
//withpro:true 是否带有商品信息,存在[ProList]中
pageMod.openid=getOpenID();
SmartAjax.spost(apiUrl + "list", pageMod, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
}
}
})
.factory("Address", function (User) {
var apiUrl = appcfg.server + "API/Mod/shop_address.ashx?action=";
var getlogin = User.getlogin();
var getOpenID = function () { return ""; };
if(getlogin && getlogin != null)
getOpenID = function () { return getlogin.openid; }
return {
list: function (callback) {
SmartAjax.spost(apiUrl + "list", { "openid": getOpenID() }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
add: function(opts,callback){
SmartAjax.spost(apiUrl + "add", { "openid": getOpenID(),model:JSON.stringify(opts) }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
del: function(rid,callback){
SmartAjax.spost(apiUrl + "del", { "openid": getOpenID(),id:rid }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
get: function(rid,callback){
SmartAjax.spost(apiUrl + "get", { "openid": getOpenID(),id:rid }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
edit: function(opts,callback){
SmartAjax.spost(apiUrl + "edit", { "openid": getOpenID(),model:JSON.stringify(opts) }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
}
};
})
.factory("Pay", function (User, Wechat,Debug) {
//根据所选支付平台,开始发起支付
//var alipayUrl = appcfg.server + "API/Pay/alipay_app";
var getOpenID = function () { return User.getlogin().openid; }
return {
//传入支付方式,支付单号,开始支付
sendPay: function (mode, payNo, success, failed) {
var opts = { openid: getOpenID(), "payNo": payNo };
switch (mode) {
case "alipay":
break;
case "wxpay":
default:
Debug.L("wxpay start");
if (Wechat.isInstalled(function () {
Wechat.sendPaymentRequest(opts, success, failed);
}), function () {
Debug.pop("未安装微信,无法进行微信支付");
})
break;
}
}
}
})
.factory("Debug", function ($ionicPopup) {
return {
L: function (msg) {
var dom = document.getElementById("err_div");
if (dom != null) { dom.innerText = msg; }
},
pop: function (msg) {
var alertPopup = $ionicPopup.alert({
title: 'DEBUG',
template: msg
});
alertPopup.then(function (res) {
console.log('Thank you for not eating my delicious ice cream cone');
});
}
}
})
.factory("DataCenter", function () {
//页面间的数据交互
var myServices = {};
var myObject = {};
var _set = function (data) { myObject = data; };
var _get = function () { return myObject; };
myServices.set = _set;
myServices.get = _get;
return myServices;
})
.factory("Wechat", function (Debug) {
var callActivityPlugin = function (arr, callback) {
cordova.exec(callback, function (msg) { }, "Wechat", "call", arr);
}
return {
Scene: {
SESSION: 0, // 聊天界面
TIMELINE: 1, // 朋友圈
FAVORITE: 2 // 收藏
},
Type: {
APP: 1,
EMOTION: 2,
FILE: 3,
IMAGE: 4,
MUSIC: 5,
VIDEO: 6,
WEBPAGE: 7
},
isInstalled: function (onSuccess, onError) {
cordova.exec(onSuccess, onError, "Wechat", "isWXAppInstalled", []);
},
share: function (message, onSuccess, onError) {
cordova.exec(onSuccess, onError, "Wechat", "share", [message]);
},
auth: function (scope, state, onSuccess, onError) {
if (typeof scope == "function") {
// Wechat.auth(function () { alert("Success"); });
// Wechat.auth(function () { alert("Success"); }, function (error) { alert(error); });
return cordova.exec(scope, state, "Wechat", "sendAuthRequest");
}
if (typeof state == "function") {
// Wechat.auth("snsapi_userinfo", function () { alert("Success"); });
// Wechat.auth("snsapi_userinfo", function () { alert("Success"); }, function (error) { alert(error); });
return cordova.exec(state, onSuccess, "Wechat", "sendAuthRequest", [scope]);
}
return cordova.exec(onSuccess, onError, "Wechat", "sendAuthRequest", [scope, state]);
},
//opts:openid,payNo
sendPaymentRequest: function (opts, onSuccess, onError) {
var apiUrl = appcfg.server + "API/Pay/wxpay_app";
try {
SmartAjax.spost(apiUrl, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) {
Debug.L("apiresult.isok");
var params = {
mch_id: model.result.partnerid,
prepay_id: model.result.prepayid,
nonce: model.result.noncestr,
timestamp: model.result.timestamp,
sign: model.result.sign
};
Debug.L("parentid:" + model.result.partnerid);
cordova.exec(onSuccess, onError, "Wechat", "sendPaymentRequest", [params]);
} else { onError("err:" + model.retmsg); }
})
} catch (ex) { onError("ex:" + ex.message); }
}//sendPaymentRequest end;
}
})
.factory('News', function(){
return {
list:function(nodeid,psize,cpage,callback){
var opts={
action:'GetCustom',
key:'',
alias:'articlelist',
psize:psize,
cpage:cpage,
nodeid:nodeid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
getcontent:function(generalid,callback){
var opts={
action:'GetCustom',
key:'',
alias:'getcontent',
psize:1,
cpage:1,
generalid:generalid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(data);
}
});
},
courierlist:function(nodeid,psize,cpage,callback){
var opts={
action:'GetCustom',
key:'',
alias:'courierlist',
psize:psize,
cpage:cpage,
nodeid:nodeid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
videolist:function(nodeid,psize,cpage,callback){
var opts={
action:'GetCustom',
key:'',
alias:'videolist',
psize:psize,
cpage:cpage,
nodeid:nodeid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
getvideocont:function(generalid,callback){
var opts={
action:'GetCustom',
key:'',
alias:'getvideocont',
psize:1,
cpage:1,
generalid:generalid
};
SmartAjax.spost(appcfg.api, opts, function (data) {
if(data.retcode==1)
{
callback(data);
}
});
}
};
})
.factory('Grade', function(){
return {
list:function(cate,grade,parentid,callback){
var opts={
action:'GetCustom',
key:'',
alias:'gradelist',
psize:100,
cpage:1,
cate:cate,
grade:grade,
parentid:parentid
}
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
sdmlist:function(nodeid,area,callback){
var opts={
action:'GetCustom',
key:'',
alias:'sdmlist',
psize:100,
cpage:1,
nodeid:nodeid,
area:area
}
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
liulist:function(nodeid,area,callback){
var opts={
action:'GetCustom',
key:'',
alias:'liulianglist',
psize:100,
cpage:1,
nodeid:nodeid,
area:area
}
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
},
huafeilist:function(callback){
var opts={
action:'GetCustom',
key:'',
alias:'huafeilist',
psize:100,
cpage:1
}
SmartAjax.spost(appcfg.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) { callback(model); }
else { console.log(model.retmsg); }
});
}
}
})
.factory('YiSai', function(User){
var getOpenID = function () { return User.getlogin().openid; };
var yisi = {
api: appcfg.server+"API/yisi.ashx",
life: {
//最近一次的查询
last: {}
},
phone: {}, flow: {}, oil: {}
};
return {
query:function (account, proid,callback){
var opts = { openid: getOpenID(), action: "query", type: "life", "account": account, "proid": proid };
SmartAjax.spost(yisi.api, opts, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) {
yisi.life.last = model.result;
callback(model);
}
else {
yisi.life.last = null;
callback(model);
}
});
},
neworder:function(callback){
var last = yisi.life.last;
if (!last) { console.log("必须先查询才能发起支付"); return false; }
if (parseFloat(last.money) < 1) {
console.log("你没有欠费,不需要支付");
return false;
}
var opts = { openid: getOpenID(), action: "neworder", type: "life", "account": last.account, "proid": last.proid, "money": last.money };
SmartAjax.spost(yisi.api, opts, function (data) {
var model = APIResult.getModel(data);
callback(model);
});
},
list:function(callback){
var opts = { openid: getOpenID(), action: "list", type: "life" };
SmartAjax.spost(yisi.api, opts, function (data) {
var model = APIResult.getModel(data);
callback(model);
});
},
view:function(orderno,callback){
var opts = { openid: getOpenID(), action: "view", type: "life", "orderno": orderno };
SmartAjax.spost(yisi.api, opts, function (data) {
var model = APIResult.getModel(data);
callback(model);
});
},
flowneworder:function(proid,mobile,callback){
var opts = { openid: getOpenID(), action: "neworder", type: "flow", "account": mobile, "proid": proid };
SmartAjax.spost(yisi.api, opts, function (data) {
var model = APIResult.getModel(data);
callback(model);
});
},
phoneneworder:function(mobile,proid,callback){
var opts = { openid: getOpenID(), action: "neworder", type: "phone", "account": mobile, "proid": proid };
SmartAjax.spost(yisi.api, opts, function (data) {
var model = APIResult.getModel(data);
callback(model);
});
},
phonelist:function(callback){
var opts = { openid: getOpenID(), action: "list", type: "phone" };
SmartAjax.spost(yisi.api, opts, function (data) {
var model = APIResult.getModel(data);
callback(model);
});
}
};
})
.factory("ChatIM", function () {
var chatim = { api: appcfg.server + "api/comp/api_qq_im.ashx?action=", sdkAppID: "1400012582", accountType: "6551" };
//从服务端获取sign签名并登录,callback用于处理服务器的成功或失败回调
chatim.login = function (mu, cbok, cberr) {
var ref = this;
SmartAjax.spost(ref.api + "login", { "openid": mu.openid }, function (data) {
var model = APIResult.getModel(data);
var info = model.result;
if (APIResult.isok(model)) {
//使用签名,登录im服务器
loginInfo = {
"sdkAppID": ref.sdkAppID, //用户所属应用id,必填
'appIDAt3rd': ref.sdkAppID, //用户所属应用id,必填
'accountType': ref.accountType, //用户所属应用帐号类型,必填
'identifier': info.identity, //当前用户ID,必须是否字符串类型,必填
'identifierNick': mu.UserName, //当前用户昵称,选填
'userSig': info.sign, //当前用户身份凭证,必须是字符串类型,必填
'headurl': appcfg.server + mu.UserFace
};
var options = {
'isAccessFormalEnv': true,//是否访问正式环境,默认访问正式,选填
'isLogOn': true//是否开启控制台打印日志,默认开启,选填
}
webim.login(loginInfo, ref.listen, options, cbok, cberr);
}
else { console.log("login failed,ex:" + model.retmsg); }
});
}
//根据用户ID,获取指定用户的IM信息
chatim.getuser = function (uid,openid,callback) {
SmartAjax.spost(chatim.api + "getuser", { "uid": uid,"openid":openid }, function (data) {
var model = APIResult.getModel(data);
if (APIResult.isok(model)) {
callback(model.result);
}
else {
console.log("im.getuser failed," + model.retmsg);
}
});
}
chatim.listen = {
"onConnNotify": null,
"jsonpCallback": null,//IE9(含)以下浏览器用到的jsonp回调函数
"onMsgNotify": null,//监听新消息(私聊,群聊,群提示消息)事件
"onGroupInfoChangeNotify": function () { },//监听群资料变化事件
"groupSystemNotifys": function () { }//监听(多终端同步)群系统消息事件
};
//监听连接状态回调变化事件
chatim.listen.onConnNotify = function (resp) {
switch (resp.ErrorCode) {
case webim.CONNECTION_STATUS.ON:
//webim.Log.warn('连接状态正常...');
break;
case webim.CONNECTION_STATUS.OFF:
console.log('连接已断开,无法收到新消息,请检查下你的网络是否正常');
break;
default:
console.log('未知连接状态,status=' + resp.ErrorCode);
break;
}
}
//IE9(含)以下浏览器用到的jsonp回调函数
chatim.listen.jsonpCallback = function (rspData) {
webim.setJsonpLastRspData(rspData);
}
//newMsgList 为新消息数组,结构为[Msg]
chatim.listen.onMsgNotify = function (newMsgList) {
//console.warn(newMsgList);
var sess, newMsg;
//获取所有聊天会话
var sessMap = webim.MsgStore.sessMap();
for (var j in newMsgList) {//遍历新消息
newMsg = newMsgList[j];
if (newMsg.getSession().id() == selToID) {//为当前聊天对象的消息
selSess = newMsg.getSession();
//在聊天窗体中新增一条消息
//console.warn(newMsg);
addMsg(newMsg);
}
}
//消息已读上报,以及设置会话自动已读标记
webim.setAutoRead(selSess, true, true);
for (var i in sessMap) {
sess = sessMap[i];
if (selToID != sess.id()) {//更新其他聊天对象的未读消息数
//updateSessDiv(sess.type(), sess.id(), sess.unread());
}
}
}
//获取历史消息
chatim.gethistory = function (uname,num,time,key,success,error){
var opts = {
'Peer_Account': uname,
'MaxCnt': num,
'LastMsgTime': time,
'MsgKey': key
}
webim.getC2CHistoryMsgs(opts,function(data){
success(data);
},function(data){
error(data);
});
}
return chatim;
})
.directive('repeatDone', function (){
return function (scope, element, attrs) {
if (scope.$last) { // all are rendered
scope.$eval(attrs.repeatDone);
}
};
});