Add Overview Panel

Add Overview Panel like a neutron network topology panel.
User can see all relationships among
machine learning resources.

implements blueprint overview-panel
Change-Id: I1ee215e43039d984b494aa9f407d176ce008ea81
This commit is contained in:
Hiroyuki Eguchi 2017-03-01 22:06:27 +09:00
parent 856f767a81
commit 9b0f08ab31
22 changed files with 822 additions and 1 deletions

View File

@ -0,0 +1,23 @@
# 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.
from django.utils.translation import ugettext_lazy as _
import horizon
# This panel will be loaded from horizon, because specified in enabled file.
# To register REST api, import below here.
from meteos_ui.api import rest_api # noqa
class Overview(horizon.Panel):
name = _("Overview")
slug = "machine_learning.overview"

View File

@ -0,0 +1,19 @@
# 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.
from openstack_dashboard.test import helpers as test
class OverviewTests(test.TestCase):
# Unit tests for Overview.
def test_me(self):
self.assertTrue(1 + 1 == 2)

View File

@ -0,0 +1,20 @@
# 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.
from django.conf.urls import url
from django.utils.translation import ugettext_lazy as _
from horizon.browsers import views
title = _("Overview")
urlpatterns = [
url('', views.AngularIndexView.as_view(title=title), name='index'),
]

View File

@ -0,0 +1,21 @@
# 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.
# The slug of the panel to be added to HORIZON_CONFIG. Required.
PANEL = 'machine_learning.overview'
# The slug of the panel group the PANEL is associated with.
PANEL_GROUP = 'machine_learning'
# The slug of the dashboard the PANEL associated with. Required.
PANEL_DASHBOARD = 'project'
# Python panel class of the PANEL to be added.
ADD_PANEL = 'meteos_ui.content.machine_learning.overview.panel.Overview'

View File

@ -28,7 +28,8 @@
'horizon.dashboard.machine_learning.datasets', 'horizon.dashboard.machine_learning.datasets',
'horizon.dashboard.machine_learning.models', 'horizon.dashboard.machine_learning.models',
'horizon.dashboard.machine_learning.model_evaluations', 'horizon.dashboard.machine_learning.model_evaluations',
'horizon.dashboard.machine_learning.learnings' 'horizon.dashboard.machine_learning.learnings',
'horizon.dashboard.machine_learning.overview'
]) ])
.config(config) .config(config)

View File

@ -0,0 +1,215 @@
/**
* 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.
*/
(function () {
'use strict';
angular
.module('horizon.framework.widgets')
.controller('OverviewController', OverviewController);
OverviewController.$inject = [
'$q',
'$scope',
'horizon.dashboard.machine_learning.overview.basePath',
'horizon.app.core.openstack-service-api.meteos'
];
function OverviewController($q, $scope, basePath, meteos) {
var topologyNodes = [];
var topologyLinks = [];
var templates = meteos.getTemplates().then(function(response){
response.data.items.map(addIcon, 'template');
});
var experiments = meteos.getExperiments().then(function(response){
response.data.items.map(addIcon, 'experiment');
});
var datasets = meteos.getDatasets().then(function(response){
response.data.items.map(addIcon, 'dataset');
});
var models = meteos.getModels().then(function(response){
response.data.items.map(addIcon, 'model');
});
var evaluations = meteos.getModelEvaluations().then(function(response){
response.data.items.map(addIcon, 'evaluation');
});
var learnings = meteos.getLearnings().then(function(response){
response.data.items.map(addIcon, 'learning');
});
function addIcon(item){
item.icon = "meteos-" + this + ".svg";
topologyNodes.push(item);
}
var promiseAll = $q.all([templates,
experiments,
datasets,
models,
evaluations,
learnings]);
promiseAll.then(drawTopology);
function drawTopology() {
angular.forEach(topologyNodes,function(record, index){
if("template_id" in record){
createIndex(index, record.template_id);
}
if("experiment_id" in record){
createIndex(index, record.experiment_id);
}
if("model_id" in record){
createIndex(index, record.model_id);
}
if("source_dataset_url" in record){
if ( record.source_dataset_url.indexOf('internal') != -1) {
createIndex(index, record.source_dataset_url.split('//')[1]);
}
}
});
function createIndex(source_index, id){
angular.forEach(topologyNodes,function(record,i){
if(record.id == id){
topologyLinks.push({"source": source_index, "target": i})
}
});
}
var topology = {
"nodes":topologyNodes,
"links":topologyLinks}
var width = 900,
height = 500;
var force = d3.layout.force()
.charge(-2500)
.linkDistance(100)
.size([width, height])
.nodes(topology.nodes)
.links(topology.links)
.start();
var zoom = d3.behavior.zoom()
.scaleExtent([1, 10])
.on("zoom", zoomed);
var svg = d3.select("#meteosTopologyCanvas").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.call(zoom);
var rect = svg.append("rect")
.attr("width", width)
.attr("height", height)
.style("fill", "none");
var container = svg.append("g");
var link = container.append("g")
.attr("class", "links")
.selectAll(".link")
.data(topology.links)
.enter().append("line")
.attr("class", "link");
var node = container.append("g")
.attr("class", "nodes")
.selectAll(".node")
.data(topology.nodes)
.enter().append("g")
.attr("class", "node")
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.call(force.drag);
var div = d3.select("#meteosMenu").append("div")
.style("width", "360px")
.style("height", "180px")
.style("background", "#d6dadf")
.style("position", "absolute")
.style("opacity", 0)
.style("text-overflow", "ellipsis")
.style("display", "inline-block")
.style("overflow", "hidden")
.style("border-radius", "8px")
.style("padding", "5px")
.style("box-shadow", "0px 0px 3px 3px #d6dadf");
node.append("image")
.attr("xlink:href", function(d) {return basePath + "/images/" + d.icon})
.attr("x", -35)
.attr("y", -35)
.attr("width", 70)
.attr("height", 70);
node.on("mouseover", function(d) {
div.transition()
.style("opacity", .9);
div.html(createMenu(d))
.style("left", (d3.event.pageX - 200) + "px")
.style("top", (d3.event.pageY - 10) + "px");
});
node.on("mouseout", function(d) {
div.transition()
.duration(600)
.style("opacity", 0);
});
node.append("text")
.attr("dx", 50)
.attr("dy", ".60em")
.text(function(d) { return d.name });
force.on("tick", function() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
});
var hiddenFields=['x', 'y', 'px', 'py',
'index','head','fixed','icon', 'stdout',
'weight', 'links', 'name', 'created_at'];
function createMenu(d){
var form = "";
angular.forEach(d, function(v, k){
if(hiddenFields.indexOf(k) == -1){
form += "<b>" + k + "</b> : " + v + "</br>";
}
});
return form;
}
function zoomed() {
container.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
}
}
})();

