@silexlabs/silex-dashboard 1.0.44 → 1.0.46
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/_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/favicon-32x32.png +0 -0
- package/_site/assets/logo-silex.svg +1 -0
- package/_site/assets/picto-silex@3x.png +0 -0
- package/_site/css/connectors-61bd21c2345101e48cc530cacf3afc0156ce7e089fcef3a34f853a537f0c55f2.css +1 -0
- package/_site/css/websites-4b9b2b0a0a907b33eca109d50c2a3eee97f1955c742cef487110d21a0bbf8f50.css +1 -0
- package/_site/en/connectors/index.html +384 -0
- package/_site/en/index.html +384 -0
- package/_site/fr/connectors/index.html +384 -0
- package/_site/fr/index.html +384 -0
- package/_site/js/main.js +362 -0
- package/_site/js/main.js.LICENSE.txt +38 -0
- package/_site/js/vue.cjs.js +89 -0
- package/_site/js/vue.cjs.prod.js +75 -0
- package/_site/js/vue.d.mts +7 -0
- package/_site/js/vue.d.ts +7 -0
- package/_site/js/vue.esm-browser.js +16744 -0
- package/_site/js/vue.esm-browser.prod.js +12 -0
- package/_site/js/vue.esm-bundler.js +80 -0
- package/_site/js/vue.global.js +16729 -0
- package/_site/js/vue.global.prod.js +12 -0
- package/_site/js/vue.runtime.esm-browser.js +11158 -0
- package/_site/js/vue.runtime.esm-browser.prod.js +12 -0
- package/_site/js/vue.runtime.esm-bundler.js +26 -0
- package/_site/js/vue.runtime.global.js +11305 -0
- package/_site/js/vue.runtime.global.prod.js +12 -0
- package/collections/connectors/en.md +16 -34
- package/collections/connectors/fr.md +16 -34
- package/package.json +1 -1
- package/silex/server-config.js +0 -2
- package/templates/connectors-en.html +49 -51
- package/templates/connectors-fr.html +49 -51
- package/templates/websites-en.html +79 -79
- package/templates/websites-fr.html +79 -79
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<link rel="stylesheet" href="/css/websites-4b9b2b0a0a907b33eca109d50c2a3eee97f1955c742cef487110d21a0bbf8f50.css" />
|
|
6
|
+
<!-- font google -->
|
|
7
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" />
|
|
8
|
+
<link href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;700&display=swap" rel="stylesheet">
|
|
9
|
+
|
|
10
|
+
<style>
|
|
11
|
+
.before-js > * {
|
|
12
|
+
visibility: hidden;
|
|
13
|
+
opacity: 0;
|
|
14
|
+
transition: opacity .5s ease;
|
|
15
|
+
}
|
|
16
|
+
.before-js[data-gjs-type] > *, /* This is only inside the editor, .before-js needs to be on the body */
|
|
17
|
+
.after-js > * {
|
|
18
|
+
visibility: visible;
|
|
19
|
+
opacity: 1;
|
|
20
|
+
}
|
|
21
|
+
.before-js:before {
|
|
22
|
+
content: 'Loading';
|
|
23
|
+
position: absolute;
|
|
24
|
+
top: 49%;
|
|
25
|
+
left: 49%;
|
|
26
|
+
}
|
|
27
|
+
.before-js[data-gjs-type]:before, /* This is only inside the editor, .before-js needs to be on the body */
|
|
28
|
+
.after-js:before {
|
|
29
|
+
content: none;
|
|
30
|
+
}
|
|
31
|
+
/*BTNS*/
|
|
32
|
+
.button, .pointer {
|
|
33
|
+
cursor: pointer!important}
|
|
34
|
+
.button{
|
|
35
|
+
min-width:110px;
|
|
36
|
+
}
|
|
37
|
+
/*BTNS*/
|
|
38
|
+
a {
|
|
39
|
+
text-decoration: none;
|
|
40
|
+
color:#8873FE;
|
|
41
|
+
}
|
|
42
|
+
a:hover {
|
|
43
|
+
text-decoration: underline;
|
|
44
|
+
}
|
|
45
|
+
.uppercase {
|
|
46
|
+
text-transform: uppercase;
|
|
47
|
+
}
|
|
48
|
+
.underline:hover{
|
|
49
|
+
text-decoration: underline;
|
|
50
|
+
text-decoration-thickness: from-font;
|
|
51
|
+
text-underline-position: under;
|
|
52
|
+
}
|
|
53
|
+
/*footer position*/
|
|
54
|
+
.main-min-height {
|
|
55
|
+
min-height: calc(100vh - 560px);
|
|
56
|
+
}
|
|
57
|
+
/*footer position*/
|
|
58
|
+
/*label*/
|
|
59
|
+
::placeholder {
|
|
60
|
+
color: #8873FE;
|
|
61
|
+
}
|
|
62
|
+
input:focus {
|
|
63
|
+
border: 2px solid #9977FE;
|
|
64
|
+
background-color:#ffffff;
|
|
65
|
+
}
|
|
66
|
+
:focus {
|
|
67
|
+
outline: none;
|
|
68
|
+
}
|
|
69
|
+
/*label*/
|
|
70
|
+
.skeleton-anim:after {
|
|
71
|
+
width: 100%;
|
|
72
|
+
height: 100%;
|
|
73
|
+
position: absolute;
|
|
74
|
+
top: 0;
|
|
75
|
+
left: 0;
|
|
76
|
+
content: "";
|
|
77
|
+
background:
|
|
78
|
+
linear-gradient(0.25turn, transparent, rgba(255,255,255,.75), transparent),
|
|
79
|
+
linear-gradient(transparent, transparent),
|
|
80
|
+
radial-gradient(38px circle at 19px 19px, transparent 50%, transparent 51%),
|
|
81
|
+
linear-gradient(transparent, transparent);
|
|
82
|
+
background-repeat: no-repeat;
|
|
83
|
+
background-size: 315px 250px, 315px 180px, 100px 100px, 225px 30px;
|
|
84
|
+
background-position: -315px 0, 0 0, 0px 190px, 50px 195px;
|
|
85
|
+
animation: loading 1.5s infinite;
|
|
86
|
+
}
|
|
87
|
+
@keyframes loading {
|
|
88
|
+
to {
|
|
89
|
+
background-position: 200% 0, 0 0, 0 190px, 50px 195px;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/*FX ANIMATIONS*/
|
|
93
|
+
/*scale-round-inside_pour-BTN*/
|
|
94
|
+
.fx-scale-round {
|
|
95
|
+
position:relative;
|
|
96
|
+
z-index: 10;
|
|
97
|
+
overflow: hidden;
|
|
98
|
+
}
|
|
99
|
+
.fx-scale-round::after {
|
|
100
|
+
content: "";
|
|
101
|
+
background: #ffffff;
|
|
102
|
+
position: absolute;
|
|
103
|
+
z-index: -1;
|
|
104
|
+
border-radius: 50%;
|
|
105
|
+
left: -50%;
|
|
106
|
+
right: -50%;
|
|
107
|
+
top: -100%;
|
|
108
|
+
bottom: -100%;
|
|
109
|
+
transform: scale(0, 0);
|
|
110
|
+
transform-origin: center bottom;
|
|
111
|
+
transition: all 0.3s ease-out;
|
|
112
|
+
}
|
|
113
|
+
.fx-scale-round:hover {
|
|
114
|
+
transform-origin: center bottom;
|
|
115
|
+
transform: scale(1.1);
|
|
116
|
+
transition: transform 0.2s cubic-bezier(0, -0.530, 0.405, 2.8);
|
|
117
|
+
}
|
|
118
|
+
.fx-scale-round:hover::after {
|
|
119
|
+
transform: scale(1, 1);
|
|
120
|
+
transition: transform 0.2s cubic-bezier(0, -0.530, 0.405, 2.8);
|
|
121
|
+
}
|
|
122
|
+
/*scale-round-inside_pour-BTN*/
|
|
123
|
+
/*scale*/
|
|
124
|
+
.fx-scale:hover {
|
|
125
|
+
transform-origin: center bottom;
|
|
126
|
+
transform: scale(1.1);
|
|
127
|
+
transition: transform 0.2s cubic-bezier(0, -0.530, 0.405, 2.8);
|
|
128
|
+
}
|
|
129
|
+
/*flash*/
|
|
130
|
+
.fx-flash:hover {
|
|
131
|
+
animation: flash-in .25s ;
|
|
132
|
+
}
|
|
133
|
+
/*flash-in animation*/
|
|
134
|
+
@keyframes flash-in{
|
|
135
|
+
0% {
|
|
136
|
+
opacity:.25;
|
|
137
|
+
}
|
|
138
|
+
100% {
|
|
139
|
+
opacity:1;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/*flash-in animation*/
|
|
143
|
+
/*FX ANIMATIONS*/
|
|
144
|
+
</style>
|
|
145
|
+
<script src="/js/vue.global.prod.js"></script>
|
|
146
|
+
<script src="/js/main.js"></script>
|
|
147
|
+
<script type="module">
|
|
148
|
+
const CONNECTORS_PATH = '/connectors/'
|
|
149
|
+
window.addEventListener('load', function() {
|
|
150
|
+
const { createApp } = Vue;
|
|
151
|
+
const { api, constants, types } = silex;
|
|
152
|
+
const {
|
|
153
|
+
ConnectorType,
|
|
154
|
+
} = types
|
|
155
|
+
const {
|
|
156
|
+
setServerUrl,
|
|
157
|
+
getUser,
|
|
158
|
+
logout,
|
|
159
|
+
websiteDelete,
|
|
160
|
+
websiteDuplicate,
|
|
161
|
+
websiteList,
|
|
162
|
+
websiteCreate,
|
|
163
|
+
websiteMetaWrite,
|
|
164
|
+
} = api
|
|
165
|
+
function toSafeId(name) {
|
|
166
|
+
return name.replace(/[/\\?%*:|"<>]/g, '_')
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const App = {
|
|
170
|
+
data() {
|
|
171
|
+
return {
|
|
172
|
+
websites: [],
|
|
173
|
+
newWebsiteName: '',
|
|
174
|
+
showCreationForm: false,
|
|
175
|
+
error: null,
|
|
176
|
+
message: null,
|
|
177
|
+
loggedIn: false,
|
|
178
|
+
loading: true,
|
|
179
|
+
storage: null,
|
|
180
|
+
user: null,
|
|
181
|
+
showMenu: false,
|
|
182
|
+
empty: false,
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
mounted() {
|
|
186
|
+
this.init()
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
methods: {
|
|
190
|
+
async init() {
|
|
191
|
+
try {
|
|
192
|
+
// Init Silex server path
|
|
193
|
+
// Go up one level because of the language prefix
|
|
194
|
+
setServerUrl(window.location.origin)
|
|
195
|
+
// Start
|
|
196
|
+
const user = await getUser({type: ConnectorType.STORAGE})
|
|
197
|
+
// Escape single quotes in the picture URL and decode the picture URL
|
|
198
|
+
user.picture = decodeURIComponent(user.picture).replace(/'/g, "\\'")
|
|
199
|
+
if(user) {
|
|
200
|
+
this.user = user
|
|
201
|
+
this.loggedIn = true
|
|
202
|
+
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
203
|
+
this.empty = this.websites.length === 0
|
|
204
|
+
this.loading = false
|
|
205
|
+
} else {
|
|
206
|
+
this.openLogin()
|
|
207
|
+
}
|
|
208
|
+
} catch (error) {
|
|
209
|
+
console.error(error)
|
|
210
|
+
this.loading = false
|
|
211
|
+
if(error.code === 401 || error.httpStatusCode === 401) {
|
|
212
|
+
this.loggedIn = false
|
|
213
|
+
this.openLogin()
|
|
214
|
+
} else {
|
|
215
|
+
this.error = `Failed to start dashboard - ${error.message}`
|
|
216
|
+
this.message = ''
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
|
|
221
|
+
openLogin(id, lang) {
|
|
222
|
+
//throw new Error('debug')
|
|
223
|
+
const path = `/en${CONNECTORS_PATH}`
|
|
224
|
+
console.log(window.location.pathname, window.location.path, path)
|
|
225
|
+
if(window.location.pathname === path) return
|
|
226
|
+
window.open(path, '_self')
|
|
227
|
+
},
|
|
228
|
+
|
|
229
|
+
openEditor(id, lang) {
|
|
230
|
+
window.open(`/?id=${id}&lang=${lang}&connectorId=${this.user.storage.connectorId}`, '_self')
|
|
231
|
+
},
|
|
232
|
+
|
|
233
|
+
async logout() {
|
|
234
|
+
await logout({
|
|
235
|
+
type: ConnectorType.STORAGE,
|
|
236
|
+
connectorId: this.user.storage.connectorId,
|
|
237
|
+
})
|
|
238
|
+
window.location.reload()
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
async createWebsite() {
|
|
242
|
+
try {
|
|
243
|
+
if (!this.newWebsiteName) throw new Error('You need to provide a website name')
|
|
244
|
+
this.loading = true
|
|
245
|
+
const websiteId = toSafeId(this.newWebsiteName)
|
|
246
|
+
const result = await websiteCreate({
|
|
247
|
+
websiteId,
|
|
248
|
+
data: {
|
|
249
|
+
name: this.newWebsiteName,
|
|
250
|
+
imageUrl: null,
|
|
251
|
+
},
|
|
252
|
+
connectorId: this.user.storage.connectorId
|
|
253
|
+
})
|
|
254
|
+
this.message = 'Website created successfully'
|
|
255
|
+
this.error = ''
|
|
256
|
+
this.newWebsiteName = ''
|
|
257
|
+
this.showCreationForm = false;
|
|
258
|
+
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
259
|
+
this.empty = this.websites.length === 0
|
|
260
|
+
this.loading = false
|
|
261
|
+
return result
|
|
262
|
+
} catch (error) {
|
|
263
|
+
this.loading = false
|
|
264
|
+
console.error(error)
|
|
265
|
+
this.error = `Failed to create website - ${error.message}`
|
|
266
|
+
this.message = ''
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
|
|
270
|
+
async deleteWebsite(websiteId) {
|
|
271
|
+
const ok = confirm('Deleting a website? Are your sure? Really?')
|
|
272
|
+
if (!ok) return
|
|
273
|
+
this.loading = true
|
|
274
|
+
try {
|
|
275
|
+
const result = await websiteDelete({websiteId, connectorId: this.user.storage.connectorId})
|
|
276
|
+
this.message = 'Website deleted successfully'
|
|
277
|
+
this.error = ''
|
|
278
|
+
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
279
|
+
this.empty = this.websites.length === 0
|
|
280
|
+
this.loading = false
|
|
281
|
+
return result
|
|
282
|
+
} catch (error) {
|
|
283
|
+
this.loading = false
|
|
284
|
+
this.error = `Failed to delete website - ${error.message}`
|
|
285
|
+
this.message = ''
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
async duplicateWebsite(websiteId) {
|
|
290
|
+
this.loading = true
|
|
291
|
+
try {
|
|
292
|
+
await websiteDuplicate({websiteId, connectorId: this.user.storage.connectorId, data: { name }})
|
|
293
|
+
this.error = ''
|
|
294
|
+
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
295
|
+
this.message = 'Website duplicated successfully'
|
|
296
|
+
this.empty = this.websites.length === 0
|
|
297
|
+
this.loading = false
|
|
298
|
+
} catch (error) {
|
|
299
|
+
this.loading = false
|
|
300
|
+
this.error = `Failed to duplicate website - ${error.message}`
|
|
301
|
+
this.message = ''
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
|
|
305
|
+
async renameWebsite(websiteId) {
|
|
306
|
+
const website = this.websites.find(w => w.websiteId === websiteId)
|
|
307
|
+
const name = prompt('New name for this website', website.name)
|
|
308
|
+
if (!name) return
|
|
309
|
+
this.loading = true
|
|
310
|
+
try {
|
|
311
|
+
const result = await websiteMetaWrite({websiteId, connectorId: this.user.storage.connectorId, data: { name }})
|
|
312
|
+
this.message = 'Website renamed successfully'
|
|
313
|
+
this.error = ''
|
|
314
|
+
this.websites = await websiteList({connectorId: this.user.storage.connectorId})
|
|
315
|
+
this.empty = this.websites.length === 0
|
|
316
|
+
this.loading = false
|
|
317
|
+
return result
|
|
318
|
+
} catch (error) {
|
|
319
|
+
this.loading = false
|
|
320
|
+
this.error = `Failed to rename website - ${error.message}`
|
|
321
|
+
this.message = ''
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
};
|
|
326
|
+
// Prepare elements for vue
|
|
327
|
+
document.querySelectorAll('[v-text], [v-html]')
|
|
328
|
+
.forEach(el => el.innerText = '')
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
// Create the app
|
|
332
|
+
const app = createApp(App);
|
|
333
|
+
|
|
334
|
+
// Mount the app
|
|
335
|
+
app.mount('.app');
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
// Remove loading
|
|
339
|
+
setTimeout(() => {
|
|
340
|
+
document.querySelector('.before-js').classList.add('after-js')
|
|
341
|
+
}, 100)
|
|
342
|
+
})
|
|
343
|
+
</script>
|
|
344
|
+
|
|
345
|
+
<title></title>
|
|
346
|
+
<link rel="icon" href="/assets/favicon-32x32.png" />
|
|
347
|
+
<meta name="og:title" property="og:title" content="Silex Dashboard"/>
|
|
348
|
+
<link href="https://www.googleapis.com" rel="preconnect" ><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin ><link href="https://www.googleapis.com/css?family=Ubuntu&display=swap" rel="stylesheet" ></head>
|
|
349
|
+
|
|
350
|
+
<body id="ik0i" class="body loading app before-js"><HEADER id="igrg" class="menu-bar"><A id="igvu43" href="/"><img src="/assets/favicon-32x32.png" id="iel80b-2" class="nav__logo"/></A><NAV id="i9jq" class="nav">
|
|
351
|
+
|
|
352
|
+
<a id="iels" href="/" class="nav__item uppercase fx-flash nav_item--active" target="">Sites</a>
|
|
353
|
+
<a id="iels" href="http://docs.silex.me/" class="nav__item uppercase fx-flash nav_item--active" target="_blank">Docs</a>
|
|
354
|
+
<a id="iels" href="https://www.silex.me/" class="nav__item uppercase fx-flash nav_item--active" target="_blank">About</a>
|
|
355
|
+
<a id="iels" href="https://community.silex.me/" class="nav__item uppercase fx-flash nav_item--active" target="_blank">Community</a>
|
|
356
|
+
<a id="iels" href="https://mail-list.silexlabs.org/subscription/cemnfkaVrK?locale=en-US&source=silex-dashboard" class="nav__item uppercase fx-flash nav_item--active" target="_blank">News</a></NAV>
|
|
357
|
+
|
|
358
|
+
<div id="i2red7" class="lang"><a href="/en" id="iciz" class="lang__item nav__item uppercase">EN</a></div>
|
|
359
|
+
<div id="i2red7" class="lang"><a href="/fr" id="iciz" class="lang__item nav__item uppercase">FR</a></div><div id="i24ew" class="user__wrapper pointer" v-if="user" v-on:click="showMenu = !showMenu"><div id="i5xsbd" class="user-icon__wrapper" v-if="user" v-show="!showMenu || user.storage.disableLogout"><div id="i5wlbq" class="user-icon__image" v-if="user" v-show="!showMenu || user.storage.disableLogout" :style="{ backgroundImage: `url('${user?.picture}')`, backgroundRepeat: 'no-repeat', backgroundSize: 'contain', }"></div></div><div id="ic9eoa" class="" v-show="showMenu && !user.storage.disableLogout"><div id="iksw4d" class="button button--tertiary text-centered" v-on:click="logout()">Logout</div></div></div></HEADER><HEADER id="iy8ax3" class="bg-silex-purpel"><div id="iisz8f" class="section-top text-centered text-white"><h1 id="ic31o" class="title-40" v-if="!empty">Welcome back!</h1><p id="iyex8" class="subtitle-16" v-if="!empty">Dive into your projects or kickstart a new one</p><h1 id="i4ybc" class="title-40" v-if="empty">Welcome, let's get started</h1><p id="iino6r" class="subtitle-16" v-if="empty">Create your first project, click on "Create a website"</p></div></HEADER><MAIN id="iz63r" class="padding-normal main-min-height website-max-width margin-80"><section id="iqmx38" class="" v-if="empty"></section><div id="ickx4" class="margin-20" v-if="!empty"><button id="ic92g" class="button button--primary rounded top-space-40 fx-scale-round" v-if="!showCreationForm" v-on:click="showCreationForm = !showCreationForm"><span id="igsxoc" class="icon-font">+</span> <span id="ixu14" class="">Create website</span></button><div id="i0ro3" class="button button--secondary rounded">Import</div></div><div id="ihwwxz" class="box top-space-40 padding-30 box_transp" v-if="showCreationForm"><h3 id="i3gd1b" class="box__header text-centered">Create a new website</h3><form method="get" id="i50acf" class="form" v-on:submit.prevent="createWebsite"><div id="igtg1t" class="v-space"><label id="i1nmbc" class="v-space bold color-2B1B63-80">Website name</label><input type="text" id="ij5iwh" placeholder="My project website" class="input full-width" v-model="newWebsiteName"></input></div><div id="ie0xes"><button type="submit" id="i021na" class="button rounded button--primary right-space-20 fx-scale-round">Create</button><button type="reset" class="button rounded button--secondary fx-scale-round" v-on:click="showCreationForm = !showCreationForm" v-if="!empty">Cancel</button></div></form></div><div id="if80m" class="margin-20"><section id="idgvg" class="button-bar loaded__item" v-if="!loading" v-for="(website, index) in websites" :key="index"><h3 id="i69a7" class="right-space-40 color-2B1B63-80 uppercase pointer fx-flash full-width button-bar__title underline" v-on:click="openEditor(website.websiteId, 'en')" v-text="website.name || website.id">My first website</h3><p id="i65hn" class="button-bar__item--secondary flex-no-shrink right-space-40" v-text="'Updated ' + new Date(website.updatedAt).toLocaleDateString(undefined, { day: 'numeric', month: 'long', year: 'numeric' })">Updated 1h ago by lexoyo</p><p id="i64qa" class="button-bar__item--secondary flex-no-shrink right-space-40" v-text="'Created ' + new Date(website.createdAt).toLocaleDateString(undefined, { day: 'numeric', month: 'long', year: 'numeric' })">Created 2023-02-16 by lexoyo</p><div id="i3b4tr" class="flex-no-shrink"><button id="ifyf6p" title="Edit" class="button-bar__item--link pointer fx-scale fx-flash button-bar__item--icon" v-on:click="openEditor(website.websiteId, 'en')"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="#8873fe" d="M368 80h32v32H368V80zM352 32c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32V160c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H352zM96 160c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32V160zM48 400H80v32H48V400zm320 32V400h32v32H368zM48 112V80H80v32H48z"/></svg></button><button id="ihf6ew" title="Rename" class="button-bar__item--link pointer fx-scale fx-flash button-bar__item--icon" v-on:click="renameWebsite(website.websiteId, 'en')"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="#8873fe" d="M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"/></svg></button><button id="iol4h" title="Duplicate" class="button-bar__item--link pointer fx-flash fx-scale button-bar__item--icon" v-on:click="duplicateWebsite(website.websiteId, 'en')"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512"><path fill="#8873fe" d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/></svg></button><button id="it5ia" class="button-bar__item--link pointer fx-flash fx-scale" title="Delete" v-on:click="deleteWebsite(website.websiteId)">X</button></div></section><section id="i1fjn" class="button-bar loading__item skeleton-anim skeleton-wrapper" v-if="loading"><H3 id="iwu6a" class="skeleton-text skeleton right-space-40">My first websiteMy first websiteMy first websiteMy first</H3><P id="i26fn" class="button-bar__item--secondary skeleton-text skeleton right-space-40">Updated 1h ago by lexoyo</P><P id="iywbk" class="button-bar__item--secondary skeleton-text skeleton right-space-40">Created 2023-02-16 by lexoyo</P><div id="ixz6c" class="skeleton skeleton-button">Edit</div></section><section id="iwxxo5" class="button-bar loading__item skeleton-anim skeleton-wrapper" v-if="loading"><H3 id="inmp3" class="skeleton-text skeleton right-space-40">My first websiteMy first websiteMy first websiteMy first</H3><P id="icjz8" class="button-bar__item--secondary skeleton-text skeleton right-space-40">Updated 1h ago by lexoyo</P><P id="illbe" class="button-bar__item--secondary skeleton-text skeleton right-space-40">Created 2023-02-16 by lexoyo</P><div id="i9fx3l" class="skeleton skeleton-button">Edit</div></section><section id="isld3r" class="button-bar loading__item skeleton-anim skeleton-wrapper" v-if="loading"><H3 class="button-bar_item button-bar__item--main skeleton-text skeleton right-space-40">My first websiteMy first websiteMy first websiteMy first</H3><P class="button-bar_item button-bar__item--secondary skeleton-text skeleton right-space-40">Updated 1h ago by lexoyo</P><P class="button-bar_item button-bar__item--secondary skeleton-text skeleton right-space-40">Created 2023-02-16 by lexoyo</P><div id="i8oes3" class="button-bar_item skeleton skeleton-button">Edit</div></section></div><div id="ipccl7"><div id="i2fkm9" class="margin-20 empty-image" v-if="empty"></div><div id="i5ydxo" class="box padding-50-30 box--centered" v-if="empty"><p id="ikl1qu" class="text-centered title-26">Such emptyness...</p><h3 id="iwzrqi" class="text-centered title-26">Ready to start your journey?</h3><button id="i2x0l" class="button button--primary rounded top-space-40 fx-scale-round" v-on:click="showCreationForm = !showCreationForm" v-if="!showCreationForm"><span id="ibsgw" class="icon-font">+</span> <span id="itl2n8" class="">Create website</span></button></div></div><div id="i7ej6j" class="flex-between box-message text-white" v-if="error"><h3 id="iv0eyi" class="box-message-text" v-text="error">Insert your text here</h3><div id="i4656n" class="pointer button-bar__item--link text-white" v-on:click="error = null">Dismiss</div></div><div id="ilteie" class="flex-between box-message text-white" v-if="message"><h3 id="i2d31v" class="box-message-text" v-text="message">Insert your text here</h3><div id="i2urco" class="rounded pointer button-bar__item--link text-white" v-on:click="message = null">Dismiss</div></div></MAIN><FOOTER id="ilzpl" class="footer">
|
|
360
|
+
|
|
361
|
+
<div id="isucae" class="footer__column"><h3 id="ipa5zg" href="" class="footer__item">Social & community</h3>
|
|
362
|
+
|
|
363
|
+
<a href="https://www.silex.me/" class="footer__item" target="_blank">About Silex, official website</a>
|
|
364
|
+
<a href="mailto:contact+silex-dashboard-footer@silex.me" class="footer__item" target="">Email the team</a>
|
|
365
|
+
<a href="https://short.silex.me/sponsors" class="footer__item" target="">Sponsors</a>
|
|
366
|
+
<a href="https://short.silex.me/donate" class="footer__item" target="">Donate</a>
|
|
367
|
+
<a href="https://short.silex.me/community" class="footer__item" target="_blank">Community forum</a>
|
|
368
|
+
<a href="https://news.silex.me/forms/nfrm_weLJnLY5" class="footer__item" target="_blank">Newsletter</a>
|
|
369
|
+
<a href="https://events.silex.me/" class="footer__item" target="_blank">Meetups/ Events</a>
|
|
370
|
+
<a href="https://short.silex.me/mastodon" class="footer__item" target="_blank">Mastodon</a>
|
|
371
|
+
<a href="https://short.silex.me/chat" class="footer__item" target="">Chat</a></div>
|
|
372
|
+
<div id="isucae" class="footer__column"><h3 id="ipa5zg" href="" class="footer__item">Resources</h3>
|
|
373
|
+
|
|
374
|
+
<a href="https://short.silex.me/code" class="footer__item" target="_blank">Source code</a>
|
|
375
|
+
<a href="http://docs.silex.me/" class="footer__item" target="_blank">Documentation</a>
|
|
376
|
+
<a href="https://video.silex.me/my-library/video-playlists" class="footer__item" target="_blank">Videos</a>
|
|
377
|
+
<a href="https://short.silex.me/roadmap" class="footer__item" target="_blank">Roadmap</a>
|
|
378
|
+
<a href="https://short.silex.me/contribute" class="footer__item" target="_blank">Contribute</a></div>
|
|
379
|
+
<div id="isucae" class="footer__column"><h3 id="ipa5zg" href="" class="footer__item">Articles and reviews</h3>
|
|
380
|
+
|
|
381
|
+
<a href="https://short.silex.me/alternatives" class="footer__item" target="_blank">Silex alternatives</a>
|
|
382
|
+
<a href="https://short.silex.me/reviews" class="footer__item" target="_blank">Silex reviews</a>
|
|
383
|
+
<a href="https://short.silex.me/press" class="footer__item" target="_blank">Silex in the press</a></div></FOOTER></body>
|
|
384
|
+
</html>
|