@tomei/sso 0.63.0 → 0.64.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/.commitlintrc.json +22 -22
  2. package/.gitlab-ci.yml +16 -16
  3. package/.husky/commit-msg +9 -15
  4. package/.husky/pre-commit +7 -7
  5. package/.prettierrc +4 -4
  6. package/Jenkinsfile +57 -57
  7. package/README.md +23 -23
  8. package/__tests__/unit/components/group/group.spec.ts +79 -79
  9. package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
  10. package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
  11. package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +66 -66
  12. package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
  13. package/__tests__/unit/components/login-user/l.spec.ts +746 -746
  14. package/__tests__/unit/components/login-user/login.spec.ts +1164 -1164
  15. package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
  16. package/__tests__/unit/components/system/system.spec.ts +254 -254
  17. package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
  18. package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
  19. package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
  20. package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
  21. package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
  22. package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
  23. package/__tests__/unit/session/session.service.spec.ts +47 -47
  24. package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
  25. package/create-sso-user.sql +39 -39
  26. package/dist/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.js +1 -1
  27. package/dist/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.js.map +1 -1
  28. package/dist/__tests__/unit/components/group-privilege/group-privilege.spec.js +2 -2
  29. package/dist/__tests__/unit/components/group-privilege/group-privilege.spec.js.map +1 -1
  30. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +1 -0
  31. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +71 -0
  32. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +1 -0
  33. package/dist/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.js +2 -2
  34. package/dist/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.js.map +1 -1
  35. package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
  36. package/dist/__tests__/unit/components/login-user/login-user.spec.js +6 -0
  37. package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +1 -0
  38. package/dist/__tests__/unit/components/system/system.spec.js +4 -4
  39. package/dist/__tests__/unit/components/system/system.spec.js.map +1 -1
  40. package/dist/__tests__/unit/session/session.service.spec.js +2 -2
  41. package/dist/__tests__/unit/session/session.service.spec.js.map +1 -1
  42. package/dist/src/components/login-user/user.js +3 -9
  43. package/dist/src/components/login-user/user.js.map +1 -1
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/eslint.config.mjs +58 -58
  46. package/jest.config.js +14 -14
  47. package/migrations/20240314080602-create-user-table.js +124 -124
  48. package/migrations/20240314080603-create-user-group-table.js +85 -85
  49. package/migrations/20240314080604-create-user-user-group-table.js +55 -55
  50. package/migrations/20240314080605-create-login-history-table.js +53 -53
  51. package/migrations/20240527064925-create-system-table.js +78 -78
  52. package/migrations/20240527064926-create-system-privilege-table.js +71 -71
  53. package/migrations/20240527065342-create-group-table.js +93 -93
  54. package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
  55. package/migrations/20240528011551-create-group-system-access-table.js +72 -72
  56. package/migrations/20240528023018-user-system-access-table.js +75 -75
  57. package/migrations/20240528032229-user-privilege-table.js +76 -76
  58. package/migrations/20240528063003-create-group-privilege-table.js +76 -76
  59. package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
  60. package/migrations/20240528063107-create-user-object-privilege-table.js +84 -84
  61. package/migrations/20240528063108-create-api-key-table.js +85 -85
  62. package/migrations/20241104104802-create-building-table.js +95 -95
  63. package/migrations/20250108091132-add-area-manager-user-id-to-building-table.js +14 -14
  64. package/migrations/20250108091133-add-passcode-to-user-table.js +36 -36
  65. package/migrations/20250210115636-create-user-reporting-hierarchy.js +76 -76
  66. package/migrations/20250326043818-crate-user-password-history.js +42 -42
  67. package/migrations/20250610070720-added-MFBypassYN-to-sso-user.js +30 -30
  68. package/migrations/20250805085707-add-bulk-approval-code-to-sso-user.js +29 -0
  69. package/package.json +87 -90
  70. package/sampledotenv +7 -7
  71. package/src/components/login-user/user.ts +3 -9
  72. package/tsconfig.build.json +5 -5
  73. package/tsconfig.json +23 -23
  74. package/coverage/clover.xml +0 -1452
  75. package/coverage/coverage-final.json +0 -47
  76. package/coverage/lcov-report/base.css +0 -224
  77. package/coverage/lcov-report/block-navigation.js +0 -87
  78. package/coverage/lcov-report/components/group/group.repository.ts.html +0 -118
  79. package/coverage/lcov-report/components/group/group.ts.html +0 -328
  80. package/coverage/lcov-report/components/group/index.html +0 -131
  81. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +0 -118
  82. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +0 -322
  83. package/coverage/lcov-report/components/group-object-privilege/index.html +0 -131
  84. package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +0 -118
  85. package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +0 -304
  86. package/coverage/lcov-report/components/group-privilege/index.html +0 -131
  87. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.repository.ts.html +0 -118
  88. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.ts.html +0 -328
  89. package/coverage/lcov-report/components/group-reporting-user/index.html +0 -131
  90. package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +0 -118
  91. package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +0 -310
  92. package/coverage/lcov-report/components/group-system-access/index.html +0 -131
  93. package/coverage/lcov-report/components/login-history/index.html +0 -116
  94. package/coverage/lcov-report/components/login-history/login-history.repository.ts.html +0 -118
  95. package/coverage/lcov-report/components/login-user/index.html +0 -131
  96. package/coverage/lcov-report/components/login-user/login-user.ts.html +0 -5015
  97. package/coverage/lcov-report/components/login-user/user.repository.ts.html +0 -118
  98. package/coverage/lcov-report/components/password-hash/index.html +0 -116
  99. package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +0 -127
  100. package/coverage/lcov-report/components/system/index.html +0 -131
  101. package/coverage/lcov-report/components/system/system.repository.ts.html +0 -118
  102. package/coverage/lcov-report/components/system/system.ts.html +0 -910
  103. package/coverage/lcov-report/components/system-privilege/index.html +0 -131
  104. package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +0 -121
  105. package/coverage/lcov-report/components/system-privilege/system-privilege.ts.html +0 -391
  106. package/coverage/lcov-report/components/user-group/index.html +0 -131
  107. package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +0 -118
  108. package/coverage/lcov-report/components/user-group/user-group.ts.html +0 -355
  109. package/coverage/lcov-report/components/user-object-privilege/index.html +0 -131
  110. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +0 -118
  111. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +0 -313
  112. package/coverage/lcov-report/components/user-privilege/index.html +0 -131
  113. package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +0 -118
  114. package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +0 -307
  115. package/coverage/lcov-report/components/user-system-access/index.html +0 -131
  116. package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +0 -118
  117. package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +0 -313
  118. package/coverage/lcov-report/enum/group-type.enum.ts.html +0 -109
  119. package/coverage/lcov-report/enum/index.html +0 -161
  120. package/coverage/lcov-report/enum/index.ts.html +0 -94
  121. package/coverage/lcov-report/enum/user-status.enum.ts.html +0 -106
  122. package/coverage/lcov-report/enum/yn.enum.ts.html +0 -97
  123. package/coverage/lcov-report/favicon.png +0 -0
  124. package/coverage/lcov-report/index.html +0 -371
  125. package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +0 -334
  126. package/coverage/lcov-report/models/group-privilege.entity.ts.html +0 -316
  127. package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +0 -340
  128. package/coverage/lcov-report/models/group-system-access.entity.ts.html +0 -325
  129. package/coverage/lcov-report/models/group.entity.ts.html +0 -436
  130. package/coverage/lcov-report/models/index.html +0 -311
  131. package/coverage/lcov-report/models/login-history.entity.ts.html +0 -253
  132. package/coverage/lcov-report/models/staff.entity.ts.html +0 -412
  133. package/coverage/lcov-report/models/system-privilege.entity.ts.html +0 -355
  134. package/coverage/lcov-report/models/system.entity.ts.html +0 -424
  135. package/coverage/lcov-report/models/user-group.entity.ts.html +0 -355
  136. package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +0 -331
  137. package/coverage/lcov-report/models/user-privilege.entity.ts.html +0 -316
  138. package/coverage/lcov-report/models/user-system-access.entity.ts.html +0 -316
  139. package/coverage/lcov-report/models/user.entity.ts.html +0 -523
  140. package/coverage/lcov-report/prettify.css +0 -1
  141. package/coverage/lcov-report/prettify.js +0 -2
  142. package/coverage/lcov-report/redis-client/index.html +0 -116
  143. package/coverage/lcov-report/redis-client/redis.service.ts.html +0 -241
  144. package/coverage/lcov-report/session/index.html +0 -116
  145. package/coverage/lcov-report/session/session.service.ts.html +0 -247
  146. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  147. package/coverage/lcov-report/sorter.js +0 -196
  148. package/coverage/lcov.info +0 -2490
  149. package/coverage/test-report.xml +0 -129
  150. package/sonar-project.properties +0 -23