View File

@ -0,0 +1,36 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="356.000000pt" height="356.000000pt" viewBox="0 0 356.000000 356.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,356.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1560 3549 c-313 -40 -615 -165 -870 -359 -97 -74 -247 -224 -322
-323 -166 -217 -286 -482 -339 -744 -30 -153 -37 -436 -15 -593 98 -676 561
-1229 1208 -1444 209 -69 293 -81 568 -81 206 0 248 3 340 23 621 135 1109
552 1324 1134 86 231 101 325 101 618 -1 216 -3 257 -23 350 -77 355 -242 660
-494 912 -283 283 -644 457 -1048 508 -97 12 -335 11 -430 -1z m368 -250 c264
-29 481 -105 689 -242 353 -233 593 -594 670 -1007 27 -146 24 -431 -6 -570
-45 -212 -134 -417 -254 -587 -80 -113 -248 -281 -360 -360 -173 -122 -375
-209 -587 -254 -153 -33 -449 -33 -599 -1 -479 104 -860 400 -1079 838 -45 90
-108 285 -126 394 -85 499 65 979 417 1339 129 132 250 219 417 301 259 128
542 180 818 149z"/>
<path d="M1345 2459 c-49 -4 -106 -11 -125 -15 l-35 -7 40 -8 c181 -35 840
-37 1095 -3 229 30 -663 61 -975 33z"/>
<path d="M1150 2237 l0 -165 63 -11 c229 -41 924 -38 1165 4 l32 6 0 166 c0
141 -2 164 -15 159 -60 -23 -220 -31 -615 -31 -395 0 -555 8 -615 31 -13 5
-15 -17 -15 -159z"/>
<path d="M1252 1980 c-29 -4 -55 -10 -58 -13 -7 -7 88 -18 246 -27 269 -17
690 -9 880 16 49 6 52 8 29 18 -29 13 -1016 18 -1097 6z"/>
<path d="M1150 1767 l0 -165 63 -11 c229 -41 924 -38 1165 4 l32 6 0 166 c0
141 -2 164 -15 159 -60 -23 -220 -31 -615 -31 -395 0 -555 8 -615 31 -13 5
-15 -17 -15 -159z"/>
<path d="M1345 1509 c-49 -4 -106 -11 -125 -15 l-35 -7 40 -8 c181 -35 840
-37 1095 -3 229 30 -663 61 -975 33z"/>
<path d="M1150 1287 l0 -165 63 -11 c229 -41 924 -38 1165 4 l32 6 0 166 c0
141 -2 164 -15 159 -60 -23 -220 -31 -615 -31 -395 0 -555 8 -615 31 -13 5
-15 -17 -15 -159z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,279 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="355.000000pt" height="356.000000pt" viewBox="0 0 355.000000 356.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,356.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1560 3549 c-546 -71 -1010 -370 -1303 -844 -101 -161 -189 -387
-228 -582 -30 -153 -37 -436 -15 -593 68 -472 317 -893 695 -1179 201 -152
456 -267 716 -322 98 -21 136 -24 345 -24 206 0 249 3 348 23 707 143 1250
684 1403 1397 22 99 24 134 24 355 -1 279 -12 356 -87 575 -218 640 -778 1101
-1444 1190 -117 16 -348 18 -454 4z m480 -264 c249 -42 507 -163 710 -333 275
-229 461 -549 527 -904 27 -143 24 -430 -6 -568 -122 -572 -531 -1014 -1085
-1174 -275 -80 -620 -70 -898 24 -741 253 -1173 1031 -996 1794 95 412 354
762 726 980 167 98 395 173 592 195 110 13 310 6 430 -14z"/>
<path d="M1730 3060 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1727 2951 c-2 -10 -1 -25 4 -33 6 -10 2 -21 -11 -33 -20 -18 -21
-18 -35 1 -14 19 -14 19 -35 -2 -20 -20 -21 -23 -7 -45 15 -24 10 -30 -255
-319 -149 -162 -275 -295 -282 -295 -26 -2 -57 -27 -52 -43 3 -9 -1 -26 -9
-36 -12 -16 -17 -17 -30 -6 -13 11 -20 11 -40 0 -24 -13 -24 -15 -9 -38 18
-27 11 -39 -26 -44 -22 -3 -26 -10 -33 -57 -7 -52 -6 -56 39 -130 61 -101 56
-95 78 -125 15 -21 16 -30 7 -35 -8 -5 -10 -18 -6 -34 6 -22 11 -26 30 -21 17
4 27 -1 39 -18 16 -22 16 -23 -9 -32 -44 -17 -27 -72 19 -60 22 5 25 10 20 28
-10 33 -1 20 117 -164 100 -158 109 -176 99 -199 -9 -19 -8 -27 5 -40 13 -13
19 -13 36 -3 17 11 33 9 105 -15 83 -27 84 -28 84 -60 0 -30 3 -33 30 -33 24
0 30 4 30 21 0 17 4 20 23 15 12 -3 25 -6 30 -6 4 0 7 -7 7 -15 0 -11 11 -15
38 -15 20 0 132 -33 247 -73 l210 -72 -3 -32 c-3 -31 -1 -33 27 -33 26 0 31 4
31 23 0 20 4 23 30 19 21 -3 30 -10 30 -24 0 -16 7 -19 43 -17 23 1 50 6 60
11 11 5 17 5 17 -2 0 -5 6 -10 13 -10 13 0 37 40 37 61 0 13 -42 28 -55 21
-11 -7 -15 -8 -58 -18 -27 -6 -27 -6 -16 22 161 421 379 1009 379 1024 0 26
-13 40 -414 439 l-346 345 22 23 c21 23 21 23 2 38 -25 19 -41 19 -53 -2 -9
-17 -11 -16 -32 4 -19 19 -20 24 -9 38 12 15 11 19 -10 36 -21 15 -27 16 -35
5 -9 -11 -14 -11 -32 4 -12 9 -21 23 -21 31 3 41 -3 49 -31 49 -20 0 -30 -6
-34 -19z m58 -211 c3 -5 -1 -10 -10 -10 -9 0 -13 5 -10 10 3 6 8 10 10 10 2 0
7 -4 10 -10z m65 -67 c25 -26 38 -41 28 -35 -14 11 -19 9 -32 -10 -15 -21 -15
-24 5 -43 l20 -20 20 24 20 24 22 -21 c17 -17 19 -24 9 -34 -18 -18 -15 -31
10 -47 19 -12 23 -11 33 3 11 14 14 14 30 -4 9 -10 15 -26 12 -35 -7 -16 32
-48 51 -43 6 2 96 -84 201 -191 151 -155 191 -201 196 -228 5 -30 9 -34 29
-29 28 7 67 -27 43 -37 -8 -3 -17 -15 -20 -27 -4 -16 -1 -24 14 -27 22 -6 22
-5 7 -38 -8 -17 -17 -24 -29 -20 -21 7 -38 -44 -18 -55 18 -12 2 -60 -20 -60
-22 0 -35 -38 -20 -56 14 -17 2 -54 -17 -54 -19 0 -39 -51 -24 -60 8 -5 8 -15
0 -34 -5 -15 -14 -25 -19 -22 -5 3 -14 -7 -19 -23 -7 -20 -7 -31 0 -33 11 -4
-10 -58 -23 -58 -5 0 -11 -17 -14 -37 -4 -21 -15 -56 -26 -79 -10 -23 -19 -50
-19 -60 0 -25 -36 -84 -52 -85 -7 -1 -28 0 -45 1 -31 1 -33 -1 -33 -29 0 -35
1 -35 -34 -21 -16 6 -26 17 -26 30 0 15 -7 20 -29 20 -16 0 -31 -4 -33 -9 -1
-5 -113 29 -248 74 -135 46 -235 84 -222 84 18 1 22 7 22 31 0 27 -3 30 -30
30 -25 0 -30 -4 -30 -25 0 -27 -3 -28 -37 -19 -14 4 -23 14 -23 25 0 11 -7 19
-18 19 -17 0 -69 73 -65 90 5 18 -17 61 -28 55 -11 -8 -38 22 -39 43 0 6 7 12
15 12 17 0 18 4 9 38 -6 19 -11 22 -38 17 -31 -6 -32 -5 -146 176 -127 200
-129 204 -109 197 9 -3 20 7 29 28 22 47 456 521 473 516 5 -1 20 4 34 13 18
12 22 20 14 29 -8 10 -6 20 8 37 19 23 20 23 34 5 12 -16 16 -17 35 -5 26 16
28 32 7 49 -13 11 -12 16 8 41 23 29 40 38 31 16 -2 -7 4 -22 16 -32 19 -17
21 -17 40 0 14 12 18 25 14 41 -4 13 -4 24 -2 24 2 0 24 -21 48 -47z m390
-1623 c0 -12 -17 -12 -45 0 -17 7 -15 9 13 9 17 1 32 -3 32 -9z"/>
<path d="M1740 2580 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1740 2458 c1 -34 19 -68 37 -68 6 0 18 11 27 25 9 14 12 25 6 25 -5
0 -10 11 -10 25 0 21 -5 25 -30 25 -27 0 -30 -3 -30 -32z"/>
<path d="M1659 2381 l-24 -20 21 -21 c20 -20 21 -20 42 -3 21 17 21 19 4 41
l-18 23 -25 -20z"/>
<path d="M1847 2375 c-17 -24 -17 -25 8 -41 24 -16 27 -16 40 2 17 23 15 33
-11 50 -16 11 -21 9 -37 -11z"/>
<path d="M1740 2340 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1562 2312 c-23 -18 -23 -18 -5 -41 17 -21 22 -22 41 -10 27 17 27
21 5 48 -17 20 -19 20 -41 3z"/>
<path d="M1946 2306 c-14 -22 -13 -25 4 -41 19 -17 21 -17 40 0 26 23 25 29
-4 48 -23 15 -25 15 -40 -7z"/>
<path d="M2044 2235 c-16 -24 -16 -27 2 -40 23 -17 33 -15 50 11 11 16 9 21
-11 37 -24 17 -25 17 -41 -8z"/>
<path d="M1461 2236 c-9 -11 -10 -20 -1 -35 13 -25 20 -26 46 -7 15 12 17 18
8 33 -15 24 -38 28 -53 9z"/>
<path d="M1740 2220 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1371 2171 c-21 -16 -22 -20 -10 -39 17 -27 31 -28 52 -4 14 15 14
19 -2 38 -17 21 -18 21 -40 5z"/>
<path d="M2142 2168 c-18 -18 -15 -36 7 -48 26 -14 29 -13 41 11 19 35 -20 65
-48 37z"/>
<path d="M1747 2123 c-4 -3 -7 -17 -7 -30 0 -19 5 -23 30 -23 27 0 30 3 30 30
0 25 -4 30 -23 30 -13 0 -27 -3 -30 -7z"/>
<path d="M1271 2099 l-24 -20 20 -20 c18 -18 23 -19 42 -8 25 16 25 18 3 46
l-17 22 -24 -20z"/>
<path d="M2236 2092 c-15 -18 -15 -20 2 -35 25 -22 34 -21 51 5 12 19 11 23
-5 35 -23 17 -28 17 -48 -5z"/>
<path d="M2335 2023 c-13 -19 -15 -28 -6 -31 7 -2 20 -13 30 -24 13 -13 26
-17 44 -13 23 6 24 9 15 36 -5 16 -15 29 -21 29 -6 0 -18 7 -27 15 -16 14 -19
13 -35 -12z"/>
<path d="M1168 2023 c-9 -10 -18 -34 -22 -54 -5 -31 -3 -37 13 -42 11 -3 22
-17 26 -36 6 -27 10 -31 28 -25 32 9 37 17 31 42 -4 13 -14 22 -25 22 -23 0
-23 6 -4 43 26 50 -12 89 -47 50z"/>
<path d="M1747 2004 c-4 -4 -7 -18 -7 -31 0 -20 5 -23 36 -23 33 0 35 2 32 28
-2 20 -9 28 -28 30 -14 2 -29 0 -33 -4z"/>
<path d="M2263 1979 c-42 -16 -22 -66 21 -55 22 5 26 11 20 29 -9 32 -16 36
-41 26z"/>
<path d="M1259 1934 c-12 -33 -13 -31 21 -42 27 -10 30 -9 36 13 7 29 1 41
-26 48 -16 4 -23 -1 -31 -19z"/>
<path d="M2150 1950 c-14 -3 -25 -11 -24 -18 1 -7 2 -19 3 -27 1 -19 50 -20
57 -2 2 7 1 22 -3 33 -6 16 -14 19 -33 14z"/>
<path d="M2311 1908 c-10 -26 -6 -33 26 -42 18 -6 24 -2 29 20 11 43 -39 63
-55 22z"/>
<path d="M1374 1896 c-8 -31 -7 -32 27 -41 23 -6 27 -3 32 22 6 33 8 30 -25
38 -23 6 -28 3 -34 -19z"/>
<path d="M2015 1909 c-4 -5 -4 -21 -1 -34 5 -19 10 -22 31 -17 13 4 25 10 25
15 1 43 -1 47 -24 47 -14 0 -28 -5 -31 -11z"/>
<path d="M1489 1864 c-12 -33 -13 -31 21 -42 27 -10 30 -9 36 13 7 29 1 41
-26 48 -16 4 -23 -1 -31 -19z"/>
<path d="M1750 1855 c0 -19 -5 -35 -10 -35 -12 0 -33 -50 -25 -59 3 -3 10 1
14 8 6 9 11 10 15 2 9 -15 57 -14 76 2 8 7 16 25 18 40 4 34 -32 77 -65 77
-20 0 -23 -5 -23 -35z"/>
<path d="M1902 1881 c-9 -5 -11 -17 -7 -34 6 -23 11 -26 34 -21 34 9 34 9 27
39 -6 25 -29 32 -54 16z"/>
<path d="M1604 1826 c-8 -31 -7 -32 27 -41 23 -6 27 -3 32 22 6 33 8 30 -25
38 -23 6 -28 3 -34 -19z"/>
<path d="M1233 1810 c-15 -6 -20 -15 -16 -30 7 -27 17 -32 47 -24 22 5 23 8
14 35 -11 31 -12 32 -45 19z"/>
<path d="M2274 1794 c-11 -43 39 -63 55 -21 10 25 6 32 -26 41 -18 6 -24 2
-29 -20z"/>
<path d="M1671 1708 c-12 -19 -11 -23 10 -39 23 -18 24 -18 41 4 17 21 17 23
-3 40 -27 22 -31 22 -48 -5z"/>
<path d="M1848 1719 c-21 -12 -23 -29 -5 -53 12 -17 14 -17 36 1 21 17 22 22
10 41 -16 25 -17 25 -41 11z"/>
<path d="M1262 1692 c-9 -6 -10 -15 -3 -35 8 -19 15 -24 31 -20 26 7 33 18 25
43 -7 21 -30 26 -53 12z"/>
<path d="M2235 1680 c-8 -25 -1 -36 25 -43 16 -4 23 1 31 20 7 20 6 29 -3 35
-23 14 -46 9 -53 -12z"/>
<path d="M1613 1618 c-22 -29 -22 -37 2 -52 23 -15 25 -15 41 9 16 24 16 27
-2 40 -24 18 -29 18 -41 3z"/>
<path d="M1906 1615 c-18 -13 -18 -16 -2 -40 16 -24 17 -24 42 -9 22 15 23 19
11 37 -18 27 -28 29 -51 12z"/>
<path d="M2200 1564 c-12 -31 -13 -30 22 -39 23 -6 28 -3 34 19 7 31 7 31 -23
40 -19 6 -25 2 -33 -20z"/>
<path d="M1539 1509 c-9 -17 -8 -25 4 -37 18 -17 45 -10 54 14 4 11 -1 22 -12
30 -25 19 -32 18 -46 -7z"/>
<path d="M1978 1519 c-21 -12 -23 -29 -5 -53 12 -17 14 -17 36 1 21 17 22 22
10 41 -16 25 -17 25 -41 11z"/>
<path d="M2161 1450 c-9 -26 -7 -29 19 -39 26 -9 29 -7 39 19 9 26 7 29 -19
39 -26 9 -29 7 -39 -19z"/>
<path d="M1472 1410 c-16 -26 -16 -25 12 -43 23 -15 25 -15 41 9 16 24 15 26
-2 40 -25 19 -36 17 -51 -6z"/>
<path d="M2041 1413 c-22 -18 -22 -19 -4 -41 17 -21 19 -21 41 -4 23 18 23 19
5 41 -18 22 -19 22 -42 4z"/>
<path d="M2125 1341 c-8 -27 -45 -49 -45 -26 0 10 -10 15 -30 15 -27 0 -30 -3
-30 -30 0 -27 3 -30 30 -30 17 0 30 5 30 13 1 6 9 2 20 -11 18 -22 20 -22 44
-7 20 14 52 72 44 81 -2 1 -15 5 -30 9 -21 5 -27 3 -33 -14z"/>
<path d="M1660 1300 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1780 1300 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1900 1300 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M2171 1213 c-22 -18 -22 -19 -4 -42 18 -22 19 -22 42 -4 22 18 22 19
4 42 -18 22 -19 22 -42 4z"/>
<path d="M1551 2813 c-22 -18 -22 -19 -4 -42 18 -22 19 -22 42 -4 22 18 22 19
4 42 -18 22 -19 22 -42 4z"/>
<path d="M1453 2742 c-22 -17 -22 -17 -3 -42 l19 -25 23 23 c22 22 22 22 3 42
-19 18 -21 18 -42 2z"/>
<path d="M2029 2728 c-10 -18 -8 -24 7 -35 21 -15 34 -13 48 9 7 12 6 21 -3
32 -19 22 -38 20 -52 -6z"/>
<path d="M1356 2671 c-15 -16 -15 -22 -4 -40 15 -25 17 -25 42 -6 17 13 18 18
6 40 -16 30 -22 31 -44 6z"/>
<path d="M2129 2664 c-9 -11 -10 -20 -2 -32 16 -26 40 -26 54 -1 10 19 9 25
-7 36 -23 17 -29 16 -45 -3z"/>
<path d="M1261 2603 c-21 -17 -22 -22 -10 -41 17 -27 21 -27 48 -4 20 16 20
18 3 40 -18 23 -18 23 -41 5z"/>
<path d="M2222 2590 c-16 -26 -16 -25 12 -43 23 -15 25 -15 41 9 16 24 15 26
-2 40 -25 19 -36 17 -51 -6z"/>
<path d="M1162 2532 l-23 -18 20 -25 20 -24 21 21 c20 20 20 21 3 42 -17 21
-19 21 -41 4z"/>
<path d="M2319 2518 c-10 -18 -8 -24 11 -40 22 -17 23 -17 36 -1 19 25 17 41
-5 53 -27 14 -29 13 -42 -12z"/>
<path d="M1064 2461 c-21 -17 -21 -18 -5 -40 16 -21 20 -22 39 -10 27 17 28
31 5 52 -16 14 -20 14 -39 -2z"/>
<path d="M2419 2454 c-9 -11 -10 -20 -2 -32 14 -22 43 -22 57 1 9 15 7 21 -8
33 -25 18 -31 18 -47 -2z"/>
<path d="M970 2392 c-20 -16 -21 -21 -9 -40 17 -27 21 -27 48 -4 20 17 20 17
2 39 -19 22 -20 22 -41 5z"/>
<path d="M2523 2388 c-22 -29 -22 -37 2 -52 23 -15 25 -15 41 9 16 24 16 27
-2 40 -24 18 -29 18 -41 3z"/>
<path d="M871 2321 c-21 -16 -22 -20 -10 -39 17 -27 31 -28 52 -4 14 16 14 19
-1 39 -17 22 -18 22 -41 4z"/>
<path d="M2611 2308 c-12 -19 -11 -24 10 -41 23 -18 23 -18 41 5 17 22 17 24
-3 41 -27 22 -31 22 -48 -5z"/>
<path d="M773 2251 c-22 -19 -22 -20 -5 -41 16 -20 21 -21 40 -9 27 17 27 21
5 48 -18 20 -18 20 -40 2z"/>
<path d="M2709 2239 c-9 -18 -7 -25 9 -42 l21 -20 20 24 20 24 -22 17 c-29 23
-34 22 -48 -3z"/>
<path d="M667 2172 c-25 -27 -21 -45 7 -40 22 5 23 3 14 -24 -10 -29 -3 -99
10 -97 34 3 46 18 47 62 2 35 -1 47 -12 47 -10 0 -12 6 -8 20 7 22 -10 50 -30
50 -6 0 -19 -8 -28 -18z"/>
<path d="M2805 2168 c-13 -19 -13 -25 -2 -33 8 -5 17 -22 21 -38 6 -24 10 -26
34 -21 15 4 28 8 29 9 7 4 -19 70 -33 86 -22 24 -29 24 -49 -3z"/>
<path d="M571 2140 c-9 -26 -7 -29 19 -39 26 -9 29 -7 39 19 9 26 7 29 -19 39
-26 9 -29 7 -39 -19z"/>
<path d="M2943 2163 c-7 -3 -8 -14 -4 -31 4 -15 10 -26 14 -24 4 1 11 2 16 2
9 0 3 48 -8 54 -3 2 -11 1 -18 -1z"/>
<path d="M2717 2103 c-13 -3 -16 -11 -11 -31 9 -35 7 -34 38 -26 26 6 31 19
20 48 -6 16 -14 18 -47 9z"/>
<path d="M801 2070 c-9 -26 -7 -29 19 -39 26 -9 29 -7 39 19 9 26 7 29 -19 39
-26 9 -29 7 -39 -19z"/>
<path d="M2779 2053 c-7 -20 -6 -29 3 -35 23 -14 46 -9 53 12 8 25 1 36 -25
43 -16 4 -23 -1 -31 -20z"/>
<path d="M733 1960 c-18 -8 -21 -13 -14 -32 16 -44 69 -29 57 16 -7 28 -10 29
-43 16z"/>
<path d="M2741 1938 c-10 -26 -6 -33 25 -42 18 -5 24 -1 32 23 9 26 8 30 -11
35 -34 9 -37 8 -46 -16z"/>
<path d="M777 1848 c-22 -8 -26 -14 -21 -31 9 -32 16 -36 42 -26 22 8 26 21
14 50 -6 13 -13 14 -35 7z"/>
<path d="M2706 1824 c-5 -18 -3 -30 6 -35 23 -15 46 -9 52 13 6 25 1 33 -30
42 -18 5 -23 1 -28 -20z"/>
<path d="M807 1733 c-15 -4 -17 -11 -12 -31 9 -34 8 -34 39 -26 28 7 29 8 20
42 -6 22 -12 24 -47 15z"/>
<path d="M2666 1708 c-6 -25 -1 -33 30 -42 18 -5 23 -1 28 20 5 18 3 30 -6 35
-23 15 -46 9 -52 -13z"/>
<path d="M849 1617 c-23 -10 -25 -16 -18 -34 14 -39 69 -27 61 13 -6 32 -12
34 -43 21z"/>
<path d="M2630 1594 c-12 -31 -13 -30 22 -39 23 -6 28 -3 34 19 7 31 7 31 -23
40 -19 6 -25 2 -33 -20z"/>
<path d="M872 1502 c-10 -7 -10 -15 -2 -36 8 -22 14 -26 33 -20 30 9 30 10 23
39 -6 25 -29 32 -54 17z"/>
<path d="M2591 1480 c-9 -26 -7 -29 19 -39 26 -9 29 -7 39 19 9 26 7 29 -19
39 -26 9 -29 7 -39 -19z"/>
<path d="M1118 1487 c-24 -11 -26 -14 -15 -39 11 -24 14 -26 39 -15 24 11 26
14 15 39 -11 24 -14 26 -39 15z"/>
<path d="M923 1393 c-25 -5 -26 -7 -17 -40 6 -23 29 -29 52 -14 13 8 7 63 -7
60 -3 -1 -16 -4 -28 -6z"/>
<path d="M2556 1365 c-8 -32 -9 -31 25 -40 23 -6 27 -3 33 20 8 32 9 31 -25
40 -23 6 -27 3 -33 -20z"/>
<path d="M1147 1373 c-13 -3 -16 -10 -11 -26 9 -32 17 -37 42 -31 22 6 27 20
16 48 -6 16 -14 18 -47 9z"/>
<path d="M945 1270 c-3 -5 -3 -21 1 -35 5 -21 11 -24 28 -19 31 9 36 17 30 42
-7 23 -47 32 -59 12z"/>
<path d="M2519 1252 c-7 -18 -6 -28 3 -34 21 -13 45 -9 52 8 11 29 6 42 -20
47 -20 4 -27 -1 -35 -21z"/>
<path d="M1192 1259 c-18 -7 -22 -14 -16 -31 9 -31 9 -31 39 -24 27 7 32 23
13 48 -10 12 -19 14 -36 7z"/>
<path d="M988 1158 c-21 -17 -6 -63 18 -54 9 3 20 6 25 6 16 0 5 55 -11 58 -9
1 -23 -3 -32 -10z"/>
<path d="M2481 1138 c-10 -26 -6 -33 25 -42 18 -5 24 -1 32 23 8 24 7 31 -5
35 -28 11 -44 6 -52 -16z"/>
<path d="M1221 1141 c-19 -12 -6 -65 14 -57 9 3 15 -1 15 -10 0 -11 6 -13 19
-9 11 3 23 0 27 -6 5 -9 11 -7 21 6 7 11 13 13 13 7 0 -7 13 -12 30 -12 27 0
30 3 30 31 0 28 -2 30 -32 28 -18 -1 -41 2 -50 6 -9 4 -22 4 -28 0 -5 -3 -10
1 -10 9 0 17 -27 21 -49 7z"/>
<path d="M1450 1090 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1031 1049 c-15 -6 -21 -14 -17 -25 3 -9 6 -20 6 -25 0 -11 30 -12
48 0 9 5 11 17 6 34 -7 30 -8 30 -43 16z"/>
<path d="M2444 1025 c-12 -47 39 -64 57 -19 11 31 12 30 -23 39 -24 6 -28 3
-34 -20z"/>
<path d="M1206 1008 c-14 -19 -14 -23 2 -34 25 -19 40 -17 53 8 10 18 8 24 -7
35 -24 18 -30 17 -48 -9z"/>
<path d="M1062 931 c-9 -5 -11 -17 -6 -35 5 -20 11 -25 25 -21 13 4 19 1 19
-9 0 -21 48 -21 78 0 28 19 28 40 1 55 -15 8 -24 8 -32 0 -16 -16 -37 -14 -37
4 0 16 -27 20 -48 6z"/>
<path d="M1220 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1340 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1460 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1580 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1700 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1820 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1940 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M2060 880 c0 -27 3 -30 30 -30 27 0 30 3 30 30 0 27 -3 30 -30 30
-27 0 -30 -3 -30 -30z"/>
<path d="M1072 810 c-16 -26 -16 -25 12 -43 23 -15 25 -15 41 9 16 24 15 26
-2 40 -25 19 -36 17 -51 -6z"/>
<path d="M2432 812 c-23 -18 -23 -18 -5 -41 17 -21 22 -22 41 -10 27 17 27 21
5 48 -17 20 -19 20 -41 3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,39 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="356.000000pt" height="356.000000pt" viewBox="0 0 356.000000 356.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,356.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1560 3549 c-313 -40 -615 -165 -870 -359 -97 -74 -247 -224 -322
-323 -166 -217 -286 -482 -339 -744 -30 -153 -37 -436 -15 -593 98 -676 561
-1229 1208 -1444 209 -69 293 -81 568 -81 206 0 248 3 340 23 621 135 1109
552 1324 1134 86 231 101 325 101 618 -1 216 -3 257 -23 350 -77 355 -242 660
-494 912 -283 283 -644 457 -1048 508 -97 12 -335 11 -430 -1z m368 -250 c264
-29 481 -105 689 -242 353 -233 593 -594 670 -1007 27 -146 24 -431 -6 -570
-45 -212 -134 -417 -254 -587 -80 -113 -248 -281 -360 -360 -173 -122 -375
-209 -587 -254 -153 -33 -449 -33 -599 -1 -479 104 -860 400 -1079 838 -45 90
-108 285 -126 394 -85 499 65 979 417 1339 129 132 250 219 417 301 259 128
542 180 818 149z"/>
<path d="M975 2641 c-11 -5 -29 -19 -40 -31 -19 -21 -20 -38 -23 -283 -2 -185
0 -269 9 -289 25 -60 -6 -58 863 -58 l795 0 28 24 28 24 3 268 c2 190 0 276
-9 296 -25 60 5 58 -851 57 -431 0 -792 -4 -803 -8z m985 -146 l0 -55 -445 0
-445 0 0 55 0 55 445 0 445 0 0 -55z m552 -93 c38 -37 48 -98 23 -140 -50 -83
-169 -81 -210 4 -19 41 -19 67 0 105 38 73 130 88 187 31z m-552 -142 l0 -60
-445 0 -445 0 0 60 0 60 445 0 445 0 0 -60z"/>
<path d="M1750 1905 c0 -32 2 -35 30 -35 28 0 30 3 30 35 0 32 -2 35 -30 35
-28 0 -30 -3 -30 -35z"/>
<path d="M975 1821 c-11 -5 -29 -19 -40 -31 -19 -21 -20 -38 -23 -283 -2 -185
0 -269 9 -289 25 -60 -6 -58 863 -58 l795 0 28 24 28 24 3 268 c2 190 0 276
-9 296 -25 60 5 58 -851 57 -431 0 -792 -4 -803 -8z m985 -151 l0 -60 -445 0
-445 0 0 60 0 60 445 0 445 0 0 -60z m552 -98 c38 -37 48 -98 23 -140 -50 -83
-169 -81 -210 4 -19 41 -19 67 0 105 38 73 130 88 187 31z m-552 -142 l0 -60
-445 0 -445 0 0 60 0 60 445 0 445 0 0 -60z"/>
<path d="M1750 1025 l0 -95 -384 0 -384 0 -30 30 c-34 34 -59 37 -102 15 -58
-30 -67 -90 -21 -136 40 -39 82 -39 123 1 l30 30 795 0 795 0 28 -30 c56 -60
149 -23 150 58 0 39 -46 92 -80 92 -28 0 -76 -26 -83 -45 -6 -13 -54 -15 -392
-15 l-385 0 0 95 0 95 -30 0 -30 0 0 -95z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,27 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="356.000000pt" height="356.000000pt" viewBox="0 0 356.000000 356.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,356.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1560 3549 c-313 -40 -615 -165 -870 -359 -97 -74 -247 -224 -322
-323 -166 -217 -286 -482 -339 -744 -30 -153 -37 -436 -15 -593 98 -676 561
-1229 1208 -1444 209 -69 293 -81 568 -81 206 0 248 3 340 23 621 135 1109
552 1324 1134 86 231 101 325 101 618 -1 216 -3 257 -23 350 -77 355 -242 660
-494 912 -283 283 -644 457 -1048 508 -97 12 -335 11 -430 -1z m368 -250 c264
-29 481 -105 689 -242 353 -233 593 -594 670 -1007 27 -146 24 -431 -6 -570
-45 -212 -134 -417 -254 -587 -80 -113 -248 -281 -360 -360 -173 -122 -375
-209 -587 -254 -153 -33 -449 -33 -599 -1 -479 104 -860 400 -1079 838 -45 90
-108 285 -126 394 -85 499 65 979 417 1339 129 132 250 219 417 301 259 128
542 180 818 149z"/>
<path d="M1490 2240 c-157 -44 -428 -118 -603 -166 -175 -48 -312 -91 -305
-95 7 -4 132 -39 278 -78 146 -40 273 -74 283 -77 16 -5 17 -28 17 -295 l0
-289 620 0 620 0 0 290 c0 160 2 290 5 290 7 0 589 161 592 163 1 2 -1082 299
-1212 333 -5 1 -138 -33 -295 -76z"/>
<path d="M2631 1738 c-12 -79 -24 -151 -27 -160 -5 -16 2 -18 56 -18 59 0 62
1 57 23 -3 12 -16 84 -28 160 -13 75 -26 137 -29 137 -3 0 -16 -64 -29 -142z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,31 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="356.000000pt" height="356.000000pt" viewBox="0 0 356.000000 356.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,356.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1560 3549 c-313 -40 -615 -165 -870 -359 -97 -74 -247 -224 -322
-323 -166 -217 -286 -482 -339 -744 -30 -153 -37 -436 -15 -593 98 -676 561
-1229 1208 -1444 209 -69 293 -81 568 -81 206 0 248 3 340 23 621 135 1109
552 1324 1134 86 231 101 325 101 618 -1 216 -3 257 -23 350 -77 355 -242 660
-494 912 -283 283 -644 457 -1048 508 -97 12 -335 11 -430 -1z m368 -250 c264
-29 481 -105 689 -242 353 -233 593 -594 670 -1007 27 -146 24 -431 -6 -570
-45 -212 -134 -417 -254 -587 -80 -113 -248 -281 -360 -360 -173 -122 -375
-209 -587 -254 -153 -33 -449 -33 -599 -1 -479 104 -860 400 -1079 838 -45 90
-108 285 -126 394 -85 499 65 979 417 1339 129 132 250 219 417 301 259 128
542 180 818 149z"/>
<path d="M2297 2510 c-65 -37 -120 -70 -123 -73 -3 -3 10 -16 30 -29 l36 -25
-136 -201 c-75 -111 -140 -202 -145 -202 -5 0 -114 59 -242 130 -129 72 -239
130 -246 130 -11 0 -527 -273 -540 -285 -7 -8 30 -75 41 -75 4 0 99 49 211
109 111 60 222 119 247 131 l45 21 245 -136 c139 -77 253 -135 265 -133 14 2
66 71 167 222 81 120 151 223 157 229 6 6 20 2 41 -13 17 -12 33 -20 35 -18 6
6 37 256 33 271 -2 11 -36 -4 -121 -53z"/>
<path d="M2310 1600 l0 -620 175 0 175 0 0 620 0 620 -175 0 -175 0 0 -620z"/>
<path d="M1360 1425 l0 -445 180 0 180 0 0 445 0 445 -180 0 -180 0 0 -445z"/>
<path d="M1840 1365 l0 -385 175 0 175 0 0 385 0 385 -175 0 -175 0 0 -385z"/>
<path d="M890 1335 l0 -355 180 0 180 0 0 355 0 355 -180 0 -180 0 0 -355z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,27 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="356.000000pt" height="356.000000pt" viewBox="0 0 356.000000 356.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,356.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1560 3549 c-313 -40 -615 -165 -870 -359 -97 -74 -247 -224 -322
-323 -166 -217 -286 -482 -339 -744 -30 -153 -37 -436 -15 -593 98 -676 561
-1229 1208 -1444 209 -69 293 -81 568 -81 206 0 248 3 340 23 621 135 1109
552 1324 1134 86 231 101 325 101 618 -1 216 -3 257 -23 350 -77 355 -242 660
-494 912 -283 283 -644 457 -1048 508 -97 12 -335 11 -430 -1z m368 -250 c264
-29 481 -105 689 -242 353 -233 593 -594 670 -1007 27 -146 24 -431 -6 -570
-45 -212 -134 -417 -254 -587 -80 -113 -248 -281 -360 -360 -173 -122 -375
-209 -587 -254 -153 -33 -449 -33 -599 -1 -479 104 -860 400 -1079 838 -45 90
-108 285 -126 394 -85 499 65 979 417 1339 129 132 250 219 417 301 259 128
542 180 818 149z"/>
<path d="M1150 2450 l0 -40 684 0 c376 0 691 -3 700 -6 14 -5 16 -52 16 -425
l0 -419 45 0 45 0 0 465 0 465 -745 0 -745 0 0 -40z"/>
<path d="M1040 2325 l0 -45 695 0 695 0 0 -419 c0 -231 3 -422 8 -424 4 -3 22
-2 40 0 l32 5 0 464 0 464 -735 0 -735 0 0 -45z"/>
<path d="M910 1686 c0 -520 1 -555 18 -560 72 -21 217 -39 332 -40 163 -1 228
12 444 91 250 92 390 125 589 139 l97 7 0 458 0 459 -740 0 -740 0 0 -554z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,52 @@
/**
* 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.
*/
(function() {
'use strict';
/**
* @ngdoc overview
* @name horizon.dashboard.machine_learning.overview
* @ngModule
* @description
* Provides all the services and widgets require to display the experiment
* panel
*/
angular
.module('horizon.dashboard.machine_learning.overview', [
'ngRoute'])
.config(config);
config.$inject = [
'$provide',
'$windowProvider',
'$routeProvider'
];
/**
* @name config
* @param {Object} $provide
* @param {Object} $windowProvider
* @param {Object} $routeProvider
* @description Routes used by this module.
* @returns {undefined} Returns nothing
*/
function config($provide, $windowProvider, $routeProvider) {
var path = $windowProvider.$get().STATIC_URL + 'dashboard/machine_learning/overview/';
$provide.constant('horizon.dashboard.machine_learning.overview.basePath', path);
$routeProvider.when('/project/machine_learning/overview', {
templateUrl: path + 'panel.html'
});
}
})();

View File

@ -0,0 +1,23 @@
/**
* 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.
*/
(function() {
'use strict';
describe('horizon.dashboard.machine_learning.overview', function() {
it('should exist', function() {
expect(angular.module('horizon.dashboard.machine_learning.overview')).toBeDefined();
});
});
})();

View File

@ -0,0 +1,8 @@
<div>
<hz-page-header header="Overview"></hz-page-header>
</div>
<div ng-controller="OverviewController as ctrl">
<div id="meteosTopologyCanvas">
<div id="meteosMenu"></div>
</div>
</div>