convert-csv-to-json 2.0.0 → 2.2.0
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.
- package/.github/workflows/codeql-analysis.yml +4 -4
- package/.github/workflows/nodejs.yml +3 -3
- package/.vscode/launch.json +24 -0
- package/README.md +47 -16
- package/SECURITY.md +2 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +222 -0
- package/coverage/coverage-final.json +6 -0
- package/coverage/csvToJson/index.html +116 -0
- package/coverage/csvToJson/index.js.html +565 -0
- package/coverage/csvToJson/src/csvToJson.js.html +757 -0
- package/coverage/csvToJson/src/index.html +116 -0
- package/coverage/csvToJson/src/util/fileUtils.js.html +151 -0
- package/coverage/csvToJson/src/util/index.html +146 -0
- package/coverage/csvToJson/src/util/jsonUtils.js.html +127 -0
- package/coverage/csvToJson/src/util/stringUtils.js.html +196 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +146 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/csvToJson/index.html +116 -0
- package/coverage/lcov-report/csvToJson/index.js.html +565 -0
- package/coverage/lcov-report/csvToJson/src/csvToJson.js.html +757 -0
- package/coverage/lcov-report/csvToJson/src/index.html +116 -0
- package/coverage/lcov-report/csvToJson/src/util/fileUtils.js.html +151 -0
- package/coverage/lcov-report/csvToJson/src/util/index.html +146 -0
- package/coverage/lcov-report/csvToJson/src/util/jsonUtils.js.html +127 -0
- package/coverage/lcov-report/csvToJson/src/util/stringUtils.js.html +196 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +146 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/src/csvToJson.js.html +757 -0
- package/coverage/lcov-report/src/index.html +116 -0
- package/coverage/lcov-report/src/util/fileUtils.js.html +151 -0
- package/coverage/lcov-report/src/util/index.html +146 -0
- package/coverage/lcov-report/src/util/jsonUtils.js.html +127 -0
- package/coverage/lcov-report/src/util/stringUtils.js.html +196 -0
- package/coverage/lcov.info +410 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/index.js +1 -1
- package/jest.config.js +9 -0
- package/package.json +7 -6
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/csv-plugin.xml +0 -51
- package/.idea/csvToJson.iml +0 -9
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
|
@@ -35,11 +35,11 @@ jobs:
|
|
|
35
35
|
|
|
36
36
|
steps:
|
|
37
37
|
- name: Checkout repository
|
|
38
|
-
uses: actions/checkout@
|
|
38
|
+
uses: actions/checkout@v4
|
|
39
39
|
|
|
40
40
|
# Initializes the CodeQL tools for scanning.
|
|
41
41
|
- name: Initialize CodeQL
|
|
42
|
-
uses: github/codeql-action/init@
|
|
42
|
+
uses: github/codeql-action/init@v3
|
|
43
43
|
with:
|
|
44
44
|
languages: ${{ matrix.language }}
|
|
45
45
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
@@ -50,7 +50,7 @@ jobs:
|
|
|
50
50
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
51
51
|
# If this step fails, then you should remove it and run the build manually (see below)
|
|
52
52
|
- name: Autobuild
|
|
53
|
-
uses: github/codeql-action/autobuild@
|
|
53
|
+
uses: github/codeql-action/autobuild@v3
|
|
54
54
|
|
|
55
55
|
# ℹ️ Command-line programs to run using the OS shell.
|
|
56
56
|
# 📚 https://git.io/JvXDl
|
|
@@ -64,4 +64,4 @@ jobs:
|
|
|
64
64
|
# make release
|
|
65
65
|
|
|
66
66
|
- name: Perform CodeQL Analysis
|
|
67
|
-
uses: github/codeql-action/analyze@
|
|
67
|
+
uses: github/codeql-action/analyze@v3
|
|
@@ -9,12 +9,12 @@ jobs:
|
|
|
9
9
|
|
|
10
10
|
strategy:
|
|
11
11
|
matrix:
|
|
12
|
-
node-version: [
|
|
12
|
+
node-version: [14.x, 16.x, 18.x, 20.x, 21.x]
|
|
13
13
|
|
|
14
14
|
steps:
|
|
15
|
-
- uses: actions/checkout@
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
16
|
- name: Use Node.js ${{ matrix.node-version }}
|
|
17
|
-
uses: actions/setup-node@
|
|
17
|
+
uses: actions/setup-node@v4
|
|
18
18
|
with:
|
|
19
19
|
node-version: ${{ matrix.node-version }}
|
|
20
20
|
- name: npm install, build, and test
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Use IntelliSense to learn about possible attributes.
|
|
3
|
+
// Hover to view descriptions of existing attributes.
|
|
4
|
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
+
"version": "0.2.0",
|
|
6
|
+
"configurations": [
|
|
7
|
+
{
|
|
8
|
+
"name": "Launch Chrome",
|
|
9
|
+
"request": "launch",
|
|
10
|
+
"type": "chrome",
|
|
11
|
+
"url": "http://localhost:8080",
|
|
12
|
+
"webRoot": "${workspaceFolder}"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"type": "node",
|
|
16
|
+
"request": "launch",
|
|
17
|
+
"name": "Launch Program",
|
|
18
|
+
"skipFiles": [
|
|
19
|
+
"<node_internals>/**"
|
|
20
|
+
],
|
|
21
|
+
"program": "${workspaceFolder}/index.js"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://snyk.io/test/github/iuccio/csvToJson)
|
|
5
5
|
[](https://codeclimate.com/github/iuccio/csvToJson)
|
|
6
6
|
[](https://npmjs.org/package/convert-csv-to-json)
|
|
7
|
-

|
|
8
8
|
[](https://npmjs.org/package/convert-csv-to-json)
|
|
9
9
|
|
|
10
10
|
**This project is not dependent on others packages or libraries.**
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
- [Number](#number)
|
|
31
31
|
- [Boolean](#boolean)
|
|
32
32
|
+ [Encoding](#encoding)
|
|
33
|
+
* [Chaining Pattern](#chaining-pattern)
|
|
33
34
|
- [Development](#development)
|
|
34
35
|
- [License](#license)
|
|
35
36
|
- [Buy me a Coffee](#buy-me-a-coffee)
|
|
@@ -96,6 +97,7 @@ $ npm install -g convert-csv-to-json
|
|
|
96
97
|
```
|
|
97
98
|
|
|
98
99
|
### Usage
|
|
100
|
+
|
|
99
101
|
#### Generate JSON file
|
|
100
102
|
```js
|
|
101
103
|
let csvToJson = require('convert-csv-to-json');
|
|
@@ -124,7 +126,8 @@ Given the above CSV example, to generate a JSON Object with properties that cont
|
|
|
124
126
|
with the values <b>*diego,marek,dries*</b> you have to call the function ```parseSubArray(delimiter, separator)``` .
|
|
125
127
|
To generate the JSON Object with sub array from the above CSV example:
|
|
126
128
|
```js
|
|
127
|
-
csvToJson.parseSubArray('*',',')
|
|
129
|
+
csvToJson.parseSubArray('*',',')
|
|
130
|
+
.getJsonFromCsv('myInputFile.csv');
|
|
128
131
|
```
|
|
129
132
|
The result will be:
|
|
130
133
|
```json
|
|
@@ -148,7 +151,8 @@ In case your CSV file has defined another field delimiter you have to call the f
|
|
|
148
151
|
E.g. if your field delimiter is the comma **,** then:
|
|
149
152
|
|
|
150
153
|
```js
|
|
151
|
-
csvToJson.fieldDelimiter(',')
|
|
154
|
+
csvToJson.fieldDelimiter(',')
|
|
155
|
+
.getJsonFromCsv(fileInputName);
|
|
152
156
|
```
|
|
153
157
|
|
|
154
158
|
#### Support Quoted Fields
|
|
@@ -161,7 +165,8 @@ To be able to parse correctly fields wrapped in quote, like the **last_name** in
|
|
|
161
165
|
you need to activate the support quoted fields feature:
|
|
162
166
|
|
|
163
167
|
```js
|
|
164
|
-
csvToJson.supportQuotedField(true)
|
|
168
|
+
csvToJson.supportQuotedField(true)
|
|
169
|
+
.getJsonFromCsv(fileInputName);
|
|
165
170
|
```
|
|
166
171
|
|
|
167
172
|
The result will be:
|
|
@@ -179,7 +184,8 @@ The result will be:
|
|
|
179
184
|
If the header is not on the first line you can define the header index like:
|
|
180
185
|
|
|
181
186
|
```js
|
|
182
|
-
csvToJson.indexHeader(3)
|
|
187
|
+
csvToJson.indexHeader(3)
|
|
188
|
+
.getJsonFromCsv(fileInputName);
|
|
183
189
|
```
|
|
184
190
|
|
|
185
191
|
#### Empty rows
|
|
@@ -188,7 +194,8 @@ Empty rows are ignored and not parsed.
|
|
|
188
194
|
#### Format property value by type
|
|
189
195
|
If you want that a number will be printed as a Number type, and values *true* or *false* is printed as a boolean Type, use:
|
|
190
196
|
```js
|
|
191
|
-
csvToJson.formatValueByType()
|
|
197
|
+
csvToJson.formatValueByType()
|
|
198
|
+
.getJsonFromCsv(fileInputName);
|
|
192
199
|
```
|
|
193
200
|
For example:
|
|
194
201
|
|
|
@@ -237,33 +244,56 @@ instead of
|
|
|
237
244
|
You can read and decode files with the following encoding:
|
|
238
245
|
* utf8:
|
|
239
246
|
```js
|
|
240
|
-
csvToJson.utf8Encoding()
|
|
247
|
+
csvToJson.utf8Encoding()
|
|
248
|
+
.getJsonFromCsv(fileInputName);
|
|
241
249
|
```
|
|
242
250
|
* ucs2:
|
|
243
251
|
```js
|
|
244
|
-
csvToJson.ucs2Encoding()
|
|
252
|
+
csvToJson.ucs2Encoding()
|
|
253
|
+
.getJsonFromCsv(fileInputName);
|
|
245
254
|
```
|
|
246
255
|
* utf16le:
|
|
247
256
|
```js
|
|
248
|
-
csvToJson.utf16leEncoding()
|
|
257
|
+
csvToJson.utf16leEncoding()
|
|
258
|
+
.getJsonFromCsv(fileInputName);
|
|
249
259
|
```
|
|
250
260
|
* latin1:
|
|
251
261
|
```js
|
|
252
|
-
csvToJson.latin1Encoding()
|
|
262
|
+
csvToJson.latin1Encoding()
|
|
263
|
+
.getJsonFromCsv(fileInputName);
|
|
253
264
|
```
|
|
254
265
|
* ascii:
|
|
255
266
|
```js
|
|
256
|
-
csvToJson.asciiEncoding()
|
|
267
|
+
csvToJson.asciiEncoding()
|
|
268
|
+
.getJsonFromCsv(fileInputName);
|
|
257
269
|
```
|
|
258
270
|
* base64:
|
|
259
271
|
```js
|
|
260
|
-
csvToJson.base64Encoding()
|
|
272
|
+
csvToJson.base64Encoding()
|
|
273
|
+
.getJsonFromCsv(fileInputName);
|
|
261
274
|
```
|
|
262
275
|
* hex:
|
|
263
276
|
```js
|
|
264
|
-
csvToJson.hexEncoding()
|
|
277
|
+
csvToJson.hexEncoding()
|
|
278
|
+
.getJsonFromCsv(fileInputName);
|
|
265
279
|
```
|
|
266
280
|
|
|
281
|
+
### Chaining Pattern
|
|
282
|
+
|
|
283
|
+
The exposed API is implemented with the [Method Chaining Pattern](https://en.wikipedia.org/wiki/Method_chaining), which means that multiple methods can be chained, e.g.:
|
|
284
|
+
|
|
285
|
+
```js
|
|
286
|
+
let csvToJson = require('convert-csv-to-json');
|
|
287
|
+
|
|
288
|
+
csvToJson.fieldDelimiter(',')
|
|
289
|
+
.formatValueByType()
|
|
290
|
+
.parseSubArray("*",',')
|
|
291
|
+
.supportQuotedField(true)
|
|
292
|
+
.getJsonFromCsv('myInputFile.csv');
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
|
|
267
297
|
## Development
|
|
268
298
|
* Download all csvToJson dependencies:
|
|
269
299
|
~~~
|
|
@@ -273,9 +303,9 @@ You can read and decode files with the following encoding:
|
|
|
273
303
|
~~~
|
|
274
304
|
npm test
|
|
275
305
|
~~~
|
|
276
|
-
*
|
|
306
|
+
* Debug Tests
|
|
277
307
|
~~~
|
|
278
|
-
npm run test-
|
|
308
|
+
npm run test-debug
|
|
279
309
|
~~~
|
|
280
310
|
|
|
281
311
|
## License
|
|
@@ -283,4 +313,5 @@ CSVtoJSON is licensed under the GNU General Public License v3.0 [License](LICENS
|
|
|
283
313
|
|
|
284
314
|
## Buy me a Coffee
|
|
285
315
|
Just if you want to support this repository:
|
|
286
|
-
* **BTC** tip address:
|
|
316
|
+
* **BTC** tip address:
|
|
317
|
+
37vdjQhbaR7k7XzhMKWzMcnqUxfw1njBNk
|
package/SECURITY.md
CHANGED
|
@@ -14,6 +14,7 @@ A generated Github Depedabot PR is normally quickly merged and a new version is
|
|
|
14
14
|
|
|
15
15
|
| Version | Supported |
|
|
16
16
|
| ------- | ------------------ |
|
|
17
|
+
| 2.0.0 | :white_check_mark: |
|
|
17
18
|
| 1.4.0 | :white_check_mark: |
|
|
18
19
|
| 1.3.3 | :white_check_mark: |
|
|
19
20
|
| 1.3.2 | :white_check_mark: |
|
|
@@ -22,6 +23,7 @@ A generated Github Depedabot PR is normally quickly merged and a new version is
|
|
|
22
23
|
|
|
23
24
|
| Version | Supported |
|
|
24
25
|
| ------- | ------------------ |
|
|
26
|
+
| 2.0.0 | :white_check_mark: |
|
|
25
27
|
| 1.4.0 | :white_check_mark: |
|
|
26
28
|
| 1.3.3 | :warning: moderate dev dependencies vulnerability|
|
|
27
29
|
| 1.3.2 | :warning: moderate dev dependencies vulnerability|
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
body, html {
|
|
2
|
+
margin:0; padding: 0;
|
|
3
|
+
height: 100%;
|
|
4
|
+
}
|
|
5
|
+
body {
|
|
6
|
+
font-family: Helvetica Neue, Helvetica, Arial;
|
|
7
|
+
font-size: 14px;
|
|
8
|
+
color:#333;
|
|
9
|
+
}
|
|
10
|
+
.small { font-size: 12px; }
|
|
11
|
+
*, *:after, *:before {
|
|
12
|
+
-webkit-box-sizing:border-box;
|
|
13
|
+
-moz-box-sizing:border-box;
|
|
14
|
+
box-sizing:border-box;
|
|
15
|
+
}
|
|
16
|
+
h1 { font-size: 20px; margin: 0;}
|
|
17
|
+
h2 { font-size: 14px; }
|
|
18
|
+
pre {
|
|
19
|
+
font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
|
20
|
+
margin: 0;
|
|
21
|
+
padding: 0;
|
|
22
|
+
-moz-tab-size: 2;
|
|
23
|
+
-o-tab-size: 2;
|
|
24
|
+
tab-size: 2;
|
|
25
|
+
}
|
|
26
|
+
a { color:#0074D9; text-decoration:none; }
|
|
27
|
+
a:hover { text-decoration:underline; }
|
|
28
|
+
.strong { font-weight: bold; }
|
|
29
|
+
.space-top1 { padding: 10px 0 0 0; }
|
|
30
|
+
.pad2y { padding: 20px 0; }
|
|
31
|
+
.pad1y { padding: 10px 0; }
|
|
32
|
+
.pad2x { padding: 0 20px; }
|
|
33
|
+
.pad2 { padding: 20px; }
|
|
34
|
+
.pad1 { padding: 10px; }
|
|
35
|
+
.space-left2 { padding-left:55px; }
|
|
36
|
+
.space-right2 { padding-right:20px; }
|
|
37
|
+
.center { text-align:center; }
|
|
38
|
+
.clearfix { display:block; }
|
|
39
|
+
.clearfix:after {
|
|
40
|
+
content:'';
|
|
41
|
+
display:block;
|
|
42
|
+
height:0;
|
|
43
|
+
clear:both;
|
|
44
|
+
visibility:hidden;
|
|
45
|
+
}
|
|
46
|
+
.fl { float: left; }
|
|
47
|
+
@media only screen and (max-width:640px) {
|
|
48
|
+
.col3 { width:100%; max-width:100%; }
|
|
49
|
+
.hide-mobile { display:none!important; }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.quiet {
|
|
53
|
+
color: #7f7f7f;
|
|
54
|
+
color: rgba(0,0,0,0.5);
|
|
55
|
+
}
|
|
56
|
+
.quiet a { opacity: 0.7; }
|
|
57
|
+
|
|
58
|
+
.fraction {
|
|
59
|
+
font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
|
|
60
|
+
font-size: 10px;
|
|
61
|
+
color: #555;
|
|
62
|
+
background: #E8E8E8;
|
|
63
|
+
padding: 4px 5px;
|
|
64
|
+
border-radius: 3px;
|
|
65
|
+
vertical-align: middle;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
div.path a:link, div.path a:visited { color: #333; }
|
|
69
|
+
table.coverage {
|
|
70
|
+
border-collapse: collapse;
|
|
71
|
+
margin: 10px 0 0 0;
|
|
72
|
+
padding: 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
table.coverage td {
|
|
76
|
+
margin: 0;
|
|
77
|
+
padding: 0;
|
|
78
|
+
vertical-align: top;
|
|
79
|
+
}
|
|
80
|
+
table.coverage td.line-count {
|
|
81
|
+
text-align: right;
|
|
82
|
+
padding: 0 5px 0 20px;
|
|
83
|
+
}
|
|
84
|
+
table.coverage td.line-coverage {
|
|
85
|
+
text-align: right;
|
|
86
|
+
padding-right: 10px;
|
|
87
|
+
min-width:20px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
table.coverage td span.cline-any {
|
|
91
|
+
display: inline-block;
|
|
92
|
+
padding: 0 5px;
|
|
93
|
+
width: 100%;
|
|
94
|
+
}
|
|
95
|
+
.missing-if-branch {
|
|
96
|
+
display: inline-block;
|
|
97
|
+
margin-right: 5px;
|
|
98
|
+
border-radius: 3px;
|
|
99
|
+
position: relative;
|
|
100
|
+
padding: 0 4px;
|
|
101
|
+
background: #333;
|
|
102
|
+
color: yellow;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.skip-if-branch {
|
|
106
|
+
display: none;
|
|
107
|
+
margin-right: 10px;
|
|
108
|
+
position: relative;
|
|
109
|
+
padding: 0 4px;
|
|
110
|
+
background: #ccc;
|
|
111
|
+
color: white;
|
|
112
|
+
}
|
|
113
|
+
.missing-if-branch .typ, .skip-if-branch .typ {
|
|
114
|
+
color: inherit !important;
|
|
115
|
+
}
|
|
116
|
+
.coverage-summary {
|
|
117
|
+
border-collapse: collapse;
|
|
118
|
+
width: 100%;
|
|
119
|
+
}
|
|
120
|
+
.coverage-summary tr { border-bottom: 1px solid #bbb; }
|
|
121
|
+
.keyline-all { border: 1px solid #ddd; }
|
|
122
|
+
.coverage-summary td, .coverage-summary th { padding: 10px; }
|
|
123
|
+
.coverage-summary tbody { border: 1px solid #bbb; }
|
|
124
|
+
.coverage-summary td { border-right: 1px solid #bbb; }
|
|
125
|
+
.coverage-summary td:last-child { border-right: none; }
|
|
126
|
+
.coverage-summary th {
|
|
127
|
+
text-align: left;
|
|
128
|
+
font-weight: normal;
|
|
129
|
+
white-space: nowrap;
|
|
130
|
+
}
|
|
131
|
+
.coverage-summary th.file { border-right: none !important; }
|
|
132
|
+
.coverage-summary th.pct { }
|
|
133
|
+
.coverage-summary th.pic,
|
|
134
|
+
.coverage-summary th.abs,
|
|
135
|
+
.coverage-summary td.pct,
|
|
136
|
+
.coverage-summary td.abs { text-align: right; }
|
|
137
|
+
.coverage-summary td.file { white-space: nowrap; }
|
|
138
|
+
.coverage-summary td.pic { min-width: 120px !important; }
|
|
139
|
+
.coverage-summary tfoot td { }
|
|
140
|
+
|
|
141
|
+
.coverage-summary .sorter {
|
|
142
|
+
height: 10px;
|
|
143
|
+
width: 7px;
|
|
144
|
+
display: inline-block;
|
|
145
|
+
margin-left: 0.5em;
|
|
146
|
+
background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
|
|
147
|
+
}
|
|
148
|
+
.coverage-summary .sorted .sorter {
|
|
149
|
+
background-position: 0 -20px;
|
|
150
|
+
}
|
|
151
|
+
.coverage-summary .sorted-desc .sorter {
|
|
152
|
+
background-position: 0 -10px;
|
|
153
|
+
}
|
|
154
|
+
.status-line { height: 10px; }
|
|
155
|
+
/* yellow */
|
|
156
|
+
.cbranch-no { background: yellow !important; color: #111; }
|
|
157
|
+
/* dark red */
|
|
158
|
+
.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
|
|
159
|
+
.low .chart { border:1px solid #C21F39 }
|
|
160
|
+
.highlighted,
|
|
161
|
+
.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
|
|
162
|
+
background: #C21F39 !important;
|
|
163
|
+
}
|
|
164
|
+
/* medium red */
|
|
165
|
+
.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
|
|
166
|
+
/* light red */
|
|
167
|
+
.low, .cline-no { background:#FCE1E5 }
|
|
168
|
+
/* light green */
|
|
169
|
+
.high, .cline-yes { background:rgb(230,245,208) }
|
|
170
|
+
/* medium green */
|
|
171
|
+
.cstat-yes { background:rgb(161,215,106) }
|
|
172
|
+
/* dark green */
|
|
173
|
+
.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
|
|
174
|
+
.high .chart { border:1px solid rgb(77,146,33) }
|
|
175
|
+
/* dark yellow (gold) */
|
|
176
|
+
.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
|
|
177
|
+
.medium .chart { border:1px solid #f9cd0b; }
|
|
178
|
+
/* light yellow */
|
|
179
|
+
.medium { background: #fff4c2; }
|
|
180
|
+
|
|
181
|
+
.cstat-skip { background: #ddd; color: #111; }
|
|
182
|
+
.fstat-skip { background: #ddd; color: #111 !important; }
|
|
183
|
+
.cbranch-skip { background: #ddd !important; color: #111; }
|
|
184
|
+
|
|
185
|
+
span.cline-neutral { background: #eaeaea; }
|
|
186
|
+
|
|
187
|
+
.coverage-summary td.empty {
|
|
188
|
+
opacity: .5;
|
|
189
|
+
padding-top: 4px;
|
|
190
|
+
padding-bottom: 4px;
|
|
191
|
+
line-height: 1;
|
|
192
|
+
color: #888;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.cover-fill, .cover-empty {
|
|
196
|
+
display:inline-block;
|
|
197
|
+
height: 12px;
|
|
198
|
+
}
|
|
199
|
+
.chart {
|
|
200
|
+
line-height: 0;
|
|
201
|
+
}
|
|
202
|
+
.cover-empty {
|
|
203
|
+
background: white;
|
|
204
|
+
}
|
|
205
|
+
.cover-full {
|
|
206
|
+
border-right: none !important;
|
|
207
|
+
}
|
|
208
|
+
pre.prettyprint {
|
|
209
|
+
border: none !important;
|
|
210
|
+
padding: 0 !important;
|
|
211
|
+
margin: 0 !important;
|
|
212
|
+
}
|
|
213
|
+
.com { color: #999 !important; }
|
|
214
|
+
.ignore-none { color: #999; font-weight: normal; }
|
|
215
|
+
|
|
216
|
+
.wrapper {
|
|
217
|
+
min-height: 100%;
|
|
218
|
+
height: auto !important;
|
|
219
|
+
height: 100%;
|
|
220
|
+
margin: 0 auto -48px;
|
|
221
|
+
}
|
|
222
|
+
.footer, .push {
|
|
223
|
+
height: 48px;
|
|
224
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
var jumpToCode = (function init() {
|
|
3
|
+
// Classes of code we would like to highlight in the file view
|
|
4
|
+
var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
|
|
5
|
+
|
|
6
|
+
// Elements to highlight in the file listing view
|
|
7
|
+
var fileListingElements = ['td.pct.low'];
|
|
8
|
+
|
|
9
|
+
// We don't want to select elements that are direct descendants of another match
|
|
10
|
+
var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
|
|
11
|
+
|
|
12
|
+
// Selecter that finds elements on the page to which we can jump
|
|
13
|
+
var selector =
|
|
14
|
+
fileListingElements.join(', ') +
|
|
15
|
+
', ' +
|
|
16
|
+
notSelector +
|
|
17
|
+
missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
|
|
18
|
+
|
|
19
|
+
// The NodeList of matching elements
|
|
20
|
+
var missingCoverageElements = document.querySelectorAll(selector);
|
|
21
|
+
|
|
22
|
+
var currentIndex;
|
|
23
|
+
|
|
24
|
+
function toggleClass(index) {
|
|
25
|
+
missingCoverageElements
|
|
26
|
+
.item(currentIndex)
|
|
27
|
+
.classList.remove('highlighted');
|
|
28
|
+
missingCoverageElements.item(index).classList.add('highlighted');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function makeCurrent(index) {
|
|
32
|
+
toggleClass(index);
|
|
33
|
+
currentIndex = index;
|
|
34
|
+
missingCoverageElements.item(index).scrollIntoView({
|
|
35
|
+
behavior: 'smooth',
|
|
36
|
+
block: 'center',
|
|
37
|
+
inline: 'center'
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function goToPrevious() {
|
|
42
|
+
var nextIndex = 0;
|
|
43
|
+
if (typeof currentIndex !== 'number' || currentIndex === 0) {
|
|
44
|
+
nextIndex = missingCoverageElements.length - 1;
|
|
45
|
+
} else if (missingCoverageElements.length > 1) {
|
|
46
|
+
nextIndex = currentIndex - 1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
makeCurrent(nextIndex);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function goToNext() {
|
|
53
|
+
var nextIndex = 0;
|
|
54
|
+
|
|
55
|
+
if (
|
|
56
|
+
typeof currentIndex === 'number' &&
|
|
57
|
+
currentIndex < missingCoverageElements.length - 1
|
|
58
|
+
) {
|
|
59
|
+
nextIndex = currentIndex + 1;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
makeCurrent(nextIndex);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return function jump(event) {
|
|
66
|
+
if (
|
|
67
|
+
document.getElementById('fileSearch') === document.activeElement &&
|
|
68
|
+
document.activeElement != null
|
|
69
|
+
) {
|
|
70
|
+
// if we're currently focused on the search input, we don't want to navigate
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
switch (event.which) {
|
|
75
|
+
case 78: // n
|
|
76
|
+
case 74: // j
|
|
77
|
+
goToNext();
|
|
78
|
+
break;
|
|
79
|
+
case 66: // b
|
|
80
|
+
case 75: // k
|
|
81
|
+
case 80: // p
|
|
82
|
+
goToPrevious();
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
})();
|
|
87
|
+
window.addEventListener('keydown', jumpToCode);
|