Added styles to application

This commit is contained in:
Borys Levytskyi
2015-04-03 18:04:49 +03:00
parent 97eed3fa1e
commit d301d0c317
7 changed files with 83 additions and 29 deletions

View File

@@ -4,6 +4,7 @@
$dispatcher:null, $dispatcher:null,
onViewAttached: function () { onViewAttached: function () {
var d = this.$dispatcher; var d = this.$dispatcher;
this.viewElement.focus();
this.viewElement.addEventListener('keyup', function (args) { this.viewElement.addEventListener('keyup', function (args) {
if (args.keyCode != 13) { if (args.keyCode != 13) {
return; return;
@@ -17,20 +18,23 @@
}); });
app.service('resultView', { app.service('resultView', {
$html: null,
clear: function (){ clear: function (){
this.viewElement.innerHTML = ''; this.viewElement.innerHTML = '';
}, },
display: function (htmlElement) { onViewAttached: function(el) {
if(typeof htmlElement.tagName == "undefined") { var r = 1;
htmlElement = app.buildViewFor(htmlElement); },
} display: function (input, model) {
var result = new app.models.DisplayResult(input, model);
var view = app.buildViewFor(result);
var vw = this.viewElement; var vw = this.viewElement;
if(vw.childNodes.length == 0) { if(vw.childNodes.length == 0) {
vw.appendChild(htmlElement); vw.appendChild(view);
} }
else { else {
vw.insertBefore(htmlElement, vw.childNodes[0]); vw.insertBefore(view, vw.childNodes[0]);
} }
} }
}); });

View File

@@ -19,9 +19,15 @@
this.commands = commands; this.commands = commands;
} }
function DisplayResult (input, payload) {
this.input = input;
this.payload = payload;
}
app.models.BitwiseOperation = BitwiseOperation; app.models.BitwiseOperation = BitwiseOperation;
app.models.BitwiseNumbers = BitwiseNumbers; app.models.BitwiseNumbers = BitwiseNumbers;
app.models.ErrorResult = ErrorResult; app.models.ErrorResult = ErrorResult;
app.models.HelpResult = HelpResult; app.models.HelpResult = HelpResult;
app.models.DisplayResult = DisplayResult;
})(window.app); })(window.app);

View File

@@ -4,12 +4,12 @@
builder: function () { builder: function () {
return new HtmlBuilder(); return new HtmlBuilder();
}, },
view: function (tml, model) {
var func = template.compile(tml); element: function(template, model) {
return HtmlBuilder.createElement(func(model)); return HtmlBuilder.createElement(template, model);
} }
}); });
/*
var template = { var template = {
compile: function (template) { compile: function (template) {
var regex = /(?:{([^}]+)})/g; var regex = /(?:{([^}]+)})/g;
@@ -44,4 +44,5 @@
function normalize(str) { function normalize(str) {
return str.replace(/(\r|\n)+/g, '').replace("'", "\\\'"); return str.replace(/(\r|\n)+/g, '').replace("'", "\\\'");
} }
*/
})(window.app, window.HtmlBuilder); })(window.app, window.HtmlBuilder);

View File

@@ -62,7 +62,7 @@
renderView: function(model) { renderView: function(model) {
var hb = this.$html.builder(); var hb = this.$html.builder();
var commands = model.commands; var commands = model.commands;
hb.element('ul', { class: 'result' }, function() { hb.element('ul', { class: 'help' }, function() {
commands.forEach(function(c) { commands.forEach(function(c) {
hb.element('li', c.name + " — " + c.description); hb.element('li', c.name + " — " + c.description);
});}); });});
@@ -70,5 +70,27 @@
} }
}); });
app.modelView(app.models.ErrorResult, {
$html: null,
renderView: function(model) {
return this.$html.element('<div class="error">{message}</div>', model);
}
});
app.modelView(app.models.DisplayResult, {
$html: null,
renderView: function(model) {
var resultView = this.$html.element(
'<div class="result">' +
'<div class="input">{input}</div>' +
'<div class="payload"></div>' +
'</div>', model);
var payloadView = app.buildViewFor(model.payload);
resultView.childNodes[1].appendChild(payloadView);
return resultView;
}
});
})(window.app); })(window.app);

View File

