Created HelpView

This commit is contained in:
Borys Levytskyi
2015-04-02 23:30:05 +03:00
parent 5ca01bb0de
commit a9264b11e3
5 changed files with 158 additions and 106 deletions

116
.idea/workspace.xml generated
View File

@@ -23,11 +23,11 @@
</component>
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="views.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/app/views.js">
<file leaf-file-name="views.js" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="255" max-vertical-offset="833">
<caret line="15" column="40" selection-start-line="15" selection-start-column="40" selection-end-line="15" selection-end-column="40" />
<state vertical-scroll-proportion="0.76004344" vertical-offset="252" max-vertical-offset="1173">
<caret line="56" column="6" selection-start-line="56" selection-start-column="6" selection-end-line="56" selection-end-column="6" />
<folding />
</state>
</provider>
@@ -36,43 +36,43 @@
<file leaf-file-name="inputCtrl.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/app/inputCtrl.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="119" max-vertical-offset="493">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="493">
<caret line="7" column="16" selection-start-line="7" selection-start-column="16" selection-end-line="7" selection-end-column="16" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="bootstrap.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/app/bootstrap.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="119" max-vertical-offset="238">
<caret line="7" column="0" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="index.html" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/index.html">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-16.73077" vertical-offset="534" max-vertical-offset="1700">
<caret line="57" column="42" selection-start-line="57" selection-start-column="42" selection-end-line="57" selection-end-column="42" />
<state vertical-scroll-proportion="-22.0" vertical-offset="516" max-vertical-offset="1530">
<caret line="64" column="45" selection-start-line="64" selection-start-column="45" selection-end-line="64" selection-end-column="45" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="html.js" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="html.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/components/html.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.29533115" vertical-offset="0" max-vertical-offset="1105">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1105">
<caret line="16" column="23" selection-start-line="16" selection-start-column="23" selection-end-line="16" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="dispatcher.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/app/dispatcher.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="476">
<caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="commandr.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/components/commandr.js">
<provider selected="true" editor-type-id="text-editor">
@@ -166,8 +166,10 @@
<option value="$PROJECT_DIR$/css/styles.css" />
<option value="$PROJECT_DIR$/app/views.js" />
<option value="$PROJECT_DIR$/app/inputCtrl.js" />
<option value="$PROJECT_DIR$/index.html" />
<option value="$PROJECT_DIR$/components/html.js" />
<option value="$PROJECT_DIR$/app/dispatcher.js" />
<option value="$PROJECT_DIR$/index.html" />
<option value="$PROJECT_DIR$/app/views/views.js" />
</list>
</option>
</component>
@@ -282,6 +284,24 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="BitwiseCalc" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="BitwiseCalc" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="app" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="views" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scope" />
@@ -297,11 +317,11 @@
<recent name="C:\Projects\BitwiseCalc\js\components" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Projects\BitwiseCalc\app\views" />
<recent name="C:\Projects\BitwiseCalc" />
<recent name="C:\Projects\BitwiseCalc\js\bitwise" />
<recent name="C:\Projects\BitwiseCalc\js" />
<recent name="C:\Projects\BitwiseCalc\js\components" />
<recent name="C:\Projects\BitwiseCalc\app" />
</key>
</component>
<component name="RunManager">
@@ -405,14 +425,6 @@
</breakpoint-manager>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/components/html.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="18" max-vertical-offset="867">
<caret line="13" column="12" selection-start-line="13" selection-start-column="12" selection-end-line="13" selection-end-column="12" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/components/should.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="442" max-vertical-offset="578">
@@ -451,7 +463,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/views.js">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="51" max-vertical-offset="918">
<caret line="4" column="0" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
@@ -497,7 +509,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/views.js">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="139" max-vertical-offset="867">
<caret line="18" column="30" selection-start-line="18" selection-start-column="30" selection-end-line="18" selection-end-column="30" />
@@ -544,7 +556,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/views.js">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="510" max-vertical-offset="663">
<caret line="30" column="0" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" />
@@ -583,7 +595,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/views.js">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="68" max-vertical-offset="204">
<caret line="4" column="3" selection-start-line="4" selection-start-column="3" selection-end-line="4" selection-end-column="3" />
@@ -622,7 +634,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/views.js">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="68" max-vertical-offset="204">
<caret line="4" column="3" selection-start-line="4" selection-start-column="3" selection-end-line="4" selection-end-column="3" />
@@ -661,7 +673,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/views.js">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="17" max-vertical-offset="170">
<caret line="1" column="5" selection-start-line="1" selection-start-column="5" selection-end-line="1" selection-end-column="5" />
@@ -730,14 +742,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="833">
<caret line="15" column="40" selection-start-line="15" selection-start-column="40" selection-end-line="15" selection-end-column="40" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/components/commandr.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="595">
@@ -778,6 +782,22 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/dispatcher.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="476">
<caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/components/html.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1105">
<caret line="16" column="23" selection-start-line="16" selection-start-column="23" selection-end-line="16" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/inputCtrl.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="493">
@@ -788,16 +808,16 @@
</entry>
<entry file="file://$PROJECT_DIR$/index.html">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="-16.73077" vertical-offset="534" max-vertical-offset="1700">
<caret line="57" column="42" selection-start-line="57" selection-start-column="42" selection-end-line="57" selection-end-column="42" />
<state vertical-scroll-proportion="-22.0" vertical-offset="516" max-vertical-offset="1530">
<caret line="64" column="45" selection-start-line="64" selection-start-column="45" selection-end-line="64" selection-end-column="45" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/components/html.js">
<entry file="file://$PROJECT_DIR$/app/views/views.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.29533115" vertical-offset="0" max-vertical-offset="1105">
<caret line="16" column="23" selection-start-line="16" selection-start-column="23" selection-end-line="16" selection-end-column="23" />
<state vertical-scroll-proportion="0.76004344" vertical-offset="252" max-vertical-offset="1173">
<caret line="56" column="6" selection-start-line="56" selection-start-column="6" selection-end-line="56" selection-end-column="6" />
<folding />
</state>
</provider>

