// Expression View app.compose(function () { "use strict"; var formatter = app.get('formatter'); var calc = app.get('calc'); var html = app.get('html'); var cmdConfig = app.get('cmdConfig'); var expression = app.get('expression'); // TODO: move to protojs String.prototype.padLeft = function(size, char) { return formatter.padLeft(this, size, char); } app.modelView(app.models.BitwiseOperation, function() { function getTemplateId(model) { switch (model.sign) { case '<<': case '>>': case '>>>': return 'shiftExpressionView'; case '~': return 'notExpressionView'; default: return 'binaryExpressionView'; } } return { renderView: function(expr) { // TODO: move all this to expression var result = expression.createOperand(calc.calcExpression(expr), getResultMode([expr.operand1, expr.operand2])); var maxLen = getBinaryLength([expr.operand1.value, expr.operand2 != null ? expr.operand2.value : 0, result.value]); var model = Object.create(expr); model.bitsSize = maxLen; model.result = result; var templateId = getTemplateId(model); var template = app.template(templateId); return colorizeBits(template.render(model)); } } }); app.modelView(app.models.BitwiseNumbers, { renderView: function(model) { model.bitsSize = getBinaryLength(model.numbers); return colorizeBits(app.template('numbersList').render(model)); } }); app.modelView(app.models.ViewResult, { renderView: function(model) { var template = app.template(model.template); return template.render(); } }); app.modelView(app.models.ErrorResult, { renderView: function(model) { return html.element('