mirror of
https://github.com/BorysLevytskyi/BitwiseCmd.git
synced 2025-12-10 06:52:05 +01:00
partial support of plain numbers.
This commit is contained in:
@@ -6,12 +6,12 @@
|
||||
return Math.floor(Math.log(num) / Math.log(2)) + 1;
|
||||
};
|
||||
|
||||
calc.maxNumberOfBits = function () {
|
||||
calc.maxNumberOfBits = function (arr) {
|
||||
|
||||
var counts = [], num;
|
||||
for(var i=0;i<arguments.length; i++)
|
||||
for(var i=0;i<arr.length; i++)
|
||||
{
|
||||
num = arguments[i];
|
||||
num = arr[i];
|
||||
counts.push(this.numberOfBits(num));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,23 +1,51 @@
|
||||
(function() {
|
||||
var twoOperandsRegex = /^(\d+)(<<|>>|\||\&|\^)(\d+)$/;
|
||||
var twoOperandsRegex = /^(\d+)(<<|>>|\||\&|\^)(\d+)$/;
|
||||
var numbersList = /^((\d*)+\s?)+$/;
|
||||
|
||||
app.service('expression', {
|
||||
parse: function(string) {
|
||||
var matches = twoOperandsRegex.exec(string);
|
||||
if(matches == null) {
|
||||
return null;
|
||||
var trimmed = string.replace(/^\s+|\s+$/, '');
|
||||
var matches = twoOperandsRegex.exec(trimmed);
|
||||
|
||||
if(matches != null) {
|
||||
return createCalculableExpression(matches);
|
||||
}
|
||||
|
||||
return {
|
||||
string:matches[0],
|
||||
operand1: parseInt(matches[1], 10),
|
||||
sign: matches[2],
|
||||
operand2: parseInt(matches[3], 10),
|
||||
result: function() {
|
||||
return eval(string);
|
||||
}
|
||||
matches = numbersList.exec(string);
|
||||
if(matches != null) {
|
||||
return createListOfNumbersExpression(matches)
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
function createCalculableExpression(matches) {
|
||||
|
||||
var o1 = parseInt(matches[1], 10);
|
||||
var o2 = parseInt(matches[3], 10);
|
||||
|
||||
return {
|
||||
string: matches.input,
|
||||
operand1: o1,
|
||||
sign: matches[2],
|
||||
operand2: o2,
|
||||
calculate: function() {
|
||||
return eval(this.string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createListOfNumbersExpression(matches) {
|
||||
var numbers = [], i=0;
|
||||
|
||||
for(;i<matches.length; i++) {
|
||||
numbers.push(parseInt(matches[i], 10));
|
||||
}
|
||||
|
||||
return {
|
||||
string:matches.input,
|
||||
operands: numbers
|
||||
}
|
||||
}
|
||||
|
||||
})(window.app);
|
||||
32
app/views.js
32
app/views.js
@@ -10,9 +10,21 @@
|
||||
|
||||
ExpressionView.prototype.render = function () {
|
||||
var expr = this.expression,
|
||||
hb = app.service('html').builder(),
|
||||
result = expr.result(),
|
||||
maxLen = calc.maxNumberOfBits(expr.operand1, expr.operand2, result);
|
||||
hb = app.service('html').builder();
|
||||
|
||||
console.log('Rendering expression: ', expr)
|
||||
|
||||
if(typeof expr.calculate == "function") {
|
||||
return renderCalculableExpression(expr, hb);
|
||||
} else {
|
||||
return renderListOfNumbers(expr, hb);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
function renderCalculableExpression(expr, hb) {
|
||||
var result = expr.calculate(),
|
||||
maxLen = calc.maxNumberOfBits([expr.operand1, expr.operand2, result]);
|
||||
|
||||
hb.element('table', { class: "expression", cellspacing: "0"}, function () {
|
||||
buildRow(hb, expr.operand1, formatter.toBinaryString(expr.operand1, maxLen));
|
||||
@@ -21,7 +33,19 @@
|
||||
});
|
||||
|
||||
return hb.toHtmlElement();
|
||||
};
|
||||
}
|
||||
|
||||
function renderListOfNumbers(expr, hb) {
|
||||
var maxLen = calc.maxNumberOfBits(expr.operands);
|
||||
|
||||
hb.element('table', { class: "expression", cellspacing: "0"}, function () {
|
||||
expr.operands.forEach(function(o){
|
||||
buildRow(hb, o, formatter.toBinaryString(o, maxLen));
|
||||
});
|
||||
});
|
||||
|
||||
return hb.toHtmlElement();
|
||||
}
|
||||
|
||||
function buildRow(hb, label, binaryStr, attrs) {
|
||||
hb.element('tr', attrs, function() {
|
||||
|
||||
@@ -96,8 +96,11 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
element.addEventListener('DOMNodeRemoved', function () {
|
||||
ctrl.detachView();
|
||||
element.addEventListener('DOMNodeRemoved', function (evt) {
|
||||
if(element === evt.target) {
|
||||
ctrl.detachView();
|
||||
}
|
||||
|
||||
console.log(ctrlName + ' Controller: view detached');
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user