@silexlabs/silex-dashboard 1.0.40 → 1.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitmodules +2 -2
- package/11ty/eleventy.config.mjs +62 -0
- package/README.md +8 -2
- package/collections/connectors/en.md +70 -0
- package/collections/connectors/fr.md +72 -0
- package/collections/home/en.md +57 -0
- package/{pages/fr/index.md → collections/home/fr.md} +20 -21
- package/collections/languages/en.json +5 -0
- package/collections/languages/fr.json +5 -0
- package/collections/settings/en.json +127 -0
- package/collections/settings/fr.json +131 -0
- package/package.json +17 -8
- package/silex/client-config.js +24 -0
- package/{.silex.js → silex/server-config.js} +8 -16
- package/templates/connectors-en.11tydata.mjs +56 -0
- package/templates/connectors-en.html +440 -0
- package/templates/connectors-fr.11tydata.mjs +56 -0
- package/templates/connectors-fr.html +440 -0
- package/templates/css/connectors-61bd21c2345101e48cc530cacf3afc0156ce7e089fcef3a34f853a537f0c55f2.css +1 -0
- package/templates/css/websites-4b9b2b0a0a907b33eca109d50c2a3eee97f1955c742cef487110d21a0bbf8f50.css +1 -0
- package/templates/websites-en.11tydata.mjs +108 -0
- package/templates/websites-en.html +478 -0
- package/templates/websites-fr.11tydata.mjs +108 -0
- package/templates/websites-fr.html +478 -0
- package/tina/config.ts +258 -0
- package/tina/tina-lock.json +1 -0
- package/.eleventy.js +0 -11
- package/.silex-client.js +0 -22
- package/_data/languages.json +0 -7
- package/_includes/api-connectors.js.html +0 -96
- package/_includes/api-websites.js.html +0 -189
- package/_includes/connectors.html +0 -253
- package/_includes/websites.html +0 -548
- package/_silex/old/assets/alex-hoyau.jpg +0 -0
- package/_silex/old/assets/alex-small.jpg +0 -0
- package/_silex/old/assets/empty-projects.gif +0 -0
- package/_silex/old/assets/gitlab.svg +0 -13
- package/_silex/old/assets/picto-silex.png +0 -0
- package/_silex/old/assets/silex-icon-2018@200px.png +0 -0
- package/_silex/old/meta.json +0 -1
- package/_silex/old/website.json +0 -1
- package/_site/assets/alex-small.jpg +0 -0
- package/_site/assets/bg-purpel-silex.webp +0 -0
- package/_site/assets/bg-silex-purpel.webp +0 -0
- package/_site/assets/empty-projects-sos.gif +0 -0
- package/_site/assets/gitlab.svg +0 -13
- package/_site/assets/logo-silex.svg +0 -1
- package/_site/assets/picto-silex@3x.png +0 -0
- package/_site/assets/silex-dashboard.png +0 -0
- package/_site/assets/silex-icon-2018@200px.png +0 -0
- package/_site/css/connectors.css +0 -1
- package/_site/css/websites.css +0 -1
- package/_site/en/connectors/index.html +0 -376
- package/_site/en/index.html +0 -795
- package/_site/fr/connectors/index.html +0 -376
- package/_site/fr/index.html +0 -795
- package/assets/alex-small.jpg +0 -0
- package/assets/bg-purpel-silex.webp +0 -0
- package/assets/bg-silex-purpel.webp +0 -0
- package/assets/empty-projects-sos.gif +0 -0
- package/assets/favicon-32x32.png +0 -0
- package/assets/gitlab.svg +0 -13
- package/assets/logo-silex.svg +0 -1
- package/assets/picto-silex@3x.png +0 -0
- package/assets/silex-dashboard.png +0 -0
- package/assets/silex-icon-2018@200px.png +0 -0
- package/pages/connectors.css.liquid +0 -4
- package/pages/en/connectors.md +0 -4
- package/pages/en/en.json +0 -72
- package/pages/en/index.md +0 -28
- package/pages/fr/connectors.md +0 -5
- package/pages/fr/fr.json +0 -72
- package/pages/pages.11tydata.js +0 -5
- package/pages/websites.css.liquid +0 -4
- /package/{_data → 11ty/_data}/api-translations.json +0 -0
- /package/{_data → 11ty/_data}/site.js +0 -0
- /package/{_includes → 11ty/_includes}/alternate.liquid +0 -0
- /package/{_silex/old → templates}/assets/bg-purpel-silex.webp +0 -0
- /package/{_silex/old → templates}/assets/bg-silex-purpel.webp +0 -0
- /package/{_silex/old → templates}/assets/empty-projects-sos.gif +0 -0
- /package/{_site → templates}/assets/favicon-32x32.png +0 -0
- /package/{_silex/old → templates}/assets/logo-silex.svg +0 -0
- /package/{_silex/old → templates}/assets/picto-silex@3x.png +0 -0
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
<script src="/js/vue.global.js"></script>
|
|
2
|
-
<script src="/js/main.js"></script>
|
|
3
|
-
<script type="module">
|
|
4
|
-
window.addEventListener('load', function() {
|
|
5
|
-
const { createApp } = Vue;
|
|
6
|
-
const { api, constants, types } = silex;
|
|
7
|
-
const {
|
|
8
|
-
ConnectorType,
|
|
9
|
-
} = types
|
|
10
|
-
const {
|
|
11
|
-
setServerUrl,
|
|
12
|
-
connectorList,
|
|
13
|
-
logout,
|
|
14
|
-
} = api
|
|
15
|
-
|
|
16
|
-
const App = {
|
|
17
|
-
data() {
|
|
18
|
-
return {
|
|
19
|
-
connectors: [],
|
|
20
|
-
error: null,
|
|
21
|
-
message: null,
|
|
22
|
-
loading: true,
|
|
23
|
-
lastConnector: null,
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
mounted() {
|
|
27
|
-
this.init()
|
|
28
|
-
window.addEventListener('message', (event) => {
|
|
29
|
-
if(event.data && event.data.type === 'login') {
|
|
30
|
-
this.loginResult(event.data)
|
|
31
|
-
}
|
|
32
|
-
})
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
methods: {
|
|
36
|
-
async init() {
|
|
37
|
-
try {
|
|
38
|
-
// Init Silex server path
|
|
39
|
-
// Go up 2 levels because of the language prefix + the page path
|
|
40
|
-
setServerUrl((window.location.origin + window.location.pathname.replace(/\/$/, '')).replace(/\/[^/]+\/[^/]+$/, ''))
|
|
41
|
-
// Start
|
|
42
|
-
this.loading = true
|
|
43
|
-
console.log('init')
|
|
44
|
-
this.connectors = await connectorList({type: ConnectorType.STORAGE})
|
|
45
|
-
console.log('connectors', this.connectors)
|
|
46
|
-
this.loading = false
|
|
47
|
-
} catch (error) {
|
|
48
|
-
console.error(error)
|
|
49
|
-
this.error = error
|
|
50
|
-
this.loading = false
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
openLogin(connector) {
|
|
54
|
-
this.lastConnector = connector
|
|
55
|
-
const nonOAuthUrl = `${constants.API_PATH}${constants.API_CONNECTOR_PATH}${constants.API_CONNECTOR_LOGIN}?connectorId=${connector.connectorId}&type=${connector.type}`
|
|
56
|
-
console.log('openLogin', connector.oauthUrl, nonOAuthUrl)
|
|
57
|
-
window.open(connector.oauthUrl || nonOAuthUrl, '_blank')
|
|
58
|
-
},
|
|
59
|
-
loginResult(data) {
|
|
60
|
-
console.log('loginResult', data)
|
|
61
|
-
if(data.error) {
|
|
62
|
-
this.error = data.error
|
|
63
|
-
this.message = `{{ api-translations[lang]["Login failed"] }} ${data.message}`
|
|
64
|
-
} else {
|
|
65
|
-
window.location.href = '/'
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
async logout() {
|
|
69
|
-
try {
|
|
70
|
-
this.message = '{{ api-translations[lang]["Logging out"] }}'
|
|
71
|
-
await logout({type: ConnectorType.STORAGE, connectorId: this.lastConnector.connectorId})
|
|
72
|
-
this.loggedIn = false
|
|
73
|
-
this.user = null
|
|
74
|
-
this.websites = []
|
|
75
|
-
this.loading = false
|
|
76
|
-
this.message = ''
|
|
77
|
-
this.error = false
|
|
78
|
-
} catch (error) {
|
|
79
|
-
console.error(error)
|
|
80
|
-
this.error = error
|
|
81
|
-
this.message = error.message
|
|
82
|
-
this.loading = false
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
// Start vue app
|
|
89
|
-
createApp(App).mount('.app');
|
|
90
|
-
|
|
91
|
-
// Remove loading
|
|
92
|
-
setTimeout(() => {
|
|
93
|
-
document.querySelector('.before-js').classList.add('after-js')
|
|
94
|
-
}, 100)
|
|
95
|
-
})
|
|
96
|
-
</script>
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
<script src="/js/vue.global.js"></script>
|
|
2
|
-
<script src="/js/main.js"></script>
|
|
3
|
-
<script type="module">
|
|
4
|
-
const CONNECTORS_PATH = '/connectors/'
|
|
5
|
-
window.addEventListener('load', function() {
|
|
6
|
-
const { createApp } = Vue;
|
|
7
|
-
const { api, constants, types } = silex;
|
|
8
|
-
const {
|
|
9
|
-
ConnectorType,
|
|
10
|
-
} = types
|
|
11
|
-
const {
|
|
12
|
-
setServerUrl,
|
|
13
|
-
getUser,
|
|
14
|
-
logout,
|
|
15
|
-
websiteDelete,
|
|
16
|
-
websiteDuplicate,
|
|
17
|
-
websiteList,
|
|
18
|
-
websiteCreate,
|
|
19
|
-
websiteMetaWrite,
|
|
20
|
-
} = api
|
|
21
|
-
function toSafeId(name) {
|
|
22
|
-
return name.replace(/[/\\?%*:|"<>]/g, '_')
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const App = {
|
|
26
|
-
data() {
|
|
27
|
-
return {
|
|
28
|
-
websites: [],
|
|
29
|
-
newWebsiteName: '',
|
|
30
|
-
showCreationForm: false,
|
|
31
|
-
error: null,
|
|
32
|
-
message: null,
|
|
33
|
-
loggedIn: false,
|
|
34
|
-
loading: true,
|
|
35
|
-
storage: null,
|
|
36
|
-
user: null,
|
|
37
|
-
showMenu: false,
|
|
38
|
-
empty: false,
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
mounted() {
|
|
42
|
-
this.init()
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
methods: {
|
|
46
|
-
async init() {
|
|
47
|
-
try {
|
|
48
|
-
// Init Silex server path
|
|
49
|
-
// Go up one level because of the language prefix
|
|
50
|
-
setServerUrl((window.location.origin + window.location.pathname.replace(/\/$/, '')).replace(/\/[^/]+$/, ''))
|
|
51
|
-
// Start
|
|
52
|
-
const user = await getUser({type: ConnectorType.STORAGE})
|
|
53
|
-
if(user) {
|
|
54
|
-
this.user = user
|
|
55
|
-
this.loggedIn = true
|
|
56
|
-
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
57
|
-
this.empty = this.websites.length === 0
|
|
58
|
-
this.loading = false
|
|
59
|
-
} else {
|
|
60
|
-
this.openLogin()
|
|
61
|
-
}
|
|
62
|
-
} catch (error) {
|
|
63
|
-
console.error(error)
|
|
64
|
-
this.loading = false
|
|
65
|
-
if(error.code === 401 || error.httpStatusCode === 401) {
|
|
66
|
-
this.loggedIn = false
|
|
67
|
-
this.openLogin()
|
|
68
|
-
} else {
|
|
69
|
-
this.error = `{{ api-translations[lang]["Failed to start dashboard"] }} - ${error.message}`
|
|
70
|
-
this.message = ''
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
openLogin(id, lang) {
|
|
76
|
-
//throw new Error('debug')
|
|
77
|
-
const path = `/{{lang}}${CONNECTORS_PATH}`
|
|
78
|
-
console.log(window.location.pathname, window.location.path, path)
|
|
79
|
-
if(window.location.pathname === path) return
|
|
80
|
-
window.open(path, '_self')
|
|
81
|
-
},
|
|
82
|
-
|
|
83
|
-
openEditor(id, lang) {
|
|
84
|
-
window.open(`/?id=${id}&lang=${lang}&connectorId=${this.user.storage.connectorId}`, '_self')
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
async logout() {
|
|
88
|
-
await logout({
|
|
89
|
-
type: ConnectorType.STORAGE,
|
|
90
|
-
connectorId: this.user.storage.connectorId,
|
|
91
|
-
})
|
|
92
|
-
window.location.reload()
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
async createWebsite() {
|
|
96
|
-
try {
|
|
97
|
-
if (!this.newWebsiteName) throw new Error('{{ api-translations[lang]["You need to provide a website name"] }}')
|
|
98
|
-
this.loading = true
|
|
99
|
-
const websiteId = toSafeId(this.newWebsiteName)
|
|
100
|
-
const result = await websiteCreate({
|
|
101
|
-
websiteId,
|
|
102
|
-
data: {
|
|
103
|
-
name: this.newWebsiteName,
|
|
104
|
-
imageUrl: null,
|
|
105
|
-
},
|
|
106
|
-
connectorId: this.user.storage.connectorId
|
|
107
|
-
})
|
|
108
|
-
this.message = '{{ api-translations[lang]["Website created successfully"] }}'
|
|
109
|
-
this.error = ''
|
|
110
|
-
this.newWebsiteName = ''
|
|
111
|
-
this.showCreationForm = false;
|
|
112
|
-
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
113
|
-
this.empty = this.websites.length === 0
|
|
114
|
-
this.loading = false
|
|
115
|
-
return result
|
|
116
|
-
} catch (error) {
|
|
117
|
-
this.loading = false
|
|
118
|
-
console.error(error)
|
|
119
|
-
this.error = `{{ api-translations[lang]["Failed to create website"] }} - ${error.message}`
|
|
120
|
-
this.message = ''
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
|
|
124
|
-
async deleteWebsite(websiteId) {
|
|
125
|
-
const ok = confirm('{{ api-translations[lang]["Deleting a website? Are your sure? Really?"] }}')
|
|
126
|
-
if (!ok) return
|
|
127
|
-
this.loading = true
|
|
128
|
-
try {
|
|
129
|
-
const result = await websiteDelete({websiteId, connectorId: this.user.storage.connectorId})
|
|
130
|
-
this.message = '{{ api-translations[lang]["Website deleted successfully"] }}'
|
|
131
|
-
this.error = ''
|
|
132
|
-
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
133
|
-
this.empty = this.websites.length === 0
|
|
134
|
-
this.loading = false
|
|
135
|
-
return result
|
|
136
|
-
} catch (error) {
|
|
137
|
-
this.loading = false
|
|
138
|
-
this.error = `{{ api-translations[lang]["Failed to delete website"] }} - ${error.message}`
|
|
139
|
-
this.message = ''
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
async duplicateWebsite(websiteId) {
|
|
144
|
-
this.loading = true
|
|
145
|
-
try {
|
|
146
|
-
await websiteDuplicate({websiteId, connectorId: this.user.storage.connectorId, data: { name }})
|
|
147
|
-
this.error = ''
|
|
148
|
-
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
149
|
-
this.message = '{{ api-translations[lang]["Website duplicated successfully"] }}'
|
|
150
|
-
this.empty = this.websites.length === 0
|
|
151
|
-
this.loading = false
|
|
152
|
-
} catch (error) {
|
|
153
|
-
this.loading = false
|
|
154
|
-
this.error = `{{ api-translations[lang]["Failed to duplicate website"] }} - ${error.message}`
|
|
155
|
-
this.message = ''
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
|
|
159
|
-
async renameWebsite(websiteId) {
|
|
160
|
-
const website = this.websites.find(w => w.websiteId === websiteId)
|
|
161
|
-
const name = prompt('{{ api-translations[lang]["New name for this website"] }}', website.name)
|
|
162
|
-
if (!name) return
|
|
163
|
-
this.loading = true
|
|
164
|
-
try {
|
|
165
|
-
const result = await websiteMetaWrite({websiteId, connectorId: this.user.storage.connectorId, data: { name }})
|
|
166
|
-
this.message = '{{ api-translations[lang]["Website renamed successfully"] }}'
|
|
167
|
-
this.error = ''
|
|
168
|
-
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
169
|
-
this.empty = this.websites.length === 0
|
|
170
|
-
this.loading = false
|
|
171
|
-
return result
|
|
172
|
-
} catch (error) {
|
|
173
|
-
this.loading = false
|
|
174
|
-
this.error = `{{ api-translations[lang]["Failed to rename website"] }} - ${error.message}`
|
|
175
|
-
this.message = ''
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
// Start vue app
|
|
182
|
-
createApp(App).mount('.app');
|
|
183
|
-
|
|
184
|
-
// Remove loading
|
|
185
|
-
setTimeout(() => {
|
|
186
|
-
document.querySelector('.before-js').classList.add('after-js')
|
|
187
|
-
}, 100)
|
|
188
|
-
})
|
|
189
|
-
</script>
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="">
|
|
3
|
-
<head>
|
|
4
|
-
<link rel="stylesheet" href="/css/connectors.css" />
|
|
5
|
-
<!-- font google -->
|
|
6
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" />
|
|
7
|
-
<link href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;700&display=swap" rel="stylesheet">
|
|
8
|
-
{% render "alternate.liquid" languages: languages lang: lang page: page %}
|
|
9
|
-
<style>
|
|
10
|
-
.before-js > * {
|
|
11
|
-
visibility: hidden;
|
|
12
|
-
opacity: 0;
|
|
13
|
-
transition: opacity .5s ease;
|
|
14
|
-
}
|
|
15
|
-
.after-js > * {
|
|
16
|
-
visibility: visible;
|
|
17
|
-
opacity: 1;
|
|
18
|
-
}
|
|
19
|
-
.before-js:before {
|
|
20
|
-
content: 'Loading';
|
|
21
|
-
position: absolute;
|
|
22
|
-
top: 49%;
|
|
23
|
-
left: 49%;
|
|
24
|
-
}
|
|
25
|
-
.after-js:before {
|
|
26
|
-
content: none;
|
|
27
|
-
}
|
|
28
|
-
/*BTNS*/
|
|
29
|
-
.button, .pointer {
|
|
30
|
-
cursor: pointer!important}
|
|
31
|
-
.button{
|
|
32
|
-
min-width:110px;
|
|
33
|
-
}
|
|
34
|
-
/*BTNS*/
|
|
35
|
-
a {
|
|
36
|
-
text-decoration: none;
|
|
37
|
-
color:#8873FE;
|
|
38
|
-
}
|
|
39
|
-
a:hover {
|
|
40
|
-
text-decoration: underline;
|
|
41
|
-
}
|
|
42
|
-
.uppercase {
|
|
43
|
-
text-transform: uppercase;
|
|
44
|
-
}
|
|
45
|
-
.underline:hover{
|
|
46
|
-
text-decoration: underline;
|
|
47
|
-
text-decoration-thickness: from-font;
|
|
48
|
-
text-underline-position: under;
|
|
49
|
-
}
|
|
50
|
-
/*footer position*/
|
|
51
|
-
.main-min-height {
|
|
52
|
-
min-height: calc(100vh - 560px);
|
|
53
|
-
}
|
|
54
|
-
/*footer position*/
|
|
55
|
-
/*label*/
|
|
56
|
-
::placeholder {
|
|
57
|
-
color: #8873FE;
|
|
58
|
-
}
|
|
59
|
-
input:focus {
|
|
60
|
-
border: 2px solid ##9977FE;
|
|
61
|
-
background-color:#ffffff;
|
|
62
|
-
}
|
|
63
|
-
:focus {
|
|
64
|
-
outline: none;
|
|
65
|
-
}
|
|
66
|
-
/*label*/
|
|
67
|
-
.skeleton-anim:after {
|
|
68
|
-
width: 100%;
|
|
69
|
-
height: 100%;
|
|
70
|
-
position: absolute;
|
|
71
|
-
top: 0;
|
|
72
|
-
left: 0;
|
|
73
|
-
content: "";
|
|
74
|
-
background:
|
|
75
|
-
linear-gradient(0.25turn, transparent, rgba(255,255,255,.75), transparent),
|
|
76
|
-
linear-gradient(transparent, transparent),
|
|
77
|
-
radial-gradient(38px circle at 19px 19px, transparent 50%, transparent 51%),
|
|
78
|
-
linear-gradient(transparent, transparent);
|
|
79
|
-
background-repeat: no-repeat;
|
|
80
|
-
background-size: 315px 250px, 315px 180px, 100px 100px, 225px 30px;
|
|
81
|
-
background-position: -315px 0, 0 0, 0px 190px, 50px 195px;
|
|
82
|
-
animation: loading 1.5s infinite;
|
|
83
|
-
}
|
|
84
|
-
@keyframes loading {
|
|
85
|
-
to {
|
|
86
|
-
background-position: 200% 0, 0 0, 0 190px, 50px 195px;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/*FX ANIMATIONS*/
|
|
90
|
-
/*scale-round-inside_pour-BTN*/
|
|
91
|
-
.fx-scale-round {
|
|
92
|
-
position:relative;
|
|
93
|
-
z-index: 10;
|
|
94
|
-
overflow: hidden;
|
|
95
|
-
}
|
|
96
|
-
.fx-scale-round::after {
|
|
97
|
-
content: "";
|
|
98
|
-
background: #ffffff;
|
|
99
|
-
position: absolute;
|
|
100
|
-
z-index: -1;
|
|
101
|
-
border-radius: 50%;
|
|
102
|
-
left: -50%;
|
|
103
|
-
right: -50%;
|
|
104
|
-
top: -100%;
|
|
105
|
-
bottom: -100%;
|
|
106
|
-
transform: scale(0, 0);
|
|
107
|
-
transform-origin: center bottom;
|
|
108
|
-
transition: all 0.3s ease-out;
|
|
109
|
-
}
|
|
110
|
-
.fx-scale-round:hover {
|
|
111
|
-
transform-origin: center bottom;
|
|
112
|
-
transform: scale(1.1);
|
|
113
|
-
transition: transform 0.2s cubic-bezier(0, -0.530, 0.405, 2.8);
|
|
114
|
-
}
|
|
115
|
-
.fx-scale-round:hover::after {
|
|
116
|
-
transform: scale(1, 1);
|
|
117
|
-
transition: transform 0.2s cubic-bezier(0, -0.530, 0.405, 2.8);
|
|
118
|
-
}
|
|
119
|
-
/*scale-round-inside_pour-BTN*/
|
|
120
|
-
/*scale*/
|
|
121
|
-
.fx-scale:hover {
|
|
122
|
-
transform-origin: center bottom;
|
|
123
|
-
transform: scale(1.1);
|
|
124
|
-
transition: transform 0.2s cubic-bezier(0, -0.530, 0.405, 2.8);
|
|
125
|
-
}
|
|
126
|
-
/*flash*/
|
|
127
|
-
.fx-flash:hover {
|
|
128
|
-
animation: flash-in .5s ;
|
|
129
|
-
}
|
|
130
|
-
/*flash-in animation*/
|
|
131
|
-
@keyframes flash-in{
|
|
132
|
-
0% {
|
|
133
|
-
opacity:0;
|
|
134
|
-
}
|
|
135
|
-
100% {
|
|
136
|
-
opacity:1;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/*flash-in animation*/
|
|
140
|
-
/*FX ANIMATIONS*/
|
|
141
|
-
</style>
|
|
142
|
-
{% render "api-connectors.js.html" frontmatter: frontmatter page: page site: site api-translations: api-translations lang: lang %}
|
|
143
|
-
|
|
144
|
-
<title>{{ title }}</title>
|
|
145
|
-
<link rel="icon" href="/assets/favicon-32x32.png" />
|
|
146
|
-
<meta name="description" property="description" content=""/>
|
|
147
|
-
<meta name="og:title" property="og:title" content=""/>
|
|
148
|
-
<meta name="og:description" property="og:description" content=""/>
|
|
149
|
-
<meta name="og:image" property="og:image" content=""/>
|
|
150
|
-
</head>
|
|
151
|
-
<body
|
|
152
|
-
id="i2hcfw"
|
|
153
|
-
class="body app"
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
><HEADER
|
|
157
|
-
id="ij139z"
|
|
158
|
-
class="menu-bar "
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
><A
|
|
162
|
-
href="/" id="iy54t1"
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
><img
|
|
167
|
-
src="/assets/picto-silex@3x.png"
|
|
168
|
-
class="nav__logo "
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
></img></A><NAV
|
|
172
|
-
id="in5jeq"
|
|
173
|
-
class="nav "
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
>{% for item in nav %}<A
|
|
177
|
-
href="{{ item.url }}" id="i0g3ac"
|
|
178
|
-
class="nav__item uppercase {% if forloop.index == 1 %}active{% endif %}"
|
|
179
|
-
target="{{ item.target }}"
|
|
180
|
-
|
|
181
|
-
>{{ item.label }}</A>{% endfor %}</NAV><div
|
|
182
|
-
|
|
183
|
-
class="lang h-space uppercase "
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
>{% assign links = languages %}
|
|
187
|
-
{%- for link in links %}<A
|
|
188
|
-
href="/{{ link.code }}"
|
|
189
|
-
class="lang__item nav__item {% if link.code == lang %}active{% endif %}"
|
|
190
|
-
hreflang="{{link.code}}"
|
|
191
|
-
|
|
192
|
-
>{{ link.code }}</A>{% endfor %}</div></HEADER><A
|
|
193
|
-
id="ixzhcr" href="/"
|
|
194
|
-
class="button button-bar__item--secondary "
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
>{{ api-translations[lang]["Back to home"] }}</A><div
|
|
198
|
-
id="imawg3"
|
|
199
|
-
class="bg-silex-purpel "
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
><div
|
|
203
|
-
id="imgx81"
|
|
204
|
-
class=" before-js"
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
><div
|
|
208
|
-
id="iikf0s"
|
|
209
|
-
class="box text-centered padding-100-30 box_login "
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
><H1
|
|
213
|
-
id="ighycb"
|
|
214
|
-
class="title-40 "
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
>{{ api-translations[lang]["Welcome to Silex"] }}</H1><div
|
|
218
|
-
id="it2175"
|
|
219
|
-
class="subtitle-16 "
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
>{{ api-translations[lang]["Please login to continue"] }}</div><div
|
|
223
|
-
id="in62y2"
|
|
224
|
-
class="button-bar "
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
><A
|
|
228
|
-
id="isqe61"
|
|
229
|
-
class="button big-button "
|
|
230
|
-
v-if="!loading" v-for="(connector, index) in connectors" :key="index" :style="{ backgroundColor: connector.background, color: connector.color }" @click="openLogin(connector)"
|
|
231
|
-
|
|
232
|
-
><div
|
|
233
|
-
id="io3lid"
|
|
234
|
-
class="button-bar__item__icon "
|
|
235
|
-
:style='`background: url("${connector.icon}"); background-repeat: no-repeat; background-size: contain;`'
|
|
236
|
-
|
|
237
|
-
></div><div
|
|
238
|
-
id="i87asw"
|
|
239
|
-
|
|
240
|
-
v-text="connector.displayName"
|
|
241
|
-
|
|
242
|
-
>Insert your text here</div></A></div></div><div
|
|
243
|
-
id="i9msnk"
|
|
244
|
-
class="text-white top-space-20 "
|
|
245
|
-
v-if="error" v-html="message"
|
|
246
|
-
|
|
247
|
-
>Insert your text here</div><div
|
|
248
|
-
id="i6akll"
|
|
249
|
-
class="button button--tertiary text-centered "
|
|
250
|
-
v-if="error" @click="logout()"
|
|
251
|
-
|
|
252
|
-
>{{ api-translations[lang]["Logout"] }}</div></div></div></body>
|
|
253
|
-
</html>
|