//
//
// 终于要告别 终于没有更多的明天要追
// 你有什么遗憾依然残缺 还没有完美
// -- 《五月天·诺亚方舟》
//
// 如果说,一首歌,就是一首诗,不管押韵与否,都曾有用心
// 如果说,一行代码,也是一首诗,那么,你会不会,也用心地去雕刻
//
;(function($, undefined) {
var ADDON = {
ui: {
//@ 右侧:个人仓库
grid_soldier_depot: {
name: 'grid_soldier_depot',
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: 'aid', caption: '兵蚁编号', size: '15%', sortable: true },
{ field: 'name', caption: '兵蚁大名', size: '25%', sortable: true },
{ field: 'env', caption: '运行环境', size: '10%', sortable: true },
{ field: 'sell', 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 }
],
records: [],
searches: [
{ field: 'name', caption: '兵蚁大名', type: 'text' },
{ field: 'aid', caption: '兵蚁编号', type: 'text' },
{ field: 'env', caption: '运行环境', type: 'text' },
{ field: 'sell', 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: 'del',
type: 'button',
disabled: true,
caption: '删除兵蚁',
icon: 'fa fa-trash-o'
}, {
type: 'break'
}, {
id: 'run',
type: 'button',
disabled: true,
caption: '加载兵蚁',
icon: 'fa fa-spinner',
}, {
type: 'break'
}, {
id: 'bg',
type: 'button',
disabled: true,
caption: '后台执行',
icon: 'fa fa-circle-o-notch'
}, {
type: 'break'
}, {
id: 'edit',
type: 'button',
disabled: true,
caption: '强化兵蚁',
icon: 'fa fa-edit'
}],
onClick: function(event) {
var ids = [],
self = w2ui['grid_soldier_depot'];
self.getSelection().forEach(function(i) {
ids.push(self.get(i)._id);
})
switch(event.target) {
case 'add':
ADDON.depot.add();
break;
case 'run':
ADDON.depot.load(ids[0]);
break;
case 'bg':
ADDON.task.init(ids);
break;
case 'edit':
ADDON.depot.edit(ids[0]);
break;
case 'del':
ADDON.depot.del(ids);
break;
}
}
},
onSelect: function(event) {
var self = this;
event.onComplete = function() {
var ids = [];
self.getSelection().forEach(function(i) {
ids.push(self.get(i)._id);
})
self.toolbar.disable('run', 'bg', 'edit', 'del');
ids.length === 1
? self.toolbar.enable('run', 'bg', 'edit', 'del')
: ids.length > 1
? self.toolbar.enable('del', 'bg')
: null;
}
},
onUnselect: function(event) {
this.onSelect(event);
},
onContextMenu: function(event) {
var ids = [],
self = this;
self.getSelection().forEach(function(i) {
ids.push(self.get(i)._id);
})
var cur = self.get(self.getSelection()[0]);
$().bmenu([
{
text: '加载兵蚁',
icon: 'fa fa-spinner',
disabled: ids.length !== 1,
action: function() {
ADDON.depot.load(ids[0]);
}
}, {
text: '后台执行',
count: ids.length,
icon: 'fa fa-circle-o-notch',
disabled: ids.length === 0,
action: function() {
ADDON.task.init(ids);
}
}, {
divider: true
}, {
text: '强化兵蚁',
icon: 'fa fa-edit',
disabled: ids.length !== 1,
action: function() {
ADDON.depot.edit(ids[0]);
}
}, {
text: '更改设置',
icon: 'fa fa-pencil',
disabled: ids.length !== 1,
action: function() {
ADDON.depot.reset(ids[0]);
}
}, {
divider: true
}, {
text: '出售兵蚁',
icon: 'fa fa-money',
disabled: (ids.length !== 1) || (cur.sell === '是'),
action: function() {
ADDON.depot.sell(ids[0]);
}
}, {
text: '取消出售',
icon: 'fa fa-remove',
disabled: (ids.length !== 1) || (cur.sell === '否'),
action: function() {
ADDON.depot.cancelSell(ids[0]);
}
}, {
divider: true
}, {
text: '删除兵蚁',
count: ids.length,
icon: 'fa fa-trash-o',
disabled: ids.length === 0,
action: function() {
ADDON.depot.del(ids);
}
}
], event.originalEvent);
},
onExpand: function(event) {
var soldier = ADDON.depot.cache[this.get(event.recid)._id];
$('#'+event.box_id).html(
'
' + (w2utils.encodeTags(soldier.desc || '<暂无简介>')).replace(/\n/g, '
') + '
'
).animate({
'height': 100
}, 100);
},
onDblClick: function(event) {
var self = this;
event.onComplete = function() {
self.toggle(self.getSelection());
}
}
},
//@ 右侧:交易市场
grid_soldier_market: {
name: 'grid_soldier_market',
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: 'aid', caption: '兵蚁编号', size: '15%', sortable: true },
{ field: 'name', caption: '兵蚁大名', size: '25%', sortable: true },
{ field: 'env', caption: '运行环境', size: '10%', sortable: true },
{ field: 'user', caption: '兵蚁作者', size: '15%', sortable: true },
{ field: 'coin', caption: '出售蚁币', size: '10%', sortable: true },
{ field: 'buys', caption: '购买次数', size: '10%', sortable: true },
{ field: 'utime', caption: '更新时间', size: '15%', sortable: true }
],
records: [],
searches: [
{ field: 'name', caption: '兵蚁大名', type: 'text' },
{ field: 'aid', caption: '兵蚁编号', type: 'text' },
{ field: 'env', 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: 'buy',
type: 'button',
caption: '购买',
disabled: true,
icon: 'fa fa-cart-plus'
}, {
type: 'break'
}, {
id: 'desc',
type: 'button',
caption: '简介',
disabled: true,
icon: 'fa fa-info-circle'
}, {
type: 'break'
}, {
id: 'comment',
type: 'button',
caption: '讨论',
disabled: true,
icon: 'fa fa-comments'
}],
onClick: function(event) {
var ids = [],
self = w2ui['grid_soldier_market'];
var selected = self.getSelection();
selected.forEach(function(i) {
ids.push(self.get(i)._id);
})
switch(event.target) {
case 'buy':
ADDON.market.buy(ids[0]);
break;
case 'desc':
ADDON.market.desc(selected[0]);
break;
case 'comment':
ADDON.market.comment(ids[0]);
break;
default:
break;
}
}
},
onContextMenu: function(event) {
var self = this;
$().bmenu([
{
text: '购买兵蚁',
icon: 'fa fa-cart-plus',
action: function() {
self.toolbar.click('buy');
}
}, {
divider: true
}, {
text: '简介说明',
icon: 'fa fa-info-circle',
action: function() {
self.toolbar.click('desc');
}
}, {
text: '讨论交流',
icon: 'fa fa-comments',
action: function() {
self.toolbar.click('comment');
}
}, {
divider: true
}, {
text: '举报兵蚁',
icon: 'fa fa-warning',
disabled: true
}
], event.originalEvent);
},
onSelect: function(event) {
var self = this;
event.onComplete = function() {
var ids = [];
self.getSelection().forEach(function(i) {
ids.push(self.get(i)._id);
})
ids.length === 1
? self.toolbar.enable('buy', 'desc', 'comment')
: self.toolbar.disable('buy', 'desc', 'comment');
}
},
onUnselect: function(event) {
this.onSelect(event);
},
onExpand: function(event) {
var soldier = ADDON.market.cache[this.get(event.recid)._id];
$('#'+event.box_id).html(
'' + (w2utils.encodeTags(soldier.desc || '<暂无简介>')).replace(/\n/g, '
') + '
'
).animate({
'height': 100
}, 100);
},
onDblClick: function(event) {
var self = this;
event.onComplete = function() {
self.toggle(self.getSelection());
}
}
},
//@ 强化兵蚁框架
layout_soldier_edit: {
name: 'layout_soldier_edit',
panels: [{
size: '100%',
type: 'left',
style: 'border: 1px solid #dfdfdf;',
content: '' +
'' +
'',
resizable: true,
toolbar: {
items: [{
id: 'save',
icon: 'fa fa-save',
hint: '[Ctrl || Command] + S',
type: 'button',
caption: '保存'
}, {
type: 'break'
}, {
id: 'call',
icon: 'fa fa-folder-open-o',
type: 'menu',
caption: '调用兵蚁',
items: []
}, {
type: 'spacer'
}, {
id: 'bug',
type: 'check',
icon: 'fa fa-bug',
hint: '[Ctrl || Command] + E',
caption: '预览'
}],
},
tabs: {
tabs: [{
id: 'client',
caption: ' 客户端'
}, {
id: 'server',
caption: ' 服务端'
}],
onClick: function(event) {
$('.soldier_editor').hide();
$('#layout_soldier_edit_' + event.target).show();
ADDON.depot.editor[event.target].resize();
}
}
}, {
size: '100%',
type: 'main',
style: 'border: 1px solid #dfdfdf;',
content: '',
resizable: true,
}]
},
//@ 添加/修改兵蚁信息表单
form_soldier: {
name: 'form_soldier',
style: 'height: 100%;border: 0px;background-color: transparent;',
fields: [
{
field: 'env',
type: 'list',
required: true,
html: {
caption: '运行环境',
attr: 'style="width: 200px;"'
},
options: {
items: []
}
}, {
field: 'cms',
type: 'combo',
required: true,
html: {
caption: '兵蚁归类',
attr: 'style="width: 200px"'
},
options: {
items: []
}
}, {
field: 'name',
type: 'text',
required: true,
html: {
caption: '兵蚁大名',
attr: 'style="width: 200px"'
}
}, {
field: 'desc',
type: 'textarea',
html: {
caption: '简单说明',
attr: 'rows="4" style="width: 200px;"'
}
}
]
},
//@ 出售兵蚁表单
form_soldier_sell: {
name: 'form_soldier_sell',
style: 'height: 100%;border: 0px;background-color: transparent;',
fields: [{
field: 'coin',
type: 'int',
required: true,
html: {
caption: '出售蚁币',
attr: 'style="width: 180px;"'
}
}],
// record: {
// coin: 0
// },
actions: {
'Submit': function() {}
}
}
},
//- 加载UI
init: function() {
var self = this;
$().w2grid(self.ui.grid_soldier_depot);
$().w2grid(self.ui.grid_soldier_market);
$().w2layout(self.ui.layout_soldier_edit);
$().w2form(self.ui.form_soldier_sell);
},
//- 后台任务
task: {
init: function(ids) {
var self = this;
//= 创建侧边栏
if (!w2ui['sidebar'].get('soldier_task')) {
w2ui['sidebar'].add('ant_soldier', {
id: 'soldier_task',
icon: 'fa fa-tasks',
text: '后台列表'
});
};
ids.forEach(function(i) {
self.add(i);
})
},
//- 添加任务
add: function(id) {
var self = this;
var soldier = ADDON.depot.cache[id];
//= 判断任务是否存在 ? 激活 : 创建
if (!w2ui['layout_preview_tabs'].get('tab_' + id)) {
// self.setTask(id);
//= 添加任务标签
w2ui['layout_preview_tabs'].add({
id: 'tab_' + id,
closable: true,
caption: ' ' + soldier.name,
onClose: function(event) {
//- 标签关闭事件
event.preventDefault();
w2ui['layout_preview_tabs'].remove('tab_' + id);
$('#task_' + id).remove();
if (event.target === w2ui['layout_preview_tabs'].active) {
//- 选择最后一个标签
var tabs = w2ui['layout_preview_tabs'].tabs;
var last_tab = tabs[tabs.length - 1];
last_tab ? w2ui['layout_preview_tabs'].click(last_tab.id) : null;
};
//- 刷新侧边栏UI
self.refresh();
//- 清除本地数据
self.delTask(id);
},
//- 标签激活事件
onClick: function(event) {
var _id = '#task_' + id;
//= 隐藏其他任务DIV
$('.soldier_task').hide();
//= 显示当前任务DIV
$(_id).show();
//= 刷新UI(防止DIV错乱)
w2ui.layout.resize('preview');
//= 更新图标
setTimeout(function() {
$('.soldier_task_icon').attr('class', 'soldier_task_icon fa fa-circle-o-notch');
$(_id + '_icon').attr('class', 'soldier_task_icon fa fa-circle-o-notch fa-spin');
w2ui['task_' + id] ? w2ui['task_' + id].resize('main') && w2ui['task_' + id].resize('main') : null;
}, 100)
}
})
//= 创建任务DIV
var dom = $('');
$('#soldier_task_div').append(dom);
//= 运行任务
ADDON.depot.run({
client_code: soldier.code.client,
server_code: soldier.code.server,
div_id: 'task_' + id,
id: id,
status: 'background'
})
}
w2ui['layout_preview_tabs'].click('tab_' + id);
self.refresh();
},
refresh: function() {
//= 设置侧边栏
var len = w2ui['layout_preview_tabs'].tabs.length;
if (len < 1) {
w2ui['sidebar'].remove('soldier_task');
w2ui['sidebar'].click('soldier_depot');
}else{
w2ui['sidebar'].set('soldier_task', {
count: len
});
}
w2ui['sidebar'].click('soldier_task');
},
//- 获取本地保存任务
getTask: function() {
var task = localStorage.getItem('task');
var item = task ? task.split(',') : [],
temp = [];
item.forEach(function(i) {
if (i && ADDON.depot.cache[i]) {
temp.push(i)
};
})
return temp;
},
//- 保存本地任务
setTask: function(id) {
var _task = this.getTask();
_task.push(id);
localStorage.setItem('task', _task);
},
//- 删除本地任务
delTask: function(id) {
var self = this;
self.clearTask();
self.getTask().forEach(function(i) {
self.setTask(i);
});
},
//- 清空本地任务
clearTask: function() {
localStorage.removeItem('task');
}
},
//- 仓库事件
depot: {
//@ 编辑器
editor: {},
//@ 缓存
cache: null,
temp: {},
//@ 加载UI
reload: function() {
var self = this;
var records = [];
for (var i in self.cache) {
var soldier = self.cache[i];
if (soldier) {
records.push({
recid: records.length + 1,
_id: soldier._id,
aid: 'ant-' + w2utils.encodeTags(soldier.cms) + '-' + (soldier.aid < 10 ? '0' + soldier.aid : soldier.aid),
env: w2utils.encodeTags(soldier.env || '-'),
name: w2utils.encodeTags(soldier.name),
sell: soldier.sell ? '是' : '否',
verify: soldier.sell ? (soldier.verify ? '是' : '否') : '-',
ctime: ANT.ftime(soldier.ctime),
_ctime: soldier.ctime,
utime: ANT.ftime(soldier.utime),
style: 'color: ' + (soldier.style.color || (soldier.sell ? (soldier.verify ? 'rgb(22, 144, 61)': 'rgb(195, 45, 9)'): '')) + ';background-color: ' + (soldier.style.bgcolor || '')
})
};
}
w2ui['grid_soldier_depot'].records = records;
w2ui['grid_soldier_depot'].sort('_ctime', 'desc');
w2ui['grid_soldier_depot'].refresh();
setTimeout(function() {
w2ui.sidebar.set('soldier_depot', {count: records.length});
ADDON.unlock();
}, 100);
},
//@ 加载数据
refresh: function() {
var self = this;
ADDON.content(w2ui['grid_soldier_depot']);
if (!self.cache) {
self.cache = {};
ADDON.lock('加载仓库数据中..')
$.get('/addons/ant.soldier/depot/data', function(data) {
var env = {},
cms = {};
self.temp.env = [];
self.temp.cms = [];
data.forEach(function(i) {
self.cache[i._id] = i;
// env[i.env] = 0;
cms[i.cms] = 0;
})
for (var i in ANT.CONNECT_API.cache) {
env[i] = 0;
}
for (var i in env) {
self.temp.env.push(i);
}
for (var i in cms) {
self.temp.cms.push(i);
}
self.reload();
//= 启动上次未关闭的后台应用
// ADDON.task.init(ADDON.task.getTask());
})
}
},
//@ 添加数据
add: function() {
var self = this;
w2popup.open({
title: '
添加兵蚁',
body: '
',
style : 'padding: 15px 0 0 0',
modal: true,
width: 450,
height: 300,
onOpen: function(event) {
event.onComplete = function() {
//- 获取运行环境
ADDON.ui.form_soldier.fields[0].options.items = self.temp.env;
ADDON.ui.form_soldier.fields[1].options.items = self.temp.cms;
//- 显示表单
var form = $.extend({}, ADDON.ui.form_soldier, {
actions: {
'添加': function() {
var self = this;
if (self.validate().length === 0) {
w2popup.lock('添加兵蚁中..', true);
$.post('/addons/ant.soldier/depot/add', self.record, function(data) {
w2popup.unlock();
if (data.ret) {
w2popup.close();
ADDON.success('添加兵蚁成功!');
ADDON.depot.cache[data.ret._id] = data.ret;
ADDON.depot.reload();
ADDON.depot.edit(data.ret._id);
}else{
ADDON.error('添加兵蚁失败!
' + data.err)
}
})
};
}
}
})
$('#ant_soldier_add_div').w2form(form);
}
},
onClose: function(event) {
w2ui['form_soldier'].destroy();
}
})
},
//@ 删除数据
del: function(ids) {
var self = this;
w2confirm('确定删除所选的(' + ids.length + ')条数据吗?', '
删除兵蚁', function(btn) {
if (btn === 'Yes') {
ADDON.lock('删除数据中..');
$.post('/addons/ant.soldier/depot/del', {
ids: ids
}, function(data) {
ADDON.unlock();
if (!data.err) {
ADDON.success('删除数据成功!');
ids.forEach(function(id) {
delete self.cache[id];
})
self.reload();
}else{
ADDON.error('删除数据失败!');
}
})
};
})
},
//@ 强化兵蚁
edit: function(id) {
var self = this;
var soldier = self.cache[id];
//- 创建窗口
w2popup.open({
title: '
强化兵蚁:
' + w2utils.encodeTags(soldier.name) + '',
body: '
',
style: 'padding: 0;',
showMax: true,
modal: true,
width: 900,
height: 600,
onOpen: function(event) {
event.onComplete = function() {
// 加载兵蚁调用
var _menu = [];
for (var c in ADDON.depot.cache) {
if (c !== id) {
_menu.push({
id: c,
text: ADDON.depot.cache[c].name,
icon: 'fa fa-puzzle-piece'
});
};
}
w2ui['layout_soldier_edit_left_toolbar'].set('call', {
items: _menu,
count: _menu.length,
disabled: _menu.length === 0
});
//
$("#layout_soldier_edit_div").w2render(w2ui['layout_soldier_edit']);
var jsMode = require('ace/mode/javascript').Mode;
// var pyMode = require('ace/mode/python').Mode;
// var lgTool = require('ace/ext/language_tools');
//- 初始化编辑器:客户端
self.editor.client = ace.edit('layout_soldier_edit_client');
self.editor.client.setTheme('ace/theme/tomorrow');
self.editor.client.session.setMode(new jsMode());
self.editor.client.session.setUseWrapMode(true);
self.editor.client.session.setValue(soldier.code.client);
//- 初始化编辑器:服务端
self.editor.server = ace.edit('layout_soldier_edit_server');
self.editor.server.setTheme('ace/theme/tomorrow');
// self.editor.server.session.setMode((soldier.env === 'python') ? new pyMode() : new jsMode());
self.editor.server.session.setUseWrapMode(true);
self.editor.server.session.setValue(soldier.code.server);
//- 编辑器自动补全
// self.editor.client.setOptions({
// enableBasicAutocompletion: true
// })
//- 编辑器快捷键
[{
name: 'saveCmd',
bindKey: {
win: 'Ctrl-S',
mac: 'Command-S'
},
exec: function(editor) {
w2ui['layout_soldier_edit_left_toolbar'].click('save');
}
}, {
name: 'bugCmd',
bindKey: {
win: 'Ctrl-E',
mac: 'Command-E'
},
exec: function(editor) {
w2ui['layout_soldier_edit_left_toolbar'].click('bug');
}
}, {
name: 'toggleCmd',
bindKey: {
win: 'Ctrl-M',
mac: 'Command-M'
},
exec: function() {
w2popup.toggle();
}
}].forEach(function(key) {
self.editor.client.commands.addCommand(key);
self.editor.server.commands.addCommand(key);
})
//- 编辑器事件
self.editor.client.session.on('change', function(e) {
//@ 如果编辑器处于最大化,则进行插件的预览
w2ui['layout_soldier_edit_left_toolbar'].get('bug').checked
? w2ui['layout_soldier_edit_left_toolbar'].click('bug')
// ? self.run({
// client_code: self.editor.client.getValue(),
// server_code: self.editor.server.getValue(),
// div_id: 'layout_soldier_edit_preview',
// id: id,
// status: 'debug'
// })
: null;
})
//- 工具栏点击事件
w2ui.layout_soldier_edit_left_toolbar.onClick = function(event) {
var c_c = self.editor.client.getValue();
var s_c = self.editor.server.getValue();
switch(event.target) {
case 'save':
//- 保存代码
w2popup.lock('保存代码中..', true);
$.post('/addons/ant.soldier/depot/saveCode', {
id: soldier._id,
client: c_c,
server: s_c
}, function(err) {
w2popup.unlock();
if (err) {
ADDON.error('代码保存失败!
' + err);
}else{
soldier.code = {
client: c_c,
server: s_c
}
ADDON.success('代码保存成功!');
}
})
break;
case 'bug':
//- 预览代码
var ck = !w2ui['layout_soldier_edit_left_toolbar'].get('bug').checked;
w2ui['layout_soldier_edit'].set('left', {
size: ck ? '60%' : '100%'
});
w2ui['layout_soldier_edit_left_toolbar'].set('bug', {
icon: ck ? 'fa fa-bug fa-spin' : 'fa fa-bug'
})
ck ? self.run({
client_code: c_c,
server_code: s_c,
div_id: 'layout_soldier_edit_preview',
id: id,
status: 'debug'
}) : $('#layout_soldier_edit_preview').html('');
break;
default:
if (event.target.substr(0, 5) === 'call:') {
var _id = event.target.substr(5),
_call = ADDON.depot.cache[_id];
if (_call) {
w2ui['layout_soldier_edit'].lock('left', '解析兵蚁中..', true);
var UI = function() {
return {
init: function(opt) {
var _code = '\nAPI.loadSoldier("' + _id + '", {\n';
for (var a in opt.argv) {
_code += '\t// 所需参数:' + (opt.argv[a].caption || a) + '\n';
_code += '\t' + a + ': "' + (opt.argv[a].default || '') + '",\n';
};
_code += '}, function(data) {\n\t\n})\n';
self.editor.client.insert(_code);
}
}
},
plugin = eval(_call.code.client);
plugin(new UI, {});
w2ui['layout_soldier_edit'].unlock('left');
}else{
ADDON.error('调用的兵蚁不存在!');
}
};
}
}
w2ui['layout_soldier_edit_left_tabs'].click('client');
w2popup.toggle();
}
},
onToggle: function(event) {
event.onComplete = function() {
w2ui['layout_soldier_edit'].set('left', {
size: w2ui['layout_soldier_edit_left_toolbar'].get('bug').checked
? '60%'
: '100%'
})
w2ui['layout_soldier_edit'].resize();
self.editor.client.resize();
self.editor.server.resize();
}
},
onClose: function(event) {
this.onMin(event);
},
onMin: function(event) {
event.onComplete = function() {
w2ui['layout_soldier_edit_left_toolbar'].get('bug').checked
? w2ui['layout_soldier_edit_left_toolbar'].click('bug')
: null;
}
}
})
},
//@ 更改设置
reset: function(id) {
var self = this;
var soldier = self.cache[id];
w2popup.open({
title: '
更改设置',
body: '
',
style : 'padding: 15px 0 0 0',
modal: true,
width: 450,
height: 300,
onOpen: function(event) {
event.onComplete = function() {
//- 获取运行环境
ADDON.ui.form_soldier.fields[0].options.items = self.temp.env;
ADDON.ui.form_soldier.fields[1].options.items = self.temp.cms;
//- 显示表单
var form = $.extend({}, ADDON.ui.form_soldier, {
record: {
env: {
id: soldier.env,
text: soldier.env
},
cms: soldier.cms,
name: soldier.name,
desc: soldier.desc
},
actions: {
'保存': function() {
var self = this;
if (self.validate().length === 0) {
w2popup.lock('保存兵蚁中..', true);
$.post('/addons/ant.soldier/depot/save', $.extend(self.record, {
id: id
}), function(data) {
console.log(data);
w2popup.unlock();
if (data.ret) {
w2popup.close();
ADDON.success('保存兵蚁成功!');
ADDON.depot.cache[data.ret._id] = data.ret;
ADDON.depot.reload();
// ADDON.depot.edit(data.ret._id);
}else{
ADDON.error('保存兵蚁失败!
' + data.err)
}
})
};
}
}
})
$('#ant_soldier_set_form').w2form(form);
}
},
onClose: function(event) {
w2ui['form_soldier'].destroy();
}
})
},
//@ 加载兵蚁
load: function(id) {
var self = this;
var soldier = self.cache[id];
//- 加载窗口
w2popup.open({
title: '
' + w2utils.encodeTags(soldier.name) + '',
body: '
',
style: 'padding: 0;',
showMax: true,
modal: true,
width: 600,
height: 450,
onOpen: function(event) {
event.onComplete = function() {
self.run({
client_code: soldier.code.client,
server_code: soldier.code.server,
div_id: 'layout_soldier_load_div',
id: id,
status: 'running'
})
}
},
onToggle: function(event) {
event.onComplete = function() {
w2ui['layout_soldier_load_div'] ? w2ui['layout_soldier_load_div'].resize() : null;
}
},
onMin: function(event) {
this.onToggle(event);
},
onMax: function(event) {
this.onToggle(event);
}
})
},
//@ 执行兵蚁
run: function(opt) {
function msg(obj) {
$('#' + opt.div_id).html(
'
' +
//- 图标
'
' +
'
' +
//- 错误提示
'
' + (obj.title || '加载兵蚁失败!') + '' +
//- 错误信息
'
' + (obj.msg || '') + '
' +
'
'
)
}
try{
msg({
icon: 'fa fa-spinner fa-pulse',
title: '加载兵蚁中'
})
var soldier = this.cache[opt.id];
var client = eval(opt.client_code);
if (!ANT.CONNECT_API.cache[soldier.env]) {
throw('无法加载运行环境:' + soldier.env);
}else{
var API = new function() {
return ANT.CONNECT_API.cache[soldier.env];
}
API.connect(
//- 连接成功
function() {
client(new ANT.SOLDIER_UI(opt.id, opt.div_id, opt.status), API, opt.server_code);
},
//- 连接失败
function() {
msg({
icon: 'fa fa-frown-o',
msg: '无法连接运行环境:' + soldier.env
})
},
//- 没有配置
function() {
msg($.extend({}, {
icon: 'fa fa-coffee',
msg: '请先配置好运行环境'
}))
}
)
}
}catch(e) {
var m = typeof(e) === 'string' ? e : e.message;
msg({
icon: 'fa fa-frown-o text-danger',
msg: m
})
return false;
}
},
//@ 出售兵蚁
sell: function(id) {
var self = this;
var soldier = self.cache[id];
w2popup.open({
title: '
出售兵蚁',
width: 400,
height: 250,
modal: true,
body: '
',
style: 'padding:50px 0 0 0;',
onOpen: function(event) {
event.onComplete = function() {
w2ui['form_soldier_sell'].actions['Submit'] = function() {
if (this.validate().length === 0) {
w2popup.lock('提交出售中..', true);
$.post('/addons/ant.soldier/depot/sell', {
id: id,
coin: this.record.coin
}, function(data) {
w2popup.close();
if (data.ret) {
ADDON.success('发布出售成功!请耐心等待审核!');
soldier.sell = true;
soldier.verify = false;
ADDON.depot.reload();
}else{
ADDON.error('发布出售失败!
' + data.err);
}
})
};
}
$('#form_soldier_sell').w2render(w2ui['form_soldier_sell']);
}
}
})
},
//@ 取消出售
cancelSell: function(id) {
var soldier = this.cache[id];
w2confirm('确定取消出售所选兵蚁?', function(btn) {
if (btn === 'Yes') {
ADDON.lock('取消出售中..');
$.post('/addons/ant.soldier/depot/cancelsell', {
id: id
}, function(data) {
ADDON.unlock();
if (data.ret) {
ADDON.success('取消出售成功!');
soldier.sell = false;
soldier.verify = false;
ADDON.depot.reload();
}else{
ADDON.error('取消出售失败!
' + data.err);
}
})
};
})
}
},
//- 市场事件
market: {
cache: null,
reload: function() {
var self = this;
var records = [];
for (var i in self.cache) {
var soldier = self.cache[i];
if (soldier) {
records.push({
recid: records.length + 1,
_id: soldier._id,
aid: 'ant-' + soldier.cms + '-' + (soldier.aid < 10 ? '0' + soldier.aid : soldier.aid),
env: w2utils.encodeTags(soldier.env || '-'),
name: w2utils.encodeTags(soldier.name),
user: soldier.user ? w2utils.encodeTags(soldier.user.nickname) : '<已删除>',
coin: soldier.coin,
buys: (soldier.members || []).length,
utime: ANT.ftime(soldier.utime),
_utime: soldier.utime,
style: 'color: ' + (soldier.style.color || '') + ';background-color: ' + (soldier.style.bgcolor || '')
})
};
}
w2ui['grid_soldier_market'].records = records;
w2ui['grid_soldier_market'].sort('_utime', 'desc');
w2ui['grid_soldier_market'].refresh();
setTimeout(function() {
w2ui.sidebar.set('soldier_market', {count: records.length});
ADDON.unlock();
}, 100);
},
refresh: function() {
var self = this;
ADDON.content(w2ui['grid_soldier_market']);
if (!self.cache) {
self.cache = {};
ADDON.lock('加载市场数据中..')
$.get('/addons/ant.soldier/market/data', function(data) {
data.forEach(function(i) {
self.cache[i._id] = i;
})
self.reload();
})
}
},
//@ 简介说明
desc: function(recid) {
w2ui['grid_soldier_market'].toggle(recid);
},
//@ 购买兵蚁
buy: function(id) {
var self = this;
var soldier = self.cache[id];
w2confirm('确定使用(
' + soldier.coin + ')蚁币购买此兵蚁?', '
购买兵蚁', function(btn) {
if (btn === 'Yes') {
ADDON.lock('购买兵蚁中..');
$.post('/addons/ant.soldier/market/buy', {
id: id
}, function(data) {
ADDON.unlock();
if (data.ret) {
ADDON.success('购买成功!');
w2ui['sidebar'].dblClick('soldier_market');
setTimeout(function() {
w2ui['sidebar'].dblClick('soldier_depot');
w2ui['sidebar'].select('soldier_depot');
}, 200);
}else{
ADDON.error('购买失败!
' + data.err);
}
})
};
})
},
//@ 兵蚁交流
comment: function(id) {
var self = this,
soldier = self.cache[id];
w2popup.open({
title: ' 讨论交流:
' + w2utils.encodeTags(soldier.name) + '',
style: 'padding: 0',
width: 800,
height: 600,
modal: true,
showMax: true,
body: '',
onOpen: function(event) {
event.onComplete = function() {
$('#comment_' + id).comment({
key: id,
url: '#!/market/comment/' + id,
title: '交易市场 - ' + soldier.name
})
}
}
})
}
}
};
ANT.initAddon({
id: 'ant_soldier',
libs: {
js: ['/addons/ant.soldier/api.ui.js', '/addons/ant.soldier/api.connect.js', '/addons/ant.soldier/md5.js'],
css: ['/addons/ant.soldier/client.css']
},
text: '兵蚁工厂',
group: true,
expanded: true,
nodes: [
{
id: 'soldier_market',
text: '交易市场',
icon: 'fa fa-folder-o',
onClick: function() {
ADDON.market.refresh();
},
onDblClick: function() {
delete ADDON.market.cache;
ADDON.market.refresh();
}
}, {
id: 'soldier_depot',
text: '个人仓库',
icon: 'fa fa-folder-o',
onClick: function() {
ADDON.depot.refresh();
},
onDblClick: function() {
delete ADDON.depot.cache;
ADDON.depot.refresh();
}
}
]
}, ADDON)
})(jQuery)