mirror of https://github.com/qwqdanchun/ant.git
2 lines
37 KiB
JavaScript
2 lines
37 KiB
JavaScript
(function(ant){(function($,undefined){var ADDON={api:{api:function(e,t,i){return $.extend({},ANT.CONNECT_API.apis,{listen:function(e){this.end();t.on("plugin-listener",function(t){t.sid===i?e(t.data):null});return this},inject:function(e){t.emit("plugin-sender",i,{act:"inject",data:e});return this},send:function(e){t.emit("plugin-listener",i,e);return this},end:function(){t.removeEventListener("plugin-listener")}})},ui:function(e){return{popen:function(t){w2popup.open({title:'<i class="fa fa-puzzle-piece"></i> '+w2utils.encodeTags(e.name),width:650,height:500,modal:true,showMax:true,style:"padding: 0",body:'<div id="bomb_hosts_loadplugin_div" style="width:100%;height:100%"></div>',onOpen:function(e){e.onComplete=function(){t.open?t.open("bomb_hosts_loadplugin_div"):null}},onClose:function(e){e.onComplete=function(){t.close?t.close("bomb_hosts_loadplugin_div"):null}},onToggle:function(e){e.onComplete=function(){var e=w2ui["bomb_hosts_loadplugin_div"];e?e.resize()&&e.resize():null;t.toggle?t.toggle("bomb_hosts_loadplugin_div"):null}}})},close:function(){w2popup.close()},editor:function(e,t){var i=ace.edit(e),o=require("ace/mode/"+(!t?"markdown":"javascript")).Mode;i.setTheme("ace/theme/tomorrow");!t?i.setReadOnly(true):null;i.session.setMode(new o);i.session.setUseWrapMode(true);return i},lock:function(e,t,i){var o=this;w2popup.status==="open"?w2popup.lock(e,true):w2ui["layout"].lock("main",e,true);if(t){var n=setTimeout(function(){o.unlock();i?i():null},t);return n}return this},unlock:function(e){w2popup.status==="open"?w2popup.unlock():w2ui["layout"].unlock("main");e?clearTimeout(e):null;return this},toastr:ANT.CONNECT_API.apis.toastr}}},ui:{grid_bomb_hosts:{name:"grid_bomb_hosts",show:{lineNumbers:true,selectColumn:true,footer:true,toolbar:true,expandColumn:true},multiSearch:false,columns:[{field:"_id",hidden:true,caption:"ID"},{field:"sid",hidden:true,caption:"SID"},{field:"_ctime",hidden:true,caption:"CTIME"},{field:"project",caption:"所属项目",size:"6%",sortable:true},{field:"ip",caption:"IP地址",size:"10%",sortable:true},{field:"addr",caption:"地理位置",size:"10%",sortable:true},{field:"referer",caption:"来源地址",size:"14%",sortable:true},{field:"os",caption:"设备信息",size:"15%",sortable:true},{field:"browser",caption:"浏览器信息",size:"10%",sortable:true},{field:"status",caption:"连接状态",size:"7%",sortable:true},{field:"ctime",caption:"连接时间",size:"13%",sortable:true},{field:"utime",caption:"断开时间",size:"13%",sortable:true}],searches:[{field:"ip",caption:"IP地址",type:"text"},{field:"addr",caption:"地理位置",type:"text"},{field:"referer",caption:"来源地址",type:"text"},{field:"os",caption:"设备信息",type:"text"},{field:"browser",caption:"浏览器信息",type:"text"},{field:"status",caption:"连接状态",type:"text"},{field:"ctime",caption:"连接时间",type:"text"},{field:"utime",caption:"断开时间",type:"text"}],toolbar:{items:[{type:"break"},{id:"view",type:"button",disabled:true,caption:"查看信息",icon:"fa fa-info-circle"},{type:"break"},{id:"data",type:"button",disabled:true,caption:"项目数据",icon:"fa fa-database"},{type:"break"},{id:"del",type:"button",disabled:true,caption:"删除主机",icon:"fa fa-trash-o"}],onClick:function(e){var t=[],i=w2ui["grid_bomb_hosts"];i.getSelection().forEach(function(e){t.push(i.get(e)._id)});var o=i.get(i.getSelection()[0]);switch(e.target){case"del":ADDON.hosts.del(t);break;case"view":i.toggle(o.recid);break;case"data":ADDON.hosts.data(t[0]);break}}},onExpand:function(e){var t=ADDON.hosts.cache[this.get(e.recid)._id],i=w2utils.encodeTags(t.ua||""),o=w2utils.encodeTags(t.referer||"");$("#"+e.box_id).html('<div style="padding: 10px;height: auto;">'+"[+] User-Agent: "+i+"<br>"+'[+] Referer: <a target="_blank" href="'+o+'">'+o+"</a>"+"</div>").animate({height:100},100)},onSelect:function(e){var t=this;e.onComplete=function(){var e=[],i=null;t.getSelection().forEach(function(o){i=t.get(o);e.push(i._id)});t.toolbar.disable("view","data","plugin","del");e.length===1?t.toolbar.enable("view","data","plugin","del"):e.length>1?t.toolbar.enable("del"):null}},onUnselect:function(e){this.onSelect(e)},onDblClick:function(e){this.toggle(e.recid)},onContextMenu:function(e){var t=this;var i=function(){var i=t.getSelection(),o=t.get(i[0]),n=t.toolbar,a=ADDON.plugin.private.cache,r=[],c=1;for(var l in a){r.push({id:l,icon:"fa fa-puzzle-piece",text:w2utils.encodeTags(a[l].name),action:function(){var e=this.id.split("-")[0];ADDON.hosts.loadPlugin(e,o.sid)}});if(!(c%5)){r.push({divider:true})}c++}$().bmenu([{text:"查看信息",icon:"fa fa-info-circle",disabled:i.length!==1,action:function(){n.click("view")}},{text:"项目数据",icon:"fa fa-database",disabled:i.length!==1,action:function(){n.click("data")}},{divider:true},{text:"加载插件",icon:"fa fa-folder-open-o",disabled:i.length!==1||o.status!=="在线"||r.length===0,subMenu:r},{divider:true},{text:"删除主机",icon:"fa fa-trash-o",count:i.length,action:function(){n.click("del")}}],e.originalEvent)};if(!ADDON.plugin.private.cache){ADDON.plugin.private.refresh(function(){i()})}else{i()}}},grid_bomb_project:{name:"grid_bomb_project",show:{lineNumbers:true,selectColumn:true,footer:true,toolbar:true,expandColumn:true},multiSearch:false,columns:[{field:"_id",hidden:true,caption:"ID"},{field:"_ctime",hidden:true,caption:"CTIME"},{field:"name",caption:"项目名称",size:"25%",sortable:true},{field:"link",caption:"项目地址",size:"45%",sortable:true},{field:"ctime",caption:"创建时间",size:"15%",sortable:true},{field:"utime",caption:"更新时间",size:"15%",sortable:true}],searches:[{field:"name",caption:"项目名称",type:"text"},{field:"link",caption:"项目地址",type:"text"},{field:"ctime",caption:"连接时间",type:"text"},{field:"utime",caption:"断开时间",type:"text"}],toolbar:{items:[{type:"break"},{id:"add",type:"button",caption:"添加项目",icon:"fa fa-plus-circle"},{type:"break"},{id:"desc",type:"button",disabled:true,caption:"项目简介",icon:"fa fa-info-circle"},{type:"break"},{id:"view",type:"button",disabled:true,caption:"浏览项目",icon:"fa fa-eye"},{type:"break"},{id:"reset",type:"button",caption:"更改设置",disabled:true,icon:"fa fa-cog"},{type:"break"},{id:"edit",type:"button",caption:"编辑项目",disabled:true,icon:"fa fa-edit"},{type:"break"},{id:"del",type:"button",disabled:true,caption:"删除项目",icon:"fa fa-trash-o"}],onClick:function(e){var t=[],i=w2ui["grid_bomb_project"];i.getSelection().forEach(function(e){t.push(i.get(e)._id)});var o=i.get(i.getSelection()[0]);switch(e.target){case"add":ADDON.project.add();break;case"desc":i.toggle(o.recid);break;case"view":window.open(o.link,"_blank");break;case"reset":ADDON.project.reset(t[0]);break;case"del":ADDON.project.del(t);break;case"edit":ADDON.project.edit(t[0]);break}}},onExpand:function(e){var t=ADDON.project.cache[this.get(e.recid)._id];$("#"+e.box_id).html('<div style="padding: 10px;height: auto;">'+w2utils.encodeTags(t.desc||"<暂无简介>").replace(/\n/g,"<br>")+"</div>").animate({height:100},100)},onSelect:function(e){var t=this;e.onComplete=function(){var e=[],i=null;t.getSelection().forEach(function(o){i=t.get(o);e.push(i._id)});t.toolbar.disable("desc","del","edit","reset","view");e.length===1?t.toolbar.enable("desc","del","edit","reset","view"):e.length>1?t.toolbar.enable("del"):null}},onUnselect:function(e){this.onSelect(e)},onContextMenu:function(e){var t=this.getSelection(),i=this.get(t[0]),o=this.toolbar;$().bmenu([{text:"项目简介",icon:"fa fa-info-circle",disabled:t.length!==1,action:function(){o.click("desc")}},{text:"浏览项目",icon:"fa fa-eye",disabled:t.length!==1,action:function(){o.click("view")}},{divider:true},{text:"编辑项目",icon:"fa fa-edit",disabled:t.length!==1,action:function(){o.click("edit")}},{text:"更改设置",icon:"fa fa-cog",disabled:t.length!==1,action:function(){o.click("reset")}},{divider:true},{text:"删除插件",icon:"fa fa-trash-o",count:t.length,disabled:t.length===0,action:function(){o.click("del")}}],e.originalEvent)},onDblClick:function(e){this.toggle(e.recid)}},grid_bomb_plugin_public:{name:"grid_bomb_plugin_public",show:{lineNumbers:true,footer:true,toolbar:true,expandColumn:true},multiSearch:false,multiSelect:false,columns:[{field:"_id",hidden:true,caption:"ID"},{field:"_utime",hidden:true,caption:"UTIME"},{field:"name",caption:"插件名称",size:"45%",sortable:true},{field:"user",caption:"插件作者",size:"20%",sortable:true},{field:"coin",caption:"出售蚁币",size:"10%",sortable:true},{field:"buys",caption:"购买次数",size:"10%",sortable:true},{field:"utime",caption:"更新时间",size:"15%",sortable:true}],searches:[{field:"name",caption:"插件名称",type:"text"},{field:"user",caption:"插件作者",type:"text"},{field:"coin",caption:"出售蚁币",type:"text"},{field:"buys",caption:"购买次数",type:"text"},{field:"utime",caption:"更新时间",type:"text"}],toolbar:{items:[{type:"break"},{id:"desc",type:"button",disabled:true,caption:"插件简介",icon:"fa fa-info-circle"},{type:"break"},{id:"comment",type:"button",disabled:true,caption:"插件交流",icon:"fa fa-comments"},{type:"break"},{id:"buy",type:"button",disabled:true,caption:"购买插件",icon:"fa fa-money"}],onClick:function(e){var t=w2ui["grid_bomb_plugin_public"],i=t.get(t.getSelection()[0]);switch(e.target){case"desc":t.toggle(i.recid);break;case"comment":ADDON.plugin.public.comment(i._id);break;case"buy":ADDON.plugin.public.buy(i._id);break}}},onSelect:function(e){var t=this;e.onComplete=function(){t.getSelection().length===1?t.toolbar.enable("desc","comment","buy"):t.toolbar.disable("desc","comment","buy")}},onUnselect:function(e){this.onSelect(e)},onExpand:function(e){var t=ADDON.plugin.public.cache[this.get(e.recid)._id];$("#"+e.box_id).html('<div style="padding: 10px;height: auto;">'+w2utils.encodeTags(t.desc||"<暂无简介>").replace(/\n/g,"<br>")+"</div>").animate({height:100},100)},onContextMenu:function(e){var t=w2ui["grid_bomb_plugin_public"].toolbar;$().bmenu([{text:"购买插件",icon:"fa fa-money",action:function(){t.click("buy")}},{divider:true},{text:"插件简介",icon:"fa fa-info-circle",action:function(){t.click("desc")}},{divider:true},{text:"插件交流",icon:"fa fa-comments",action:function(){t.click("comment")}}],e.originalEvent)},onDblClick:function(e){this.toggle(e.recid)}},grid_bomb_plugin_private:{name:"grid_bomb_plugin_private",show:{lineNumbers:true,selectColumn:true,footer:true,toolbar:true,expandColumn:true},multiSearch:false,columns:[{field:"_id",hidden:true,caption:"ID"},{field:"_ctime",hidden:true,caption:"CTIME"},{field:"name",caption:"插件名称",size:"50%",sortable:true},{field:"public",caption:"是否出售",size:"10%",sortable:true},{field:"verify",caption:"是否审核",size:"10%",sortable:true},{field:"ctime",caption:"创建时间",size:"15%",sortable:true},{field:"utime",caption:"更新时间",size:"15%",sortable:true}],searches:[{field:"name",caption:"插件名称",type:"text"},{field:"public",caption:"是否出售",type:"text"},{field:"verify",caption:"是否审核",type:"text"},{field:"ctime",caption:"创建时间",type:"text"},{field:"utime",caption:"更新时间",type:"text"}],toolbar:{items:[{type:"break"},{id:"add",type:"button",caption:"添加插件",icon:"fa fa-plus-circle"},{type:"break"},{id:"desc",type:"button",caption:"插件简介",disabled:true,icon:"fa fa-info-circle"},{type:"break"},{id:"edit",type:"button",caption:"编辑插件",disabled:true,icon:"fa fa-edit"},{type:"break"},{id:"reset",type:"button",caption:"更改设置",disabled:true,icon:"fa fa-cog"},{type:"break"},{id:"sell",type:"button",caption:"出售插件",disabled:true,icon:"fa fa-money"},{type:"break"},{id:"cancel",type:"button",caption:"取消出售",disabled:true,icon:"fa fa-remove"},{type:"break"},{id:"del",type:"button",caption:"删除插件",disabled:true,icon:"fa fa-trash-o"}],onClick:function(e){var t=[],i=w2ui["grid_bomb_plugin_private"];i.getSelection().forEach(function(e){t.push(i.get(e)._id)});var o=i.get(i.getSelection()[0]);switch(e.target){case"add":ADDON.plugin.private.add();break;case"desc":i.toggle(o.recid);break;case"del":ADDON.plugin.private.del(t);break;case"edit":ADDON.plugin.private.edit(t[0]);break;case"reset":ADDON.plugin.private.reset(t[0]);break;case"sell":ADDON.plugin.private.sell(t[0]);break;case"cancel":ADDON.plugin.private.cancel(t[0]);break}}},onSelect:function(e){var t=this;e.onComplete=function(){var e=[],i=null;t.getSelection().forEach(function(o){i=t.get(o);e.push(i._id)});t.toolbar.disable("desc","del","edit","reset","sell","cancel");e.length===1?t.toolbar.enable("desc","del","edit","reset","sell","cancel")&&t.toolbar.disable(i.public!=="是"?"cancel":"sell"):e.length>1?t.toolbar.enable("del"):null}},onUnselect:function(e){this.onSelect(e)},onExpand:function(e){var t=ADDON.plugin.private.cache[this.get(e.recid)._id];$("#"+e.box_id).html('<div style="padding: 10px;height: auto;">'+w2utils.encodeTags(t.desc||"<暂无简介>").replace(/\n/g,"<br>")+"</div>").animate({height:100},100)},onDblClick:function(e){this.toggle(e.recid)},onContextMenu:function(e){var t=this.getSelection(),i=this.get(t[0]),o=w2ui["grid_bomb_plugin_private"].toolbar;$().bmenu([{text:"插件简介",icon:"fa fa-info-circle",disabled:t.length!==1,action:function(){o.click("desc")}},{divider:true},{text:"编辑插件",icon:"fa fa-edit",disabled:t.length!==1,action:function(){o.click("edit")}},{text:"更改设置",icon:"fa fa-cog",disabled:t.length!==1,action:function(){o.click("reset")}},{divider:true},{text:"出售插件",icon:"fa fa-money",disabled:t.length!==1||i.public==="是",action:function(){o.click("sell")}},{text:"取消插件",icon:"fa fa-remove",disabled:t.length!==1||i.public==="否",action:function(){o.click("cancel")}},{divider:true},{text:"删除插件",icon:"fa fa-trash-o",count:t.length,disabled:t.length===0,action:function(){o.click("del")}}],e.originalEvent)}},form_bomb_plugin_private:{name:"form_bomb_plugin_private",style:"height: 100%;border: 0px;background-color: transparent;",fields:[{field:"name",type:"text",required:true,html:{caption:"插件名称",attr:'style="width: 250px"'}},{field:"desc",type:"textarea",html:{caption:"插件简介",attr:'rows="8" style="width: 250px;"'}}]},form_bomb_plugin_private_sell:{name:"form_bomb_plugin_private_sell",style:"height: 100%;border: 0px;background-color: transparent;",fields:[{field:"coin",type:"int",required:true,html:{caption:"出售蚁币",attr:'style="width: 180px;"'}}],actions:{Submit:function(){}}},layout_bomb_plugin_private_edit:{name:"layout_bomb_plugin_private_edit",panels:[{size:"100%",type:"main",style:"border: 1px solid #dfdfdf;",content:""+'<div id="layout_bomb_plugin_private_edit_client" class="bomb_editor" style="width: 100%;height:100%;font-size: 14px;"></div>'+'<div id="layout_bomb_plugin_private_edit_server" class="bomb_editor" style="width: 100%;height:100%;font-size: 14px;"></div>',resizable:true,toolbar:{items:[{id:"save",icon:"fa fa-save",hint:"[Ctrl || Command] + S",type:"button",caption:"保存"},{type:"break"}]},tabs:{tabs:[{id:"client",caption:'<i class="fa fa-code"></i> 客户端'},{id:"server",caption:'<i class="fa fa-skyatlas"></i> 服务端'}],onClick:function(e){$(".bomb_editor").hide();$("#layout_bomb_plugin_private_edit_"+e.target).show();ADDON.plugin.private.editor[e.target].resize()}}}]},form_bomb_project:{name:"form_bomb_project",style:"height: 100%;border: 0px;background-color: transparent;",fields:[{field:"name",type:"text",required:true,html:{caption:"项目名称",attr:'style="width: 250px"'}},{field:"desc",type:"textarea",html:{caption:"项目简介",attr:'rows="8" style="width: 250px;"'}}]},layout_bomb_project_edit:{name:"layout_bomb_project_edit",panels:[{type:"main",size:"100%",style:"border: 1px solid #dfdfdf;",content:'<div id="layout_bomb_project_edit_div" style="font-size:14px;width: 100%;height: 100%;"></div>',toolbar:{items:[{id:"save",caption:"保存",type:"button",icon:"fa fa-save"},{type:"break"},{id:"plugin",caption:"插入插件",type:"menu",icon:"fa fa-folder-open-o",items:[]}]}}]},form_bomb_notify:{name:"form_bomb_notify",fields:[{field:"notify",type:"checkbox",html:{caption:"桌面通知"}},{field:"toastr",type:"checkbox",html:{caption:"页面提示"}},{field:"audio_online",type:"text",html:{caption:"上线提示声音",attr:'style="width:90%"'}},{field:"audio_offline",type:"text",html:{caption:"下线提示声音",attr:'style="width:90%"'}}],toolbar:{items:[{id:"save",type:"button",caption:"保存",icon:"fa fa-save",onClick:function(){ADDON.setting.set(w2ui["form_bomb_notify"].record);ADDON.success("设置保存成功!");w2popup.close()}},{type:"break"}]}}},socket:null,init:function(){var e=this;$().w2grid(e.ui.grid_bomb_hosts);$().w2grid(e.ui.grid_bomb_project);$().w2grid(e.ui.grid_bomb_plugin_public);$().w2grid(e.ui.grid_bomb_plugin_private);$().w2layout(e.ui.layout_bomb_plugin_private_edit);$().w2layout(e.ui.layout_bomb_project_edit);$().w2form(e.ui.form_bomb_notify);ANT.addonLoaded.reg(function(){ADDON.hosts.init()})},hosts:{cache:null,onlines:{},init:function(){var e=this;ADDON.lock("连接服务器中..");$.get("/addons/ant.bomb/hosts/init",function(t){ADDON.socket=io.connect(document.URL);ADDON.socket.on("connect",function(){this.emit("client",t)}).on("disconnect",function(){this.close();ADDON.error("服务器断开连接!");setTimeout(function(){location.reload()},1e3)}).on("init",function(e){ADDON.unlock();e?ADDON.success("连接服务器成功!"):ADDON.error("连接服务器失败!")}).on("online",function(t){var i=t.host,o=t.project,n=ADDON.setting.get();if(e.onlines[i._id]){return false}e.onlines[i._id]=true;if(n.toastr){ADDON.info("有主机("+w2utils.encodeTags(i.ip)+")上线!",false,function(){w2ui["sidebar"].click("bomb_hosts")})}if(n.notify){ANT.CONNECT_API.apis.notify({title:"有主机上线!",body:"IP: "+i.ip+"\n地址: "+i.addr,audio:n.audio_online,click:function(){w2ui["sidebar"].click("bomb_hosts")}})}if(n.toastr&&n.audio_offline&&!n.notify){var a=document.createElement("audio");a.src=n.audio_online||"/ant/res/online.wav";a.play();a.remove()}i.project={_id:i.project,name:o};e.cache?(e.cache[i._id]=i)&e.reload():null}).on("offline",function(t){var i=ADDON.setting.get();if(e.cache&&e.cache[t._id]&&e.cache[t._id].online===false){return false}if(i.toastr){ADDON.warning("有主机("+w2utils.encodeTags(t.ip)+")下线!",false,function(){w2ui["sidebar"].click("bomb_hosts")})}if(i.notify){ANT.CONNECT_API.apis.notify({title:"有主机下线!",body:"IP: "+t.ip+"\n地址: "+t.addr,audio:i.audio_offline})}if(i.toastr&&i.audio_offline&&!i.notify){var o=document.createElement("audio");o.src=i.audio_offline||"/ant/res/offline.wav";o.play();o.remove()}e.cache?(e.cache[t._id].online=false)&(e.cache[t._id].utime=new Date)&e.reload():null}).on("data",function(e){console.log("data--",e)})})},refresh:function(){var e=this;ADDON.content(w2ui["grid_bomb_hosts"]);if(!e.cache){e.cache={};ADDON.lock("加载主机数据中..");$.get("/addons/ant.bomb/hosts/data",function(t){if(t.err){ADDON.unlock();ADDON.error("加载数据失败!<br>"+t.err)}else{t.ret.forEach(function(t){e.cache[t._id]=t});e.reload()}})}},reload:function(){var e=this,t=[],i=0;for(var o in e.cache){var n=e.cache[o],a=e.parseUA(n.ua);if(n){t.push({recid:t.length+1,_id:n._id,sid:n.sid,project:w2utils.encodeTags(n.project?n.project.name||"null":"[已删除]"),ip:w2utils.encodeTags(n.ip),addr:w2utils.encodeTags(n.addr),referer:w2utils.encodeTags(n.referer),os:w2utils.encodeTags(a.os),browser:w2utils.encodeTags(a.browser),status:n.online?"在线":"离线",ctime:ANT.ftime(n.ctime),_ctime:n.ctime,utime:n.online?"-":ANT.ftime(n.utime),style:n.online?"color:rgb(195, 45, 9);background-color:#FBFEC0;":""});n.online?i++:null}}w2ui["grid_bomb_hosts"].records=t;w2ui["grid_bomb_hosts"].sort("_ctime","desc");w2ui["grid_bomb_hosts"].refresh();setTimeout(function(){w2ui.sidebar.set("bomb_hosts",{count:i+"/"+t.length});ADDON.unlock()},100)},parseUA:function(e){var t={};var i={};t.ua=e;i.os={"Mac OS X":/Mac OS X ([\d\.\_]+)/,"iPhone OS":/iPhone OS ([\d\.\_]+)/,iPad:/iPad; CPU OS ([\d\_\.]+)/,Android:/Android ([\d\.]+)/,"Windows Phone":/Windows Phone (OS )?([\d\.]+)/,BlackBerry:/BlackBerry[ ]?[\d]+/,Symbian:/SymbianOS\/([\d\.]+)/,Windows:/Windows NT ([\d\.]+)/,Linux:/Linux ([\w\d]+)/};for(var o in i.os){if(t.ua.indexOf(o)){var n=t.ua.match(i.os[o]);t.os=n?n[0]:t.os||"Unknow OS"}}i.browser={Safari:/Safari\/([\d\.]+)$/,Chrome:/Chrome\/([\d\.]+)/,Firefox:/Firefox\/([\d\.]+)$/,"Opera/":/Version\/([\d\.]+)$/,MSIE:/MSIE ([\d\.]+)/,Lunascape:/Lunascape ([\d\.]+)/,Netscape:/Netscape6[\d]?\/([\d\.]+)/,CriOS:/CriOS\/([\d\.]+)/,UCBrowser:/UCBrowser\/([\d\.]+)/,Trident:/Trident\/([\d\.]+)/,baiduboxapp:/baiduboxapp\/([\d\.\_]+)/,MiuiBrowser:/MiuiBrowser\/([\d\.]+)$/};for(var a in i.browser){if(t.ua.indexOf(a)){var n=t.ua.match(i.browser[a]);t.browser=n?n[0]:t.browser||"Unknow Browser"}}return{os:t.os,browser:t.browser}},del:function(e){var t=this;w2confirm("确定删除所选的("+e.length+")个主机吗?",'<i class="fa fa-trash-o"></i> 删除主机',function(i){if(i==="Yes"){ADDON.lock("删除主机中..");$.post("/addons/ant.bomb/hosts/del",{ids:e},function(i){ADDON.unlock();if(i.ret){ADDON.success("删除主机成功!");e.forEach(function(e){delete t.cache[e]});t.reload()}else{ADDON.error("删除主机失败!<br>"+i.err)}})}})},data:function(e){var t=this,i=t.cache[e],o=null;w2popup.open({title:'<i class="fa fa-database"></i> 项目数据',width:650,height:500,showMax:true,modal:true,style:"padding: 0",body:'<div id="bomb_hosts_data_div" style="width:100%;height:100%;"></div>',onOpen:function(t){t.onComplete=function(){var t=require("ace/mode/markdown").Mode;o=ace.edit("bomb_hosts_data_div");o.setTheme("ace/theme/tomorrow");o.setReadOnly(true);o.session.setMode(new t);o.session.setUseWrapMode(true);if(i.online||i.data===null){w2popup.lock("加载数据中..",true);$.post("/addons/ant.bomb/hosts/data",{id:e},function(e){w2popup.unlock();if(e.err){return ADDON.error("加载数据失败!<br>"+e.err)}i.data=e.ret;o.session.setValue(i.data)})}else{o.session.setValue(i.data)}}},onToggle:function(e){e.onComplete=function(){o.resize()}}})},loadPlugin:function(id,sid){var self=this,plugin=ADDON.plugin.private.cache[id];if(!plugin){return ADDON.error("不存在此插件!")}try{var RUN=eval(plugin.code.client);RUN(new ADDON.api.ui(plugin),new ADDON.api.api(plugin,ADDON.socket,sid),plugin.code.server)}catch(e){ADDON.error("加载插件失败!<br>"+e.message);w2popup.close()}}},project:{cache:null,editor:null,add:function(){var e=this;w2popup.open({title:'<i class="fa fa-plus-circle"></i> 添加项目',body:'<div id="form_bomb_project_div"></div>',style:"padding: 15px 0 0 0",modal:true,width:500,height:300,onOpen:function(t){t.onComplete=function(){var t=$.extend({},ADDON.ui["form_bomb_project"],{actions:{"添加":function(){if(this.validate().length===0){w2popup.lock("添加项目中..",true);$.post("/addons/ant.bomb/project/add",this.record,function(t){if(t.ret){w2popup.close();ADDON.success("添加项目成功!");e.cache[t.ret._id]=t.ret;e.reload()}else{ADDON.error("添加项目失败!<br>"+t.err)}})}}}});$("#form_bomb_project_div").w2form(t)}},onClose:function(e){w2ui["form_bomb_project"].destroy()}})},refresh:function(){var e=this;ADDON.content(w2ui["grid_bomb_project"]);if(!e.cache){e.cache={};ADDON.lock("加载项目数据中..");$.get("/addons/ant.bomb/project/data",function(t){if(t.err){ADDON.unlock();ADDON.error("加载数据失败!<br>"+t.err)}else{t.ret.forEach(function(t){e.cache[t._id]=t});e.reload()}})}},reload:function(){var e=this,t=document.URL.split("#")[0],i=[];for(var o in e.cache){var n=e.cache[o];if(n){var a=t+"b/"+n.pid;i.push({recid:i.length+1,_id:n._id,name:w2utils.encodeTags(n.name),link:w2utils.encodeTags(a),ctime:ANT.ftime(n.ctime),_ctime:n.ctime,utime:ANT.ftime(n.utime)})}}w2ui["grid_bomb_project"].records=i;w2ui["grid_bomb_project"].sort("_ctime","desc");w2ui["grid_bomb_project"].refresh();setTimeout(function(){w2ui.sidebar.set("bomb_project",{count:i.length});ADDON.unlock()},100)},del:function(e){var t=this;w2confirm("确定删除所选的("+e.length+")条项目吗?",'<i class="fa fa-trash-o"></i> 删除项目',function(i){if(i==="Yes"){ADDON.lock("删除项目中..");$.post("/addons/ant.bomb/project/del",{ids:e},function(i){ADDON.unlock();if(!i.err){ADDON.success("删除项目成功!");e.forEach(function(e){delete t.cache[e]});t.reload()}else{ADDON.error("删除项目失败!")}})}})},reset:function(e){var t=this,i=t.cache[e];w2popup.open({title:'<i class="fa fa-cog"></i> 更改设置',body:'<div id="form_bomb_project_div"></div>',style:"padding: 15px 0 0 0",modal:true,width:500,height:300,onOpen:function(o){o.onComplete=function(){var o=$.extend({},ADDON.ui["form_bomb_project"],{record:{name:i.name,desc:i.desc},actions:{"更新":function(){var o=this.record;if(this.validate().length===0){w2popup.lock("更新项目中..",true);$.post("/addons/ant.bomb/project/update",{id:e,name:o.name,desc:o.desc},function(n){if(n.ret){w2popup.close();ADDON.success("更新插项目成功!");i=$.extend({},i,o,{utime:new Date});t.cache[e]=i;t.reload()}else{ADDON.error("更新项目失败!<br>"+n.err)}})}}}});$("#form_bomb_project_div").w2form(o)}},onClose:function(e){w2ui["form_bomb_project"].destroy()}})},edit:function(e){var t=this,i=t.cache[e];w2popup.open({title:'<i class="fa fa-edit"></i> 编辑项目:<strong class="text-danger">'+w2utils.encodeTags(i.name)+"</strong>",body:'<div id="bomb_project_editor_div" style="width: 100%;height: 100%;"></div>',style:"padding: 0;",showMax:true,modal:true,width:900,height:600,onOpen:function(o){o.onComplete=function(){$("#bomb_project_editor_div").w2render(w2ui["layout_bomb_project_edit"]);var o=require("ace/mode/javascript").Mode;t.editor=ace.edit("layout_bomb_project_edit_div");t.editor.setTheme("ace/theme/tomorrow");t.editor.session.setMode(new o);t.editor.session.setUseWrapMode(true);t.editor.session.setValue(i.code);var n=function(){var e=ADDON.plugin.private.cache,t=[];for(var i in e){t.push({id:i,text:w2utils.encodeTags(e[i].name),icon:"fa fa-puzzle-piece"})}w2ui["layout_bomb_project_edit_main_toolbar"].set("plugin",{items:t,count:t.length,disabled:t.length===0})};if(!ADDON.plugin.private.cache){ADDON.plugin.private.refresh(function(){n()})}else{n()}w2ui["layout_bomb_project_edit_main_toolbar"].onClick=function(o){var n=t.editor.session.getValue();switch(o.target){case"save":w2popup.lock("保存代码中..",true);$.post("/addons/ant.bomb/project/save",{id:e,code:n},function(e){w2popup.unlock();if(e.err){ADDON.error("代码保存失败!<br>"+e.err)}else{i.code=n;i.utime=new Date;t.reload();ADDON.success("代码保存成功!")}});break;default:if(o.target.indexOf("plugin:")===0){var a=o.target.replace("plugin:",""),r=ADDON.plugin.private.cache[a],c="";if(!r){return ADDON.error("没有此插件!")}c="\n // 加载插件: "+r.name;c+="\n // 插件说明: "+r.desc.replace(/\n/g,"\\n")+"\n ";c+="{PLUGIN_"+a+"}(api);\n ";t.editor.insert(c)}}};[{name:"saveCmd",bindKey:{win:"Ctrl-S",mac:"Command-S"},exec:function(e){w2ui["layout_bomb_project_edit_main_toolbar"].click("save")}},{name:"toggleCmd",bindKey:{win:"Ctrl-M",mac:"Command-M"},exec:function(){w2popup.toggle()}}].forEach(function(e){t.editor.commands.addCommand(e)});w2popup.toggle()}},onToggle:function(e){e.onComplete=function(){w2ui["layout_bomb_project_edit"].resize();t.editor.resize()}}})}},plugin:{"public":{cache:null,refresh:function(){var e=this;ADDON.content(w2ui["grid_bomb_plugin_public"]);if(!e.cache){e.cache={};ADDON.lock("加载插件数据中..");$.get("/addons/ant.bomb/plugin/public/data",function(t){if(t.err){ADDON.unlock();ADDON.error("加载数据失败!<br>"+t.err)}else{t.ret.forEach(function(t){e.cache[t._id]=t});e.reload()}})}},reload:function(){var e=this;var t=[];for(var i in e.cache){var o=e.cache[i];if(o){t.push({recid:t.length+1,_id:o._id,name:w2utils.encodeTags(o.name),user:w2utils.encodeTags(o.user?o.user.nickname:"<已删除>"),coin:o.coin,buys:o.buys.length,utime:ANT.ftime(o.utime),_utime:o.utime})}}w2ui["grid_bomb_plugin_public"].records=t;w2ui["grid_bomb_plugin_public"].sort("_utime","desc");w2ui["grid_bomb_plugin_public"].refresh();setTimeout(function(){w2ui.sidebar.set("bomb_plugin_public",{count:t.length});ADDON.unlock()},100)},comment:function(e){var t=this,i=t.cache[e];w2popup.open({title:'<i class="fa fa-comments"></i> 插件交流:<strong class="text-danger">'+w2utils.encodeTags(i.name)+"</strong>",style:"padding: 0",width:800,height:600,modal:true,showMax:true,body:'<div class="comment" id="comment_'+e+'">'+"<blockquote>"+w2utils.encodeTags(i.desc||"<暂无简介>").replace(/\n/g,"<br>")+"<small>"+w2utils.encodeTags(i.user.nickname||"<已删除>")+"</small></blockquote>"+"</div>",onOpen:function(t){t.onComplete=function(){$("#comment_"+e).comment({key:e,url:"#!/bomb/plugin/comment/"+e,title:"插件交流 - "+i.name})}}})},buy:function(e){var t=this;plugin=t.cache[e];w2confirm('确定使用(<strong class="text-danger">'+plugin.coin+"</strong>)蚁币购买此插件?",'<i class="fa fa-cart-plus"></i> 购买兵蚁',function(t){if(t==="Yes"){ADDON.lock("购买插件中..");$.post("/addons/ant.bomb/plugin/public/buy",{id:e},function(e){ADDON.unlock();if(e.ret){ADDON.success("购买成功!");w2ui["sidebar"].dblClick("bomb_plugin_public");setTimeout(function(){w2ui["sidebar"].dblClick("bomb_plugin_private");w2ui["sidebar"].select("bomb_plugin_private")},200)}else{ADDON.error("购买失败!<br>"+e.err)}})}})}},"private":{cache:null,editor:{},refresh:function(e){var t=this;e?null:ADDON.content(w2ui["grid_bomb_plugin_private"]);if(!t.cache){t.cache={};ADDON.lock("加载插件数据中..");$.get("/addons/ant.bomb/plugin/private/data",function(i){if(i.err){ADDON.unlock();ADDON.error("加载数据失败!<br>"+i.err)}else{i.ret.forEach(function(e){t.cache[e._id]=e});e?e()&ADDON.unlock():t.reload()}})}else{t.reload()}},reload:function(){var e=this;var t=[];for(var i in e.cache){var o=e.cache[i];if(o){t.push({recid:t.length+1,_id:o._id,name:w2utils.encodeTags(o.name),"public":o.public?"是":"否",verify:o.public?o.verify?"是":"否":"-",ctime:ANT.ftime(o.ctime),_ctime:o.ctime,utime:ANT.ftime(o.utime),style:"color: "+(o.public?o.verify?"rgb(22, 144, 61)":"rgb(195, 45, 9);background-color:rgba(255, 203, 0, 0.19);":"")})}}w2ui["grid_bomb_plugin_private"].records=t;w2ui["grid_bomb_plugin_private"].sort("_ctime","desc");w2ui["grid_bomb_plugin_private"].refresh();setTimeout(function(){w2ui.sidebar.set("bomb_plugin_private",{count:t.length});ADDON.unlock()},100)},add:function(){var e=this;w2popup.open({title:'<i class="fa fa-plus-circle"></i> 添加插件',body:'<div id="form_bomb_plugin_private_div"></div>',style:"padding: 15px 0 0 0",modal:true,width:500,height:300,onOpen:function(t){t.onComplete=function(){var t=$.extend({},ADDON.ui["form_bomb_plugin_private"],{actions:{"添加":function(){if(this.validate().length===0){w2popup.lock("添加插件中..",true);$.post("/addons/ant.bomb/plugin/private/add",this.record,function(t){if(t.ret){w2popup.close();ADDON.success("添加插件成功!");e.cache[t.ret._id]=t.ret;e.reload()}else{ADDON.error("添加插件失败!<br>"+t.err)}})}}}});$("#form_bomb_plugin_private_div").w2form(t)}},onClose:function(e){w2ui["form_bomb_plugin_private"].destroy()}})},del:function(e){var t=this;w2confirm("确定删除所选的("+e.length+")条数据吗?",'<i class="fa fa-trash-o"></i> 删除插件',function(i){if(i==="Yes"){ADDON.lock("删除数据中..");$.post("/addons/ant.bomb/plugin/private/del",{ids:e},function(i){ADDON.unlock();if(!i.err){ADDON.success("删除数据成功!");e.forEach(function(e){delete t.cache[e]});t.reload()}else{ADDON.error("删除数据失败!")}})}})},edit:function(e){var t=this,i=t.cache[e];w2popup.open({title:'<i class="fa fa-edit"></i> 编辑插件:<strong class="text-danger">'+w2utils.encodeTags(i.name)+"</strong>",body:'<div id="layout_bomb_plugin_private_edit_div" style="width: 100%;height: 100%;"></div>',style:"padding: 0;",showMax:true,modal:true,width:900,height:600,onOpen:function(o){o.onComplete=function(){$("#layout_bomb_plugin_private_edit_div").w2render(w2ui["layout_bomb_plugin_private_edit"]);var o=require("ace/mode/javascript").Mode;t.editor.client=ace.edit("layout_bomb_plugin_private_edit_client");t.editor.client.setTheme("ace/theme/tomorrow");t.editor.client.session.setMode(new o);t.editor.client.session.setUseWrapMode(true);t.editor.client.session.setValue(i.code.client);t.editor.server=ace.edit("layout_bomb_plugin_private_edit_server");t.editor.server.setTheme("ace/theme/tomorrow");t.editor.server.session.setMode(new o);t.editor.server.session.setUseWrapMode(true);t.editor.server.session.setValue(i.code.server);[{name:"saveCmd",bindKey:{win:"Ctrl-S",mac:"Command-S"},exec:function(e){w2ui["layout_bomb_plugin_private_edit_main_toolbar"].click("save")}},{name:"toggleCmd",bindKey:{win:"Ctrl-M",mac:"Command-M"},exec:function(){w2popup.toggle()}}].forEach(function(e){t.editor.client.commands.addCommand(e);t.editor.server.commands.addCommand(e)});w2ui["layout_bomb_plugin_private_edit_main_toolbar"].onClick=function(o){var n=t.editor.client.getValue();var a=t.editor.server.getValue();switch(o.target){case"save":w2popup.lock("保存代码中..",true);$.post("/addons/ant.bomb/plugin/private/save",{id:e,client:n,server:a},function(e){w2popup.unlock();if(e.err){ADDON.error("代码保存失败!<br>"+e.err)}else{i.code={client:n,server:a};i.verify=false;i.utime=new Date;t.reload();ADDON.success("代码保存成功!")}});break
|
|
}};w2ui["layout_bomb_plugin_private_edit_main_tabs"].click("client");w2popup.toggle()}},onToggle:function(e){e.onComplete=function(){w2ui["layout_bomb_plugin_private_edit"].resize();t.editor.client.resize();t.editor.server.resize()}}})},reset:function(e){var t=this,i=t.cache[e];w2popup.open({title:'<i class="fa fa-cog"></i> 更改设置',body:'<div id="form_bomb_plugin_private_div"></div>',style:"padding: 15px 0 0 0",modal:true,width:500,height:300,onOpen:function(o){o.onComplete=function(){var o=$.extend({},ADDON.ui["form_bomb_plugin_private"],{record:{name:i.name,desc:i.desc},actions:{"更新":function(){var o=this.record;if(this.validate().length===0){w2popup.lock("更新插件中..",true);$.post("/addons/ant.bomb/plugin/private/update",{id:e,name:o.name,desc:o.desc},function(n){if(n.ret){w2popup.close();ADDON.success("更新插件成功!");i=$.extend({},i,o,{utime:new Date,verify:false});t.cache[e]=i;t.reload()}else{ADDON.error("更新插件失败!<br>"+n.err)}})}}}});$("#form_bomb_plugin_private_div").w2form(o)}},onClose:function(e){w2ui["form_bomb_plugin_private"].destroy()}})},sell:function(e){var t=this,i=t.cache[e];w2popup.open({title:'<i class="fa fa-money"></i> 出售插件',width:400,height:250,modal:true,body:'<div id="form_bomb_plugin_private_sell_div" style="width:100%;height:100%;"></div>',style:"padding:50px 0 0 0;",onOpen:function(o){o.onComplete=function(){var o=$.extend({},ADDON.ui.form_bomb_plugin_private_sell,{actions:{"出售":function(){if(this.validate().length===0){w2popup.lock("提交出售中..",true);$.post("/addons/ant.bomb/plugin/private/sell",{id:e,coin:this.record.coin},function(e){if(e.ret){w2popup.close();ADDON.success("发布出售成功!请耐心等待审核!");i.public=true;i.verify=false;t.reload()}else{ADDON.error("发布出售失败!<br>"+e.err)}})}}}});$("#form_bomb_plugin_private_sell_div").w2form(o)}},onClose:function(){w2ui["form_bomb_plugin_private_sell"].destroy()}})},cancel:function(e){var t=this,i=t.cache[e];w2confirm("确定取消出售所选插件?",'<i class="fa fa-remove"></i> 取消出售',function(o){if(o==="Yes"){ADDON.lock("取消出售插件中..");$.post("/addons/ant.bomb/plugin/private/cancel",{id:e},function(e){ADDON.unlock();if(e.ret){i.public=false;i.verify=false;t.reload();ADDON.success("取消出售成功!")}else{ADDON.error("取消出售失败!<br>"+e.err)}})}})}}},setting:{get:function(e){var t=JSON.parse(localStorage.getItem("bomb_notify"))||{sendmail:false,notify:false,toastr:true,audio_online:"/ant/res/online.wav",audio_offline:"/ant/res/offline.wav"};return e?t[e]:t},set:function(e){localStorage.setItem("bomb_notify",JSON.stringify(e))},open:function(){var e=this;w2popup.open({title:'<i class="fa fa-bell"></i> 通知提醒',style:"padding: 0px;",modal:true,showMax:false,width:600,height:450,body:'<div id="bomb_notify_div" style="width:100%;height:100%;"></div>',onOpen:function(t){t.onComplete=function(){w2ui["form_bomb_notify"].record=e.get();$("#bomb_notify_div").w2render(w2ui["form_bomb_notify"])}}})}}};ANT.initAddon({id:"ant_bomb",text:"蚁弹超人",group:true,expanded:true,nodes:[{id:"bomb_hosts",text:"主机列表",icon:"fa fa-reorder",onClick:function(){ADDON.hosts.refresh()},onDblClick:function(){delete ADDON.hosts.cache;ADDON.hosts.refresh()}},{id:"bomb_project",text:"项目列表",icon:"fa fa-pie-chart",onClick:function(){ADDON.project.refresh()}},{id:"bomb_plugin",text:"插件列表",icon:"fa fa-folder-open-o",onClick:function(){w2ui["sidebar"].expand("bomb_plugin")},nodes:[{id:"bomb_plugin_public",icon:"fa fa-puzzle-piece",text:"共有插件",onClick:function(){w2ui["sidebar"].expand("bomb_plugin");ADDON.plugin.public.refresh()},onDblClick:function(){delete ADDON.plugin.public.cache;ADDON.plugin.public.refresh()}},{id:"bomb_plugin_private",icon:"fa fa-puzzle-piece",text:"私有插件",onClick:function(){w2ui["sidebar"].expand("bomb_plugin");ADDON.plugin.private.refresh()},onDblClick:function(){delete ADDON.plugin.private.cache;ADDON.plugin.private.refresh()}}]},{id:"bomb_notify",text:"通知提醒",icon:"fa fa-bell-o",onClick:function(){ADDON.setting.open()}}]},ADDON)})(jQuery)})(); |