config ESLINT, refactor theme component

This commit is contained in:
Nicolas Viot
2018-10-05 14:06:59 +02:00
committed by Antoine Nguyen
parent 357b8477b8
commit d0ae7a06e5
15 changed files with 14917 additions and 217 deletions
+18 -6
View File
@@ -6,25 +6,37 @@ module.exports = {
parser: 'babel-eslint'
},
env: {
browser: true,
browser: true
},
extends: [
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
'plugin:vue/essential',
'plugin:vue/essential',
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
'standard'
],
// required to lint *.vue files
plugins: [
'vue'
],
plugins: ['vue'],
// add your custom rules here
rules: {
// allow async-await
'generator-star-spacing': 'off',
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'indent': ['error', 4]
indent: ['error', 2],
'space-before-function-paren': ['error', 'never']
}
}
// {
// "eslint.enable": true,
// "eslint.autoFixOnSave": true,
// "eslint.run": "onType",
// "eslint.options": {
// "extensions": [".js", ".vue"]
// },
// "eslint.validate": [{
// "language": "vue",
// "autoFix": true
// }]
// }
+14639
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -38,7 +38,7 @@
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.0",
"eslint": "^4.15.0",
"eslint": "^4.19.1",
"eslint-config-standard": "^10.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
@@ -46,7 +46,7 @@
"eslint-plugin-node": "^5.2.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^3.0.1",
"eslint-plugin-vue": "^4.0.0",
"eslint-plugin-vue": "^4.5.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
@@ -67,7 +67,7 @@
"url-loader": "^0.5.8",
"vue-jest": "^1.0.2",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-style-loader": "^3.1.2",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
+6 -53
View File
@@ -1,62 +1,15 @@
<template>
<div id="app">
<div id="main-container" class="container is-fluid">
<div class="columns">
<div class="column is-2">
<aside class="menu">
<p class="menu-label">
Admin
</p>
<ul class="menu-list">
<router-link v-for="(item, index) in menu" :key="index" tag="li" :to="{ name: item.route }">
<a><b-icon :icon="item.icon" size="is-large"></b-icon><br> {{ item.label }}</a>
</router-link>
</ul>
</aside>
</div>
<div class="column is-10 app-content">
<router-view/>
</div>
</div>
</div>
<navbar></navbar>
<router-view/>
</div>
</template>
<script>
import Navbar from './components/navigation/Navbar'
export default {
name: 'App',
data () {
return {
menu: [{
route: 'DomainList',
icon: 'domain',
label: 'Domains'
}, {
route: 'DomainList',
icon: 'account',
label: 'Identities'
}, {
route: 'DomainList',
icon: 'database-search',
label: 'Logs'
}, {
route: 'DomainList',
icon: 'tune',
label: 'Settings'
}]
}
}
name: 'App',
components: { Navbar },
data() {}
}
</script>
<style>
#main-container {
margin-top: 20px;
}
.app-content {
background: #ECF0F3;
}
.menu-list {
text-align: center;
}
</style>
+5 -5
View File
@@ -6,13 +6,13 @@ Vue.use(VueResource)
var domainResource = Vue.resource('/api/v1/domains{/pk}/')
export const getDomains = () => {
return domainResource.get()
return domainResource.get()
}
export const createDomain = (data) => {
return domainResource.save(data)
export const createDomain = data => {
return domainResource.save(data)
}
export const updateDomain = (data) => {
return domainResource.update({pk: data.pk}, data)
export const updateDomain = data => {
return domainResource.update({ pk: data.pk }, data)
}
+53 -51
View File
@@ -53,60 +53,62 @@
<script>
export default {
data () {
return {
formErrors: {},
domain: {}
}
},
mounted () {
var domainPk = this.$route.params.domainPk
if (domainPk) {
if (!this.$store.state.domainsLoaded) {
this.$store.dispatch('getDomains').then(response => {
this.loadDomain(domainPk)
})
} else {
this.loadDomain(domainPk)
}
}
},
methods: {
loadDomain (pk) {
this.domain = JSON.parse(JSON.stringify(this.$store.getters.getDomainByPk(pk)))
},
onSaveError (response) {
this.formErrors = response.data
},
saveDomain () {
var action
var msg
if (this.domain.pk) {
action = 'updateDomain'
msg = 'Domain updated.'
} else {
action = 'createDomain'
msg = 'Domain created.'
}
this.$store.dispatch(action, this.domain).then(response => {
this.$router.push({ name: 'DomainList' })
this.$toast.open({
message: msg,
type: 'is-success',
position: 'is-bottom'
})
}, this.onSaveError)
},
cancel () {
this.$router.push({ name: 'DomainList' })
}
data() {
return {
formErrors: {},
domain: {}
}
},
mounted() {
var domainPk = this.$route.params.domainPk
if (domainPk) {
if (!this.$store.state.domainsLoaded) {
this.$store.dispatch('getDomains').then(response => {
this.loadDomain(domainPk)
})
} else {
this.loadDomain(domainPk)
}
}
},
methods: {
loadDomain(pk) {
this.domain = JSON.parse(
JSON.stringify(this.$store.getters.getDomainByPk(pk))
)
},
onSaveError(response) {
this.formErrors = response.data
},
saveDomain() {
var action
var msg
if (this.domain.pk) {
action = 'updateDomain'
msg = 'Domain updated.'
} else {
action = 'createDomain'
msg = 'Domain created.'
}
this.$store.dispatch(action, this.domain).then(response => {
this.$router.push({ name: 'DomainList' })
this.$toast.open({
message: msg,
type: 'is-success',
position: 'is-bottom'
})
}, this.onSaveError)
},
cancel() {
this.$router.push({ name: 'DomainList' })
}
}
}
</script>
<style>
form {
background: #ffffff;
padding: 20px;
}
form {
background: #ffffff;
padding: 20px;
}
</style>
+26 -29
View File
@@ -57,36 +57,33 @@
import { mapGetters } from 'vuex'
export default {
computed: mapGetters([
'domains'
]),
data () {
return {
}
},
created () {
this.$store.dispatch('getDomains')
},
methods: {
confirmDelete (domain) {
this.$dialog.prompt({
message: `Delete domain ${domain.name}?`,
inputAttrs: {
type: 'checkbox',
placeholder: 'Keep mailboxes on filesystem'
},
onConfirm: (value) => this.$toast.open(`Your age is: ${value}`)
})
computed: mapGetters(['domains']),
data() {
return {}
},
created() {
this.$store.dispatch('getDomains')
},
methods: {
confirmDelete(domain) {
this.$dialog.prompt({
message: `Delete domain ${domain.name}?`,
inputAttrs: {
type: 'checkbox',
placeholder: 'Keep mailboxes on filesystem'
},
getDNSTagType (value) {
if (value === 'unknown') {
return 'is-warning'
} else if (value === 'ok') {
return 'is-danger'
} else {
return 'is-success'
}
}
onConfirm: value => this.$toast.open(`Your age is: ${value}`)
})
},
getDNSTagType(value) {
if (value === 'unknown') {
return 'is-warning'
} else if (value === 'ok') {
return 'is-danger'
} else {
return 'is-success'
}
}
}
}
</script>
@@ -0,0 +1,70 @@
<template>
<aside>
<svg xmlns="http://www.w3.org/2000/svg" width="43" height="52" viewBox="0 0 43 52" class="modo-logo">
<g fill="#FFF">
<path d="M21.9964108,21 L40,10.0508068 C36.1185185,3.7978167 29.3170048,0 22,0 C14.6829952,0 7.88148146,3.7978167 4,10.0508068 L21.9964108,21 Z" />
<path d="M21.4961468,25.9648072 L1.22178013,14 C-1.09566722,20.4385601 -0.0784112625,27.5770277 3.95066026,33.1495782 C7.97973179,38.7221288 14.5202355,42.0366892 21.4961468,42.0411831 L21.4961468,52 L37.2852914,35.2976413 C42.7029462,29.5713312 44.4301418,21.3781287 41.7705135,14.0213403 L21.4961468,25.9648072 Z" />
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="23" viewBox="0 0 144 23">
<g fill="#4067F3">
<path d="M36.4615385 23C31.618426 23 27.6923077 19.0869687 27.6923077 14.26 27.6923077 9.43303129 31.618426 5.52 36.4615385 5.52 41.3046509 5.52 45.2307692 9.43303129 45.2307692 14.26 45.2273536 19.0855579 41.3032354 22.9965957 36.4615385 23zM36.4615385 8.58764124C34.1590485 8.58514416 32.0818832 9.96558568 31.1990219 12.085002 30.3161605 14.2044183 30.8015567 16.6452127 32.4287774 18.268776 34.0559981 19.8923393 36.5044257 20.3787746 38.6318903 19.5011641 40.759355 18.6235536 42.146674 16.5548164 42.1466754 14.26 42.1466772 11.1296516 39.6023544 8.5910475 36.4615385 8.58764124zM75.2307692 23C70.3876568 23 66.4615385 19.0869687 66.4615385 14.26 66.4615385 9.43303129 70.3876568 5.52 75.2307692 5.52 80.0738817 5.52 84 9.43303129 84 14.26 83.9931779 19.0841495 80.071053 22.9932006 75.2307692 23zM75.2307692 8.58764124C72.9282793 8.58514416 70.851114 9.96558568 69.9682526 12.085002 69.0853913 14.2044183 69.5707875 16.6452127 71.1980082 18.268776 72.8252289 19.8923393 75.2736565 20.3787746 77.4011211 19.5011641 79.5285857 18.6235536 80.9159048 16.5548164 80.9159061 14.26 80.9125011 11.1310581 78.3701703 8.59444145 75.2307692 8.58764124zM114.916884 23C110.074579 22.9965917 106.151568 19.082052 106.153847 14.2558869 106.156127 9.42972191 110.082834 5.51886495 114.92514 5.52000025 119.767446 5.52113555 123.692306 9.43383334 123.692308 14.2599989 123.688889 19.0879665 119.760999 23.0000012 114.916884 23zM114.916884 8.58763945C112.614956 8.58763945 110.539691 9.96966546 109.658781 12.0892809 108.777871 14.2088964 109.264797 16.6486793 110.892506 18.2709628 112.520215 19.8932462 114.968157 20.3785492 117.094862 19.5005757 119.221566 18.6226023 120.608214 16.5542542 120.608214 14.2599989 120.608214 11.1272413 118.060119 8.58763945 114.916884 8.58763945zM55.8492514 23C51.0044283 23 47.0769231 18.8810197 47.0769231 13.8 47.0769231 8.7189803 51.0044283 4.6 55.8492514 4.6 56.8766002 4.5965405 57.8962614 4.78577094 58.8600929 5.15875706 59.4051364 5.33485793 59.8130608 5.81197803 59.9207598 6.39934362 60.0284588 6.98670921 59.8183572 7.58846885 59.3744629 7.96401239 58.9305687 8.33955594 58.3253202 8.42759892 57.8007228 8.19293785 55.4709655 7.29069588 52.8523972 8.07824875 51.332652 10.1382557 49.8129068 12.1982627 49.7434905 15.0542594 51.1611883 17.1927933 52.5788861 19.3313273 55.1557949 20.2577715 57.5263569 19.4811837 59.8969188 18.7045959 61.5128404 16.4045952 61.517811 13.8L61.517811 1.62429379C61.517811.727221098 62.2112265 0 63.0665978 0 63.9219692 0 64.6153846.727221098 64.6153846 1.62429379L64.6153846 13.8C64.6119731 18.877001 60.690239 22.9928354 55.8492514 23zM1.60193429 22.9999875C1.17655379 23.0016372.768099475 22.8401747.467307584 22.5514683.166515693 22.2627618-.00170568823 21.8707187.0000130419293 21.4624295L.0000130419293 11.3540664C-.00197082639 8.50221341 1.86380136 5.95694981 4.66108711 4.99548616 7.45837285 4.03402251 10.583378 4.86389073 12.4679784 7.06866384 14.3583384 4.88137793 17.47279 4.06353266 20.2599678 5.02251172 23.0471455 5.98149079 24.9109863 8.51220784 24.9230769 11.3540664L24.9230769 21.4006802C24.9230769 22.2532603 24.202992 22.9444131 23.3147223 22.9444131 22.4264525 22.9444131 21.7063676 22.2532603 21.7063676 21.4006802L21.7063676 11.3540664C21.4804587 9.48564675 19.8317477 8.07620561 17.8720501 8.07620561 15.9123524 8.07620561 14.2636415 9.48564675 14.0377326 11.3540664 14.0377326 12.2066465 13.3176476 12.8977993 12.4293779 12.8977993 11.5411081 12.8977993 10.8210232 12.2066465 10.8210232 11.3540664 11.0034574 9.93240119 10.3157373 8.53716424 9.05485875 7.77089671 7.7939802 7.00462918 6.18586463 7.00462918 4.92498608 7.77089671 3.66410753 8.53716424 2.97638739 9.93240119 3.1588216 11.3540664L3.1588216 21.4624295C3.15916444 22.2950016 2.46901563 22.9765819 1.60193429 22.9999875z" />
<path d="M12.9156923 22.9998804C11.9001681 22.9998804 11.0769231 22.2748918 11.0769231 21.3805731L11.0769231 10.8258106C11.0769231 9.9279002 11.9034743 9.2 12.9230769 9.2 13.9426795 9.2 14.7692308 9.9279002 14.7692308 10.8258106L14.7692308 21.406586C14.7633906 21.8343382 14.564818 22.2425241 14.2172043 22.5413315 13.8695906 22.8401388 13.4014162 23.0050861 12.9156923 22.9998804zM95.5446545 23C90.7019524 22.9964221 86.7760599 18.8805854 86.7692308 13.8L86.7692308 1.62429379C86.7692308.727221098 87.4624014 0 88.3174707 0 89.1725399 0 89.8657106.727221098 89.8657106 1.62429379L89.8657106 13.8C89.868798 16.4082726 91.4852597 18.7126023 93.8580458 19.4912311 96.2308319 20.2698598 98.8107647 19.3425752 100.229961 17.2010245 101.649157 15.0594737 101.579147 12.1993156 100.057048 10.1370089 98.5349498 8.07470227 95.9130515 7.28756489 93.5814863 8.19293785 92.7974423 8.44634809 91.9615409 8.01134264 91.679451 7.20311338 91.3973611 6.39488412 91.7678578 5.49643578 92.5224902 5.15875706 93.4879673 4.78514308 94.5094074 4.59590492 95.5384615 4.6 100.381574 4.6 104.307692 8.7189803 104.307692 13.8 104.307692 18.8810197 100.381574 23 95.5384615 23L95.5446545 23zM142.445556 22.9993388C141.593908 22.9993388 140.903511 22.3112896 140.903511 21.4625378L140.903511 14.2599403C140.901244 11.7851712 139.287553 9.59820438 136.917889 8.85839914 134.548226 8.11859391 131.970942 8.99714448 130.552311 11.0283119 129.133681 13.0594793 129.201983 15.7732422 130.721008 17.7309752 132.240032 19.6887083 134.858272 20.4373832 137.187739 19.5801109 137.708256 19.3810598 138.296049 19.4775172 138.725046 19.8323847 139.154043 20.1872523 139.35743 20.74526 139.256982 21.2917934 139.156534 21.8383268 138.767896 22.2882643 138.240541 22.4685562 134.644788 23.7780393 130.612248 22.6115365 128.278807 19.586901 125.945366 16.5622654 125.850397 12.3786386 128.044202 9.25193189 130.238007 6.12522521 134.213489 4.77817384 137.864984 5.92426076 141.516478 7.07034769 143.999946 10.4446561 143.999987 14.2599403L143.999987 21.4625378C144.001677 21.8727833 143.838048 22.2665335 143.545807 22.5554607 143.253565 22.8443878 142.857175 23.004305 142.445556 22.9993388z" />
</g>
</svg>
<hr>
<nav class="menu">
<ul class="menu-list">
<router-link v-for="(item, index) in menu" :key="index" tag="li" :to="{ name: item.route }">
<a>
<b-icon :icon="item.icon" size="is-large"></b-icon>
<br> {{ item.label }}</a>
</router-link>
</ul>
</nav>
</aside>
</template>
<style scoped>
.modo-logo {
background-color: #4067f3;
border-radius: 50%;
}
</style>
<script>
export default {
data() {
return {
menu: [
{
route: '/',
icon: 'dashboard',
label: 'Dashboard'
},
{
route: 'DomainList',
icon: 'domain',
label: 'Domains'
},
{
route: 'DomainList',
icon: 'account',
label: 'Identities'
},
{
route: 'DomainList',
icon: 'database-search',
label: 'Logs'
},
{
route: 'DomainList',
icon: 'tune',
label: 'Settings'
}
]
}
}
}
</script>
+5 -5
View File
@@ -19,9 +19,9 @@ Vue.http.headers.common['X-CSRFTOKEN'] = csrftoken
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
el: '#app',
router,
store,
components: { App },
template: '<App/>'
})
+17 -18
View File
@@ -6,22 +6,21 @@ import DomainForm from '@/components/domains/DomainForm'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/domains/',
name: 'DomainList',
component: DomainList
},
{
path: '/domains/add/',
name: 'DomainAdd',
component: DomainForm
},
{
path: '/domains/:domainPk([0-9]+)/',
name: 'DomainEdit',
component: DomainForm
}
]
routes: [
{
path: '/domains/',
name: 'DomainList',
component: DomainList
},
{
path: '/domains/add/',
name: 'DomainAdd',
component: DomainForm
},
{
path: '/domains/:domainPk([0-9]+)/',
name: 'DomainEdit',
component: DomainForm
}
]
})
+16
View File
@@ -0,0 +1,16 @@
// Import Bulma's core
@import "~bulma/sass/utilities/_all";
// Set your colors
$primary: #8c67ef;
$primary-invert: findColorInvert($primary);
$twitter: #4099FF;
$twitter-invert: findColorInvert($twitter);
// Setup $colors to use as bulma classes (e.g. 'is-twitter')
$colors: ( "white": ($white, $black), "black": ($black, $white), "light": ($light, $light-invert), "dark": ($dark, $dark-invert), "primary": ($primary, $primary-invert), "info": ($info, $info-invert), "success": ($success, $success-invert), "warning": ($warning, $warning-invert), "danger": ($danger, $danger-invert), "twitter": ($twitter, $twitter-invert));
// Links
$link: $primary;
$link-invert: $primary-invert;
$link-focus-border: $primary;
// Import Bulma and Buefy styles
@import "~bulma";
@import "~buefy/src/scss/buefy";
+4 -4
View File
@@ -6,10 +6,10 @@ import domains from './modules/domains'
Vue.use(Vuex)
const options = {
modules: {
domains
},
strict: process.env.NODE_ENV !== 'production'
modules: {
domains
},
strict: process.env.NODE_ENV !== 'production'
}
export default new Vuex.Store(options)
+43 -43
View File
@@ -8,63 +8,63 @@ const UPDATE_DOMAIN = 'UPDATE_DOMAIN'
// initial state
const state = {
domainsLoaded: false,
domains: []
domainsLoaded: false,
domains: []
}
// getters
const getters = {
domains: state => state.domains,
getDomainByPk: state => pk => {
for (var domain of state.domains) {
if (domain.pk === parseInt(pk, 10)) {
return domain
}
}
return null
domains: state => state.domains,
getDomainByPk: state => pk => {
for (var domain of state.domains) {
if (domain.pk === parseInt(pk, 10)) {
return domain
}
}
return null
}
}
// actions
const actions = {
getDomains ({ commit }) {
return api.getDomains().then(response => {
commit(SET_DOMAINS, { domains: response.data })
})
},
createDomain ({ commit }, data) {
return api.createDomain(data).then(response => {
commit(ADD_DOMAIN, { domain: response.data })
})
},
updateDomain ({ commit }, data) {
return api.updateDomain(data).then(response => {
commit(UPDATE_DOMAIN, { domain: response.data })
})
}
getDomains({ commit }) {
return api.getDomains().then(response => {
commit(SET_DOMAINS, { domains: response.data })
})
},
createDomain({ commit }, data) {
return api.createDomain(data).then(response => {
commit(ADD_DOMAIN, { domain: response.data })
})
},
updateDomain({ commit }, data) {
return api.updateDomain(data).then(response => {
commit(UPDATE_DOMAIN, { domain: response.data })
})
}
}
// mutations
const mutations = {
[SET_DOMAINS] (state, { domains }) {
state.domainsLoaded = true
state.domains = domains
},
[ADD_DOMAIN] (state, { domain }) {
state.domains.push(domain)
},
[UPDATE_DOMAIN] (state, { domain }) {
state.domains.filter(function (item, pos) {
if (item.pk === domain.pk) {
Vue.set(state.domains, pos, domain)
}
})
}
[SET_DOMAINS](state, { domains }) {
state.domainsLoaded = true
state.domains = domains
},
[ADD_DOMAIN](state, { domain }) {
state.domains.push(domain)
},
[UPDATE_DOMAIN](state, { domain }) {
state.domains.filter(function(item, pos) {
if (item.pk === domain.pk) {
Vue.set(state.domains, pos, domain)
}
})
}
}
export default {
state,
getters,
actions,
mutations
state,
getters,
actions,
mutations
}
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="43" height="52" viewBox="0 0 43 52">
<g fill="#FFF">
<path d="M21.9964108,21 L40,10.0508068 C36.1185185,3.7978167 29.3170048,0 22,0 C14.6829952,0 7.88148146,3.7978167 4,10.0508068 L21.9964108,21 Z"/>
<path d="M21.4961468,25.9648072 L1.22178013,14 C-1.09566722,20.4385601 -0.0784112625,27.5770277 3.95066026,33.1495782 C7.97973179,38.7221288 14.5202355,42.0366892 21.4961468,42.0411831 L21.4961468,52 L37.2852914,35.2976413 C42.7029462,29.5713312 44.4301418,21.3781287 41.7705135,14.0213403 L21.4961468,25.9648072 Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 589 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="23" viewBox="0 0 144 23">
<g fill="#4067F3">
<path d="M36.4615385 23C31.618426 23 27.6923077 19.0869687 27.6923077 14.26 27.6923077 9.43303129 31.618426 5.52 36.4615385 5.52 41.3046509 5.52 45.2307692 9.43303129 45.2307692 14.26 45.2273536 19.0855579 41.3032354 22.9965957 36.4615385 23zM36.4615385 8.58764124C34.1590485 8.58514416 32.0818832 9.96558568 31.1990219 12.085002 30.3161605 14.2044183 30.8015567 16.6452127 32.4287774 18.268776 34.0559981 19.8923393 36.5044257 20.3787746 38.6318903 19.5011641 40.759355 18.6235536 42.146674 16.5548164 42.1466754 14.26 42.1466772 11.1296516 39.6023544 8.5910475 36.4615385 8.58764124zM75.2307692 23C70.3876568 23 66.4615385 19.0869687 66.4615385 14.26 66.4615385 9.43303129 70.3876568 5.52 75.2307692 5.52 80.0738817 5.52 84 9.43303129 84 14.26 83.9931779 19.0841495 80.071053 22.9932006 75.2307692 23zM75.2307692 8.58764124C72.9282793 8.58514416 70.851114 9.96558568 69.9682526 12.085002 69.0853913 14.2044183 69.5707875 16.6452127 71.1980082 18.268776 72.8252289 19.8923393 75.2736565 20.3787746 77.4011211 19.5011641 79.5285857 18.6235536 80.9159048 16.5548164 80.9159061 14.26 80.9125011 11.1310581 78.3701703 8.59444145 75.2307692 8.58764124zM114.916884 23C110.074579 22.9965917 106.151568 19.082052 106.153847 14.2558869 106.156127 9.42972191 110.082834 5.51886495 114.92514 5.52000025 119.767446 5.52113555 123.692306 9.43383334 123.692308 14.2599989 123.688889 19.0879665 119.760999 23.0000012 114.916884 23zM114.916884 8.58763945C112.614956 8.58763945 110.539691 9.96966546 109.658781 12.0892809 108.777871 14.2088964 109.264797 16.6486793 110.892506 18.2709628 112.520215 19.8932462 114.968157 20.3785492 117.094862 19.5005757 119.221566 18.6226023 120.608214 16.5542542 120.608214 14.2599989 120.608214 11.1272413 118.060119 8.58763945 114.916884 8.58763945zM55.8492514 23C51.0044283 23 47.0769231 18.8810197 47.0769231 13.8 47.0769231 8.7189803 51.0044283 4.6 55.8492514 4.6 56.8766002 4.5965405 57.8962614 4.78577094 58.8600929 5.15875706 59.4051364 5.33485793 59.8130608 5.81197803 59.9207598 6.39934362 60.0284588 6.98670921 59.8183572 7.58846885 59.3744629 7.96401239 58.9305687 8.33955594 58.3253202 8.42759892 57.8007228 8.19293785 55.4709655 7.29069588 52.8523972 8.07824875 51.332652 10.1382557 49.8129068 12.1982627 49.7434905 15.0542594 51.1611883 17.1927933 52.5788861 19.3313273 55.1557949 20.2577715 57.5263569 19.4811837 59.8969188 18.7045959 61.5128404 16.4045952 61.517811 13.8L61.517811 1.62429379C61.517811.727221098 62.2112265 0 63.0665978 0 63.9219692 0 64.6153846.727221098 64.6153846 1.62429379L64.6153846 13.8C64.6119731 18.877001 60.690239 22.9928354 55.8492514 23zM1.60193429 22.9999875C1.17655379 23.0016372.768099475 22.8401747.467307584 22.5514683.166515693 22.2627618-.00170568823 21.8707187.0000130419293 21.4624295L.0000130419293 11.3540664C-.00197082639 8.50221341 1.86380136 5.95694981 4.66108711 4.99548616 7.45837285 4.03402251 10.583378 4.86389073 12.4679784 7.06866384 14.3583384 4.88137793 17.47279 4.06353266 20.2599678 5.02251172 23.0471455 5.98149079 24.9109863 8.51220784 24.9230769 11.3540664L24.9230769 21.4006802C24.9230769 22.2532603 24.202992 22.9444131 23.3147223 22.9444131 22.4264525 22.9444131 21.7063676 22.2532603 21.7063676 21.4006802L21.7063676 11.3540664C21.4804587 9.48564675 19.8317477 8.07620561 17.8720501 8.07620561 15.9123524 8.07620561 14.2636415 9.48564675 14.0377326 11.3540664 14.0377326 12.2066465 13.3176476 12.8977993 12.4293779 12.8977993 11.5411081 12.8977993 10.8210232 12.2066465 10.8210232 11.3540664 11.0034574 9.93240119 10.3157373 8.53716424 9.05485875 7.77089671 7.7939802 7.00462918 6.18586463 7.00462918 4.92498608 7.77089671 3.66410753 8.53716424 2.97638739 9.93240119 3.1588216 11.3540664L3.1588216 21.4624295C3.15916444 22.2950016 2.46901563 22.9765819 1.60193429 22.9999875z"/>
<path d="M12.9156923 22.9998804C11.9001681 22.9998804 11.0769231 22.2748918 11.0769231 21.3805731L11.0769231 10.8258106C11.0769231 9.9279002 11.9034743 9.2 12.9230769 9.2 13.9426795 9.2 14.7692308 9.9279002 14.7692308 10.8258106L14.7692308 21.406586C14.7633906 21.8343382 14.564818 22.2425241 14.2172043 22.5413315 13.8695906 22.8401388 13.4014162 23.0050861 12.9156923 22.9998804zM95.5446545 23C90.7019524 22.9964221 86.7760599 18.8805854 86.7692308 13.8L86.7692308 1.62429379C86.7692308.727221098 87.4624014 0 88.3174707 0 89.1725399 0 89.8657106.727221098 89.8657106 1.62429379L89.8657106 13.8C89.868798 16.4082726 91.4852597 18.7126023 93.8580458 19.4912311 96.2308319 20.2698598 98.8107647 19.3425752 100.229961 17.2010245 101.649157 15.0594737 101.579147 12.1993156 100.057048 10.1370089 98.5349498 8.07470227 95.9130515 7.28756489 93.5814863 8.19293785 92.7974423 8.44634809 91.9615409 8.01134264 91.679451 7.20311338 91.3973611 6.39488412 91.7678578 5.49643578 92.5224902 5.15875706 93.4879673 4.78514308 94.5094074 4.59590492 95.5384615 4.6 100.381574 4.6 104.307692 8.7189803 104.307692 13.8 104.307692 18.8810197 100.381574 23 95.5384615 23L95.5446545 23zM142.445556 22.9993388C141.593908 22.9993388 140.903511 22.3112896 140.903511 21.4625378L140.903511 14.2599403C140.901244 11.7851712 139.287553 9.59820438 136.917889 8.85839914 134.548226 8.11859391 131.970942 8.99714448 130.552311 11.0283119 129.133681 13.0594793 129.201983 15.7732422 130.721008 17.7309752 132.240032 19.6887083 134.858272 20.4373832 137.187739 19.5801109 137.708256 19.3810598 138.296049 19.4775172 138.725046 19.8323847 139.154043 20.1872523 139.35743 20.74526 139.256982 21.2917934 139.156534 21.8383268 138.767896 22.2882643 138.240541 22.4685562 134.644788 23.7780393 130.612248 22.6115365 128.278807 19.586901 125.945366 16.5622654 125.850397 12.3786386 128.044202 9.25193189 130.238007 6.12522521 134.213489 4.77817384 137.864984 5.92426076 141.516478 7.07034769 143.999946 10.4446561 143.999987 14.2599403L143.999987 21.4625378C144.001677 21.8727833 143.838048 22.2665335 143.545807 22.5554607 143.253565 22.8443878 142.857175 23.004305 142.445556 22.9993388z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB