mirror of
https://github.com/BorysLevytskyi/BitwiseCmd.git
synced 2025-12-21 04:02:47 +01:00
Support of error results
This commit is contained in:
@@ -4,6 +4,7 @@ export default class AppState {
|
|||||||
this.commandResults = [];
|
this.commandResults = [];
|
||||||
this.handlers = [];
|
this.handlers = [];
|
||||||
this.uiTheme = persistData.uiTheme || 'dark';
|
this.uiTheme = persistData.uiTheme || 'dark';
|
||||||
|
this.debugMode = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
addCommandResult(result) {
|
addCommandResult(result) {
|
||||||
|
|||||||
@@ -2,8 +2,12 @@ import is from './is';
|
|||||||
|
|
||||||
var handlers = [];
|
var handlers = [];
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
errorHandler: (input, err) => logError(err)
|
||||||
|
}
|
||||||
|
|
||||||
var cmd = {
|
var cmd = {
|
||||||
debugMode: true,
|
debugMode: false,
|
||||||
execute: function(rawInput) {
|
execute: function(rawInput) {
|
||||||
var input = rawInput.trim().toLowerCase();
|
var input = rawInput.trim().toLowerCase();
|
||||||
var handler = findHandler(input);
|
var handler = findHandler(input);
|
||||||
@@ -15,12 +19,12 @@ var cmd = {
|
|||||||
try {
|
try {
|
||||||
invokeHandler(input, handler);
|
invokeHandler(input, handler);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
displayCommandError(input, "Error: " + e);
|
config.errorHandler(input, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
displayCommandError(input, "Unsupported expression: " + input.trim());
|
logError(input, new Error("Unsupported expression: " + input.trim()));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
commands: function(catalog) {
|
commands: function(catalog) {
|
||||||
@@ -51,11 +55,14 @@ var cmd = {
|
|||||||
},
|
},
|
||||||
clear: function() {
|
clear: function() {
|
||||||
console.log('clear');
|
console.log('clear');
|
||||||
|
},
|
||||||
|
onError: function(handler) {
|
||||||
|
config.errorHandler = handler;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function displayCommandError(input, message) {
|
function logError(err) {
|
||||||
console.error(message)
|
console.error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
function invokeHandler (input, handler) {
|
function invokeHandler (input, handler) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import HelpResult from './models/HelpResult';
|
|||||||
import AboutResult from './models/AboutResult';
|
import AboutResult from './models/AboutResult';
|
||||||
import UnknownCommandResult from './models/UnknownCommandResult';
|
import UnknownCommandResult from './models/UnknownCommandResult';
|
||||||
import ExpressionResult from './models/ExpressionResult';
|
import ExpressionResult from './models/ExpressionResult';
|
||||||
|
import ErrorResult from './models/ErrorResult';
|
||||||
import * as expression from './expression';
|
import * as expression from './expression';
|
||||||
|
|
||||||
var cmdConfig = {};
|
var cmdConfig = {};
|
||||||
@@ -36,16 +37,15 @@ export default {
|
|||||||
'about': function(c) {
|
'about': function(c) {
|
||||||
appState.addCommandResult(new AboutResult(c.input));
|
appState.addCommandResult(new AboutResult(c.input));
|
||||||
},
|
},
|
||||||
'-debug': function() {
|
|
||||||
app.debugMode = true;
|
|
||||||
console.log('debug is on');
|
|
||||||
},
|
|
||||||
'-notrack': function () {}
|
'-notrack': function () {}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Last command handler reports that input is unknown
|
||||||
cmd.command({
|
cmd.command({
|
||||||
canHandle: () => true,
|
canHandle: () => true,
|
||||||
handle: (c) => appState.addCommandResult(new UnknownCommandResult(c.input))
|
handle: (c) => appState.addCommandResult(new UnknownCommandResult(c.input))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
cmd.onError((input, err) => appState.addCommandResult(new ErrorResult(input, err)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@ import HelpResultView from './HelpResultView';
|
|||||||
import AboutResultView from './AboutResultView';
|
import AboutResultView from './AboutResultView';
|
||||||
import ExpressionResult from '../../models/ExpressionResult';
|
import ExpressionResult from '../../models/ExpressionResult';
|
||||||
import ExpressionResultView from './ExpressionResultView';
|
import ExpressionResultView from './ExpressionResultView';
|
||||||
|
import ErrorResult from '../../models/ErrorResult';
|
||||||
|
|
||||||
export default class DisplayResult extends React.Component {
|
export default class DisplayResult extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
@@ -14,6 +15,10 @@ export default class DisplayResult extends React.Component {
|
|||||||
return this.renderUnknown();
|
return this.renderUnknown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this.props.content instanceof ErrorResult) {
|
||||||
|
return this.renderError(this.props.content.error.message);
|
||||||
|
}
|
||||||
|
|
||||||
return <div className="result">
|
return <div className="result">
|
||||||
<div className="input mono"><span className="cur">></span>{this.props.content.input}<a className="hashLink" title="Link for this expression" href={window.location.pathname + '#' + this.props.inputHash}>#</a></div>
|
<div className="input mono"><span className="cur">></span>{this.props.content.input}<a className="hashLink" title="Link for this expression" href={window.location.pathname + '#' + this.props.inputHash}>#</a></div>
|
||||||
<div className="content">
|
<div className="content">
|
||||||
@@ -28,6 +33,12 @@ export default class DisplayResult extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderError(message) {
|
||||||
|
return <div className="result">
|
||||||
|
<div className="error">(X_X) Error occurred: <strong>{message}</strong></div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
findResultComponent(result) {
|
findResultComponent(result) {
|
||||||
if(result instanceof HelpResult) {
|
if(result instanceof HelpResult) {
|
||||||
return <HelpResultView content={result} />
|
return <HelpResultView content={result} />
|
||||||
|
|||||||
8
src/app/models/ErrorResult.js
Normal file
8
src/app/models/ErrorResult.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import CommandResult from './CommandResult';
|
||||||
|
|
||||||
|
export default class ErrorResult extends CommandResult {
|
||||||
|
constructor(input, error) {
|
||||||
|
super(input);
|
||||||
|
this.error = error;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -83,6 +83,7 @@ code { font-size: 1.2em; font-weight: bold; }
|
|||||||
.dark .hashLink, .dark .hashLink:visited { color: #333 }
|
.dark .hashLink, .dark .hashLink:visited { color: #333 }
|
||||||
.dark .hashLink:hover { color: #999 }
|
.dark .hashLink:hover { color: #999 }
|
||||||
.dark ul.top-links li:hover { background: #333 }
|
.dark ul.top-links li:hover { background: #333 }
|
||||||
|
.dark .error { color: mediumvioletred}
|
||||||
|
|
||||||
/* Top Links Shrink */
|
/* Top Links Shrink */
|
||||||
@media (max-width: 800px) {
|
@media (max-width: 800px) {
|
||||||
|
|||||||
Reference in New Issue
Block a user