mirror of
https://github.com/avwo/whistle.git
synced 2026-10-16 21:21:07 +08:00
feat: move group
This commit is contained in:
@@ -0,0 +1 @@
|
||||
biz/webui/htdocs/js/index.js diff=nodiff
|
||||
@@ -1,10 +1,11 @@
|
||||
var rules = require('../../../../lib/rules/util').rules;
|
||||
var recycleBin = require('../../../../lib/rules/util').rules.recycleBin;
|
||||
var isGroup = require('../../../../lib/util/common').isGroup;
|
||||
|
||||
module.exports = function(req, res) {
|
||||
var body = req.body;
|
||||
var list;
|
||||
if (rules.add(body.name, body.value, body.clientId) && body.name[0] !== '\r') {
|
||||
if (rules.add(body.name, body.value, body.clientId) && isGroup(body.name)) {
|
||||
if (body.addToTop) {
|
||||
rules.moveToTop(body.name, body.clientId);
|
||||
} else {
|
||||
|
||||
@@ -2,6 +2,6 @@ var rules = require('../../../../lib/rules/util').rules;
|
||||
|
||||
module.exports = function(req, res) {
|
||||
var body = req.body;
|
||||
var result = rules.moveTo(body.from, body.to, body.clientId);
|
||||
var result = rules.moveTo(body.from, body.to, body.clientId, body.group);
|
||||
res.json({ec: result ? 0 : 2, em: 'success'});
|
||||
};
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
var values = require('../../../../lib/rules/util').values;
|
||||
var recycleBin = require('../../../../lib/rules/util').values.recycleBin;
|
||||
var isGroup = require('../../../../lib/util/common').isGroup;
|
||||
|
||||
module.exports = function(req, res) {
|
||||
var body = req.body;
|
||||
var list;
|
||||
if (values.add(body.name, body.value, body.clientId) && body.name[0] !== '\r') {
|
||||
if (values.add(body.name, body.value, body.clientId) && isGroup(body)) {
|
||||
var group = values.getFirstGroup();
|
||||
group && values.moveTo(body.name, group.name, body.clientId);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,6 @@ var values = require('../../../../lib/rules/util').values;
|
||||
|
||||
module.exports = function(req, res) {
|
||||
var body = req.body;
|
||||
var result = values.moveTo(body.from, body.to, body.clientId);
|
||||
var result = values.moveTo(body.from, body.to, body.clientId, body.group);
|
||||
res.json({ec: result ? 0 : 2, em: 'success'});
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -2689,7 +2689,7 @@ var Index = React.createClass({
|
||||
var activeItem = item || modal.getActive();
|
||||
if (activeItem && !activeItem.isDefault) {
|
||||
var name = activeItem.name;
|
||||
win.confirm('Are you sure to delete \'' + name + '\'.', function (sure) {
|
||||
win.confirm('Are you sure to delete ' + (util.isGroup(name) ? 'group ' : '') + '\'' + name + '\'.', function (sure) {
|
||||
if (!sure) {
|
||||
return;
|
||||
}
|
||||
@@ -2719,7 +2719,7 @@ var Index = React.createClass({
|
||||
var activeItem = item || modal.getActive();
|
||||
if (activeItem && !activeItem.isDefault) {
|
||||
var name = activeItem.name;
|
||||
win.confirm('Are you sure to delete \'' + name + '\'.', function (sure) {
|
||||
win.confirm('Are you sure to delete ' + (util.isGroup(name) ? 'group ' : '') + '\'' + name + '\'.', function (sure) {
|
||||
if (!sure) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -76,9 +76,9 @@ proto.exists = function (name) {
|
||||
};
|
||||
|
||||
function push(list, name) {
|
||||
if (name[0] !== '\r') {
|
||||
if (!util.isGroup(name)) {
|
||||
for (var i = 0, len = list.length; i < len; i++) {
|
||||
if (list[i][0] === '\r') {
|
||||
if (util.isGroup(list[i])) {
|
||||
return list.splice(i, 0, name);
|
||||
}
|
||||
}
|
||||
@@ -146,13 +146,29 @@ proto.setSelected = function (name, selected) {
|
||||
return this._setBoolProp(name, 'selected', selected);
|
||||
};
|
||||
|
||||
proto.moveTo = function (fromName, toName) {
|
||||
proto.moveTo = function (fromName, toName, group) {
|
||||
var list = this.list;
|
||||
var fromIndex = list.indexOf(fromName);
|
||||
var toIndex = list.indexOf(toName);
|
||||
if (fromIndex !== -1 && toIndex !== -1) {
|
||||
list.splice(fromIndex, 1);
|
||||
list.splice(toIndex, 0, fromName);
|
||||
group = group && util.isGroup(fromName);
|
||||
if (group) {
|
||||
var data = this.data;
|
||||
var children = [fromName];
|
||||
for (var i = fromIndex + 1, len = list.length; i < len; i++) {
|
||||
var name = data[list[i]].name;
|
||||
if (util.isGroup(name)) {
|
||||
break;
|
||||
}
|
||||
children.push(name);
|
||||
}
|
||||
list.splice(fromIndex, children.length);
|
||||
children.unshift(toIndex, 0);
|
||||
list.splice.apply(list, children);
|
||||
} else {
|
||||
list.splice(fromIndex, 1);
|
||||
list.splice(toIndex, 0, fromName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -133,7 +133,7 @@ var List = React.createClass({
|
||||
getInitialState: function() {
|
||||
var nodes = util.parseJSON(storage.get('collapseNodes'));
|
||||
this.collapseNodes = Array.isArray(nodes) ? nodes.filter(function(name) {
|
||||
return typeof name === 'string' && name[0] === '\r' && name[1];
|
||||
return util.isGroup(name) && name[1];
|
||||
}) : [];
|
||||
return {};
|
||||
},
|
||||
@@ -319,7 +319,7 @@ var List = React.createClass({
|
||||
if (info) {
|
||||
var fromName = getName(e.dataTransfer.getData('-' + NAME_PREFIX));
|
||||
info.target.style.background = '';
|
||||
if (this.props.modal.moveTo(fromName, info.toName)) {
|
||||
if (this.props.modal.moveTo(fromName, info.toName, this.collapseNodes.indexOf(fromName) !== -1)) {
|
||||
var name = this.props.name === 'rules' ? 'rules' : 'values';
|
||||
dataCenter[name].moveTo(
|
||||
{
|
||||
@@ -484,7 +484,7 @@ var List = React.createClass({
|
||||
isRules ? 7 : 8
|
||||
);
|
||||
if (!isRules) {
|
||||
valuesCtxMenuList[0].list[0].name = name && name[0] === '\r' ? 'Name' : 'Key';
|
||||
valuesCtxMenuList[0].list[0].name = name && util.isGroup(name) ? 'Name' : 'Key';
|
||||
}
|
||||
var height = (isRules ? 280 : 310) - (pluginItem.hide ? 30 : 0);
|
||||
pluginItem.maxHeight = height + 30;
|
||||
@@ -563,7 +563,7 @@ var List = React.createClass({
|
||||
};
|
||||
list.forEach(function(name, i) {
|
||||
var item = data[name];
|
||||
if (item.name[0] === '\r') {
|
||||
if (util.isGroup(item.name)) {
|
||||
setStatus();
|
||||
item.isGroup = true;
|
||||
group = item;
|
||||
|
||||
@@ -2296,3 +2296,7 @@ var PROTO_RE = /^((?:http|ws)s?:\/\/)[^/?]*/;
|
||||
exports.getRawUrl = function (item) {
|
||||
return item.fwdHost && item.url.replace(PROTO_RE, '$1' + item.fwdHost);
|
||||
};
|
||||
|
||||
exports.isGroup = function(name) {
|
||||
return name && name[0] === '\r';
|
||||
};
|
||||
|
||||
+19
-3
@@ -2,6 +2,7 @@ var fs = require('fs');
|
||||
var fse = require('fs-extra2');
|
||||
var path = require('path');
|
||||
var logger = require('../util/logger');
|
||||
var isGroup = require('../util/common').isGroup;
|
||||
var RecycleBin = require('./recycle-bin');
|
||||
|
||||
var ENCODING = { encoding: 'utf8' };
|
||||
@@ -372,7 +373,7 @@ proto.renameFile = function (file, newFile) {
|
||||
return true;
|
||||
};
|
||||
|
||||
proto.moveTo = function (fromName, toName) {
|
||||
proto.moveTo = function (fromName, toName, group) {
|
||||
var filesOrder = this._cache.properties.filesOrder;
|
||||
var fromIndex = filesOrder.indexOf(fromName);
|
||||
if (this._disabled || fromIndex === -1) {
|
||||
@@ -382,8 +383,23 @@ proto.moveTo = function (fromName, toName) {
|
||||
if (toIndex === -1 || fromIndex === toIndex) {
|
||||
return false;
|
||||
}
|
||||
filesOrder.splice(fromIndex, 1);
|
||||
filesOrder.splice(toIndex, 0, fromName);
|
||||
if (group && isGroup(fromName)) {
|
||||
var files = this._cache.files;
|
||||
var children = [fromName];
|
||||
for (var i = fromIndex + 1, len = filesOrder.length; i < len; i++) {
|
||||
var name = files[filesOrder[i]].name;
|
||||
if (isGroup(name)) {
|
||||
break;
|
||||
}
|
||||
children.push(name);
|
||||
}
|
||||
filesOrder.splice(fromIndex, children.length);
|
||||
children.unshift(toIndex, 0);
|
||||
filesOrder.splice.apply(filesOrder, children);
|
||||
} else {
|
||||
filesOrder.splice(fromIndex, 1);
|
||||
filesOrder.splice(toIndex, 0, fromName);
|
||||
}
|
||||
this._writeProperties();
|
||||
return true;
|
||||
};
|
||||
|
||||
+5
-5
@@ -310,7 +310,7 @@ function getAllRulesFile() {
|
||||
function getFirstGroup(storage) {
|
||||
var list = storage.getFileList();
|
||||
for (var i = 0, len = list.length; i < len; i++) {
|
||||
if (list[i].name[0] === '\r') {
|
||||
if (util.isGroup(list[i].name)) {
|
||||
return list[i];
|
||||
}
|
||||
}
|
||||
@@ -327,8 +327,8 @@ function resetRulesIfResort(fromName, toName) {
|
||||
parseRules();
|
||||
}
|
||||
|
||||
function moveRulesTo(fromName, toName, clientId) {
|
||||
if (rulesStorage.moveTo(fromName, toName)) {
|
||||
function moveRulesTo(fromName, toName, clientId, group) {
|
||||
if (rulesStorage.moveTo(fromName, toName, group)) {
|
||||
resetRulesIfResort(fromName, toName);
|
||||
config.setModified(clientId, true);
|
||||
proxy.emit('rulesDataChange', 'move', fromName, toName);
|
||||
@@ -494,8 +494,8 @@ exports.values = {
|
||||
callback(err);
|
||||
});
|
||||
},
|
||||
moveTo: function (fromName, toName, clientId) {
|
||||
if (valuesStorage.moveTo(fromName, toName)) {
|
||||
moveTo: function (fromName, toName, clientId, group) {
|
||||
if (valuesStorage.moveTo(fromName, toName, group)) {
|
||||
config.setModified(clientId);
|
||||
proxy.emit('valuesDataChange', 'move', fromName, toName);
|
||||
return true;
|
||||
|
||||
@@ -320,3 +320,7 @@ exports.wrapRuleValue = function(key, value, size, policy) {
|
||||
var sep = typeof '`'.repeat === 'function' ? '`'.repeat(count) : '```````````';
|
||||
return '\n' + sep + ' ' + key + '\n' + value + '\n' + sep + '\n';
|
||||
};
|
||||
|
||||
exports.isGroup = function(name) {
|
||||
return name && name[0] === '\r';
|
||||
};
|
||||
|
||||
@@ -259,6 +259,7 @@ function getLatestVersion(registry, cb) {
|
||||
exports.getRegistry = getRegistry;
|
||||
exports.getLatestVersion = getLatestVersion;
|
||||
exports.isEmptyObject = common.isEmptyObject;
|
||||
exports.isGroup = common.isGroup;
|
||||
exports.addTrailerNames = common.addTrailerNames;
|
||||
exports.removeIllegalTrailers = common.removeIllegalTrailers;
|
||||
exports.isHead = common.isHead;
|
||||
|
||||
Reference in New Issue
Block a user