@@ -38,7 +38,17 @@
return HtmlBuilder.createElement(this.toString()); return HtmlBuilder.createElement(this.toString());
}; };
HtmlBuilder.createElement = function(html) { HtmlBuilder.createElement = function(template, model) {
var regex = /(?:{([^}]+)})/g, html;
if(model == null){
html = template;
} else {
html = template.replace(regex, function(m, g1) {
return HtmlBuilder.escapeHtml(model[g1]);
});
}
var el = document.createElement('div'); var el = document.createElement('div');
el.innerHTML = html; el.innerHTML = html;
return el.children[0]; return el.children[0];
@@ -53,12 +63,21 @@
for(var key in attr) { for(var key in attr) {
if(key == 'html') if(key == 'html')
continue; continue;
str.push(key + '="' + attr[key] + '"'); str.push(key + '="' + HtmlBuilder.escapeHtml(attr[key]) + '"');
} }
return str.join(' '); return str.join(' ');
} }
HtmlBuilder.escapeHtml = function(html) {
return html
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#039;");
};
window.HtmlBuilder = HtmlBuilder; window.HtmlBuilder = HtmlBuilder;
})(); })();

View File

@@ -1,10 +1,18 @@
body { font-family: Verdana; font-size: 0.8em }
.expressionInput { width: 500px; padding: 3px; border: solid 1px lightgray; }
.result { margin: 10px 10px 20px; }
.result .input { font-style: italic; margin-bottom: 10px; }
.result .payload { padding-left: 10px}
.expression .label { font-weight: bold; padding-right: 5px } .expression .label { font-weight: bold; padding-right: 5px }
.expression .one { color: #6d9ad3 } .expression .one { color: #6d9ad3 }
.expression .zero { color: #70d351 } .expression .zero { color: #70d351 }
.expression .result td { border-top: solid 1px } .expression .result td { border-top: dotted 1px gray; }
.expression td { padding: 3px; }
.expression { font-size: 1.2em; }
.error { color: maroon; } .error { color: maroon; }
.result { margin: 10px;}
#view { padding: 10px} #view { padding: 10px}

View File

@@ -22,18 +22,16 @@
<script type="text/javascript" src="app/views.js"></script> <script type="text/javascript" src="app/views.js"></script>
<script type="text/javascript" src="app/dispatcher.js"></script> <script type="text/javascript" src="app/dispatcher.js"></script>
<script type="text/javascript" src="app/controllers.js"></script>
<script type="text/javascript" src="app/services.js"></script> <script type="text/javascript" src="app/services.js"></script>
<script type="text/javascript" src="app/controllers.js"></script>
<link rel="stylesheet" type="text/css" href="css/styles.css" /> <link rel="stylesheet" type="text/css" href="css/styles.css" />
</head> </head>
<body id="rootView"> <body id="rootView">
<input id="in" type="text" data-controller="expressionInputCtrl"/>
<div id="out" type="text" data-controller="resultViewCtrl"></div>
<h2>Bitwise Operations Visualised</h2>
<input id="in" type="text" class="expressionInput" data-controller="expressionInputCtrl" placeholder="type expression like '1>>2' or 'help' for the "/>
<div id="output"> <div id="output" data-controller="resultView">
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
@@ -54,7 +52,7 @@
return; return;
} }
this.$resultView.display(expr); this.$resultView.display(cmdArgs.input, expr);
cmdArgs.commandHandled = true; cmdArgs.commandHandled = true;
} }
@@ -73,7 +71,7 @@
var model = new app.models.HelpResult(commands); var model = new app.models.HelpResult(commands);
resultView.display(model); resultView.display(cmdArgs.input, model);
cmdArgs.commandHandled = true; cmdArgs.commandHandled = true;
}); });
@@ -90,12 +88,8 @@
// Unknown Expression // Unknown Expression
app.command('dispatchInput', function(cmdArgs){ app.command('dispatchInput', function(cmdArgs){
var hb = html.builder();
hb.element('div', { class: "result error", html: "Unknown expression: " + cmdArgs.input });
resultView.display(hb.toHtmlElement());
cmdArgs.commandHandled = true; cmdArgs.commandHandled = true;
resultView.display(cmdArgs.input, new app.models.ErrorResult("Unknown expression: " + cmdArgs.input))
}); });
app.bootstrap(document.getElementById('rootView')); app.bootstrap(document.getElementById('rootView'));