22
app/dispatcher.js Normal file
View File

@@ -0,0 +1,22 @@
(function(app){
var handlers = [];
var dispatcher = {
handler: function(handler) {
handlers.push(handler);
},
dispatch: function(cmd) {
var i, result;
for(i=0; i<handlers.length; i++){
result = handlers[i](cmd);
if(result != null)
{
this
}
}
},
};
})(window.app);

View File

@@ -1,43 +0,0 @@
(function(app) {
var formatter = app.service('formatter');
var calc = app.service('calc');
function ExpressionView(expression) {
this.expression = expression;
}
ExpressionView.prototype.getHtml = function () {
var expr = this.expression,
html = app.service('html').builder(),
result = expr.result(),
maxLen = calc.maxNumberOfBits(expr.operand1, expr.operand2, result);
html.element('table', { class: "expression", cellspacing: "0"}, function () {
buildRow(html, expr.operand1, formatter.toBinaryString(expr.operand1, maxLen));
buildRow(html, expr.operand2, formatter.toBinaryString(expr.operand2, maxLen));
buildRow(html, expr.string, formatter.toBinaryString(result, maxLen), { class: 'result'});
});
return html.toString();
};
function buildRow(html, label, binaryStr, attrs) {
html.element('tr', attrs, function() {
html.element('td', { class: "label"}, label);
appendBinaryColumns(html, binaryStr);
});
}
function appendBinaryColumns(html, binaryStr) {
var css;
for(var i=0;i<binaryStr.length;i++) {
css = binaryStr[i] == '1' ? 'one' : 'zero';
html.element('td', { class: css }, binaryStr[i]);
}
}
app.views.ExpressionView = ExpressionView;
})(window.app);

63
app/views/views.js Normal file
View File

@@ -0,0 +1,63 @@
(function(app) {
var formatter = app.service('formatter');
var calc = app.service('calc');
function ExpressionView(expression) {
this.expression = expression;
}
ExpressionView.prototype.getViewElement = function () {
var expr = this.expression,
hb = app.service('html').builder(),
result = expr.result(),
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));
buildRow(hb, expr.operand2, formatter.toBinaryString(expr.operand2, maxLen));
buildRow(hb, expr.string, formatter.toBinaryString(result, maxLen), { class: 'result'});
});
return hb.toHtmlElement();
};
function buildRow(hb, label, binaryStr, attrs) {
hb.element('tr', attrs, function() {
hb.element('td', { class: "label"}, label);
appendBinaryColumns(hb, binaryStr);
});
}
function appendBinaryColumns(hb, binaryStr) {
var css;
for(var i=0;i<binaryStr.length;i++) {
css = binaryStr[i] == '1' ? 'one' : 'zero';
hb.element('td', { class: css }, binaryStr[i]);
}
}
app.views.ExpressionView = ExpressionView;
})(window.app);
(function(app){
function HelpView(commands) {
this.commands = commands;
}
HelpView.prototype.getViewElement = function() {
var hb = app.service('html').builder();
var commands = this.commands;
hb.element('ul', { class: 'result' }, function() {
commands.forEach(function(c) {
hb.element('li', c.name + " — " + c.description);
});});
return hb.toHtmlElement();
};
app.views.HelpView = HelpView;
})(window.app);

View File

@@ -15,7 +15,7 @@
<script type="text/javascript" src="app/bitwise/expression.js"></script>
<script type="text/javascript" src="app/bitwise/formatter.js"></script>
<script type="text/javascript" src="app/views.js"></script>
<script type="text/javascript" src="app/views/views.js"></script>
<script type="text/javascript" src="app/inputCtrl.js"></script>
<script type="text/javascript" src="app/bootstrap.js"></script>
@@ -49,11 +49,8 @@
return;
}
var view = new window.app.views.ExpressionView(expr);
var hb = app.service('html').builder();
hb.element('div', { class: 'result', html: view.getHtml() });
outputDiv.appendChild(hb.toHtmlElement());
var expressionView = new window.app.views.ExpressionView(expr);
outputDiv.appendChild(expressionView.getViewElement());
cmdArgs.commandHandled = true;
});
@@ -65,16 +62,9 @@
}
var commands = [{ name: 'help', description: 'Displays help'}];
var helpView = new app.views.HelpView(commands)
outputDiv.appendChild(helpView.getViewElement());
var hb = html.builder();
hb.element('ul', { class: 'result', html: function() {
commands.forEach(function(c) {
hb.element('li', c.name + " — " + c.description);
});
}});
outputDiv.appendChild(hb.toHtmlElement());
cmdArgs.commandHandled = true;
});