routebar
Version:
A visual component for navigating between panel cells containing user content.
429 lines (428 loc) • 15.2 kB
HTML
<html lang="en">
<head>
<title>Code coverage report for js/baseDispatcher.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
<a href="../index.html">all files</a> / <a href="index.html">js/</a> baseDispatcher.js
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">82.98% </span>
<span class="quiet">Statements</span>
<span class='fraction'>39/47</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">58.33% </span>
<span class="quiet">Branches</span>
<span class='fraction'>14/24</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">83.33% </span>
<span class="quiet">Functions</span>
<span class='fraction'>10/12</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">82.98% </span>
<span class="quiet">Lines</span>
<span class='fraction'>39/47</span>
</div>
</div>
</div>
<div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122</td><td class="line-coverage quiet"><span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">141×</span>
<span class="cline-any cline-yes">141×</span>
<span class="cline-any cline-yes">141×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-yes">297×</span>
<span class="cline-any cline-yes">297×</span>
<span class="cline-any cline-yes">141×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1127×</span>
<span class="cline-any cline-yes">1127×</span>
<span class="cline-any cline-yes">1127×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1127×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-yes">68×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">1059×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-yes">141×</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">4×</span>
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">define(['utils', 'IPlugin'], function(Utils, IPlugin) {
"use strict";
//todo может например перейти на https://github.com/component/emitter
/**
* @class
* Класс диспетчера, инкапсулирует событийную модель, каждый экземпляр представляет собой событие.
* @param {JQuery} mainDiv - элемент, в котором располагается панель. Должен содержать класс rb-wrapper.
* @constructor BaseDispatcher
* @extends IPlugin
*/
function BaseDispatcher(mainDiv) {
this._actions = {};
this._index = 0;
this._mainDiv = mainDiv;
}
Utils.inherite(BaseDispatcher, IPlugin);
BaseDispatcher.prototype.configure = function(config) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (typeof config === 'object') {
if (config.loadingDiv !== undefined) {
this._loadingDiv = $(config.loadingDiv);
}
}
};
// todo сделать не once, а дать возможность указать число - количество срабатываний,
// или функцию которая если вернет true - не отписываться, false - отписываться
/**
* Зарегистрировать действие, которое выполнится при запуске действий
* @param {function} action - регистрируемое действие
* @param {boolean} [once] - выполнить действие только в первый раз
* @returns {number|null} индекс зарегистрированного действия (null, если действие не было зарегистрировано)
* @memberOf BaseDispatcher
*/
BaseDispatcher.prototype.add = function(action, once) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (typeof action === 'function') {
this._actions[this._index++] = {
action: action,
once: once
};
return this._index-1;
}
<span class="cstat-no" title="statement not covered" > return null;</span>
};
// todo отписка не по индексу, а по функции
/**
* Удалить действие из списка зарегистрированных действий
* @param {number} index - индекс удаляемого действия
* @memberOf BaseDispatcher
*/
BaseDispatcher.prototype.remove = function(index) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (this._actions.hasOwnProperty(index)) {
delete this._actions[index];
}
};
/**
* Запустить зарегистрированные действия
* @param {function} [fn] - функция, которая будет выполнена после того, как выполнятся все зарегистрированные действия.
* Если зарегистрированные функции возвращают Promise, функция выполнится после завершения этих Promise.
* Если хотя бы одна из зарегистрированных функций (или их Promise) вернет false, фунция fn не будет вызвана.
* @param {Array} [actionArgs] - аргументы для зарегистрированных функций (для всех функций будут переданы одни и те же аргументы).
* @returns {*} Результат выполнения функции fn, либо undefined если функция fn не была вызвана
* @memberOf BaseDispatcher
*/
BaseDispatcher.prototype.runActions = function(fn, actionArgs) {
var
actions = [],
results = [],
self = this;
if (Object.keys(this._actions).length) {
this._mainDiv.append(this._loadingDiv); // todo вынести это в moving, а здесь просто вызывать функцию
Object.keys(this._actions).map(function(index) {
var value = this._actions[index],
result = value.action.apply(undefined, actionArgs);
<span class="missing-if-branch" title="else path not taken" >E</span>if (value.once) {
this.remove(index);
}
<span class="missing-if-branch" title="if path not taken" >I</span>if (result instanceof Promise) {
<span class="cstat-no" title="statement not covered" > actions.push(result);</span>
} else {
results.push(result);
}
}.bind(this));
return Promise.all(actions).then(function(promiseResult) {
self._loadingDiv.remove();
var isOk = results.concat(promiseResult).every(function(res) {
return res !== false;
});
<span class="missing-if-branch" title="else path not taken" >E</span>if (isOk) {
return fn && fn();
}
}, function(error) <span class="fstat-no" title="function not covered" >{</span>
<span class="cstat-no" title="statement not covered" > self._loadingDiv.remove();</span>
<span class="cstat-no" title="statement not covered" > console.error(error);</span>
var isOk = <span class="cstat-no" title="statement not covered" >results.every(function(res) <span class="fstat-no" title="function not covered" >{</span></span>
<span class="cstat-no" title="statement not covered" > return res !== false;</span>
});
<span class="cstat-no" title="statement not covered" > if (isOk) {</span>
<span class="cstat-no" title="statement not covered" > return fn && fn();</span>
}
});
} else {
return fn && fn();
}
};
/**
* Уничтожить экземпляр класса
* @memberOf BaseDispatcher
*/
BaseDispatcher.prototype.destroy = function() {
this._actions = null;
};
return BaseDispatcher;
});</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Mar 27 2017 01:49:59 GMT+0300 (MSK)
</div>
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../sorter.js"></script>
</body>
</html>