summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohnny nam <johnny@dignsys.com>2018-08-08 15:41:57 +0900
committerscott park <scott.park@dignsys.com>2018-09-12 10:34:27 +0900
commit80395833451d4f9396aab36ee0d5cc606fa548b9 (patch)
tree4076a8164426f6a4f1e734a8f37e579ea66cbfaf
parent7171fc29ddfb2aade9172ef440bd68443141e723 (diff)
downloadco2-meter-80395833451d4f9396aab36ee0d5cc606fa548b9.tar.gz
co2-meter-80395833451d4f9396aab36ee0d5cc606fa548b9.tar.bz2
co2-meter-80395833451d4f9396aab36ee0d5cc606fa548b9.zip
initial import(release): AppPlugin
Change-Id: I88a24715e996f0134b5b019bde893893ecb9a726 Signed-off-by: johnny nam <johnny@dignsys.com> Signed-off-by: scott park <scott.park@dignsys.com>
-rw-r--r--plugin/catalog.json21
-rw-r--r--plugin/device-profile.json24
-rw-r--r--plugin/manifest/ui.json311
-rw-r--r--plugin/plugin/css/fonts.css23
-rw-r--r--plugin/plugin/css/sensor-co2.css93
-rw-r--r--plugin/plugin/css/style.css496
-rw-r--r--plugin/plugin/icon.png0
-rw-r--r--plugin/plugin/index.html87
-rw-r--r--plugin/plugin/js/capability_airQualitySensorCO2.js48
-rw-r--r--plugin/plugin/js/capability_switch.js55
-rw-r--r--plugin/plugin/js/capability_thermostatCoolingSetpointCO2.js89
-rw-r--r--plugin/plugin/js/indexCO2.js76
-rw-r--r--plugin/plugin/manifest.xml16
-rw-r--r--plugin/plugin/res/board_ic_arrow_left.pngbin0 -> 603 bytes
-rw-r--r--plugin/plugin/res/good.svg27
-rw-r--r--plugin/plugin/res/ic_power.svg15
-rw-r--r--plugin/plugin/res/normal.svg27
-rw-r--r--plugin/plugin/res/option_ic_more.svg13
-rw-r--r--plugin/plugin/res/poor.svg27
-rw-r--r--plugin/plugin/res/vpoor.svg30
20 files changed, 1478 insertions, 0 deletions
diff --git a/plugin/catalog.json b/plugin/catalog.json
new file mode 100644
index 0000000..05c479c
--- /dev/null
+++ b/plugin/catalog.json
@@ -0,0 +1,21 @@
+{
+ "items": [
+ {
+ "name": "co2Sensor",
+ "appType": "setupApp",
+ "versions": [
+ {
+ "appData": {
+ "setupAppData": {
+ "type": "ocf",
+ "ocf": {
+ "mnId": "",
+ "setupId": "001"
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/plugin/device-profile.json b/plugin/device-profile.json
new file mode 100644
index 0000000..bb9eca4
--- /dev/null
+++ b/plugin/device-profile.json
@@ -0,0 +1,24 @@
+{
+ "name": "co2 sensor",
+ "components": [
+ {
+ "id": "main",
+ "capabilities": [
+ {
+ "id": "switch"
+ },
+ {
+ "id": "airQualitySensor"
+ },
+ {
+ "id": "thermostatCoolingSetpoint"
+ }
+ ]
+ }
+ ],
+ "metadata": {
+ "mnmn": "",
+ "vid": "",
+ "deviceType": "AirPurifier"
+ }
+}
diff --git a/plugin/manifest/ui.json b/plugin/manifest/ui.json
new file mode 100644
index 0000000..3dc5ee0
--- /dev/null
+++ b/plugin/manifest/ui.json
@@ -0,0 +1,311 @@
+{
+ "n": "co2sensor",
+ "version": "0.0.1",
+ "vid": "",
+ "mnmn": "",
+ "language": [
+ {
+ "locale": "en_US",
+ "version": "0.0.1",
+ "poCodes": [
+ {
+ "po": "__PO_CODE_POWERSWITCH_ON",
+ "label": "On"
+ },
+ {
+ "po": "__PO_CODE_POWERSWITCH_OFF",
+ "label": "Off"
+ },
+ {
+ "po": "__PO_CODE_POWERSWITCH",
+ "label": "Power"
+ },
+ {
+ "label": "Air Quality Sensor Level",
+ "po": "__PO_CODE_AIRQUALITYSENSOR_LEVEL"
+ },
+ {
+ "label": "Cooling Temperature",
+ "po": "__PO_CODE_THERMOSTATHEATINGSETPOINT_COOLING_TEMPERATURE"
+ }
+ ],
+ "mnmn": "",
+ "vid": ""
+ }
+ ],
+ "ma": [
+ {
+ "name": "PowerSwitch",
+ "type": "main",
+ "order": 1,
+ "link": {
+ "href": "/capability/switch/main/0",
+ "if": "oic.if.a",
+ "rt": "x.com.st.powerswitch"
+ },
+ "iconUrl": {
+ "vector": "",
+ "small": "",
+ "large": "",
+ "mid": "icon://ic_function_power_switch"
+ },
+ "property": "power",
+ "controlType": "ToggleSwitch",
+ "alternatives": [
+ {
+ "key": "on",
+ "value": "__PO_CODE_POWERSWITCH_ON"
+ },
+ {
+ "key": "off",
+ "value": "__PO_CODE_POWERSWITCH_OFF",
+ "type": "inactive"
+ }
+ ],
+ "step": 0,
+ "label": {
+ "label": "__PO_CODE_POWERSWITCH"
+ },
+ "emphasis": false
+ }
+ ],
+ "ms": [
+ {
+ "name": "PowerSwitch",
+ "type": "device",
+ "order": 1,
+ "label": {
+ "label": "<var1>",
+ "arguments": [
+ {
+ "n": "var1",
+ "href": "/capability/switch/main/0",
+ "property": "power",
+ "valueType": null,
+ "alternatives": [
+ {
+ "key": "on",
+ "value": "__PO_CODE_POWERSWITCH_ON"
+ },
+ {
+ "key": "off",
+ "value": "__PO_CODE_POWERSWITCH_OFF",
+ "type": "inactive"
+ }
+ ]
+ }
+ ]
+ },
+ "emphasis": false
+ }
+ ],
+ "dpInfo": [
+ {
+ "os": "android",
+ "dpType": "vendorPlugIn",
+ "dpUri": "wwst://coSensor2"
+ },
+ {
+ "os": "ios",
+ "dpType": "vendorPlugIn",
+ "dpUri": "wwst://coSensor2"
+ }
+ ],
+ "dpResources": [
+ {
+ "name": "PowerSwitch",
+ "controllable": true,
+ "order": 1,
+ "link": {
+ "href": "/capability/switch/main/0",
+ "if": "oic.if.a",
+ "rt": "x.com.st.powerswitch"
+ },
+ "iconUrl": {
+ "vector": "",
+ "small": "",
+ "large": "",
+ "mid": "icon://ic_function_power_switch"
+ },
+ "property": "power",
+ "controlType": "ToggleSwitch",
+ "alternatives": [
+ {
+ "key": "on",
+ "value": "__PO_CODE_POWERSWITCH_ON"
+ },
+ {
+ "key": "off",
+ "value": "__PO_CODE_POWERSWITCH_OFF",
+ "type": "inactive"
+ }
+ ],
+ "step": 0,
+ "label": {
+ "label": "__PO_CODE_POWERSWITCH"
+ },
+ "emphasis": true,
+ "ruleEvent": false,
+ "ruleAction": true
+ },
+ {
+ "name": "PowerSwitch",
+ "controllable": true,
+ "order": 2,
+ "link": {
+ "href": "/capability/switch/main/0",
+ "if": "oic.if.a",
+ "rt": "x.com.st.powerswitch"
+ },
+ "iconUrl": {
+ "vector": "",
+ "small": "",
+ "large": "",
+ "mid": "icon://ic_function_power_switch"
+ },
+ "property": "power",
+ "controlType": "ToggleSwitch",
+ "alternatives": [
+ {
+ "key": "on",
+ "value": "__PO_CODE_POWERSWITCH_ON"
+ },
+ {
+ "key": "off",
+ "value": "__PO_CODE_POWERSWITCH_OFF",
+ "type": "inactive"
+ }
+ ],
+ "step": 0,
+ "label": {
+ "label": "__PO_CODE_POWERSWITCH"
+ },
+ "emphasis": true,
+ "ruleEvent": false,
+ "ruleAction": false
+ },
+ {
+ "name": "PowerSwitch",
+ "controllable": true,
+ "order": 3,
+ "link": {
+ "href": "/capability/switch/main/0",
+ "if": "oic.if.a",
+ "rt": "x.com.st.powerswitch"
+ },
+ "iconUrl": {
+ "vector": "",
+ "small": "",
+ "large": "",
+ "mid": "icon://ic_function_power_switch"
+ },
+ "property": "power",
+ "controlType": "ToggleSwitch",
+ "alternatives": [
+ {
+ "key": "on",
+ "value": "__PO_CODE_POWERSWITCH_ON"
+ },
+ {
+ "key": "off",
+ "value": "__PO_CODE_POWERSWITCH_OFF",
+ "type": "inactive"
+ }
+ ],
+ "step": 0,
+ "label": {
+ "label": "__PO_CODE_POWERSWITCH"
+ },
+ "emphasis": true,
+ "ruleEvent": true,
+ "ruleAction": false
+ },
+ {
+ "emphasis": false,
+ "ruleEvent": false,
+ "order": 4,
+ "step": 0,
+ "property": "airQuality",
+ "controlType": "List",
+ "iconUrl": {
+ "vector": "",
+ "mid": "icon://ic_function_air_quality_sensor_level",
+ "large": "",
+ "small": ""
+ },
+ "name": "Air Quality Sensor",
+ "controllable": false,
+ "link": {
+ "href": "/capability/airQualitySensor/main/0",
+ "if": "oic.if.s",
+ "rt": "x.com.st.airqualitylevel"
+ },
+ "label": {
+ "n": "ST Air Quality Sensor Level Resource",
+ "label": "__PO_CODE_AIRQUALITYSENSOR_LEVEL"
+ },
+ "alternatives": [],
+ "ruleAction": false
+ },
+ {
+ "ruleAction": false,
+ "controllable": true,
+ "step": 0,
+ "link": {
+ "rt": "x.com.st.temperature.cooling",
+ "href": "/capability/thermostatCoolingSetpoint/main/0",
+ "if": "oic.if.a"
+ },
+ "range": [
+ 0,
+ 40
+ ],
+ "controlType": "List",
+ "name": "Thermostat Cooling Setpoint",
+ "label": {
+ "label": "__PO_CODE_THERMOSTATHEATINGSETPOINT_COOLING_TEMPERATURE",
+ "n": "Thermostat Cooling Setpoint resource"
+ },
+ "iconUrl": {
+ "mid": "icon://ic_function_cooling_temperature",
+ "large": "",
+ "small": "",
+ "vector": ""
+ },
+ "ruleEvent": false,
+ "emphasis": false,
+ "order": 5,
+ "property": "temperature"
+ },
+ {
+ "ruleAction": true,
+ "controllable": true,
+ "step": 0,
+ "link": {
+ "rt": "oic.r.temperature",
+ "href": "/capability/thermostatCoolingSetpoint/main/0",
+ "if": "oic.if.a"
+ },
+ "range": [
+ 0,
+ 40
+ ],
+ "controlType": "List",
+ "name": "Thermostat Cooling Setpoint",
+ "label": {
+ "label": "__PO_CODE_THERMOSTATHEATINGSETPOINT_COOLING_TEMPERATURE",
+ "n": "Thermostat Cooling Setpoint resource"
+ },
+ "iconUrl": {
+ "mid": "icon://ic_function_cooling_temperature",
+ "large": "",
+ "small": "",
+ "vector": ""
+ },
+ "ruleEvent": false,
+ "emphasis": false,
+ "order": 6,
+ "property": "temperature"
+ }
+ ]
+}
diff --git a/plugin/plugin/css/fonts.css b/plugin/plugin/css/fonts.css
new file mode 100644
index 0000000..4f017e7
--- /dev/null
+++ b/plugin/plugin/css/fonts.css
@@ -0,0 +1,23 @@
+@CHARSET "UTF-8";
+
+.roboto-regular
+{
+ font-family: 'sec-roboto-light', Fallback, sans-serif;
+}
+
+.roboto-medium
+{
+ font-family: 'sec-roboto-light', Fallback, sans-serif;
+ font-weight: bold;
+}
+
+.roboto-condensed-regular
+{
+ font-family: 'sec-roboto-condensed', Fallback, sans-serif;
+}
+
+.roboto-condensed-bold
+{
+ font-family: 'sec-roboto-condensed', Fallback, sans-serif;
+ font-weight: bold;
+} \ No newline at end of file
diff --git a/plugin/plugin/css/sensor-co2.css b/plugin/plugin/css/sensor-co2.css
new file mode 100644
index 0000000..ac33236
--- /dev/null
+++ b/plugin/plugin/css/sensor-co2.css
@@ -0,0 +1,93 @@
+.coolingset_container {
+ width: auto;
+ margin-top:10px;
+ text-align:center;
+ margin-bottom:10px;
+ height: 60px;
+}
+.coolingset_container_text {
+ width: 300px;
+ height: 50px;
+ display: inline-block;
+ /* border-bottom: rgba(0,0,0,0.07) solid 1px; */
+}
+.coolingset_item_content { text-align: left; font-size: 36px; color: #252525; }
+
+.cali_set_button {
+ width: 40px;
+ height: 40px;
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0px 3px;
+ background: white;
+ line-height: 36px;
+ -moz-border-radius: 22px;
+ -webkit-border-radius: 22px;
+ border-radius: 22px;
+ border: 2px solid #3695dd;
+ color: #3695dd;
+}
+.cali_set_button:hover {
+ color: white;
+ background: #3695dd;
+}
+.cali_set_button:active {
+ color: #3695dd;
+ background: white;
+}
+
+input { float: left; width: 120px; height: 35px; line-height: 36px;
+ font-weight: 700; font-size: 18px; text-align: center; border-radius: 30px;
+ color: #3695dd; border: 2px solid #3695dd; background-color: transparent; cursor: pointer;
+ outline: none; align: center; -webkit-appearance: none; appearance: none; }
+input:hover, input:focus { background-color: white; color: black; cursor: pointer; }
+/* hide up/down arrows on input fields marked type=number */
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
+
+#air_quality_area { height: auto; margin-top: 20px; margin-left: auto; margin-right: auto;
+ width: 200px; position: relative; text-align: center; color: white; font-size: 25px; }
+#air_quality_area_text { position: absolute; top: 48%; left: 50%; transform: translate(-50%, -50%); }
+span { display: inline-block; vertical-align: middle; }
+
+.cali_title { font-size: 15px; width: 200px; padding: 3px 0; display: inline-block; margin-bottom: 20px; border-top: rgba(0,0,0,0.3) solid 1px; text-align: center; }
+.cali_offset_set_wrap { align:center; display: none; }
+.cali_container { text-align: center; }
+.cali_set_container { padding: 5px 0; }
+
+.status_sub_bar { padding: 5px 0; }
+.status-container { margin-bottom: 15px; }
+
+table {
+float: center;
+width:70%;
+}
+table, th, td {
+// border-collapse: separate;
+ border-collapse: collapse;
+
+ font-weight: midium;
+ font-size: 15px;
+}
+td {
+ height: 30px;
+ text-align: center;
+ border: solid #fafafa; border-width: 0px 2px
+}
+th {
+ height: 10px;
+}
+table tr:nth-child(2) {
+ //background-color: #eee;
+ background-color: white;
+}
+table th {
+ width: 100px;
+}
+
+.cyan_back{ background-color: #3da8e1; }
+.green_back{ background-color: #8Fcc44; }
+.orange_back{ background-color: orange; }
+.red_back{ background-color: red; }
+
+
diff --git a/plugin/plugin/css/style.css b/plugin/plugin/css/style.css
new file mode 100644
index 0000000..7035013
--- /dev/null
+++ b/plugin/plugin/css/style.css
@@ -0,0 +1,496 @@
+@charset "utf-8";
+@import url("fonts.css");
+body {
+ /*position: fixed;*/
+ width:100%;
+ height:100%;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ background-color: white;
+ margin: 0;
+ padding: 0;
+ display:flex;
+ flex-direction: column;
+}
+
+.plugin-container {
+ flex: 1;
+ overflow:auto;
+}
+
+#action_bar {
+ border-bottom: rgba(0,0,0,0.07) solid 1px;
+ display:flex;
+ background-color: #fafafa;
+}
+
+#header_bar {
+ min-height: 50px;
+ display:flex;
+ margin-left: auto;
+ margin-right: 10px;
+}
+
+#action_bar,
+#action_bar_back_button,
+#action_bar_title,
+#action_bar_menu {
+ min-height: 48px;
+/* background-color: #fafafa;*/
+}
+
+#action_bar_more {
+ width: 56px;
+ display:flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ margin: 15px 0 15px 15px;
+ /*background-color: red;*/
+}
+
+#action_bar_more:before {
+ content: "";
+ background-image: url("../res/option_ic_more.svg");
+ background-size: contain;
+ background-repeat: no-repeat;
+ background-position: center;
+ width: 100%;
+ height: 18px;
+ display: block;
+}
+
+#action_bar_back_button {
+ width: 56px;
+ display:flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ -webkit-tap-highlight-color: transparent;
+}
+
+#action_bar_menu {
+ width: 48px;
+ visibility:hidden;
+}
+
+#action_bar_title {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ flex:1;
+ margin-left : 15px;
+}
+
+#action_bar_title_main {
+ font-size:23px;
+ color: #252525;
+ font-stretch: condensed;
+}
+
+#action_bar_title_sub {
+ font-size:13px;
+ color: #252525;
+ opacity: 0.6;
+ font-stretch: condensed;
+}
+
+#loading {
+ display:flex;
+ flex-direction: column;
+}
+
+#loading .img {
+ width: 60px;
+ height: 60px;
+ animation: spin 1s linear infinite;
+}
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+#content {
+ display: none;
+}
+
+.dot {
+ fill: #499ebd;
+}
+
+#icon_back .back_arrow {
+ fill: none;
+ stroke: #499ebd;
+ stroke-width: 7;
+}
+
+#icon_back {
+ max-width:24px;
+ max-height:24px;
+}
+
+#icon_menu_box {
+ display:flex;
+ align-items: center;
+ justify-content: center;
+}
+
+#icon_menu {
+ max-height:24px;
+ cursor: pointer;
+ -webkit-tap-highlight-color: transparent;
+}
+
+#action_bar_menu ul {
+ position: absolute;
+ right: 5px;
+ padding: 0px;
+ margin: 0px;
+ background-color: #fafafa;
+ max-height: 0;
+ transition: max-height 0.15s ease-out;
+ overflow: hidden;
+ border-radius: 5px;
+ z-index: 2;
+ position:absolute;
+ top:10px;
+}
+
+#action_bar_menu ul li {
+ min-width: 150px;
+ display: flex;
+ align-items: center;
+ white-space: nowrap;
+}
+
+#action_bar_menu ul li a {
+ display: inline-block;
+ margin: auto;
+ padding: 10px;
+ text-decoration: none;
+ color: black;
+ -webkit-tap-highlight-color: transparent;
+}
+
+#action_bar_menu ul li:hover {
+ background: #eee;
+}
+
+#action_bar_menu ul li:first-child {
+ border-radius: 5px 5px 0px 0px;
+ border-top: 1px #bbb solid;
+ border-left: 1px #bbb solid;
+ border-right: 1px #bbb solid;
+}
+
+#action_bar_menu ul li:last-child {
+ border-radius: 0px 0px 5px 5px;
+ border-bottom: 1px #bbb solid;
+ border-left: 1px #bbb solid;
+ border-right: 1px #bbb solid;
+}
+
+#action_bar_menu ul li:only-child {
+ border-radius: 5px;
+ border: 1px #bbb solid;
+}
+
+#action_bar_menu ul li {
+ border-left: 1px #bbb solid;
+ border-right: 1px #bbb solid;
+}
+
+#action_bar_menu.active ul {
+ max-height: 1000px;
+ transition: max-height 0.25s ease-in;
+}
+
+.button {
+ border-radius: 5px;
+ border-color: #d4d4d4;
+ border-style: solid;
+ border-width: 1px;
+ display: inline;
+ padding: 8px;
+}
+
+#power_icon_back_circle {
+ border-radius: 50%;
+ background: #3695dd;
+ width: 35px;
+ height: 35px;
+ margin: 10px 20px 0 auto;
+ display:flex;
+ align-items: center;
+}
+
+.svg-class {
+ width: 100%;
+ height: 100px;
+}
+
+#combo_area {
+ display: block;
+ align-items: center;
+ justify-content: center;
+ margin-top: 5px;
+}
+
+.mode_bar {
+ border-radius: 17px;
+ height: 35px;
+ width: 40%;
+ border: 2px solid #3695dd;
+ line-height: 34px;
+ background-color: white;
+}
+
+.mode_bar_text {
+ color: #3695dd;
+ font-size: 17px;
+ text-align-last:center;
+}
+
+#air_quality_area {
+ height: 20%;
+ margin-top: 40px;
+ margin-left: auto;
+ margin-right: auto;
+ width: 70%;
+ position: relative;
+ text-align: center;
+ color: white;
+ font-size: 25px;
+}
+
+#svg-status-id {
+ width: 100%;
+ height: 100%;
+}
+
+#air_quality_area_text {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+
+.status_sub_bar {
+ text-align: center;
+ font-weight: midium;
+ font-size: 15px;
+ color: #252525;
+ padding: 10px 0;
+ opacity:0.9;
+}
+
+.status-container {
+ margin-top:20px;
+ text-align:center;
+ margin-bottom:20px;
+}
+
+.TOAHChildContainerTemp {
+ width: 2.9rem;
+}
+.TOAHChildContainer {
+ display: inline-block;
+ width: 5.5rem; /* 130px; */
+ height: auto;
+ vertical-align: middle;
+ margin: 0px 2px 20px 0px;
+}
+
+.TOAHChildTitle {
+ width: 100%;
+ font-size: 0.75rem;
+ line-height: 0.75rem;
+ color: rgb(103, 103, 103);
+}
+
+.TOAHChildTitleCaseFour {
+ font-size: 0.75rem;
+}
+
+.TOAHChildDetail {
+ width: 100%;
+ margin-top: 0.4rem;
+ text-align: center;
+}
+
+.TOAHTempValue {
+ color: rgb(37, 37, 37);
+ font-size: 1rem;
+ line-height: 1rem;
+ vertical-align: top;
+}
+
+.TOAHDivider {
+ display: inline-block;
+ width: 0.05rem;
+ height: 2.325rem;
+ /* #border-right: solid 0.05rem rgba(0, 0, 0, 0.5); */
+ margin-left: 1.225rem;
+ margin-right: 1.225rem;
+ margin-top: 0.1rem;
+}
+
+.status_item_title {
+ text-align: center;
+ font-weight: regular;
+ font-size: 15px;
+ color: #252525;
+ opacity:0.8;
+}
+
+.status_item_content {
+ text-align: center;
+ font-weight: midium;
+ font-size: 15px;
+ color: #252525;
+}
+
+.function_container{
+ margin: 0 0 0 5%;
+ padding: 10px;
+ border-bottom: rgba(0,0,0,0.07) solid 1px;
+}
+
+.function_item{
+ height:75px;
+ width:100%;
+ color: white;
+}
+
+.item_icon {
+ width:30px;
+ height:30px;
+ display:inline-block;
+}
+
+.item_body {
+ width:150px;
+ height:40px;
+ display: inline-block;
+}
+
+.function_item_singleline{
+ margin: 0;
+ font-size: 0.8rem;
+ line-height: 1rem;
+ color: #252525;
+ margin-left: .8rem;
+ float: left;
+ padding-top: 1.275rem;
+ white-space: nowrap;
+ max-width: 12.4rem;
+ display:inline;
+}
+.function_item_multiline{
+ padding-top: 0.8rem;
+ margin-left: .8rem;;
+ float: left;
+ display:inline;
+}
+
+.function_item_multiline_1{
+ margin: 0;
+ font-size: 0.8rem;
+ line-height: 0.85rem;
+ color: #252525;
+ opacity:0.9;
+}
+
+.function_item_multiline_2{
+ margin: 0;
+ color: #3695dd;
+ font-size: 0.7rem;
+ line-height: 0.7rem;
+ padding-top: 0.25rem;
+}
+
+.filter_icon {
+ text-align:center;
+}
+
+.filter_icon:before {
+ content: "";
+ background-image: url("../res/ic_function_Filter_State.svg");
+ background-size: contain;
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+.energy_icon {
+ text-align:center;
+}
+
+.energy_icon:before {
+ content: "";
+ background-image: url("../res/ic_function_Energy_Consumption.svg");
+ background-size: contain;
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+.row-custom {
+ content: "";
+ clear: both;
+ display: block;
+ height: inherit;
+}
+
+.left-col {
+ float: left;
+ width: 100%;
+ background-color: #fafafa;
+}
+
+.right-col {
+ float: left;
+ width: 100%;
+}
+
+/* ---------- icon ------------- */
+
+.plus_icon { border-radius: 50%; background: #ffffff; }
+.plus_icon:before {
+ content: "";
+ background-image: url("../res/set_point_ic_plus.png");
+ background-size: contain;
+ width: 100%; height: 100%; display: block; }
+.minus_icon { border-radius: 50%; background: #ffffff; }
+.minus_icon:before {
+ content: "";
+ background-image: url("../res/set_point_ic_minus.png");
+ background-size: contain;
+ width: 100%; height: 100%; display: block; }
+.arrow_icon { position: absolute; right: 20px; margin-top: 15px;
+ color: #252525; opacity: 0.9; }
+.arrow_icon:before { content: ""; background-image: url("../res/list_ic_arrow.svg");
+ background-size: contain; width: 24px; height: 24px; display: block; }
+
+@media only screen and (orientation: landscape) and (min-height: 360px){
+ .left-col {
+ width: 50%;
+ height: inherit;
+ }
+
+ .right-col {
+ width: 50%;
+ }
+
+.function_container{
+ margin-left: 0;
+ }
+}
+
+@media only screen and (min-width: 768px) {
+ .left-col {
+ height: inherit;
+ }
+}
diff --git a/plugin/plugin/icon.png b/plugin/plugin/icon.png
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugin/plugin/icon.png
diff --git a/plugin/plugin/index.html b/plugin/plugin/index.html
new file mode 100644
index 0000000..ab8d998
--- /dev/null
+++ b/plugin/plugin/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>Air Quality Sensor</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <!-- Stylesheet-->
+ <link rel="stylesheet" type="text/css" href="css/style.css"/>
+ <link rel="stylesheet" type="text/css" href="css/sensor-co2.css"/>
+ <!-- SAMSUNG CONNECT API -->
+ <script type="text/javascript" src="lib/SCPluginApi.js"></script>
+ <script type="text/javascript" src="js/capability_switch.js"></script>
+ <script type="text/javascript" src="js/capability_airQualitySensorCO2.js"></script>
+ <script type="text/javascript" src="js/capability_thermostatCoolingSetpointCO2.js"></script>
+ <script type="text/javascript" src="js/indexCO2.js"></script>
+ </head>
+ <body>
+ <!-- Action bar-->
+ <div id="action_bar">
+ <span id="action_bar_back_button" onclick="backAction()">
+ <img src="res/board_ic_arrow_left.png" style="width: 100%; height:auto;" id="icon_back"/>
+ </span>
+ <span id="action_bar_title">
+ <div id="action_bar_title_sub" class="roboto-condensed-bold">HOME - LIVING ROOM</div>
+ <div id="action_bar_title_main" class="roboto-condensed-bold">Air Quality Sensor</div>
+ </span>
+ <span id="action_bar_more">
+ </span>
+ </div>
+
+ <div class="row-custom">
+ <div class="left-col">
+ <!-- Header-->
+ <div id="header_bar">
+ <div id="power_icon_back_circle" onclick="onPowerBtnClicked()">
+ <img class="svg-class"src="res/ic_power.svg">
+ </div>
+ </div>
+ <div id="combo_area" align="center">
+ <div class="mode_bar mode_bar_text roboto-condensed-bold">CO2 Density</div>
+ </div>
+ <!-- co2 air quality circle area-->
+ <div id="air_quality_area" class="roboto-condensed-regular">
+ <img id="svg-status-id" src="res/good.svg"/>
+ <div id="air_quality_area_text"></div>
+ </div>
+ <div class="status_sub_bar roboto-condensed-regular">INDOOR</div>
+
+ <!-- sensor value display area -->
+ <div class="coolingset_container">
+ <div class="coolingset_container_text">
+ <span class="coolingset_item_content roboto-condensed-bold" id="sensor_value"></span>
+ <span class="coolingset_item_content roboto-regular" id="sensor_unit">ppm</span>
+ </div>
+ </div>
+
+ <!-- status description -->
+ <div class="status-container">
+ <table class="roboto-regular" align="center">
+ <tr>
+ <th class="cyan_back"></th>
+ <th class="green_back"></th>
+ <th class="orange_back"></th>
+ <th class="red_back"></th>
+ </tr>
+ <tr>
+ <td colspan="2">safe</td>
+ <td colspan="2">warnning</td>
+ </tr>
+ </table>
+ </div>
+
+ <!-- calibration set area -->
+ <div class="cali_container">
+ <div class="cali_set_container">
+ <span class="cali-value-box roboto-condensed-bold">
+ <input type="number" id="coolingsetTemp" min="0" max="5000" value="2599" onfocus="this.value=''" />
+ </span>
+ <span class="cali_set_button roboto-condensed-bold" onclick="onSetBtnClicked()">set</span>
+ </div>
+ <div class="cali_title roboto-regular">Calibration Set (mV)</div>
+ </div>
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/plugin/plugin/js/capability_airQualitySensorCO2.js b/plugin/plugin/js/capability_airQualitySensorCO2.js
new file mode 100644
index 0000000..33ed0e6
--- /dev/null
+++ b/plugin/plugin/js/capability_airQualitySensorCO2.js
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015 - 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var capabilityAirQualitySensor = {
+ 'href' : "/capability/airQualitySensor/main/0",
+ 'range' : [0, 100],
+
+ 'update' : function() {
+ ocfDevice.getRemoteRepresentation(this.href, this.onRepresentCallback);
+ },
+
+ 'onRepresentCallback' : function(result, deviceHandle, uri, rcsJsonString) {
+ scplugin.log.debug(className, arguments.callee.name, result);
+ scplugin.log.debug(className, arguments.callee.name, uri);
+
+ if (result == "OCF_OK" || result == "OCF_RESOURCE_CHANGED" || result == "OCF_RES_ALREADY_SUBSCRIBED") {
+ capabilityAirQualitySensor.range = rcsJsonString["range"];
+ var temp = parseInt((capabilityAirQualitySensor.range[1] - capabilityAirQualitySensor.range[0]) / 4);
+ if (rcsJsonString["airQuality"] <= capabilityAirQualitySensor.range[0] + temp * 1) {
+ document.getElementById("svg-status-id").src = "res/good.svg";
+ document.getElementById("air_quality_area_text").innerHTML = ""; //"Good";
+ } else if (rcsJsonString["airQuality"] <= capabilityAirQualitySensor.range[0] + temp * 2) {
+ document.getElementById("svg-status-id").src = "res/normal.svg";
+ document.getElementById("air_quality_area_text").innerHTML = "" //"Normal";
+ } else if (rcsJsonString["airQuality"] <= capabilityAirQualitySensor.range[0] + temp * 3) {
+ document.getElementById("svg-status-id").src = "res/poor.svg";
+ document.getElementById("air_quality_area_text").innerHTML = "" //"Poor";
+ } else {
+ document.getElementById("svg-status-id").src = "res/vpoor.svg";
+ document.getElementById("air_quality_area_text").innerHTML = "" //"VeryPoor";
+ }
+ document.getElementById("sensor_value").innerHTML = rcsJsonString["airQuality"];
+ }
+ }
+}
diff --git a/plugin/plugin/js/capability_switch.js b/plugin/plugin/js/capability_switch.js
new file mode 100644
index 0000000..075664b
--- /dev/null
+++ b/plugin/plugin/js/capability_switch.js
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2015 - 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var capabilitySwitch = {
+ 'href' : "/capability/switch/main/0",
+ 'powerState' : "on",
+
+ 'update' : function() {
+ ocfDevice.getRemoteRepresentation(this.href, this.onRepresentCallback);
+ },
+
+ 'onRepresentCallback' : function(result, deviceHandle, uri, rcsJsonString) {
+ scplugin.log.debug(className, arguments.callee.name, result);
+ scplugin.log.debug(className, arguments.callee.name, uri);
+ if (result == "OCF_OK" || result == "OCF_RESOURCE_CHANGED" || result == "OCF_RES_ALREADY_SUBSCRIBED") {
+ capabilitySwitch.powerState = rcsJsonString["power"];
+
+ var image = document.getElementById("power_icon_back_circle");
+ if (capabilitySwitch.powerState == "on") {
+ image.style.background="#3695dd";
+ image.style.opacity="1";
+ } else {
+ image.style.background="#252525";
+ image.style.opacity="0.2";
+ }
+ }
+ },
+
+ 'set' : function(state) {
+ scplugin.log.debug(className, arguments.callee.name, "power : " + state);
+ var setRcsJson = {};
+ setRcsJson["power"] = state;
+ ocfDevice.setRemoteRepresentation(this.href, setRcsJson, this.onRepresentCallback);
+ },
+
+ 'powerToggle' : function() {
+ if (this.powerState == "on") {
+ this.set("off");
+ } else {
+ this.set("on");
+ }
+ }
+}
diff --git a/plugin/plugin/js/capability_thermostatCoolingSetpointCO2.js b/plugin/plugin/js/capability_thermostatCoolingSetpointCO2.js
new file mode 100644
index 0000000..eed37e8
--- /dev/null
+++ b/plugin/plugin/js/capability_thermostatCoolingSetpointCO2.js
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 - 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var capabilityThermostatCoolingSetpoint = {
+ 'href' : "/capability/thermostatCoolingSetpoint/main/0",
+ 'desieredTemperature' : 2500,
+ 'unit' : "C",
+ 'range' : [0, 5000],
+
+ 'update' : function() {
+ ocfDevice.getRemoteRepresentation(this.href, this.onRepresentCallback);
+ },
+
+ 'onRepresentCallback' : function(result, deviceHandle, uri, rcsJsonString) {
+ scplugin.log.debug(className, arguments.callee.name, result);
+ scplugin.log.debug(className, arguments.callee.name, uri);
+
+ if (result == "OCF_OK" || result == "OCF_RESOURCE_CHANGED" || result == "OCF_RES_ALREADY_SUBSCRIBED") {
+ capabilityThermostatCoolingSetpoint.range = rcsJsonString["range"];
+ if (rcsJsonString["temperature"] > capabilityThermostatCoolingSetpoint.range[1])
+ capabilityThermostatCoolingSetpoint.desieredTemperature = capabilityThermostatCoolingSetpoint.range[1];
+ else if (rcsJsonString["temperature"] < capabilityThermostatCoolingSetpoint.range[0])
+ capabilityThermostatCoolingSetpoint.desieredTemperature = capabilityThermostatCoolingSetpoint.range[0];
+ else
+ capabilityThermostatCoolingSetpoint.desieredTemperature = rcsJsonString["temperature"];
+
+ capabilityThermostatCoolingSetpoint.unit = rcsJsonString["units"];
+ document.getElementById("coolingsetTemp").value = capabilityThermostatCoolingSetpoint.desieredTemperature; // + " mV";
+
+ if (rcsJsonString["units"] == "K") {
+ document.getElementById("coolingsetUnit").innerHTML = "°K";
+ }
+ else if (rcsJsonString["units"] == "F") {
+ document.getElementById("coolingsetUnit").innerHTML = "°F";
+ }
+ else {
+ //document.getElementById("coolingsetUnit").innerHTML = "°C";
+ document.getElementById("coolingsetUnit").innerHTML = "mV";
+ }
+ }
+ },
+
+ 'increase' : function() {
+ console.log ("increase: " + this.desieredTemperature);
+ if (this.desieredTemperature < this.range[1])
+ this.desieredTemperature += 1;
+
+ this.set(this.desieredTemperature,this.unit,this.range);
+ },
+
+ 'decrease' : function() {
+ console.log ("decrease: " + this.desieredTemperature);
+ if (this.desieredTemperature > this.range[0])
+ this.desieredTemperature -= 1;
+
+ this.set(this.desieredTemperature,this.unit,this.range);
+ },
+
+ 'setvalue' : function() {
+ var x = document.getElementById("coolingsetTemp").value;
+
+ console.log ("setvalue: " + x);
+ if (x >= this.range[0] && x <= this.range[1])
+ this.set(x,this.unit,this.range);
+ },
+
+ 'set' : function(temperature,unit,range) {
+ console.log ("cooling set point: " + temperature);
+ var setRcsJson = {};
+ setRcsJson["temperature"] = parseInt(temperature);
+ setRcsJson["units"] = unit;
+ setRcsJson["range"] = range;
+ scplugin.log.debug(className, arguments.callee.name, setRcsJson);
+ ocfDevice.setRemoteRepresentation(this.href, setRcsJson, this.onRepresentCallback);
+ }
+}
diff --git a/plugin/plugin/js/indexCO2.js b/plugin/plugin/js/indexCO2.js
new file mode 100644
index 0000000..0c4328a
--- /dev/null
+++ b/plugin/plugin/js/indexCO2.js
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2015 - 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var ocfDevice;
+var className = "AirConditioner";
+var capabilities = [capabilitySwitch, capabilityThermostatCoolingSetpoint,capabilityAirQualitySensor];
+
+window.onload = function () {
+ console.log("version : 0.0.1");
+ init();
+
+ document.body.addEventListener('click', function () {
+ closeListBox();
+ })
+};
+
+function init() {
+ console.log("-----------init-----------");
+ scplugin.manager.getOCFDevices(getOCFDeviceCB);
+}
+
+function getOCFDeviceCB(devices) {
+ console.log("getOCFDeviceCB : " + devices.length);
+
+ for (var i in devices) {
+ console.log("deviceHandle: " + devices[i].deviceHandle);
+ console.log("deviceName: " + devices[i].deviceName);
+ console.log("deviceType: " + devices[i].deviceType);
+ console.log("metadata: " + devices[i].metadata);
+ }
+
+ setMainDevice(devices[0]);
+ ocfDevice.subscribe(onRepresentCallback);
+
+ for (var i = 0; i < capabilities.length; i++) {
+ capabilities[i].update();
+ }
+}
+
+function onRepresentCallback(result, deviceHandle, uri, rcsJsonString) {
+ for (var i = 0; i < capabilities.length; i++) {
+ if ( capabilities[i].href == uri) {
+ capabilities[i].onRepresentCallback(result, deviceHandle, uri, rcsJsonString);
+ }
+ }
+}
+
+function setMainDevice(device) {
+ scplugin.log.debug(className, arguments.callee.name, "set ocf device : " + device.deviceName);
+ ocfDevice = device;
+}
+
+function backAction() {
+ scplugin.manager.close();
+}
+
+function onPowerBtnClicked() {
+ capabilitySwitch.powerToggle();
+}
+
+function onSetBtnClicked() {
+ capabilityThermostatCoolingSetpoint.setvalue();
+}
diff --git a/plugin/plugin/manifest.xml b/plugin/plugin/manifest.xml
new file mode 100644
index 0000000..c871f10
--- /dev/null
+++ b/plugin/plugin/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+ <manifest xmlns="http://samsung.com/ns/plugin"
+ manifestVersionCode="0"
+ package="coSensor2"
+ versionCode="1"
+ versionName="0.0.1"
+ minPluginSdkVersion="1.0.0">
+
+ <plugin label="default.plugin" icon="icon.png" >
+ <device type="none"
+ subType="none"
+ manufacturer="default.manufacturer"
+ manufacturerID="default.manufacturer.id" />
+ </plugin>
+ <privilegeLevel level="public"/>
+ </manifest>
diff --git a/plugin/plugin/res/board_ic_arrow_left.png b/plugin/plugin/res/board_ic_arrow_left.png
new file mode 100644
index 0000000..4c6118e
--- /dev/null
+++ b/plugin/plugin/res/board_ic_arrow_left.png
Binary files differ
diff --git a/plugin/plugin/res/good.svg b/plugin/plugin/res/good.svg
new file mode 100644
index 0000000..2fdc740
--- /dev/null
+++ b/plugin/plugin/res/good.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 206.66667 206.66667"
+ height="206.66667"
+ width="206.66667"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6" /><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,206.66667)"
+ id="g10"><g
+ transform="scale(0.1)"
+ id="g12"><path
+ id="path14"
+ style="fill:#2daae5;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 520.691,812.406 c -0.043,-9.441 1.477,-17.359 4.477,-23.761 3,-6.399 7.68,-11.438 14,-15.118 -4.039,-2.359 -7.238,-5.402 -9.68,-9.16 -2.441,-3.762 -3.679,-7.801 -3.758,-12.199 0,-2.762 0.477,-5.441 1.399,-8.082 0.961,-2.641 2.32,-5 4.16,-7.039 1.801,-2.043 4.039,-3.563 6.68,-4.563 -4.403,-0.957 -8.442,-2.636 -12.16,-5 -3.719,-2.398 -6.762,-5.558 -9.039,-9.519 -2.282,-3.918 -3.442,-8.68 -3.52,-14.281 0.039,-10.719 5,-18.797 14.961,-24.317 9.918,-5.523 24.598,-8.281 44.078,-8.32 8.281,0 16.238,0.558 23.84,1.641 7.598,1.117 14.601,2.839 21.043,5.156 6.398,2.324 11.996,5.281 16.758,8.922 4.8,3.601 8.48,7.918 11.117,12.922 2.683,5 4,10.718 4.043,17.199 0.039,4.801 -0.481,9.281 -1.481,13.437 -1.039,4.121 -2.757,7.801 -5.16,11.043 -2.441,3.238 -5.761,5.879 -9.961,8 -4.199,2.078 -9.48,3.52 -15.8,4.238 l -48.239,5.282 c -1.679,0.121 -2.883,0.519 -3.679,1.199 -0.762,0.68 -1.122,1.559 -1.122,2.641 0,0.839 0.165,1.562 0.399,2.16 0.281,0.601 0.523,1.078 0.801,1.437 1.922,-0.117 3.922,-0.195 5.961,-0.195 2.043,-0.043 4.121,-0.043 6.281,-0.043 13.078,-0.039 23.801,1.602 32.16,4.879 8.398,3.242 14.559,8.32 18.559,15.121 3.961,6.84 5.961,15.641 5.921,26.32 0,2.879 -0.242,5.758 -0.718,8.641 l 14.156,3.84 v 30 h -39.359 c -4.278,1.441 -8.957,2.441 -14,3 -5.039,0.601 -10.641,0.879 -16.719,0.84 -13.082,0.039 -23.801,-1.598 -32.121,-4.922 -8.321,-3.278 -14.442,-8.36 -18.399,-15.2 -3.961,-6.839 -5.922,-15.558 -5.879,-26.199 z m 78.239,-91.441 c 2.121,-0.238 3.597,-0.879 4.398,-1.879 0.801,-1 1.164,-2.32 1.121,-3.879 -0.039,-2.242 -1.238,-4.238 -3.64,-5.922 -2.36,-1.68 -5.637,-2.996 -9.762,-3.918 -4.117,-0.961 -8.875,-1.441 -14.195,-1.441 -5.481,0 -9.723,0.519 -12.762,1.48 -3.039,1 -5.199,2.321 -6.399,4.078 -1.203,1.723 -1.761,3.684 -1.722,5.961 0.039,2.282 0.722,4.282 2.039,6.004 1.32,1.676 2.961,2.957 4.922,3.836 z m -35.524,90.723 c -0.039,5.082 1.043,8.957 3.242,11.718 2.204,2.723 5.68,4.078 10.442,4.121 4.762,-0.043 8.238,-1.398 10.437,-4.121 2.203,-2.761 3.286,-6.636 3.243,-11.718 0.043,-5.083 -1.04,-8.961 -3.243,-11.68 -2.199,-2.762 -5.675,-4.121 -10.437,-4.164 -4.762,0.043 -8.238,1.402 -10.442,4.164 -2.199,2.719 -3.281,6.597 -3.242,11.68 z m 148.805,-45.122 c -3.481,-0.078 -6.281,0.762 -8.32,2.442 -2.043,1.676 -3.481,4.601 -4.321,8.719 -0.882,4.16 -1.32,9.882 -1.281,17.16 -0.039,7.32 0.399,13.039 1.281,17.16 0.84,4.121 2.278,7.039 4.321,8.723 2.039,1.675 4.839,2.519 8.32,2.437 3.477,0.082 6.277,-0.762 8.32,-2.437 2.039,-1.684 3.481,-4.602 4.36,-8.723 0.836,-4.121 1.281,-9.84 1.238,-17.16 0.043,-7.278 -0.402,-13 -1.238,-17.16 -0.879,-4.118 -2.321,-7.043 -4.36,-8.719 -2.043,-1.68 -4.843,-2.52 -8.32,-2.442 z m 0,-35.519 c 11.277,0 20.758,1.398 28.437,4.121 7.68,2.758 13.762,6.84 18.321,12.238 4.558,5.403 7.84,12.039 9.84,20 2.004,7.918 2.961,17.082 2.921,27.481 0.04,10.402 -0.917,19.558 -2.921,27.48 -2,7.957 -5.282,14.602 -9.84,20 -4.559,5.403 -10.641,9.481 -18.321,12.242 -7.679,2.719 -17.16,4.118 -28.437,4.118 -11.281,0 -20.762,-1.399 -28.441,-4.118 -7.641,-2.761 -13.762,-6.839 -18.321,-12.242 -4.562,-5.398 -7.84,-12.043 -9.84,-20 -2,-7.922 -2.961,-17.078 -2.921,-27.48 -0.04,-10.399 0.921,-19.563 2.921,-27.481 2,-7.961 5.278,-14.597 9.84,-20 4.559,-5.398 10.68,-9.48 18.321,-12.238 7.679,-2.723 17.16,-4.121 28.441,-4.121 z m 127.199,35.519 c -3.48,-0.078 -6.281,0.762 -8.316,2.442 -2.043,1.676 -3.481,4.601 -4.321,8.719 -0.882,4.16 -1.32,9.882 -1.281,17.16 -0.039,7.32 0.399,13.039 1.281,17.16 0.84,4.121 2.278,7.039 4.321,8.723 2.035,1.675 4.836,2.519 8.316,2.437 3.481,0.082 6.281,-0.762 8.32,-2.437 2.043,-1.684 3.481,-4.602 4.36,-8.723 0.84,-4.121 1.281,-9.84 1.238,-17.16 0.043,-7.278 -0.398,-13 -1.238,-17.16 -0.879,-4.118 -2.317,-7.043 -4.36,-8.719 -2.039,-1.68 -4.839,-2.52 -8.32,-2.442 z m 0,-35.519 c 11.281,0 20.762,1.398 28.442,4.121 7.679,2.758 13.757,6.84 18.32,12.238 4.558,5.403 7.84,12.039 9.84,20 2,7.918 2.957,17.082 2.918,27.481 0.039,10.402 -0.918,19.558 -2.918,27.48 -2,7.957 -5.282,14.602 -9.84,20 -4.563,5.403 -10.641,9.481 -18.32,12.242 -7.68,2.719 -17.161,4.118 -28.442,4.118 -11.281,0 -20.758,-1.399 -28.437,-4.118 -7.645,-2.761 -13.762,-6.839 -18.321,-12.242 -4.562,-5.398 -7.839,-12.043 -9.843,-20 -1.996,-7.922 -2.957,-17.078 -2.918,-27.48 -0.039,-10.399 0.922,-19.563 2.918,-27.481 2.004,-7.961 5.281,-14.597 9.843,-20 4.559,-5.398 10.676,-9.48 18.321,-12.238 7.679,-2.723 17.156,-4.121 28.437,-4.121 z m 189.13,3.84 v 165.09 h -47.048 v -47.731 c -3.719,1.961 -7.801,3.52 -12.277,4.68 -4.524,1.16 -9.442,1.762 -14.84,1.801 -10.402,0.078 -19.121,-2.039 -26.121,-6.321 -7,-4.277 -12.281,-11.078 -15.84,-20.48 -3.523,-9.399 -5.32,-21.758 -5.32,-37.039 0,-15.282 1.797,-27.641 5.32,-37.039 3.559,-9.399 8.84,-16.2 15.84,-20.481 7,-4.281 15.719,-6.402 26.121,-6.32 5.359,0.039 10.238,0.558 14.758,1.558 4.48,1 8.601,2.399 12.437,4.161 3.805,1.761 7.403,3.8 10.723,6.039 l 5.039,-7.918 z m -47.048,35.281 c -0.238,-0.203 -1,-0.563 -2.16,-1.16 -1.199,-0.563 -2.719,-1.082 -4.519,-1.602 -1.84,-0.519 -3.84,-0.801 -6.04,-0.84 -4.121,-0.039 -7.32,0.922 -9.601,2.801 -2.277,1.918 -3.84,4.961 -4.719,9.117 -0.879,4.164 -1.32,9.641 -1.281,16.403 -0.039,6.679 0.402,12.117 1.281,16.242 0.879,4.117 2.442,7.16 4.719,9.039 2.281,1.879 5.48,2.84 9.601,2.801 2.2,-0.043 4.2,-0.321 6.04,-0.844 1.8,-0.477 3.32,-1.035 4.519,-1.598 1.16,-0.562 1.922,-0.961 2.16,-1.16 v -49.199" /><path
+ id="path16"
+ style="fill:#2daae5;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 770.902,1542.1 c 212.805,0 405.498,-86.29 544.988,-225.78 139.49,-139.48 225.78,-332.179 225.78,-544.984 0,-212.801 -86.29,-405.496 -225.78,-544.981 C 1176.4,86.8672 983.707,0.574219 770.902,0.574219 558.102,0.574219 365.406,86.8672 225.922,226.355 86.4336,365.84 0.140625,558.535 0.140625,771.336 c 0,212.805 86.292975,405.504 225.781375,544.984 139.484,139.49 332.18,225.78 544.98,225.78 z m 509.638,-261.14 c -130.44,130.45 -310.634,211.14 -509.638,211.14 -199,0 -379.191,-80.69 -509.629,-211.14 C 130.836,1150.53 50.1445,970.336 50.1445,771.336 50.1445,572.332 130.836,392.145 261.273,261.707 391.711,131.27 571.902,50.5781 770.902,50.5781 c 199.004,0 379.198,80.6919 509.638,211.1289 130.43,130.438 211.12,310.625 211.12,509.629 0,199 -80.69,379.194 -211.12,509.624" /></g></g></svg> \ No newline at end of file
diff --git a/plugin/plugin/res/ic_power.svg b/plugin/plugin/res/ic_power.svg
new file mode 100644
index 0000000..147c73d
--- /dev/null
+++ b/plugin/plugin/res/ic_power.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="172px" height="172px" viewBox="0 0 172 172" enable-background="new 0 0 172 172" xml:space="preserve">
+<g>
+ <g>
+ <rect style="fill:#FFFFFF;" x="82.607" y="41.205" width="6.775" height="35.889"/>
+ <path style="fill:#FFFFFF;" d="M85.995,130.537c-24.247,0-43.973-19.745-43.973-44.014c0-17.017,9.964-32.673,25.385-39.886l2.87,6.137
+ c-13.048,6.103-21.48,19.351-21.48,33.749c0,20.534,16.688,37.238,37.198,37.238c20.511,0,37.199-16.704,37.199-37.238
+ c0-14.399-8.432-27.648-21.48-33.749l2.87-6.137c15.421,7.211,25.385,22.868,25.385,39.886
+ C129.968,110.792,110.241,130.537,85.995,130.537z"/>
+ </g>
+</g>
+</svg>
diff --git a/plugin/plugin/res/normal.svg b/plugin/plugin/res/normal.svg
new file mode 100644
index 0000000..fea887e
--- /dev/null
+++ b/plugin/plugin/res/normal.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 206.66667 206.66667"
+ height="206.66667"
+ width="206.66667"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6" /><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,206.66667)"
+ id="g10"><g
+ transform="scale(0.1)"
+ id="g12"><path
+ id="path14"
+ style="fill:#8fcd28;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 411.172,830.852 V 710.848 h 47.039 v 82.8 c 1.602,1.043 3.68,2.004 6.324,2.883 2.637,0.918 5.637,1.399 9.039,1.438 3.199,0 5.559,-0.879 7,-2.559 1.438,-1.64 2.156,-4 2.117,-7.043 v -77.519 h 47.043 v 81.84 c 0.039,5.921 -0.562,11.402 -1.8,16.48 -1.243,5.082 -3.403,9.523 -6.52,13.359 -3.16,3.801 -7.519,6.762 -13.16,8.922 -5.602,2.121 -12.762,3.199 -21.481,3.239 -7.242,-0.04 -14.281,-1.04 -21.121,-3.036 -6.839,-2.043 -13.16,-4.843 -18.961,-8.484 l -4.32,7.684 z m 188.883,-88.325 c -3.481,-0.078 -6.282,0.762 -8.321,2.442 -2.039,1.679 -3.48,4.601 -4.32,8.719 -0.879,4.164 -1.32,9.882 -1.277,17.164 -0.043,7.316 0.398,13.039 1.277,17.156 0.84,4.121 2.281,7.043 4.32,8.722 2.039,1.68 4.84,2.52 8.321,2.438 3.48,0.082 6.281,-0.758 8.32,-2.438 2.043,-1.679 3.48,-4.601 4.359,-8.722 0.84,-4.117 1.282,-9.84 1.239,-17.156 0.043,-7.282 -0.399,-13 -1.239,-17.164 -0.879,-4.118 -2.316,-7.04 -4.359,-8.719 -2.039,-1.68 -4.84,-2.52 -8.32,-2.442 z m 0,-35.519 c 11.281,0 20.758,1.402 28.441,4.121 7.68,2.758 13.758,6.84 18.32,12.242 4.559,5.399 7.836,12.039 9.84,19.996 2,7.922 2.957,17.082 2.918,27.485 0.039,10.398 -0.918,19.558 -2.918,27.476 -2.004,7.961 -5.281,14.602 -9.84,20.004 -4.562,5.398 -10.64,9.477 -18.32,12.238 -7.683,2.719 -17.16,4.118 -28.441,4.118 -11.282,0 -20.762,-1.399 -28.438,-4.118 -7.644,-2.761 -13.765,-6.84 -18.32,-12.238 -4.563,-5.402 -7.844,-12.043 -9.844,-20.004 -2,-7.918 -2.961,-17.078 -2.918,-27.476 -0.043,-10.403 0.918,-19.563 2.918,-27.485 2,-7.957 5.281,-14.597 9.844,-19.996 4.555,-5.402 10.676,-9.484 18.32,-12.242 7.676,-2.719 17.156,-4.121 28.438,-4.121 z M 754.617,832.77 c -1.203,0.601 -2.918,1.082 -5.117,1.402 -2.203,0.359 -4.844,0.516 -7.844,0.516 -4.84,-0.04 -9.437,-0.559 -13.84,-1.598 -4.359,-1.039 -8.359,-2.442 -11.921,-4.16 -3.598,-1.723 -6.598,-3.641 -9.04,-5.762 l -4.32,7.684 H 671.336 V 710.848 h 47.039 v 78.242 c 1.324,0.918 3.203,1.797 5.641,2.719 2.441,0.921 5.238,1.683 8.402,2.32 3.16,0.601 6.48,0.922 9.961,0.961 3.039,0 5.637,-0.16 7.758,-0.399 2.121,-0.203 3.48,-0.402 4,-0.562 z M 948.055,710.848 v 81.84 c 0.043,5.761 -0.516,11.121 -1.719,16.199 -1.199,5.043 -3.359,9.484 -6.398,13.363 -3.083,3.84 -7.321,6.879 -12.84,9.082 -5.481,2.199 -12.52,3.316 -21.039,3.356 -4.883,0 -9.641,-0.399 -14.243,-1.2 -4.601,-0.797 -8.878,-1.961 -12.878,-3.437 -3.961,-1.442 -7.481,-3.203 -10.559,-5.199 -2.563,2.918 -6.324,5.277 -11.199,7.078 -4.883,1.8 -11.325,2.718 -19.282,2.758 -4.761,0 -9.48,-0.516 -14.16,-1.477 -4.679,-1 -9.082,-2.359 -13.203,-4.082 -4.117,-1.719 -7.719,-3.68 -10.797,-5.961 l -4.32,7.684 H 764.215 V 710.848 h 47.043 v 82.8 c 1.32,1.043 3.16,2.004 5.476,2.883 2.286,0.918 4.961,1.399 7.961,1.438 2.52,0 4.481,-0.602 5.844,-1.762 1.356,-1.156 2.078,-2.918 2.078,-5.195 v -80.164 h 47.039 v 82.8 c 1.36,1.043 3.16,2.004 5.481,2.883 2.281,0.918 4.961,1.399 7.961,1.438 2.562,0 4.48,-0.602 5.84,-1.762 1.402,-1.156 2.082,-2.918 2.082,-5.195 v -80.164 z m 11.043,34.8 c 0,-5.437 0.718,-10.476 2.199,-15.156 1.441,-4.64 3.801,-8.762 7.004,-12.242 3.156,-3.52 7.316,-6.281 12.476,-8.238 5.118,-1.965 11.321,-2.965 18.641,-3.004 5.522,0.039 10.482,0.562 14.842,1.601 4.4,1.039 8.28,2.442 11.68,4.161 3.36,1.718 6.28,3.636 8.76,5.757 l 4.56,-7.679 h 31.44 v 78.722 c 0.04,5.52 -0.4,10.637 -1.28,15.278 -0.92,4.679 -2.48,8.843 -4.72,12.523 -2.28,3.68 -5.4,6.801 -9.4,9.399 -4,2.558 -9.08,4.519 -15.24,5.882 -6.2,1.356 -13.64,2.036 -22.4,2.036 -4.88,0 -9.76,-0.239 -14.6,-0.719 -4.88,-0.481 -9.521,-1.16 -13.962,-1.957 -4.442,-0.801 -8.481,-1.684 -12.16,-2.684 -3.641,-1 -6.719,-1.996 -9.2,-3.039 l 0.477,-35.519 c 3.601,1.8 7.762,3.441 12.523,4.921 4.758,1.481 9.719,2.637 14.883,3.559 5.199,0.879 10.199,1.359 15.079,1.359 4.52,0 7.96,-0.32 10.32,-1 2.36,-0.679 3.96,-1.64 4.8,-2.961 0.84,-1.277 1.24,-2.835 1.2,-4.679 v -4.801 l -21.36,-1.918 c -6.883,-0.562 -13.16,-1.52 -18.805,-2.918 -5.679,-1.402 -10.597,-3.523 -14.718,-6.363 -4.16,-2.84 -7.36,-6.719 -9.598,-11.598 -2.281,-4.922 -3.402,-11.16 -3.441,-18.723 z m 68.162,18.723 v -22.562 c -1.32,-1.36 -3.36,-2.598 -6.04,-3.641 -2.68,-1.039 -5.96,-1.602 -9.8,-1.641 -2.12,-0.039 -4.04,0.321 -5.84,1.082 -1.76,0.758 -3.16,2 -4.24,3.762 -1.08,1.758 -1.641,4.117 -1.68,7.16 0,3.239 0.52,5.879 1.52,7.84 1,1.957 2.48,3.438 4.48,4.399 2,1 4.48,1.64 7.44,1.918 z m 114.72,-17.762 c -3.32,0 -5.72,0.602 -7.2,1.801 -1.48,1.195 -2.16,3 -2.16,5.399 v 121.683 h -47.04 V 742.77 c 0,-8.032 1.76,-14.614 5.08,-19.68 3.3,-5.043 7.88,-8.758 13.68,-11.121 5.84,-2.36 12.52,-3.559 20.12,-3.52 3.08,0.039 5.96,0.199 8.6,0.52 2.64,0.281 4.76,0.597 6.4,0.918 1.64,0.281 2.48,0.445 2.52,0.484 v 36.238" /><path
+ id="path16"
+ style="fill:#8fcd28;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 772.73,1547.25 c 212.805,0 405.5,-86.29 544.98,-225.78 139.49,-139.49 225.78,-332.181 225.78,-544.986 0,-212.8 -86.29,-405.496 -225.78,-544.98 C 1178.23,92.0156 985.535,5.72266 772.73,5.72266 559.93,5.72266 367.23,92.0156 227.746,231.504 88.2617,370.988 1.96875,563.684 1.96875,776.484 c 0,212.805 86.29295,405.496 225.77725,544.986 139.484,139.49 332.184,225.78 544.984,225.78 z m 509.63,-261.13 c -130.43,130.43 -310.63,211.13 -509.63,211.13 -199,0 -379.191,-80.7 -509.628,-211.13 C 132.664,1155.68 51.9727,975.484 51.9727,776.484 c 0,-199 80.6913,-379.191 211.1293,-509.629 C 393.539,136.418 573.73,55.7266 772.73,55.7266 c 199,0 379.2,80.6914 509.63,211.1284 130.44,130.438 211.13,310.629 211.13,509.629 0,199 -80.69,379.196 -211.13,509.636" /></g></g></svg> \ No newline at end of file
diff --git a/plugin/plugin/res/option_ic_more.svg b/plugin/plugin/res/option_ic_more.svg
new file mode 100644
index 0000000..3ea40c9
--- /dev/null
+++ b/plugin/plugin/res/option_ic_more.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+width="408px" height="408px" viewBox="0 0 408 408" style="enable-background:new 0 0 408 408;" xml:space="preserve" fill="#46a5ed">
+ <g>
+ <g id="more-vert">
+ <path d="M204,102c28.05,0,51-22.95,51-51S232.05,0,204,0s-51,22.95-51,51S175.95,102,204,102z M204,153c-28.05,0-51,22.95-51,51
+ s22.95,51,51,51s51-22.95,51-51S232.05,153,204,153z M204,306c-28.05,0-51,22.95-51,51s22.95,51,51,51s51-22.95,51-51
+ S232.05,306,204,306z"/>
+ </g>
+ </g>
+</svg>
diff --git a/plugin/plugin/res/poor.svg b/plugin/plugin/res/poor.svg
new file mode 100644
index 0000000..03bba71
--- /dev/null
+++ b/plugin/plugin/res/poor.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 206.66667 206.66667"
+ height="206.66667"
+ width="206.66667"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6" /><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,206.66667)"
+ id="g10"><g
+ transform="scale(0.1)"
+ id="g12"><path
+ id="path14"
+ style="fill:#ef6820;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 545.539,858.383 V 691.789 h 47.039 v 49.231 c 3.719,-1.957 7.801,-3.516 12.32,-4.68 4.481,-1.156 9.399,-1.758 14.801,-1.797 10.399,-0.082 19.121,2.039 26.121,6.32 6.996,4.282 12.278,11.078 15.84,20.481 3.559,9.398 5.32,21.758 5.32,37.039 0,15.277 -1.761,27.64 -5.32,37.039 -3.562,9.402 -8.844,16.203 -15.84,20.48 -7,4.282 -15.722,6.399 -26.121,6.321 -5.32,0 -10.242,-0.52 -14.719,-1.559 -4.48,-1 -8.64,-2.402 -12.48,-4.164 -3.801,-1.758 -7.363,-3.758 -10.723,-6.039 l -5.039,7.922 z m 47.039,-35.281 c 0.281,0.199 1,0.601 2.16,1.16 1.2,0.558 2.723,1.121 4.563,1.601 1.797,0.52 3.797,0.797 5.996,0.84 4.121,0.039 7.324,-0.922 9.601,-2.801 2.278,-1.922 3.84,-4.918 4.719,-9.121 0.883,-4.16 1.321,-9.636 1.281,-16.398 0.04,-6.68 -0.398,-12.121 -1.281,-16.238 -0.879,-4.122 -2.441,-7.161 -4.719,-9.043 -2.277,-1.879 -5.48,-2.84 -9.601,-2.797 -2.199,0.039 -4.199,0.32 -5.996,0.836 -1.84,0.519 -3.363,1.043 -4.563,1.601 -1.16,0.602 -1.879,0.961 -2.16,1.16 z M 734.66,770.063 c -3.48,-0.079 -6.281,0.757 -8.32,2.441 -2.039,1.676 -3.481,4.598 -4.32,8.719 -0.883,4.16 -1.321,9.882 -1.282,17.16 -0.039,7.32 0.399,13.039 1.282,17.16 0.839,4.121 2.281,7.039 4.32,8.719 2.039,1.679 4.84,2.523 8.32,2.441 3.477,0.082 6.278,-0.762 8.32,-2.441 2.04,-1.68 3.481,-4.598 4.36,-8.719 0.84,-4.121 1.281,-9.84 1.238,-17.16 0.043,-7.278 -0.398,-13 -1.238,-17.16 -0.879,-4.121 -2.32,-7.043 -4.36,-8.719 -2.042,-1.684 -4.843,-2.52 -8.32,-2.441 z m 0,-35.52 c 11.278,0 20.758,1.398 28.438,4.121 7.679,2.758 13.761,6.84 18.32,12.238 4.559,5.403 7.84,12.039 9.84,20 2.004,7.918 2.961,17.082 2.922,27.481 0.039,10.402 -0.918,19.558 -2.922,27.48 -2,7.957 -5.281,14.602 -9.84,20 -4.559,5.399 -10.641,9.481 -18.32,12.239 -7.68,2.718 -17.16,4.121 -28.438,4.121 -11.281,0 -20.762,-1.403 -28.441,-4.121 -7.641,-2.758 -13.762,-6.84 -18.321,-12.239 -4.558,-5.398 -7.839,-12.043 -9.839,-20 -2,-7.922 -2.961,-17.078 -2.922,-27.48 -0.039,-10.399 0.922,-19.563 2.922,-27.481 2,-7.961 5.281,-14.597 9.839,-20 4.559,-5.398 10.68,-9.48 18.321,-12.238 7.679,-2.723 17.16,-4.121 28.441,-4.121 z m 127.199,35.52 c -3.48,-0.079 -6.281,0.757 -8.316,2.441 -2.043,1.676 -3.48,4.598 -4.32,8.719 -0.883,4.16 -1.321,9.882 -1.282,17.16 -0.039,7.32 0.399,13.039 1.282,17.16 0.84,4.121 2.277,7.039 4.32,8.719 2.035,1.679 4.836,2.523 8.316,2.441 3.481,0.082 6.282,-0.762 8.321,-2.441 2.043,-1.68 3.48,-4.598 4.359,-8.719 0.84,-4.121 1.281,-9.84 1.242,-17.16 0.039,-7.278 -0.402,-13 -1.242,-17.16 -0.879,-4.121 -2.316,-7.043 -4.359,-8.719 -2.039,-1.684 -4.84,-2.52 -8.321,-2.441 z m 0,-35.52 c 11.282,0 20.762,1.398 28.442,4.121 7.679,2.758 13.762,6.84 18.32,12.238 4.559,5.403 7.84,12.039 9.84,20 2,7.918 2.961,17.082 2.918,27.481 0.043,10.402 -0.918,19.558 -2.918,27.48 -2,7.957 -5.281,14.602 -9.84,20 -4.558,5.399 -10.641,9.481 -18.32,12.239 -7.68,2.718 -17.16,4.121 -28.442,4.121 -11.281,0 -20.757,-1.403 -28.437,-4.121 -7.645,-2.758 -13.762,-6.84 -18.32,-12.239 -4.563,-5.398 -7.84,-12.043 -9.844,-20 -1.996,-7.922 -2.957,-17.078 -2.918,-27.48 -0.039,-10.399 0.922,-19.563 2.918,-27.481 2.004,-7.961 5.281,-14.597 9.844,-20 4.558,-5.398 10.675,-9.48 18.32,-12.238 7.68,-2.723 17.156,-4.121 28.437,-4.121 z m 154.561,125.762 c -1.2,0.597 -2.92,1.078 -5.12,1.398 -2.2,0.36 -4.84,0.52 -7.84,0.52 -4.839,-0.039 -9.437,-0.559 -13.839,-1.598 -4.359,-1.043 -8.359,-2.441 -11.918,-4.164 -3.601,-1.719 -6.601,-3.637 -9.039,-5.758 l -4.32,7.68 h -31.203 v -120 h 47.043 v 78.238 c 1.32,0.922 3.199,1.801 5.64,2.723 2.442,0.922 5.239,1.679 8.399,2.316 3.16,0.602 6.477,0.922 9.957,0.961 3.04,0 5.64,-0.156 7.76,-0.398 2.12,-0.203 3.48,-0.399 4,-0.563 l 0.48,38.645" /><path
+ id="path16"
+ style="fill:#ef6820;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 777.723,1547.38 c 212.8,0 405.497,-86.29 544.987,-225.78 139.49,-139.48 225.77,-332.178 225.77,-544.983 0,-212.801 -86.28,-405.496 -225.77,-544.98 C 1183.22,92.1484 990.523,5.85547 777.723,5.85547 564.922,5.85547 372.227,92.1484 232.738,231.637 93.2539,371.121 6.96094,563.816 6.96094,776.617 c 0,212.805 86.29296,405.503 225.77706,544.983 139.489,139.49 332.184,225.78 544.985,225.78 z m 509.627,-261.13 c -130.44,130.44 -310.627,211.13 -509.627,211.13 -198.996,0 -379.192,-80.69 -509.629,-211.13 C 137.656,1155.81 56.9648,975.621 56.9648,776.617 c 0,-199 80.6912,-379.191 211.1292,-509.629 C 398.531,136.551 578.727,55.8594 777.723,55.8594 c 199,0 379.187,80.6916 509.627,211.1286 130.44,130.438 211.13,310.629 211.13,509.629 0,199.004 -80.69,379.193 -211.13,509.633" /></g></g></svg> \ No newline at end of file
diff --git a/plugin/plugin/res/vpoor.svg b/plugin/plugin/res/vpoor.svg
new file mode 100644
index 0000000..21d4046
--- /dev/null
+++ b/plugin/plugin/res/vpoor.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 206.66667 206.66667"
+ height="206.66667"
+ width="206.66667"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6" /><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,206.66667)"
+ id="g10"><g
+ transform="scale(0.1)"
+ id="g12"><path
+ id="path14"
+ style="fill:#ea1f2a;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 771.652,1544.46 c 212.797,0 405.498,-86.29 544.978,-225.78 139.49,-139.48 225.78,-332.18 225.78,-544.977 0,-212.801 -86.29,-405.496 -225.78,-544.984 C 1177.15,89.2305 984.449,2.9375 771.652,2.9375 558.852,2.9375 366.156,89.2305 226.668,228.719 87.1797,368.207 0.886719,560.902 0.886719,773.703 0.886719,986.5 87.1797,1179.2 226.668,1318.68 c 139.488,139.49 332.184,225.78 544.984,225.78 z m 509.628,-261.13 c -130.44,130.44 -310.632,211.13 -509.628,211.13 -199,0 -379.191,-80.69 -509.632,-211.13 C 131.582,1152.89 50.8906,972.699 50.8906,773.703 50.8906,574.703 131.582,394.512 262.02,264.07 392.461,133.633 572.652,52.9414 771.652,52.9414 c 198.996,0 379.188,80.6916 509.628,211.1286 130.44,130.442 211.13,310.633 211.13,509.633 0,198.996 -80.69,379.187 -211.13,509.627" /><path
+ id="path16"
+ style="fill:#ea1f2a;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 578.84,969.711 H 530.836 L 570.918,848.75 h 48.961 l 40.078,120.961 h -48 L 595.398,896.75 Z M 772.52,896.27 c 0.363,3.519 0.601,7 0.761,10.523 0.117,3.477 0.199,6.879 0.199,10.117 0.043,7.68 -0.722,14.918 -2.359,21.719 -1.601,6.801 -4.437,12.801 -8.441,18.039 -4.039,5.242 -9.598,9.32 -16.758,12.32 -7.121,3.004 -16.199,4.524 -27.164,4.563 -20.598,0.039 -35.797,-5.16 -45.719,-15.641 -9.879,-10.476 -14.801,-26.519 -14.762,-48.199 -0.039,-14.481 2.004,-26.402 6.203,-35.84 4.161,-9.441 10.801,-16.48 19.922,-21.121 9.118,-4.598 21.036,-6.879 35.797,-6.879 3.684,0 7.641,0.16 11.84,0.481 4.203,0.32 8.524,0.8 12.883,1.48 4.359,0.68 8.68,1.52 12.879,2.598 4.199,1.082 8.16,2.363 11.84,3.84 l -0.719,32.878 c -3.801,-1.281 -7.961,-2.48 -12.563,-3.558 -4.558,-1.082 -9.359,-1.957 -14.398,-2.641 -5.039,-0.64 -10.121,-1 -15.281,-1 -6.68,0 -12,0.563 -15.918,1.684 -3.922,1.117 -6.68,2.879 -8.321,5.277 -1.64,2.399 -2.359,5.52 -2.16,9.36 z m -53.762,45.601 c 5.445,-0.039 9.402,-1.879 11.883,-5.558 2.48,-3.723 3.32,-9.04 2.519,-16.043 h -32.879 c -0.039,4.8 0.719,8.8 2.321,12 1.597,3.199 3.8,5.601 6.64,7.199 2.801,1.601 5.961,2.402 9.516,2.402 z m 150.484,29.762 c -1.203,0.597 -2.929,1.062 -5.121,1.398 -2.203,0.336 -4.84,0.52 -7.84,0.52 -4.84,-0.039 -9.437,-0.559 -13.84,-1.598 -4.359,-1.043 -8.359,-2.441 -11.921,-4.164 -3.598,-1.719 -6.598,-3.641 -9.04,-5.758 l -4.32,7.68 h -31.199 v -120 H 833 v 78.238 c 1.32,0.922 3.203,1.801 5.641,2.723 2.441,0.918 5.238,1.68 8.402,2.316 3.16,0.602 6.477,0.922 9.961,0.961 3.035,0 5.637,-0.156 7.758,-0.398 2.117,-0.203 3.48,-0.399 4,-0.563 z m 3.414,-1.922 39.946,-110.352 -17.821,-52.023 h 53.039 l 56.12,162.375 h -49.682 l -17.238,-62.75 -13.723,62.75 h -50.641" /><path
+ id="path18"
+ style="fill:#ea1f2a;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 539.465,769.668 V 603.074 h 47.043 v 49.231 c 3.719,-1.957 7.801,-3.516 12.316,-4.68 4.485,-1.16 9.403,-1.762 14.801,-1.801 10.402,-0.078 19.121,2.043 26.121,6.324 7,4.278 12.281,11.079 15.84,20.477 3.562,9.402 5.32,21.762 5.32,37.043 0,15.277 -1.758,27.641 -5.32,37.039 -3.559,9.398 -8.84,16.199 -15.84,20.481 -7,4.281 -15.719,6.398 -26.121,6.32 -5.316,0 -10.238,-0.52 -14.719,-1.563 -4.48,-1 -8.64,-2.398 -12.48,-4.16 -3.801,-1.758 -7.36,-3.758 -10.719,-6.039 l -5.039,7.922 z m 47.043,-35.281 c 0.277,0.199 1,0.597 2.156,1.16 1.199,0.558 2.723,1.121 4.563,1.598 1.8,0.523 3.796,0.8 6,0.839 4.121,0.043 7.32,-0.918 9.597,-2.796 2.281,-1.922 3.844,-4.922 4.723,-9.122 0.879,-4.16 1.32,-9.636 1.281,-16.398 0.039,-6.684 -0.402,-12.121 -1.281,-16.242 -0.879,-4.121 -2.442,-7.16 -4.723,-9.039 -2.277,-1.883 -5.476,-2.84 -9.597,-2.801 -2.204,0.043 -4.2,0.32 -6,0.84 -1.84,0.519 -3.364,1.039 -4.563,1.597 -1.156,0.602 -1.879,0.961 -2.156,1.165 z m 142.078,-53.039 c -3.481,-0.082 -6.281,0.757 -8.32,2.437 -2.039,1.68 -3.481,4.602 -4.321,8.723 -0.879,4.16 -1.32,9.879 -1.277,17.16 -0.043,7.316 0.398,13.039 1.277,17.156 0.84,4.121 2.282,7.043 4.321,8.723 2.039,1.68 4.839,2.519 8.32,2.437 3.48,0.082 6.281,-0.757 8.32,-2.437 2.043,-1.68 3.481,-4.602 4.36,-8.723 0.839,-4.117 1.281,-9.84 1.238,-17.156 0.043,-7.281 -0.399,-13 -1.238,-17.16 -0.879,-4.121 -2.317,-7.043 -4.36,-8.723 -2.039,-1.68 -4.84,-2.519 -8.32,-2.437 z m 0,-35.524 c 11.281,0 20.758,1.403 28.441,4.121 7.68,2.758 13.758,6.84 18.321,12.243 4.558,5.398 7.836,12.039 9.84,19.996 2,7.921 2.957,17.082 2.917,27.484 0.04,10.398 -0.917,19.559 -2.917,27.477 -2.004,7.96 -5.282,14.601 -9.84,20.003 -4.563,5.399 -10.641,9.477 -18.321,12.239 -7.683,2.718 -17.16,4.121 -28.441,4.121 -11.281,0 -20.758,-1.403 -28.438,-4.121 -7.644,-2.762 -13.761,-6.84 -18.32,-12.239 -4.562,-5.402 -7.844,-12.043 -9.844,-20.003 -2,-7.918 -2.957,-17.079 -2.918,-27.477 -0.039,-10.402 0.918,-19.563 2.918,-27.484 2,-7.957 5.282,-14.598 9.844,-19.996 4.559,-5.403 10.676,-9.485 18.32,-12.243 7.68,-2.718 17.157,-4.121 28.438,-4.121 z m 127.203,35.524 c -3.48,-0.082 -6.281,0.757 -8.32,2.437 -2.039,1.68 -3.481,4.602 -4.321,8.723 -0.878,4.16 -1.32,9.879 -1.281,17.16 -0.039,7.316 0.403,13.039 1.281,17.156 0.84,4.121 2.282,7.043 4.321,8.723 2.039,1.68 4.84,2.519 8.32,2.437 3.477,0.082 6.277,-0.757 8.32,-2.437 2.039,-1.68 3.481,-4.602 4.36,-8.723 0.84,-4.117 1.281,-9.84 1.238,-17.156 0.043,-7.281 -0.398,-13 -1.238,-17.16 -0.879,-4.121 -2.321,-7.043 -4.36,-8.723 -2.043,-1.68 -4.843,-2.519 -8.32,-2.437 z m 0,-35.524 c 11.277,0 20.758,1.403 28.441,4.121 7.676,2.758 13.758,6.84 18.321,12.243 4.558,5.398 7.836,12.039 9.836,19.996 2.004,7.921 2.961,17.082 2.922,27.484 0.039,10.398 -0.918,19.559 -2.922,27.477 -2,7.96 -5.278,14.601 -9.836,20.003 -4.563,5.399 -10.645,9.477 -18.321,12.239 -7.683,2.718 -17.164,4.121 -28.441,4.121 -11.281,0 -20.762,-1.403 -28.441,-4.121 -7.641,-2.762 -13.762,-6.84 -18.321,-12.239 -4.558,-5.402 -7.839,-12.043 -9.839,-20.003 -2,-7.918 -2.961,-17.079 -2.922,-27.477 -0.039,-10.402 0.922,-19.563 2.922,-27.484 2,-7.957 5.281,-14.598 9.839,-19.996 4.559,-5.403 10.68,-9.485 18.321,-12.243 7.679,-2.718 17.16,-4.121 28.441,-4.121 z m 154.561,125.762 c -1.2,0.602 -2.92,1.082 -5.12,1.402 -2.2,0.36 -4.84,0.52 -7.839,0.52 -4.84,-0.043 -9.438,-0.559 -13.84,-1.602 -4.363,-1.039 -8.36,-2.437 -11.922,-4.16 -3.598,-1.719 -6.598,-3.641 -9.039,-5.762 l -4.32,7.684 h -31.2 v -120 h 47.039 v 78.238 c 1.321,0.922 3.2,1.801 5.641,2.719 2.441,0.922 5.238,1.684 8.398,2.32 3.161,0.602 6.481,0.922 9.961,0.961 3.041,0 5.641,-0.16 7.761,-0.398 2.12,-0.203 3.48,-0.403 4,-0.563 l 0.48,38.641" /></g></g></svg> \ No newline at end of file