foreman_leapp 0.0.5 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -20
  3. data/app/controllers/api/v2/concerns/api_authorizer.rb +27 -0
  4. data/app/controllers/api/v2/preupgrade_reports_controller.rb +21 -2
  5. data/app/controllers/preupgrade_reports_controller.rb +11 -1
  6. data/app/lib/actions/preupgrade_job.rb +2 -1
  7. data/app/lib/helpers/job_helper.rb +3 -4
  8. data/app/models/preupgrade_report.rb +1 -0
  9. data/app/models/preupgrade_report_entry.rb +1 -0
  10. data/app/views/api/v2/preupgrade_report_entries/base.json.rabl +1 -1
  11. data/app/views/api/v2/preupgrade_reports/job_invocation.json.rabl +3 -0
  12. data/app/views/foreman_leapp/job_templates/leapp_check.erb +15 -0
  13. data/app/views/foreman_leapp/job_templates/{preupgrade.erb → leapp_preupgrade.erb} +5 -2
  14. data/app/views/foreman_leapp/job_templates/leapp_remediation.erb +29 -0
  15. data/app/views/foreman_leapp/job_templates/leapp_upgrade.erb +26 -0
  16. data/app/views/job_invocations/_leapp_preupgrade_report.html.erb +2 -1
  17. data/config/routes.rb +2 -1
  18. data/db/migrate/20200429080939_report_entries_flags.rb +5 -0
  19. data/db/seeds.d/10_leapp_preupgrade.rb +1 -1
  20. data/lib/foreman_leapp/engine.rb +7 -6
  21. data/lib/foreman_leapp/version.rb +1 -1
  22. data/package.json +3 -2
  23. data/test/functional/api/v2/preupgrade_reports_controller_test.rb +89 -6
  24. data/test/functional/preupgrade_reports_controller_test.rb +27 -4
  25. data/test/unit/actions/preupgrade_job_test.rb +1 -1
  26. data/test/unit/helpers/job_helper_test.rb +3 -10
  27. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +4 -0
  28. data/webpack/__mocks__/foremanReact/common/I18n.js +1 -1
  29. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +2 -0
  30. data/webpack/__mocks__/foremanReact/components/common/EmptyState.js +1 -0
  31. data/webpack/components/PreupgradeReports/PreupgradeReports.js +119 -8
  32. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +1 -1
  33. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +152 -0
  34. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +2 -0
  35. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +11 -0
  36. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +72 -2
  37. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +26 -1
  38. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +78 -0
  39. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +60 -5
  40. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +489 -0
  41. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +40 -1
  42. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +36 -1
  43. data/webpack/components/PreupgradeReports/components/EntriesFilter.js +121 -0
  44. data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +3 -0
  45. data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +30 -0
  46. data/webpack/components/PreupgradeReports/components/FixSelectedButton.js +35 -0
  47. data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +15 -0
  48. data/webpack/components/PreupgradeReports/components/NoReports.js +35 -0
  49. data/webpack/components/PreupgradeReports/components/NoReports.test.js +15 -0
  50. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +29 -0
  51. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.test.js +17 -0
  52. data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +330 -0
  53. data/webpack/components/PreupgradeReports/components/__snapshots__/FixSelectedButton.test.js.snap +40 -0
  54. data/webpack/components/PreupgradeReports/components/__snapshots__/NoReports.test.js.snap +19 -0
  55. data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +29 -0
  56. data/webpack/components/PreupgradeReports/index.js +28 -5
  57. data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +37 -0
  58. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +28 -2
  59. data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +119 -0
  60. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +1 -1
  61. data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +33 -0
  62. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +50 -6
  63. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +56 -0
  64. data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +50 -0
  65. data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +27 -0
  66. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js +38 -0
  67. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +2 -0
  68. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +14 -0
  69. data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +29 -0
  70. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +32 -0
  71. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +95 -14
  72. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +113 -0
  73. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +36 -0
  74. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +191 -29
  75. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +19 -8
  76. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +15 -0
  77. data/webpack/components/PreupgradeReportsList/components/helpers.js +177 -21
  78. data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +61 -0
  79. data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +61 -0
  80. data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +62 -0
  81. data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +62 -0
  82. data/webpack/components/PreupgradeReportsList/index.js +48 -10
  83. data/webpack/csrf.js +4 -0
  84. metadata +61 -10
  85. data/app/views/foreman_leapp/job_templates/remediation.erb +0 -17
  86. data/app/views/foreman_leapp/job_templates/upgrade.erb +0 -16
  87. data/webpack/components/PreupgradeReportsList/components/StringInfoItem.js +0 -49
  88. data/webpack/components/PreupgradeReportsList/components/__tests__/StringInfoItem.test.js +0 -13
  89. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/StringInfoItem.test.js.snap +0 -12
@@ -1,16 +1,27 @@
1
1
  import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
2
2
 
3
- import { additionalInfo } from '../helpers';
3
+ import {
4
+ tagInfo,
5
+ hasRemediations,
6
+ getTitle,
7
+ getSeverity,
8
+ getSummary,
9
+ getTags,
10
+ getExternals,
11
+ getRemediations,
12
+ } from '../helpers';
4
13
 