@@ -1,247 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for session/session.service.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">session</a> session.service.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">85% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>17/20</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>1/1</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>5/5</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">85% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>17/20</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
121
- <span class="cline-any cline-neutral">&nbsp;</span>
122
- <span class="cline-any cline-neutral">&nbsp;</span>
123
- <span class="cline-any cline-neutral">&nbsp;</span>
124
- <span class="cline-any cline-yes">2x</span>
125
- <span class="cline-any cline-neutral">&nbsp;</span>
126
- <span class="cline-any cline-neutral">&nbsp;</span>
127
- <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-neutral">&nbsp;</span>
129
- <span class="cline-any cline-neutral">&nbsp;</span>
130
- <span class="cline-any cline-yes">22x</span>
131
- <span class="cline-any cline-yes">22x</span>
132
- <span class="cline-any cline-yes">22x</span>
133
- <span class="cline-any cline-neutral">&nbsp;</span>
134
- <span class="cline-any cline-neutral">&nbsp;</span>
135
- <span class="cline-any cline-neutral">&nbsp;</span>
136
- <span class="cline-any cline-neutral">&nbsp;</span>
137
- <span class="cline-any cline-neutral">&nbsp;</span>
138
- <span class="cline-any cline-neutral">&nbsp;</span>
139
- <span class="cline-any cline-yes">3x</span>
140
- <span class="cline-any cline-yes">3x</span>
141
- <span class="cline-any cline-yes">3x</span>
142
- <span class="cline-any cline-neutral">&nbsp;</span>
143
- <span class="cline-any cline-neutral">&nbsp;</span>
144
- <span class="cline-any cline-neutral">&nbsp;</span>
145
- <span class="cline-any cline-neutral">&nbsp;</span>
146
- <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-no">&nbsp;</span>
148
- <span class="cline-any cline-neutral">&nbsp;</span>
149
- <span class="cline-any cline-neutral">&nbsp;</span>
150
- <span class="cline-any cline-neutral">&nbsp;</span>
151
- <span class="cline-any cline-neutral">&nbsp;</span>
152
- <span class="cline-any cline-yes">3x</span>
153
- <span class="cline-any cline-yes">3x</span>
154
- <span class="cline-any cline-yes">3x</span>
155
- <span class="cline-any cline-yes">3x</span>
156
- <span class="cline-any cline-yes">1x</span>
157
- <span class="cline-any cline-neutral">&nbsp;</span>
158
- <span class="cline-any cline-neutral">&nbsp;</span>
159
- <span class="cline-any cline-yes">2x</span>
160
- <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-no">&nbsp;</span>
162
- <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-neutral">&nbsp;</span>
164
- <span class="cline-any cline-neutral">&nbsp;</span>
165
- <span class="cline-any cline-neutral">&nbsp;</span>
166
- <span class="cline-any cline-yes">1x</span>
167
- <span class="cline-any cline-yes">1x</span>
168
- <span class="cline-any cline-yes">1x</span>
169
- <span class="cline-any cline-neutral">&nbsp;</span>
170
- <span class="cline-any cline-no">&nbsp;</span>
171
- <span class="cline-any cline-neutral">&nbsp;</span>
172
- <span class="cline-any cline-neutral">&nbsp;</span>
173
- <span class="cline-any cline-neutral">&nbsp;</span>
174
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { RedisService } from '../redis-client/redis.service';
175
- import { ISessionService } from './interfaces/session-service.interface';
176
- import { IUserSession } from '../interfaces/user-session.interface';
177
- &nbsp;
178
- export class SessionService implements ISessionService {
179
- private static _RedisService: RedisService;
180
- &nbsp;
181
- private constructor() {}
182
- &nbsp;
183
- static async init(redisClient?: any): Promise&lt;SessionService&gt; {
184
- const sessionService = new SessionService();
185
- SessionService._RedisService = await RedisService.init(redisClient);
186
- return sessionService;
187
- }
188
- &nbsp;
189
- async setUserSession(
190
- userId: string,
191
- sessionData: IUserSession,
192
- ): Promise&lt;void&gt; {
193
- try {
194
- const key = `tomei-sid:${userId}`;
195
- await SessionService._RedisService.set(
196
- key,
197
- sessionData,
198
- 60 * 60 * 24 * 1,
199
- );
200
- } catch (error) {
201
- <span class="cstat-no" title="statement not covered" > throw error;</span>
202
- }
203
- }
204
- &nbsp;
205
- async retrieveUserSession(userId: string): Promise&lt;IUserSession&gt; {
206
- try {
207
- const key = `tomei-sid:${userId}`;
208
- const stringData = await SessionService._RedisService.get(key);
209
- if (!stringData)
210
- return {
211
- systemLogins: [],
212
- };
213
- return JSON.parse(stringData);
214
- } catch (error) {
215
- <span class="cstat-no" title="statement not covered" > throw error;</span>
216
- }
217
- }
218
- &nbsp;
219
- async refreshDuration(userid: string): Promise&lt;void&gt; {
220
- try {
221
- const userSession = await this.retrieveUserSession(userid);
222
- await this.setUserSession(userid, userSession);
223
- } catch (error) {
224
- <span class="cstat-no" title="statement not covered" > throw error;</span>
225
- }
226
- }
227
- }
228
- &nbsp;</pre></td></tr></table></pre>
229
-
230
- <div class='push'></div><!-- for sticky footer -->
231
- </div><!-- /wrapper -->
232
- <div class='footer quiet pad2 space-top1 center small'>
233
- Code coverage generated by
234
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
235
- at 2024-06-25T06:52:42.287Z
236
- </div>
237
- <script src="../prettify.js"></script>
238
- <script>
239
- window.onload = function () {
240
- prettyPrint();
241
- };
242
- </script>
243
- <script src="../sorter.js"></script>
244
- <script src="../block-navigation.js"></script>
245
- </body>
246
- </html>
247
-
@@ -1,196 +0,0 @@
1
-
2
- var addSorting = (function() {
3
- 'use strict';
4
- var cols,
5
- currentSort = {
6
- index: 0,
7
- desc: false
8
- };
9
-
10
- // returns the summary table element
11
- function getTable() {
12
- return document.querySelector('.coverage-summary');
13
- }
14
- // returns the thead element of the summary table
15
- function getTableHeader() {
16
- return getTable().querySelector('thead tr');
17
- }
18
- // returns the tbody element of the summary table
19
- function getTableBody() {
20
- return getTable().querySelector('tbody');
21
- }
22
- // returns the th element for nth column
23
- function getNthColumn(n) {
24
- return getTableHeader().querySelectorAll('th')[n];
25
- }
26
-
27
- function onFilterInput() {
28
- const searchValue = document.getElementById('fileSearch').value;
29
- const rows = document.getElementsByTagName('tbody')[0].children;
30
- for (let i = 0; i < rows.length; i++) {
31
- const row = rows[i];
32
- if (
33
- row.textContent
34
- .toLowerCase()
35
- .includes(searchValue.toLowerCase())
36
- ) {
37
- row.style.display = '';
38
- } else {
39
- row.style.display = 'none';
40
- }
41
- }
42
- }
43
-
44
- // loads the search box
45
- function addSearchBox() {
46
- var template = document.getElementById('filterTemplate');
47
- var templateClone = template.content.cloneNode(true);
48
- templateClone.getElementById('fileSearch').oninput = onFilterInput;
49
- template.parentElement.appendChild(templateClone);
50
- }
51
-
52
- // loads all columns
53
- function loadColumns() {
54
- var colNodes = getTableHeader().querySelectorAll('th'),
55
- colNode,
56
- cols = [],
57
- col,
58
- i;
59
-
60
- for (i = 0; i < colNodes.length; i += 1) {
61
- colNode = colNodes[i];
62
- col = {
63
- key: colNode.getAttribute('data-col'),
64
- sortable: !colNode.getAttribute('data-nosort'),
65
- type: colNode.getAttribute('data-type') || 'string'
66
- };
67
- cols.push(col);
68
- if (col.sortable) {
69
- col.defaultDescSort = col.type === 'number';
70
- colNode.innerHTML =
71
- colNode.innerHTML + '<span class="sorter"></span>';
72
- }
73
- }
74
- return cols;
75
- }
76
- // attaches a data attribute to every tr element with an object
77
- // of data values keyed by column name
78
- function loadRowData(tableRow) {
79
- var tableCols = tableRow.querySelectorAll('td'),
80
- colNode,
81
- col,
82
- data = {},
83
- i,
84
- val;
85
- for (i = 0; i < tableCols.length; i += 1) {
86
- colNode = tableCols[i];
87
- col = cols[i];
88
- val = colNode.getAttribute('data-value');
89
- if (col.type === 'number') {
90
- val = Number(val);
91
- }
92
- data[col.key] = val;
93
- }
94
- return data;
95
- }
96
- // loads all row data
97
- function loadData() {
98
- var rows = getTableBody().querySelectorAll('tr'),
99
- i;
100
-
101
- for (i = 0; i < rows.length; i += 1) {
102
- rows[i].data = loadRowData(rows[i]);
103
- }
104
- }
105
- // sorts the table using the data for the ith column
106
- function sortByIndex(index, desc) {
107
- var key = cols[index].key,
108
- sorter = function(a, b) {
109
- a = a.data[key];
110
- b = b.data[key];
111
- return a < b ? -1 : a > b ? 1 : 0;
112
- },
113
- finalSorter = sorter,
114
- tableBody = document.querySelector('.coverage-summary tbody'),
115
- rowNodes = tableBody.querySelectorAll('tr'),
116
- rows = [],
117
- i;
118
-
119
- if (desc) {
120
- finalSorter = function(a, b) {
121
- return -1 * sorter(a, b);
122
- };
123
- }
124
-
125
- for (i = 0; i < rowNodes.length; i += 1) {
126
- rows.push(rowNodes[i]);
127
- tableBody.removeChild(rowNodes[i]);
128
- }
129
-
130
- rows.sort(finalSorter);
131
-
132
- for (i = 0; i < rows.length; i += 1) {
133
- tableBody.appendChild(rows[i]);
134
- }
135
- }
136
- // removes sort indicators for current column being sorted
137
- function removeSortIndicators() {
138
- var col = getNthColumn(currentSort.index),
139
- cls = col.className;
140
-
141
- cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
142
- col.className = cls;
143
- }
144
- // adds sort indicators for current column being sorted
145
- function addSortIndicators() {
146
- getNthColumn(currentSort.index).className += currentSort.desc
147
- ? ' sorted-desc'
148
- : ' sorted';
149
- }
150
- // adds event listeners for all sorter widgets
151
- function enableUI() {
152
- var i,
153
- el,
154
- ithSorter = function ithSorter(i) {
155
- var col = cols[i];
156
-
157
- return function() {
158
- var desc = col.defaultDescSort;
159
-
160
- if (currentSort.index === i) {
161
- desc = !currentSort.desc;
162
- }
163
- sortByIndex(i, desc);
164
- removeSortIndicators();
165
- currentSort.index = i;
166
- currentSort.desc = desc;
167
- addSortIndicators();
168
- };
169
- };
170
- for (i = 0; i < cols.length; i += 1) {
171
- if (cols[i].sortable) {
172
- // add the click event handler on the th so users
173
- // dont have to click on those tiny arrows
174
- el = getNthColumn(i).querySelector('.sorter').parentElement;
175
- if (el.addEventListener) {
176
- el.addEventListener('click', ithSorter(i));
177
- } else {
178
- el.attachEvent('onclick', ithSorter(i));
179
- }
180
- }
181
- }
182
- }
183
- // adds sorting functionality to the UI
184
- return function() {
185
- if (!getTable()) {
186
- return;
187
- }
188
- cols = loadColumns();
189
- loadData();
190
- addSearchBox();
191
- addSortIndicators();
192
- enableUI();
193
- };
194
- })();
195
-
196
- window.addEventListener('load', addSorting);