Implemented di container component

This commit is contained in:
Borys Levytskyi
2015-04-03 03:32:14 +03:00
parent 72f9d0bb4e
commit 569c335368
4 changed files with 137 additions and 119 deletions

190
.idea/workspace.xml generated
View File

@@ -37,32 +37,18 @@
<entry file="file://$PROJECT_DIR$/app/controllers.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="799">
<caret line="21" column="31" selection-start-line="21" selection-start-column="31" selection-end-line="21" selection-end-column="31" />
<caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="18" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="services.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/app/services.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">
<file leaf-file-name="index.html" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/index.html">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="9.961538" vertical-offset="446" max-vertical-offset="1428">
<caret line="11" column="0" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<state vertical-scroll-proportion="0.27402136" vertical-offset="186" max-vertical-offset="2023">
<caret line="20" column="69" selection-start-line="20" selection-start-column="69" selection-end-line="20" selection-end-column="69" />
<folding />
</state>
</provider>
</entry>
@@ -70,12 +56,9 @@
<file leaf-file-name="bindr.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/components/bindr.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="983" max-vertical-offset="1972">
<state vertical-scroll-proportion="0.0" vertical-offset="1615" max-vertical-offset="2278">
<caret line="95" column="24" selection-start-line="95" selection-start-column="24" selection-end-line="95" selection-end-column="24" />
<folding>
<element signature="e#2988#3318#0" expanded="false" />
<element signature="e#3374#3535#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
@@ -93,8 +76,8 @@
<file leaf-file-name="app.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/app/app.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1258">
<caret line="35" column="6" selection-start-line="35" selection-start-column="6" selection-end-line="35" selection-end-column="6" />
<state vertical-scroll-proportion="0.0" vertical-offset="136" max-vertical-offset="1292">
<caret line="9" column="26" selection-start-line="9" selection-start-column="26" selection-end-line="9" selection-end-column="26" />
<folding />
</state>
</provider>
@@ -103,7 +86,7 @@
<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.0" vertical-offset="0" max-vertical-offset="1105">
<state vertical-scroll-proportion="0.0" vertical-offset="272" 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>
@@ -113,23 +96,33 @@
<file leaf-file-name="should.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/components/should.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="578">
<state vertical-scroll-proportion="0.0" vertical-offset="391" max-vertical-offset="578">
<caret line="23" column="9" selection-start-line="23" selection-start-column="9" selection-end-line="23" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="dispatcher.js" pinned="false" current="true" current-in-tab="true">
<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.036916394" vertical-offset="0" max-vertical-offset="921">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="289">
<caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="container.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/components/container.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="126" max-vertical-offset="782">
<caret line="18" column="9" selection-start-line="18" selection-start-column="9" selection-end-line="18" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindManager">
@@ -176,18 +169,19 @@
<option value="$PROJECT_DIR$/app/console.js" />
<option value="$PROJECT_DIR$/app/bootstrap.js" />
<option value="$PROJECT_DIR$/components/controlr.js" />
<option value="$PROJECT_DIR$/app/app.js" />
<option value="$PROJECT_DIR$/app/controllers.js" />
<option value="$PROJECT_DIR$/components/bindr.js" />
<option value="$PROJECT_DIR$/app/app.js" />
<option value="$PROJECT_DIR$/index.html" />
<option value="$PROJECT_DIR$/components/container.js" />
<option value="$PROJECT_DIR$/app/controllers.js" />
</list>
</option>
</component>
<component name="ProjectFrameBounds">
<option name="x" value="-8" />
<option name="y" value="-8" />
<option name="width" value="1936" />
<option name="height" value="1056" />
<option name="width" value="1382" />
<option name="height" value="744" />
</component>
<component name="ProjectInspectionProfilesVisibleTreeState">
<entry key="Project Default">
@@ -373,14 +367,14 @@
<servers />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
<frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.34947917" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.34919474" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
@@ -388,11 +382,11 @@
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3284055" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
</layout>
</component>
<component name="Vcs.Log.UiProperties">
@@ -511,11 +505,7 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="80" max-vertical-offset="799">
<caret line="33" column="29" selection-start-line="33" selection-start-column="29" selection-end-line="33" selection-end-column="29" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
@@ -561,11 +551,7 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="204" max-vertical-offset="306">
<caret line="12" column="7" selection-start-line="12" selection-start-column="7" selection-end-line="12" selection-end-column="7" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
@@ -603,11 +589,7 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="102" max-vertical-offset="289">
<caret line="6" column="61" selection-start-line="6" selection-start-column="61" selection-end-line="6" selection-end-column="61" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
@@ -645,11 +627,7 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="102" max-vertical-offset="289">
<caret line="6" column="61" selection-start-line="6" selection-start-column="61" selection-end-line="6" selection-end-column="61" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
@@ -680,11 +658,7 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="102" max-vertical-offset="289">
<caret line="6" column="61" selection-start-line="6" selection-start-column="61" selection-end-line="6" selection-end-column="61" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
@@ -707,11 +681,7 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="85" max-vertical-offset="289">
<caret line="5" column="61" selection-start-line="5" selection-start-column="61" selection-end-line="5" selection-end-column="61" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
@@ -741,7 +711,6 @@
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="255">
<caret line="7" column="7" selection-start-line="7" selection-start-column="7" selection-end-line="7" selection-end-column="7" />
<folding />
</state>
</provider>
</entry>
@@ -761,22 +730,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/app.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1258">
<caret line="35" column="6" selection-start-line="35" selection-start-column="6" selection-end-line="35" selection-end-column="6" />
<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$/components/should.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="578">
@@ -793,45 +746,62 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/controllers.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="799">
<caret line="21" column="31" selection-start-line="21" selection-start-column="31" selection-end-line="21" selection-end-column="31" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/components/bindr.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="983" max-vertical-offset="1972">
<caret line="95" column="24" selection-start-line="95" selection-start-column="24" selection-end-line="95" selection-end-column="24" />
<folding>
<element signature="e#2988#3318#0" expanded="false" />
<element signature="e#3374#3535#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/index.html">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="9.961538" vertical-offset="446" max-vertical-offset="1428">
<caret line="11" column="0" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
<folding>
<element signature="e#2086#2528#0" expanded="false" />
<element signature="e#2603#2787#0" expanded="false" />
<element signature="e#2875#3123#0" expanded="false" />
</folding>
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/dispatcher.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.036916394" vertical-offset="0" max-vertical-offset="921">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="289">
<caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" 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$/components/container.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="126" max-vertical-offset="782">
<caret line="18" column="9" selection-start-line="18" selection-start-column="9" selection-end-line="18" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/app.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="136" max-vertical-offset="1292">
<caret line="9" column="26" selection-start-line="9" selection-start-column="26" selection-end-line="9" selection-end-column="26" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app/controllers.js">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="799">
<caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="18" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/index.html">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.27402136" vertical-offset="186" max-vertical-offset="2023">
<caret line="20" column="69" selection-start-line="20" selection-start-column="69" selection-end-line="20" selection-end-column="69" />
<folding />
</state>
</provider>
</entry>
</component>
</project>

