@silexlabs/silex-dashboard 1.0.41 → 1.0.45

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.
Files changed (95) hide show
  1. package/.gitmodules +2 -2
  2. package/11ty/eleventy.config.mjs +62 -0
  3. package/README.md +8 -2
  4. package/_site/css/connectors-61bd21c2345101e48cc530cacf3afc0156ce7e089fcef3a34f853a537f0c55f2.css +1 -0
  5. package/_site/css/websites-4b9b2b0a0a907b33eca109d50c2a3eee97f1955c742cef487110d21a0bbf8f50.css +1 -0
  6. package/_site/en/connectors/index.html +176 -181
  7. package/_site/en/index.html +59 -470
  8. package/_site/fr/connectors/index.html +176 -181
  9. package/_site/fr/index.html +59 -470
  10. package/_site/js/main.js +362 -0
  11. package/_site/js/main.js.LICENSE.txt +38 -0
  12. package/_site/js/vue.cjs.js +89 -0
  13. package/_site/js/vue.cjs.prod.js +75 -0
  14. package/_site/js/vue.d.mts +7 -0
  15. package/_site/js/vue.d.ts +7 -0
  16. package/_site/js/vue.esm-browser.js +16740 -0
  17. package/_site/js/vue.esm-browser.prod.js +12 -0
  18. package/_site/js/vue.esm-bundler.js +80 -0
  19. package/_site/js/vue.global.js +16725 -0
  20. package/_site/js/vue.global.prod.js +12 -0
  21. package/_site/js/vue.runtime.esm-browser.js +11155 -0
  22. package/_site/js/vue.runtime.esm-browser.prod.js +12 -0
  23. package/_site/js/vue.runtime.esm-bundler.js +26 -0
  24. package/_site/js/vue.runtime.global.js +11302 -0
  25. package/_site/js/vue.runtime.global.prod.js +12 -0
  26. package/collections/connectors/en.md +70 -0
  27. package/collections/connectors/fr.md +72 -0
  28. package/collections/home/en.md +57 -0
  29. package/{pages/fr/index.md → collections/home/fr.md} +20 -21
  30. package/collections/languages/en.json +5 -0
  31. package/collections/languages/fr.json +5 -0
  32. package/collections/settings/en.json +127 -0
  33. package/collections/settings/fr.json +131 -0
  34. package/package.json +17 -8
  35. package/silex/client-config.js +24 -0
  36. package/{.silex.js → silex/server-config.js} +8 -18
  37. package/templates/connectors-en.11tydata.mjs +56 -0
  38. package/templates/connectors-en.html +440 -0
  39. package/templates/connectors-fr.11tydata.mjs +56 -0
  40. package/templates/connectors-fr.html +440 -0
  41. package/templates/css/connectors-61bd21c2345101e48cc530cacf3afc0156ce7e089fcef3a34f853a537f0c55f2.css +1 -0
  42. package/templates/css/websites-4b9b2b0a0a907b33eca109d50c2a3eee97f1955c742cef487110d21a0bbf8f50.css +1 -0
  43. package/templates/websites-en.11tydata.mjs +108 -0
  44. package/templates/websites-en.html +478 -0
  45. package/templates/websites-fr.11tydata.mjs +108 -0
  46. package/templates/websites-fr.html +478 -0
  47. package/tina/config.ts +258 -0
  48. package/tina/tina-lock.json +1 -0
  49. package/.eleventy.js +0 -11
  50. package/.silex-client.js +0 -22
  51. package/_data/languages.json +0 -7
  52. package/_includes/api-connectors.js.html +0 -96
  53. package/_includes/api-websites.js.html +0 -189
  54. package/_includes/connectors.html +0 -253
  55. package/_includes/websites.html +0 -548
  56. package/_silex/old/assets/alex-hoyau.jpg +0 -0
  57. package/_silex/old/assets/alex-small.jpg +0 -0
  58. package/_silex/old/assets/empty-projects.gif +0 -0
  59. package/_silex/old/assets/gitlab.svg +0 -13
  60. package/_silex/old/assets/picto-silex.png +0 -0
  61. package/_silex/old/assets/silex-icon-2018@200px.png +0 -0
  62. package/_silex/old/meta.json +0 -1
  63. package/_silex/old/website.json +0 -1
  64. package/_site/assets/alex-small.jpg +0 -0
  65. package/_site/assets/gitlab.svg +0 -13
  66. package/_site/assets/silex-dashboard.png +0 -0
  67. package/_site/assets/silex-icon-2018@200px.png +0 -0
  68. package/_site/css/connectors.css +0 -1
  69. package/_site/css/websites.css +0 -1
  70. package/assets/alex-small.jpg +0 -0
  71. package/assets/bg-purpel-silex.webp +0 -0
  72. package/assets/bg-silex-purpel.webp +0 -0
  73. package/assets/empty-projects-sos.gif +0 -0
  74. package/assets/gitlab.svg +0 -13
  75. package/assets/logo-silex.svg +0 -1
  76. package/assets/picto-silex@3x.png +0 -0
  77. package/assets/silex-dashboard.png +0 -0
  78. package/assets/silex-icon-2018@200px.png +0 -0
  79. package/pages/connectors.css.liquid +0 -4
  80. package/pages/en/connectors.md +0 -4
  81. package/pages/en/en.json +0 -72
  82. package/pages/en/index.md +0 -28
  83. package/pages/fr/connectors.md +0 -5
  84. package/pages/fr/fr.json +0 -72
  85. package/pages/pages.11tydata.js +0 -5
  86. package/pages/websites.css.liquid +0 -4
  87. /package/{_data → 11ty/_data}/api-translations.json +0 -0
  88. /package/{_data → 11ty/_data}/site.js +0 -0
  89. /package/{_includes → 11ty/_includes}/alternate.liquid +0 -0
  90. /package/{_silex/old → templates}/assets/bg-purpel-silex.webp +0 -0
  91. /package/{_silex/old → templates}/assets/bg-silex-purpel.webp +0 -0
  92. /package/{_silex/old → templates}/assets/empty-projects-sos.gif +0 -0
  93. /package/{assets → templates/assets}/favicon-32x32.png +0 -0
  94. /package/{_silex/old → templates}/assets/logo-silex.svg +0 -0
  95. /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>