Mercurial > pub > ImplabJs
comparison src/implab/components/_ActivatableMixin.js @ 3:00779cb63b12
formatting
author | cin |
---|---|
date | Tue, 06 Jun 2017 19:45:32 +0300 |
parents | 7d7059d2a810 |
children |
comparison
equal
deleted
inserted
replaced
2:7d7059d2a810 | 3:00779cb63b12 |
---|---|
1 define([ "dojo/_base/declare", "../guard", "./StateMachine", "../log/_LogMixin", ], | 1 define(["dojo/_base/declare", "../guard", "./StateMachine", "../log/_LogMixin", ], function (declare, guard, StateMachine, _LogMixin) { |
2 | |
3 function(declare, guard, StateMachine, _LogMixin) { | |
4 | 2 |
5 var states = { | 3 var states = { |
6 inactive : { | 4 inactive: { |
7 activate : "activating" | 5 activate: "activating" |
8 }, | 6 }, |
9 activating : { | 7 activating: { |
10 success : "active", | 8 success: "active", |
11 failed : "inactive" | 9 failed: "inactive" |
12 }, | 10 }, |
13 active : { | 11 active: { |
14 deactivate : "deactivating" | 12 deactivate: "deactivating" |
15 }, | 13 }, |
16 deactivating : { | 14 deactivating: { |
17 success : "inactive", | 15 success: "inactive", |
18 failed : "active" | 16 failed: "active" |
19 } | 17 } |
20 }; | 18 }; |
21 | 19 |
22 return declare([ _LogMixin ], { | 20 return declare([_LogMixin], { |
23 _controller : null, | 21 _controller: null, |
24 | 22 |
25 _active : null, | 23 _active: null, |
26 | 24 |
27 constructor : function() { | 25 constructor: function () { |
28 this._active = new StateMachine({ | 26 this._active = new StateMachine({ |
29 states : states, | 27 states: states, |
30 initial : "inactive" | 28 initial: "inactive" |
31 }); | 29 }); |
32 }, | 30 }, |
33 | 31 |
34 /** | 32 /** |
35 * @returns {Object} контроллер для активации текущей компоненты | 33 * @returns {Object} контроллер для активации текущей компоненты |
36 */ | 34 */ |
37 getController : function() { | 35 getController: function () { |
38 return this._controller; | 36 return this._controller; |
39 }, | 37 }, |
40 | 38 |
41 /** | 39 /** |
42 * @param {Object} | 40 * @param {Object} |
43 * v Контроллер для активации текущей компоненты | 41 * v Контроллер для активации текущей компоненты |
44 */ | 42 */ |
45 setController : function(v) { | 43 setController: function (v) { |
46 this._controller = v; | 44 this._controller = v; |
47 }, | 45 }, |
48 | 46 |
49 /** | 47 /** |
50 * @returns {Boolean} текущая компонента активна | 48 * @returns {Boolean} текущая компонента активна |
51 */ | 49 */ |
52 isActive : function() { | 50 isActive: function () { |
53 return this._active.current == "active"; | 51 return this._active.current == "active"; |
54 }, | 52 }, |
55 | 53 |
56 assertActive : function() { | 54 assertActive: function () { |
57 if (!this.isActive()) | 55 if (!this.isActive()) |
58 throw new Error("The object must be active to perform the operation"); | 56 throw new Error("The object must be active to perform the operation"); |
59 }, | 57 }, |
60 | 58 |
61 /** | 59 /** |
66 * @param{Boolean} | 64 * @param{Boolean} |
67 * direct вызов должен осуществится напрямую, без участия | 65 * direct вызов должен осуществится напрямую, без участия |
68 * контроллера. | 66 * контроллера. |
69 * @return{Boolean} успешно/неуспешно | 67 * @return{Boolean} успешно/неуспешно |
70 */ | 68 */ |
71 activate : function(direct) { | 69 activate: function (direct) { |
72 var me = this; | 70 var me = this; |
73 if (!direct && this._controller) | 71 if (!direct && this._controller) |
74 return me._controller.activate(me).then(function() { | 72 return me._controller.activate(me).then(function () { |
75 me.onActivated(); | 73 me.onActivated(); |
76 }); | 74 }); |
77 | 75 |
78 me._active.move("activate"); | 76 me._active.move("activate"); |
79 return guard(me, "onActivating").then(function() { | 77 return guard(me, "onActivating").then(function () { |
80 me.log("Activated"); | 78 me.log("Activated"); |
81 me._active.move("success"); | 79 me._active.move("success"); |
82 if (!me._controller) | 80 if (!me._controller) |
83 me.onActivated(); | 81 me.onActivated(); |
84 }, function(err) { | 82 }, function (err) { |
85 console.error(err); | 83 console.error(err); |
86 me.error("Activation failed: {0}", err); | 84 me.error("Activation failed: {0}", err); |
87 me._active.move("failed"); | 85 me._active.move("failed"); |
88 throw err; | 86 throw err; |
89 }); | 87 }); |
96 * @async | 94 * @async |
97 * @param{Boolean} direct вызов должен осуществится напрямую, без | 95 * @param{Boolean} direct вызов должен осуществится напрямую, без |
98 * участия контроллера. | 96 * участия контроллера. |
99 * | 97 * |
100 */ | 98 */ |
101 deactivate : function(direct) { | 99 deactivate: function (direct) { |
102 var me = this; | 100 var me = this; |
103 if (!direct && me._controller) | 101 if (!direct && me._controller) |
104 return me._controller.deactivate(me).then(function() { | 102 return me._controller.deactivate(me).then(function () { |
105 me.onDeactivated(); | 103 me.onDeactivated(); |
106 }); | 104 }); |
107 | 105 |
108 me._active.move("deactivate"); | 106 me._active.move("deactivate"); |
109 return guard(me, "onDeactivating").then(function() { | 107 return guard(me, "onDeactivating").then(function () { |
110 me.log("Deactivated"); | 108 me.log("Deactivated"); |
111 me._active.move("success"); | 109 me._active.move("success"); |
112 if (!me._controller) | 110 if (!me._controller) |
113 me.onDeactivated(); | 111 me.onDeactivated(); |
114 }, function(err) { | 112 }, function (err) { |
115 console.error(err); | 113 console.error(err); |
116 me.error("Deactivation failed: {0}", err); | 114 me.error("Deactivation failed: {0}", err); |
117 me.move("failed"); | 115 me.move("failed"); |
118 throw err; | 116 throw err; |
119 }); | 117 }); |
120 | 118 |
121 }, | 119 }, |
122 | 120 |
123 toogleActive : function() { | 121 toogleActive: function () { |
124 var me = this; | 122 var me = this; |
125 return (me.isActive() ? me.deactivate() : me.activate()).then(function() { | 123 return (me.isActive() ? me.deactivate() : me.activate()).then(function () { |
126 return me.isActive(); | 124 return me.isActive(); |
127 }); | 125 }); |
128 }, | 126 }, |
129 | 127 |
130 /** | 128 /** |
131 * Событие вызывается перед активацией текущей компоненты | 129 * Событие вызывается перед активацией текущей компоненты |
132 * | 130 * |
133 * @returns{Boolean|undefined} если false - активация будет отменена | 131 * @returns{Boolean|undefined} если false - активация будет отменена |
134 */ | 132 */ |
135 onActivating : function() { | 133 onActivating: function () {}, |
136 }, | |
137 | 134 |
138 /** | 135 /** |
139 * Событие вызывается перед деактивацией текущей компоненты | 136 * Событие вызывается перед деактивацией текущей компоненты |
140 * | 137 * |
141 * @returns {Boolean|undefined} если false - деактивация будет отменена | 138 * @returns {Boolean|undefined} если false - деактивация будет отменена |
142 */ | 139 */ |
143 onDeactivating : function() { | 140 onDeactivating: function () {}, |
144 }, | |
145 | 141 |
146 /** | 142 /** |
147 * Событие вызывается после активации текущей компоненты | 143 * Событие вызывается после активации текущей компоненты |
148 */ | 144 */ |
149 onActivated : function() { | 145 onActivated: function () {}, |
150 }, | |
151 | 146 |
152 /** | 147 /** |
153 * Событие вызывается после деактивации текущей компоненты | 148 * Событие вызывается после деактивации текущей компоненты |
154 */ | 149 */ |
155 onDeactivated : function() { | 150 onDeactivated: function () {} |
156 } | |
157 | 151 |
158 }); | 152 }); |
159 }); | 153 }); |