Resolves #593 -- add alias support with local storage

This commit is contained in:
Peter Cottle 2020-07-05 14:57:21 -07:00
parent a1f7bda2d9
commit 12cdb49457
3 changed files with 55 additions and 2 deletions

View file

@ -3,6 +3,7 @@ var Backbone = require('backbone');
var Errors = require('../util/errors'); var Errors = require('../util/errors');
var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall; var ParseWaterfall = require('../level/parseWaterfall').ParseWaterfall;
var LevelStore = require('../stores/LevelStore');
var intl = require('../intl'); var intl = require('../intl');
var CommandProcessError = Errors.CommandProcessError; var CommandProcessError = Errors.CommandProcessError;
@ -267,8 +268,19 @@ var Command = Backbone.Model.extend({
}, },
parseAll: function() { parseAll: function() {
var str = this.get('rawStr'); var rawInput = this.get('rawStr');
var results = this.get('parseWaterfall').parseAll(str); debugger;
const aliasMap = LevelStore.getAliasMap();
for (var i = 0; i<Object.keys(aliasMap).length; i++) {
var alias = Object.keys(aliasMap)[i];
var searcher = new RegExp(alias + "(\\s|$)", "g");
if (searcher.test(rawInput)) {
rawInput = rawInput.replace(searcher, aliasMap[alias] + ' ');
break;
}
}
var results = this.get('parseWaterfall').parseAll(rawInput);
if (!results) { if (!results) {
// nothing parsed successfully // nothing parsed successfully

View file

@ -8,6 +8,7 @@ var Errors = require('../util/errors');
var CommandProcessError = Errors.CommandProcessError; var CommandProcessError = Errors.CommandProcessError;
var LocaleStore = require('../stores/LocaleStore'); var LocaleStore = require('../stores/LocaleStore');
var LocaleActions = require('../actions/LocaleActions'); var LocaleActions = require('../actions/LocaleActions');
var LevelStore = require('../stores/LevelStore');
var GlobalStateStore = require('../stores/GlobalStateStore'); var GlobalStateStore = require('../stores/GlobalStateStore');
var GlobalStateActions = require('../actions/GlobalStateActions'); var GlobalStateActions = require('../actions/GlobalStateActions');
var GitError = Errors.GitError; var GitError = Errors.GitError;
@ -50,6 +51,21 @@ var instantCommands = [
msg: lines.join('\n') msg: lines.join('\n')
}); });
}], }],
[/^alias (\w+)="(.+)"$/, function(bits) {
const alias = bits[1];
const expansion = bits[2];
LevelStore.addToAliasMap(alias, expansion);
throw new CommandResult({
msg: 'Set alias "'+alias+'" to "'+expansion+'"',
});
}],
[/^unalias (\w+)$/, function(bits) {
const alias = bits[1];
LevelStore.removeFromAliasMap(alias);
throw new CommandResult({
msg: 'Removed alias "'+alias+'"',
});
}],
[/^locale (\w+)$/, function(bits) { [/^locale (\w+)$/, function(bits) {
LocaleActions.changeLocale(bits[1]); LocaleActions.changeLocale(bits[1]);
throw new CommandResult({ throw new CommandResult({

View file

@ -9,6 +9,7 @@ var util = require('../util');
var ActionTypes = AppConstants.ActionTypes; var ActionTypes = AppConstants.ActionTypes;
var SOLVED_MAP_STORAGE_KEY = 'solvedMap'; var SOLVED_MAP_STORAGE_KEY = 'solvedMap';
var ALIAS_STORAGE_KEY = 'aliasMap';
var _levelMap = {}; var _levelMap = {};
var _solvedMap = {}; var _solvedMap = {};
@ -55,6 +56,26 @@ function _syncToStorage() {
} }
} }
function getAliasMap() {
try {
return JSON.parse(localStorage.getItem(ALIAS_STORAGE_KEY) || '{}') || {};
} catch (e) {
return {};
}
}
function addToAliasMap(alias, expansion) {
const aliasMap = getAliasMap();
aliasMap[alias] = expansion;
localStorage.setItem(ALIAS_STORAGE_KEY, JSON.stringify(aliasMap));
}
function removeFromAliasMap(alias) {
const aliasMap = getAliasMap();
delete aliasMap[alias];
localStorage.setItem(ALIAS_STORAGE_KEY, JSON.stringify(aliasMap));
}
var validateLevel = function(level) { var validateLevel = function(level) {
level = level || {}; level = level || {};
var requiredFields = [ var requiredFields = [
@ -108,6 +129,10 @@ var LevelStore = Object.assign(
EventEmitter.prototype, EventEmitter.prototype,
AppConstants.StoreSubscribePrototype, AppConstants.StoreSubscribePrototype,
{ {
getAliasMap: getAliasMap,
addToAliasMap: addToAliasMap,
removeFromAliasMap: removeFromAliasMap,
getSequenceToLevels: function() { getSequenceToLevels: function() {
return levelSequences; return levelSequences;
}, },