5
- const reportEntry = {
6
- title: 'This is title',
7
- severity: 'low',
8
- id: 5,
9
- preupgradeReportId: 6,
10
- };
14
+ import { reportEntry } from './PreupgradeReportEntry.fixtures';
11
15
 
12
16
  const fixtures = {
13
- 'should return additional info': () => additionalInfo(reportEntry),
17
+ 'should return tag info': () => tagInfo(reportEntry.tags),
18
+ 'should detect if has remediations': () => hasRemediations(reportEntry),
19
+ 'should return title': () => getTitle(reportEntry),
20
+ 'should return severity': () => getSeverity(reportEntry),
21
+ 'should return summary': () => getSummary(reportEntry),
22
+ 'should return tags': () => getTags(reportEntry),
23
+ 'should return externals': () => getExternals(reportEntry),
24
+ 'should return remediations': () => getRemediations(reportEntry),
14
25
  };
15
26
 
16
27
  describe('PreupgradeReportList/helpers', () =>
@@ -0,0 +1,15 @@
1
+ @import '~@theforeman/vendor/scss/variables';
2
+
3
+ .top-padded {
4
+ padding-top: 8px;
5
+ }
6
+
7
+ .pre-wrap{
8
+ white-space: pre-wrap;
9
+ }
10
+
11
+ .severity-img{
12
+ width: 18px;
13
+ height: 18px;
14
+ margin-right: 10px;
15
+ }
@@ -1,28 +1,184 @@
1
1
  import React from 'react';
2
-
2
+ import { Grid, ListView, Badge, Icon } from 'patternfly-react';
3
3
  import EmptyInfoItem from './EmptyInfoItem';
4
- import StringInfoItem from './StringInfoItem';
4
+ import SeverityHigh from './images/i_severity-high.svg';
5
+ import SeverityMedium from './images/i_severity-med.svg';
6
+ import SeverityLow from './images/i_severity-low.svg';
5
7
 
6
8
  export const itemIteratorId = (entry, ...rest) =>
7
9
  `${entry.id}-${entry.preupgradeReportId}-${rest.join('-')}`;
8
10
 
9
- export const additionalInfo = entry => {
10
- const infoAttrs = ['title', 'severity'];
11
-
12
- return infoAttrs.map(attr => {
13
- const key = itemIteratorId(entry, attr);
14
-
15
- if (!entry[attr]) {
16
- return <EmptyInfoItem entry={entry} attr={attr} key={key} />;
17
- }
18
-
19
- switch (attr) {
20
- case 'title':
21
- return <StringInfoItem entry={entry} attr={attr} key={key} />;
22
- case 'severity':
23
- return <StringInfoItem entry={entry} attr={attr} key={key} />;
24
- default:
25
- return '';
26
- }
27
- });
11
+ export const tagInfo = tags =>
12
+ tags.map(attr => (
13
+ <Badge key={attr} variant="pill primary">
14
+ {attr}
15
+ </Badge>
16
+ ));
17
+
18
+ export const getSeverityImg = entry => {
19
+ const key = itemIteratorId(entry, `sv${entry.id}`);
20
+
21
+ switch (entry.severity) {
22
+ case 'low':
23
+ return (
24
+ <img
25
+ key={key}
26
+ src={SeverityLow}
27
+ alt="Low Risk Factor"
28
+ className="severity-img"
29
+ />
30
+ );
31
+ case 'medium':
32
+ return (
33
+ <img
34
+ key={key}
35
+ src={SeverityMedium}
36
+ alt="Medium Risk Factor"
37
+ className="severity-img"
38
+ />
39
+ );
40
+ case 'high':
41
+ return (
42
+ <img
43
+ key={key}
44
+ src={SeverityHigh}
45
+ alt="High Risk Factor"
46
+ className="severity-img"
47
+ />
48
+ );
49
+ default:
50
+ return (
51
+ <img
52
+ key={key}
53
+ src={SeverityLow}
54
+ alt="Low Risk Factor"
55
+ className="severity-img"
56
+ />
57
+ );
58
+ }
59
+ };
60
+
61
+ export const hasRemediations = entry => {
62
+ const key = itemIteratorId(entry, `rm${entry.id}`);
63
+ if (entry.detail && entry.detail.remediations) {
64
+ return (
65
+ <ListView.InfoItem key={key}>
66
+ <Icon type="pf" name="warning-triangle-o" /> Has Remediation
67
+ </ListView.InfoItem>
68
+ );
69
+ }
70
+
71
+ return <EmptyInfoItem key={key} entry={entry} attr="remediation" />;
72
+ };
73
+
74
+ export const getTitle = entry => {
75
+ if (entry.title) {
76
+ return (
77
+ <Grid.Row>
78
+ <Grid.Col md={1}>
79
+ <strong>Title</strong>
80
+ </Grid.Col>
81
+ <Grid.Col md={8}>{entry.title}</Grid.Col>
82
+ </Grid.Row>
83
+ );
84
+ }
85
+ return <div />;
86
+ };
87
+
88
+ export const getSeverity = entry => {
89
+ if (entry.severity) {
90
+ return (
91
+ <Grid.Row className="top-padded">
92
+ <Grid.Col md={1}>
93
+ <strong>Risk Factor</strong>
94
+ </Grid.Col>
95
+ <Grid.Col md={8}>
96
+ {getSeverityImg(entry)} {entry.severity}
97
+ </Grid.Col>
98
+ </Grid.Row>
99
+ );
100
+ }
101
+ return <div />;
102
+ };
103
+
104
+ export const getSummary = entry => {
105
+ if (entry.summary) {
106
+ return (
107
+ <Grid.Row className="top-padded">
108
+ <Grid.Col md={1}>
109
+ <strong>Summary</strong>
110
+ </Grid.Col>
111
+ <Grid.Col md={8} className="pre-wrap">
112
+ {entry.summary}
113
+ </Grid.Col>
114
+ </Grid.Row>
115
+ );
116
+ }
117
+ return <div />;
118
+ };
119
+
120
+ export const getTags = entry => {
121
+ if (entry.tags) {
122
+ return (
123
+ <Grid.Row className="top-padded">
124
+ <Grid.Col md={1}>
125
+ <strong>Tags</strong>
126
+ </Grid.Col>
127
+ <Grid.Col md={8}>{tagInfo(entry.tags)}</Grid.Col>
128
+ </Grid.Row>
129
+ );
130
+ }
131
+ return <div />;
132
+ };
133
+
134
+ export const getExternals = entry => {
135
+ if (entry.detail && entry.detail.external) {
136
+ return entry.detail.external.map(attr => {
137
+ const key = itemIteratorId(entry, attr);
138
+ return (
139
+ <Grid.Row className="top-padded" key={key}>
140
+ <Grid.Col md={1}>
141
+ <strong>Links</strong>
142
+ </Grid.Col>
143
+ <Grid.Col md={8}>
144
+ <a href={attr.url}>{attr.title}</a>
145
+ </Grid.Col>
146
+ </Grid.Row>
147
+ );
148
+ });
149
+ }
150
+ return <div />;
151
+ };
152
+
153
+ export const getRemediations = entry => {
154
+ if (entry.detail && entry.detail.remediations) {
155
+ return entry.detail.remediations.map(attr => {
156
+ const key = itemIteratorId(entry, attr);
157
+ if (attr.type === 'hint') {
158
+ return (
159
+ <Grid.Row className="top-padded" key={key}>
160
+ <Grid.Col md={1}>
161
+ <strong>Hint</strong>
162
+ </Grid.Col>
163
+ <Grid.Col md={8}>{attr.context}</Grid.Col>
164
+ </Grid.Row>
165
+ );
166
+ }
167
+ if (attr.type === 'command') {
168
+ return (
169
+ <Grid.Row className="top-padded" key={key}>
170
+ <Grid.Col md={1}>
171
+ <strong>Command</strong>
172
+ </Grid.Col>
173
+ <Grid.Col md={8}>
174
+ <code>{attr.context.join(' ')}</code>
175
+ </Grid.Col>
176
+ </Grid.Row>
177
+ );
178
+ }
179
+
180
+ return <div />;
181
+ });
182
+ }
183
+ return <div />;
28
184
  };
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_critical.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata4612"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs4610" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview4608"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style4593">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#CC0000;}
48
+ </style><g
49
+ id="g4605"><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path4597" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path4599" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path4601" /><path
59
+ class="st1"
60
+ d="M114.6,44H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.7,13-10.7h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,39.2,121.8,44,114.6,44z"
61
+ id="path4603" /></g></svg>
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_high.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6016"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6014" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6012"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style5999">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#F39800;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path6003" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path6005" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path6007" /><path
59
+ class="st2"
60
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
61
+ id="path6009" /></svg>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_low.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6693"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6691" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6689"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style6674">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#94D400;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><g
50
+ id="g6678" /><path
51
+ class="st1"
52
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
53
+ id="path6680" /><path
54
+ class="st2"
55
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
56
+ id="path6682" /><path
57
+ class="st2"
58
+ d="M99.6,73.3H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,70.2,104.3,73.3,99.6,73.3z"
59
+ id="path6684" /><path
60
+ class="st2"
61
+ d="M99.6,106.4H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,103.3,104.3,106.4,99.6,106.4z"
62
+ id="path6686" /></svg>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_med.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata7574"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs7572" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="834"
34
+ inkscape:window-height="480"
35
+ id="namedview7570"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="0"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style7555">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#DEC800;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><g
50
+ id="g7559" /><path
51
+ class="st1"
52
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
53
+ id="path7561" /><path
54
+ class="st1"
55
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
56
+ id="path7563" /><path
57
+ class="st2"
58
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
59
+ id="path7565" /><path
60
+ class="st2"
61
+ d="M99.6,73.3H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,70.2,104.3,73.3,99.6,73.3z"
62
+ id="path7567" /></svg>