View File

@@ -1,4 +1,4 @@
(function (should, commandr, bindr) {
(function (should, commandr, bindr, Container) {
var app = {
views: {}
@@ -9,6 +9,8 @@
var commandHandlers = {};
var runObservers = [];
app.di = new Container();
function resolveOrInject(name, inst, container, entityName) {
var resolved;
@@ -66,4 +68,4 @@
})(window.should, window.commandr, window.bindr);
})(window.should, window.commandr, window.bindr, window.Container);

40
components/container.js Normal file
View File

@@ -0,0 +1,40 @@
(function(should){
function Container(store) {
this.store = {};
this.resolved = {};
}
Container.prototype.register = function(name, inst) {
var reg = this.store[name];
if(reg == null) {
reg = this.store[name] = { instance: inst };
}
return reg;
};
Container.prototype.resolve = function(name) {
var reg = this.store[name];
if(reg == null) {
throw new Error(''); // TODO: wrote
}
if(reg.resolved == null) {
var inst = reg.instance;
this.resolveProperties(inst);
reg.resolved = inst;
}
return reg.resolved;
};
Container.prototype.resolveProperties = function (instance) {
for(var property in instance) {
if(property[0] == '$') {
var name = property.substr(1, property.length - 1);
instance[property] = this.resolve(name);
}
}
};
window.Container = Container;
})();

View File

@@ -9,6 +9,7 @@
<script type="text/javascript" src="components/commandr.js"></script>
<script type="text/javascript" src="components/should.js"></script>
<script type="text/javascript" src="components/html.js"></script>
<script type="text/javascript" src="components/container.js"></script>
<script type="text/javascript" src="app/app.js"></script>
<script type="text/javascript" src="app/bitwise/calc.js"></script>
@@ -26,13 +27,6 @@
<input id="in" type="text" data-controller="expressionInputCtrl"/>
<div id="out" type="text" data-controller="resultViewCtrl"></div>
<div id="victim">
<div data-controller="test">
i'm a victim!
</div>
</div>
<div><button onclick="document.getElementById('victim').innerHTML = ''">Remove Victim</button></div>
<div id="output">
@@ -99,6 +93,18 @@
cmdArgs.commandHandled = true;
});
app.di.register("ts", {
$html:null,
doStuff: function() {
console.log(this.$html);
}
});
app.di.register('html', { he: 23});
var t = app.di.resolve('ts');
t.doStuff();
app.bootstrap(document.getElementById('rootView'));
})();