@decidables/decidables-elements 0.0.1 → 0.0.4
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/CHANGELOG.md +24 -0
- package/LICENSE.md +1112 -0
- package/README.md +268 -19
- package/package.json +11 -5
- package/gulpfile.js +0 -25
- package/test/button.test.js +0 -29
- package/test/converter-array.test.js +0 -14
- package/test/converter-set.test.js +0 -15
- package/test/coverage/lcov-report/base.css +0 -224
- package/test/coverage/lcov-report/block-navigation.js +0 -87
- package/test/coverage/lcov-report/button.js.html +0 -364
- package/test/coverage/lcov-report/converter-array.js.html +0 -130
- package/test/coverage/lcov-report/converter-set.js.html +0 -130
- package/test/coverage/lcov-report/decidables-element.js.html +0 -877
- package/test/coverage/lcov-report/favicon.png +0 -0
- package/test/coverage/lcov-report/index.html +0 -236
- package/test/coverage/lcov-report/prettify.css +0 -1
- package/test/coverage/lcov-report/prettify.js +0 -2
- package/test/coverage/lcov-report/slider.js.html +0 -1084
- package/test/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/test/coverage/lcov-report/sorter.js +0 -196
- package/test/coverage/lcov-report/spinner.js.html +0 -532
- package/test/coverage/lcov-report/switch.js.html +0 -622
- package/test/coverage/lcov-report/toggle-option.js.html +0 -574
- package/test/coverage/lcov-report/toggle.js.html +0 -259
- package/test/coverage/lcov.info +0 -1480
- package/test/decidables-element.test.js +0 -10
- package/test/slider.test.js +0 -64
- package/test/spinner.test.js +0 -55
- package/test/switch.test.js +0 -71
- package/test/toggle-option.test.js +0 -62
- package/test/toggle.test.js +0 -98
package/README.md
CHANGED
|
@@ -2,22 +2,270 @@
|
|
|
2
2
|
|
|
3
3
|
# decidables-elements: Basic UI Web Components for [**decidables**](https://github.com/decidables/decidables)
|
|
4
4
|
|
|
5
|
+
[](https://www.npmjs.com/package/@decidables/decidables-elements)
|
|
6
|
+
[](https://github.com/decidables/decidables/blob/main/LICENSE.md)
|
|
7
|
+
|
|
8
|
+
## Usage
|
|
9
|
+
|
|
10
|
+
### Install
|
|
11
|
+
|
|
12
|
+
```shell
|
|
13
|
+
yarn add @decidables/decidables-elements
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### Use
|
|
17
|
+
|
|
18
|
+
```javascript
|
|
19
|
+
import '@decidables/decidables-elements';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
A bare import is used to register the elements in the custom registry, so they are then available
|
|
23
|
+
for use in HTML.
|
|
24
|
+
|
|
5
25
|
## Contents
|
|
6
26
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
### Components
|
|
28
|
+
|
|
29
|
+
#### `DecidablesButton` / `<decidables-button>`
|
|
30
|
+
|
|
31
|
+
Button for taking actions
|
|
32
|
+
|
|
33
|
+
##### Slots
|
|
34
|
+
|
|
35
|
+
- *unnamed*
|
|
36
|
+
- Inline content as label
|
|
37
|
+
|
|
38
|
+
##### Attributes
|
|
39
|
+
|
|
40
|
+
- `disabled: boolean = false`
|
|
41
|
+
- In disabled state user can't interact
|
|
42
|
+
|
|
43
|
+
##### Example
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<decidables-button disabled>
|
|
47
|
+
Click me
|
|
48
|
+
</decidables-button>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
#### `DecidablesSlider` / `<decidables-slider>`
|
|
52
|
+
|
|
53
|
+
Slider w/spinner for selecting a numeric value from a range
|
|
54
|
+
|
|
55
|
+
##### Slots
|
|
56
|
+
|
|
57
|
+
- *unnamed*
|
|
58
|
+
- Inline content as label
|
|
59
|
+
|
|
60
|
+
##### Attributes
|
|
61
|
+
|
|
62
|
+
- `disabled: boolean = false`
|
|
63
|
+
- In disabled state user can't interact
|
|
64
|
+
- `max: number = undefined`
|
|
65
|
+
- Maximum value the slider can take
|
|
66
|
+
- `min: number = undefined`
|
|
67
|
+
- Minimum value the slider can take
|
|
68
|
+
- `step: number = undefined`
|
|
69
|
+
- Amount that value increments with smallest movement of the slider
|
|
70
|
+
- `value: number = undefined`
|
|
71
|
+
- Initial value of the slider
|
|
72
|
+
|
|
73
|
+
##### Example
|
|
74
|
+
|
|
75
|
+
```html
|
|
76
|
+
<decidables-slider disabled max="0" min="100" step="2" value="50">
|
|
77
|
+
Move me
|
|
78
|
+
</decidables-slider>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### `DecidablesSpinner` / `<decidables-spinner>`
|
|
82
|
+
|
|
83
|
+
Text field w/spinner arrows for selecting a continuous numeric value
|
|
84
|
+
|
|
85
|
+
##### Slots
|
|
86
|
+
|
|
87
|
+
- *unnamed*
|
|
88
|
+
- Inline content as label
|
|
89
|
+
|
|
90
|
+
##### Attributes
|
|
91
|
+
|
|
92
|
+
- `disabled: boolean = false`
|
|
93
|
+
- In disabled state user can't interact
|
|
94
|
+
- `max: number = undefined`
|
|
95
|
+
- Maximum value the slider can take
|
|
96
|
+
- `min: number = undefined`
|
|
97
|
+
- Minimum value the slider can take
|
|
98
|
+
- `step: number = undefined`
|
|
99
|
+
- Amount that value increments with smallest movement of the slider
|
|
100
|
+
- `value: number = undefined`
|
|
101
|
+
- Initial value of the slider
|
|
102
|
+
|
|
103
|
+
##### Example
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<decidables-spinner disabled max="0" min="100" step="2" value="50">
|
|
107
|
+
Change me
|
|
108
|
+
</decidables-spinner>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### `DecidablesSwitch` / `<decidables-switch>`
|
|
112
|
+
|
|
113
|
+
Switch for turning an option on or off
|
|
114
|
+
|
|
115
|
+
##### Slots
|
|
116
|
+
|
|
117
|
+
- *unnamed*
|
|
118
|
+
- Inline content as label for **on** state
|
|
119
|
+
- `off-label`
|
|
120
|
+
- Inline content as label for **off** state
|
|
121
|
+
|
|
122
|
+
##### Attributes
|
|
123
|
+
|
|
124
|
+
- `disabled: boolean = false`
|
|
125
|
+
- In disabled state user can't interact
|
|
126
|
+
- `checked: number = false`
|
|
127
|
+
- Whether the switch is **on** (`true`) or **off** (`false`)
|
|
128
|
+
|
|
129
|
+
##### Example
|
|
130
|
+
|
|
131
|
+
```html
|
|
132
|
+
<decidables-switch disabled checked>
|
|
133
|
+
<span>On</span>
|
|
134
|
+
<span slot="off-label">Off</span>
|
|
135
|
+
</decidables-switch>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
#### `DecidablesToggleOption` / `<decidables-toggle-option>`
|
|
139
|
+
|
|
140
|
+
One option in a toggle set
|
|
141
|
+
|
|
142
|
+
##### Slots
|
|
143
|
+
|
|
144
|
+
- *unnamed*
|
|
145
|
+
- Inline content as label for option
|
|
146
|
+
|
|
147
|
+
##### Attributes
|
|
148
|
+
|
|
149
|
+
- `disabled: boolean = false`
|
|
150
|
+
- In disabled state user can't interact
|
|
151
|
+
- `checked: number = false`
|
|
152
|
+
- Whether the option is selected (`true`) or not ('false`)
|
|
153
|
+
- `name: string = undefined`
|
|
154
|
+
- An identifier to be shared by all options in a mutually exclusive group
|
|
155
|
+
- `value: string = undefined`
|
|
156
|
+
- An identifier specific to this option to uniquely identify it in the group
|
|
157
|
+
|
|
158
|
+
##### Example
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<decidables-toggle-option disabled name="flavors" value="chocolate" checked>
|
|
162
|
+
Chocolate
|
|
163
|
+
</decidables-toggle-option>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
#### `DecidablesToggle` / `<decidables-toggle>`
|
|
167
|
+
|
|
168
|
+
Toggle for selecting one option from a set
|
|
169
|
+
|
|
170
|
+
##### Slots
|
|
171
|
+
|
|
172
|
+
- *unnamed*
|
|
173
|
+
- Inline content as label for set
|
|
174
|
+
- `label`
|
|
175
|
+
- Inline content as legend for options
|
|
176
|
+
|
|
177
|
+
##### Attributes
|
|
178
|
+
|
|
179
|
+
- `disabled: boolean = false`
|
|
180
|
+
- In disabled state user can't interact
|
|
181
|
+
|
|
182
|
+
##### Example
|
|
183
|
+
|
|
184
|
+
```html
|
|
185
|
+
<decidables-toggle disabled>
|
|
186
|
+
<span>Pick one</span>
|
|
187
|
+
<span slot="label">Flavors</span>
|
|
188
|
+
<decidables-toggle-option disabled name="flavors" value="chocolate">
|
|
189
|
+
Chocolate
|
|
190
|
+
</decidables-toggle-option>
|
|
191
|
+
<decidables-toggle-option disabled name="flavors" value="strawberry">
|
|
192
|
+
Strawberry
|
|
193
|
+
</decidables-toggle-option>
|
|
194
|
+
<decidables-toggle-option disabled name="flavors" value="vanilla" checked>
|
|
195
|
+
Vanilla
|
|
196
|
+
</decidables-toggle-option>
|
|
197
|
+
</decidables-toggle>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Base class
|
|
201
|
+
|
|
202
|
+
#### `DecidablesElement`
|
|
203
|
+
|
|
204
|
+
Base class for all *decidables* web components
|
|
205
|
+
|
|
206
|
+
To define a new element:
|
|
207
|
+
|
|
208
|
+
```javascript
|
|
209
|
+
export default class DecidablesSomething extends DecidablesElement {
|
|
210
|
+
...
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
This library is built on `Lit`, so the resulting `DecidableElement` is also a `LitElement`
|
|
215
|
+
|
|
216
|
+
### Utilities
|
|
217
|
+
|
|
218
|
+
#### `DecidablesConverterArray`
|
|
219
|
+
|
|
220
|
+
Utility for attributes that can take an array of values
|
|
221
|
+
|
|
222
|
+
If you are defining a `DecidablesElement` with an attribute that can take an array of numbers,
|
|
223
|
+
then you can use this to automatically convert between a space-separated list as the attribute
|
|
224
|
+
and an `Array` of numbers as the property:
|
|
225
|
+
|
|
226
|
+
```javascript
|
|
227
|
+
static get properties() {
|
|
228
|
+
return {
|
|
229
|
+
stuff: {
|
|
230
|
+
attribute: 'values',
|
|
231
|
+
converter: DecidablesConverterArray,
|
|
232
|
+
reflect: true,
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
};
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```html
|
|
239
|
+
<decidables-something values="1.23 3.56 -2.97"></decidables-something>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
And `this.values` will be the `Array`: `[1.23 3.56 -2.97]`
|
|
243
|
+
|
|
244
|
+
#### `DecidablesConverterSet`
|
|
245
|
+
|
|
246
|
+
Utility for attributes that can take a set of values
|
|
247
|
+
|
|
248
|
+
If you are defining a `DecidablesElement` with an attribute that can take a set of string
|
|
249
|
+
values, then you can use this to automatically convert between a space-separated list as the
|
|
250
|
+
attribute and a `Set` of strings as the property:
|
|
251
|
+
|
|
252
|
+
```javascript
|
|
253
|
+
static get properties() {
|
|
254
|
+
return {
|
|
255
|
+
stuff: {
|
|
256
|
+
attribute: 'stuff',
|
|
257
|
+
converter: DecidablesConverterSet,
|
|
258
|
+
reflect: true,
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
```html
|
|
265
|
+
<decidables-something stuff="this that other"></decidables-something>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
And `this.stuff` will be a `Set` with members: `'this'`, `'that'`, and `'other'`
|
|
21
269
|
|
|
22
270
|
## Features/Bugs/Notes
|
|
23
271
|
|
|
@@ -27,8 +275,6 @@
|
|
|
27
275
|
- Firefox - spinner arrows look ugly and asymmetrical
|
|
28
276
|
- IE11 - No CSS variables outside custom elements (and not patched by ShadyCSS!)
|
|
29
277
|
|
|
30
|
-
---
|
|
31
|
-
|
|
32
278
|
## Development Tooling
|
|
33
279
|
|
|
34
280
|
### Local Scripts
|
|
@@ -36,12 +282,14 @@
|
|
|
36
282
|
- `yarn lint`
|
|
37
283
|
- Lints markdown, scripts and styles
|
|
38
284
|
- `yarn test`
|
|
39
|
-
- Runs tests and reports coverage in `test/coverage/`
|
|
285
|
+
- Runs all tests and reports coverage in `test/coverage/`
|
|
286
|
+
- `yarn test:watch`
|
|
287
|
+
- Runs all tests in watch mode and reports coverage in `test/coverage/`
|
|
288
|
+
- `yarn test:file <filename>`
|
|
289
|
+
- Runs tests for a single file and reports coverage in `test/coverage/`
|
|
40
290
|
- `yarn build`
|
|
41
291
|
- Builds bundles from `src/` to `lib/`
|
|
42
292
|
|
|
43
|
-
---
|
|
44
|
-
|
|
45
293
|
## File Organization
|
|
46
294
|
|
|
47
295
|
- `decidables-elements/`
|
|
@@ -49,6 +297,7 @@
|
|
|
49
297
|
- `src/` (Source files)
|
|
50
298
|
- `test/` (Testing files)
|
|
51
299
|
- `coverage/` (Code coverage results) **\[autogenerated\]**
|
|
300
|
+
- `CHANGELOG.md` (Based on conventional commits) **\[autogenerated\]**
|
|
52
301
|
- `gulpfile.js` (Config for *gulp*)
|
|
53
302
|
- `package.json` (Config for *yarn* and *npm*)
|
|
54
303
|
- `README.md` (This file)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decidables/decidables-elements",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "decidables-elements: Basic UI Web Components for the decidables project",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/decidablesElements.umd.min.js",
|
|
@@ -19,14 +19,21 @@
|
|
|
19
19
|
"bugs": "https://github.com/decidables/decidables/issues",
|
|
20
20
|
"homepage": "https://github.com/decidables/decidables/tree/main/libraries/decidables-elements",
|
|
21
21
|
"author": "Adam Krawitz (https://web.uvic.ca/psyc/krawitz/)",
|
|
22
|
-
"license": "GPL-3.0",
|
|
22
|
+
"license": "CC-BY-SA-4.0 AND GPL-3.0-or-later",
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
|
+
"files": [
|
|
27
|
+
"package.json",
|
|
28
|
+
"*.md",
|
|
29
|
+
"src",
|
|
30
|
+
"lib"
|
|
31
|
+
],
|
|
26
32
|
"scripts": {
|
|
27
33
|
"lint": "gulp lint",
|
|
28
34
|
"test": "web-test-runner test/**/*.test.js --config ../../.webtestrunnerrc.js",
|
|
29
|
-
"test
|
|
35
|
+
"test:watch": "web-test-runner test/**/*.test.js --config ../../.webtestrunnerrc.js --watch",
|
|
36
|
+
"test:file": "web-test-runner $@ --config ../../.webtestrunnerrc.js",
|
|
30
37
|
"build": "gulp build"
|
|
31
38
|
},
|
|
32
39
|
"browserslist": [
|
|
@@ -34,7 +41,6 @@
|
|
|
34
41
|
"not dead"
|
|
35
42
|
],
|
|
36
43
|
"devDependencies": {
|
|
37
|
-
"@open-wc/testing": "^3.1.1",
|
|
38
44
|
"@web/test-runner": "^0.13.27",
|
|
39
45
|
"gulp": "^4.0.2"
|
|
40
46
|
},
|
|
@@ -42,5 +48,5 @@
|
|
|
42
48
|
"d3": "^7.3.0",
|
|
43
49
|
"lit": "^2.1.2"
|
|
44
50
|
},
|
|
45
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "f3e3115ad33a8e1ad5db8ae455b67f571f4561c6"
|
|
46
52
|
}
|
package/gulpfile.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
// devDependencies
|
|
3
|
-
import gulp from 'gulp';
|
|
4
|
-
|
|
5
|
-
// Local dependencies
|
|
6
|
-
import * as cleans from '../../scripts/clean.js';
|
|
7
|
-
import * as lints from '../../scripts/lint.js';
|
|
8
|
-
import * as builds from '../../scripts/build.js';
|
|
9
|
-
|
|
10
|
-
// Re-export
|
|
11
|
-
export * from '../../scripts/clean.js';
|
|
12
|
-
export * from '../../scripts/lint.js';
|
|
13
|
-
export * from '../../scripts/build.js';
|
|
14
|
-
|
|
15
|
-
// Tasks
|
|
16
|
-
export const lint = gulp.parallel(
|
|
17
|
-
lints.lintMarkdown,
|
|
18
|
-
lints.lintScripts,
|
|
19
|
-
lints.lintStyles,
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
export const build = gulp.series(
|
|
23
|
-
cleans.cleanLib,
|
|
24
|
-
builds.buildLibrary,
|
|
25
|
-
);
|
package/test/button.test.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import {expect, fixture, html} from '@open-wc/testing';
|
|
2
|
-
|
|
3
|
-
import '../src/button';
|
|
4
|
-
|
|
5
|
-
describe('decidables-button', () => {
|
|
6
|
-
it('has a shadowDom', async () => {
|
|
7
|
-
const el = await fixture(html` <decidables-button>Push</decidables-button> `);
|
|
8
|
-
|
|
9
|
-
expect(el).shadowDom.to.equal(`
|
|
10
|
-
<button>
|
|
11
|
-
<slot></slot>
|
|
12
|
-
</button>
|
|
13
|
-
`);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('has a lightDom', async () => {
|
|
17
|
-
const el = await fixture(html` <decidables-button>Push</decidables-button> `);
|
|
18
|
-
|
|
19
|
-
expect(el).lightDom.to.equal(`
|
|
20
|
-
Push
|
|
21
|
-
`);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('can be disabled', async () => {
|
|
25
|
-
const el = await fixture(html` <decidables-button disabled>Push</decidables-button> `);
|
|
26
|
-
|
|
27
|
-
expect(el.shadowRoot).to.have.descendant('button').that.has.attribute('disabled');
|
|
28
|
-
});
|
|
29
|
-
});
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import {expect} from '@open-wc/testing';
|
|
2
|
-
|
|
3
|
-
import DecidablesConvertArray from '../src/converter-array';
|
|
4
|
-
|
|
5
|
-
describe('decidables-converter-array', () => {
|
|
6
|
-
it('converts from attribute to property', () => {
|
|
7
|
-
expect(DecidablesConvertArray.fromAttribute('1 2 3 4 5')).to.deep.equal([1, 2, 3, 4, 5]);
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
it('converts from property to attribute', () => {
|
|
11
|
-
expect(DecidablesConvertArray.toAttribute([1, 2, 3, 4, 5]))
|
|
12
|
-
.to.equal('1.000 2.000 3.000 4.000 5.000');
|
|
13
|
-
});
|
|
14
|
-
});
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {expect} from '@open-wc/testing';
|
|
2
|
-
|
|
3
|
-
import DecidablesConvertSet from '../src/converter-set';
|
|
4
|
-
|
|
5
|
-
describe('decidables-converter-set', () => {
|
|
6
|
-
it('converts from attribute to property', () => {
|
|
7
|
-
expect(DecidablesConvertSet.fromAttribute('alpha beta gamma'))
|
|
8
|
-
.to.deep.equal(new Set(['alpha', 'beta', 'gamma']));
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('converts from property to attribute', () => {
|
|
12
|
-
expect(DecidablesConvertSet.toAttribute(new Set(['alpha', 'beta', 'gamma'])))
|
|
13
|
-
.to.equal('alpha beta gamma');
|
|
14
|
-
});
|
|
15
|
-
});
|
|
@@ -1,224 +0,0 @@
|
|
|
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
|
-
}
|