@openstack_dev/gatsby-theme-marketing-oif-core 1.0.0

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 (93) hide show
  1. package/.eslintrc.json +27 -0
  2. package/.github/workflows/eslint.yml +15 -0
  3. package/.husky/pre-commit +4 -0
  4. package/.nvmrc +1 -0
  5. package/LICENSE.md +201 -0
  6. package/README.md +10 -0
  7. package/babel.config.json +12 -0
  8. package/gatsby-browser.js +5 -0
  9. package/gatsby-config.js +217 -0
  10. package/gatsby-node.js +162 -0
  11. package/gatsby-ssr.js +50 -0
  12. package/package.json +154 -0
  13. package/src/cms/cms-utils.js +8 -0
  14. package/src/cms/cms.js +12 -0
  15. package/src/cms/config/collections/configurationsCollection/announcementBanner/index.js +59 -0
  16. package/src/cms/config/collections/configurationsCollection/announcementBanner/typeDefs.js +11 -0
  17. package/src/cms/config/collections/configurationsCollection/footer/index.js +158 -0
  18. package/src/cms/config/collections/configurationsCollection/footer/typeDefs.js +37 -0
  19. package/src/cms/config/collections/configurationsCollection/index.js +16 -0
  20. package/src/cms/config/collections/configurationsCollection/navbar/index.js +62 -0
  21. package/src/cms/config/collections/configurationsCollection/navbar/typeDefs.js +13 -0
  22. package/src/cms/config/collections/configurationsCollection/siteSettings/index.js +117 -0
  23. package/src/cms/config/collections/configurationsCollection/siteSettings/typeDefs.js +15 -0
  24. package/src/cms/config/collections/configurationsCollection/typeDefs.js +9 -0
  25. package/src/cms/config/collections/typeDefs.js +5 -0
  26. package/src/cms/config/fields.js +268 -0
  27. package/src/cms/config/index.js +35 -0
  28. package/src/cms/config/patterns.js +51 -0
  29. package/src/cms/preview-templates/.gitkeep +0 -0
  30. package/src/cms/widgets/.gitkeep +0 -0
  31. package/src/components/AnnouncementBanner/index.js +26 -0
  32. package/src/components/AnnouncementBanner/index.module.scss +131 -0
  33. package/src/components/AnnouncementBanner/template.js +40 -0
  34. package/src/components/Footer/index.js +40 -0
  35. package/src/components/Footer/index.module.scss +59 -0
  36. package/src/components/Footer/template.js +55 -0
  37. package/src/components/Header/index.js +8 -0
  38. package/src/components/Header/template.js +5 -0
  39. package/src/components/Layout.js +32 -0
  40. package/src/components/Link.js +41 -0
  41. package/src/components/Navbar/index.js +460 -0
  42. package/src/components/Navbar/index.module.scss +301 -0
  43. package/src/components/SponsoredProjectsNav/index.js +22 -0
  44. package/src/components/SponsoredProjectsNav/index.module.scss +7 -0
  45. package/src/components/SubscribeForm/index.js +47 -0
  46. package/src/components/SubscribeForm/index.module.scss +114 -0
  47. package/src/components/Tracking/custom-bing-tracker.js +5 -0
  48. package/src/components/Tracking/custom-google-tracker.js +51 -0
  49. package/src/components/head-components.js +20 -0
  50. package/src/components/svgs/RightArrow.jsx +9 -0
  51. package/src/content/announcement-banner/OpenInfrastructureFoundation-icon-RGB.svg +1 -0
  52. package/src/content/announcement-banner/index.json +8 -0
  53. package/src/content/footer/index.json +139 -0
  54. package/src/content/navbar/index.json +304 -0
  55. package/src/content/site-settings/index.json +1 -0
  56. package/src/images/icon.png +0 -0
  57. package/src/images/openstack-logo-full.svg +57 -0
  58. package/src/images/openstack-logo-vert.svg +57 -0
  59. package/src/images/right-arrow.svg +3 -0
  60. package/src/pages/404.js +49 -0
  61. package/src/pages/auth/[...].js +36 -0
  62. package/src/pages/index.js +14 -0
  63. package/src/reducers/.gitkeep +0 -0
  64. package/src/reducers/index.js +5 -0
  65. package/src/routes/.gitkeep +0 -0
  66. package/src/routes/authorization-callback-route.js +71 -0
  67. package/src/routes/login-callback-route.js +62 -0
  68. package/src/routes/logout-callback-route.js +72 -0
  69. package/src/state/.gitkeep +0 -0
  70. package/src/state/ReduxWrapper.js +29 -0
  71. package/src/state/storage.js +21 -0
  72. package/src/state/store.js +43 -0
  73. package/src/templates/.gitkeep +0 -0
  74. package/src/theme.js +36 -0
  75. package/src/utils/cacheUtils.js +48 -0
  76. package/src/utils/cssUtils.js +62 -0
  77. package/src/utils/envVariables.js +52 -0
  78. package/src/utils/expiredToken.js +15 -0
  79. package/src/utils/filePath.js +95 -0
  80. package/static/admin/admin.css +3 -0
  81. package/static/fonts/fonts.css +65 -0
  82. package/static/fonts/nunito-sans/nunito-sans-v12-latin-300.woff +0 -0
  83. package/static/fonts/nunito-sans/nunito-sans-v12-latin-300.woff2 +0 -0
  84. package/static/fonts/nunito-sans/nunito-sans-v12-latin-300italic.woff +0 -0
  85. package/static/fonts/nunito-sans/nunito-sans-v12-latin-300italic.woff2 +0 -0
  86. package/static/fonts/nunito-sans/nunito-sans-v12-latin-600.woff +0 -0
  87. package/static/fonts/nunito-sans/nunito-sans-v12-latin-600.woff2 +0 -0
  88. package/static/fonts/nunito-sans/nunito-sans-v12-latin-600italic.woff +0 -0
  89. package/static/fonts/nunito-sans/nunito-sans-v12-latin-600italic.woff2 +0 -0
  90. package/static/fonts/nunito-sans/nunito-sans-v12-latin-700.woff +0 -0
  91. package/static/fonts/nunito-sans/nunito-sans-v12-latin-700.woff2 +0 -0
  92. package/static/fonts/nunito-sans/nunito-sans-v12-latin-700italic.woff +0 -0
  93. package/static/fonts/nunito-sans/nunito-sans-v12-latin-700italic.woff2 +0 -0
@@ -0,0 +1,301 @@
1
+ .navbar {
2
+ border-radius: 0px;
3
+ background: #fff;
4
+ margin-bottom: 0;
5
+ padding: 15px 0;
6
+ border-color: #e7e7e7;
7
+ position: relative;
8
+ min-height: 50px;
9
+ border: 1px solid transparent;
10
+ box-shadow: none;
11
+ .navbarHeader {
12
+ .brandWrapper {
13
+ margin: 10px 0;
14
+ padding-right: 20px;
15
+ float: left;
16
+ border-right: 1px solid #eee;
17
+ min-width: 135px;
18
+ a.navbarBrand {
19
+ background: url("../../images/openstack-logo-full.svg") left no-repeat;
20
+ height: 35px;
21
+ width: 135px;
22
+ color: #777;
23
+ padding: 15px 15px;
24
+ font-size: 18px;
25
+ line-height: 20px;
26
+ display: block;
27
+ }
28
+ }
29
+ .searchWrapper {
30
+ padding: 21px 0px 15px 20px;
31
+ float: left;
32
+ text-transform: uppercase;
33
+ color: #8a959e;
34
+ font-size: 12px;
35
+ font-weight: 400;
36
+ line-height: 17.15px;
37
+ .searchComponent {
38
+ cursor: pointer;
39
+ z-index: 5;
40
+ position: relative;
41
+ .searchIcon {
42
+ width: 12px;
43
+ height: 12px;
44
+ line-height: 12px;
45
+ margin-right: 5px;
46
+ }
47
+ }
48
+ .openstackSearchBar {
49
+ width: 100%;
50
+ position: absolute;
51
+ top: 0;
52
+ z-index: 100;
53
+ height: 70px;
54
+ padding-top: 10px;
55
+ padding-right: 12%;
56
+ background-color: #fff;
57
+ opacity: 0;
58
+ transition: opacity 0.3s ease;
59
+ }
60
+ @media (max-width: 768px) {
61
+ display: none;
62
+ }
63
+ @media (max-width: 1160px) {
64
+ .headerSearchText {
65
+ display: none;
66
+ }
67
+ }
68
+ }
69
+ .navbarToggle {
70
+ appearance: button;
71
+ cursor: pointer;
72
+ position: relative;
73
+ float: right;
74
+ padding: 9px 10px;
75
+ margin-top: 8px;
76
+ margin-bottom: 8px;
77
+ background: transparent;
78
+ border: none;
79
+ .iconBar {
80
+ background-color: #5a5a5a;
81
+ height: 3px;
82
+ border-radius: 3px;
83
+ display: block;
84
+ width: 22px;
85
+ margin-top: 4px;
86
+ }
87
+ @media (min-width: 768px) {
88
+ display: none;
89
+ }
90
+ }
91
+ @media (min-width: 768px) and (max-width: 1310px) {
92
+ .brandWrapper {
93
+ width: 75px;
94
+ min-width: 75px;
95
+ margin-top: 0;
96
+ a.navbarBrand {
97
+ background: url("../../images/openstack-logo-vert.svg") left no-repeat;
98
+ margin-left: 0px !important;
99
+ height: 54px;
100
+ width: 59px;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ .navbarOption {
106
+ color: #8a959e;
107
+ font-size: 12px;
108
+ font-weight: 400;
109
+ text-transform: uppercase;
110
+ position: relative;
111
+ padding: 15px 15px 20px;
112
+ text-decoration: none;
113
+ text-align: left;
114
+ cursor: pointer;
115
+ display: flex;
116
+ clear: both;
117
+ line-height: 17.15px;
118
+ white-space: nowrap;
119
+ background-color: transparent;
120
+ margin: 0;
121
+ &:hover {
122
+ color: #333;
123
+ background-color: transparent;
124
+ text-decoration: none;
125
+ .dropDownMenu {
126
+ display: flex;
127
+ opacity: 1;
128
+ }
129
+ }
130
+ .arrowDownIcon {
131
+ font-size: 20px;
132
+ }
133
+ .dropDownMenu,
134
+ .join {
135
+ display: none;
136
+ flex-direction: column;
137
+ margin-top: 5px;
138
+ padding: 10px 0;
139
+ min-width: 230px;
140
+ border-top-left-radius: 4px;
141
+ border-top-right-radius: 4px;
142
+ position: absolute;
143
+ top: 90%;
144
+ left: 0;
145
+ z-index: 1000;
146
+ float: left;
147
+ font-size: 14px;
148
+ text-align: left;
149
+ list-style: none;
150
+ background-color: #fff;
151
+ background-clip: padding-box;
152
+ border: 1px solid rgba(0, 0, 0, 0.15);
153
+ border-radius: 4px;
154
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
155
+ opacity: 0;
156
+ transition: opacity 0.3s ease;
157
+ .dropdownMenuOption {
158
+ color: #8a959e;
159
+ font-size: 12px;
160
+ font-weight: 400;
161
+ text-transform: uppercase;
162
+ position: relative;
163
+ padding: 15px 15px;
164
+ text-decoration: none;
165
+ text-align: left;
166
+ &:hover {
167
+ color: #333;
168
+ background-color: #f5f5f5;
169
+ outline: 0;
170
+ text-decoration: none;
171
+ }
172
+ }
173
+ &::before {
174
+ border: solid transparent;
175
+ border-color: rgba(170, 170, 170, 0);
176
+ border-bottom-color: #aaaaaa;
177
+ border-width: 16px;
178
+ margin-left: -16px;
179
+ bottom: 100%;
180
+ left: 25%;
181
+ content: " ";
182
+ height: 0;
183
+ width: 0;
184
+ position: absolute;
185
+ pointer-events: none;
186
+ }
187
+ &::after {
188
+ border: solid transparent;
189
+ border-color: rgba(255, 255, 255, 0);
190
+ border-bottom-color: #ffffff;
191
+ border-width: 15px;
192
+ margin-left: -15px;
193
+ bottom: 100%;
194
+ left: 25%;
195
+ content: " ";
196
+ height: 0;
197
+ width: 0;
198
+ position: absolute;
199
+ pointer-events: none;
200
+ }
201
+ .divider {
202
+ width: 100%;
203
+ height: 1px;
204
+ margin: 9px 0;
205
+ overflow: hidden;
206
+ background-color: #e5e5e5;
207
+ }
208
+ }
209
+ &.join {
210
+ border: none;
211
+ border-left-width: medium;
212
+ border-left-style: none;
213
+ border-left-color: currentcolor;
214
+ border-left: 1px solid #eee;
215
+ color: #2a4e68;
216
+ font-weight: 600;
217
+ white-space: nowrap;
218
+ margin: 0 15px 0 10px;
219
+ padding-right: 0px;
220
+ padding-left: 10px;
221
+ }
222
+ &.login {
223
+ background: #2a4e68;
224
+ padding: 3px 25px;
225
+ border-radius: 4px;
226
+ color: #fff;
227
+ margin-top: 12px;
228
+ font-size: 14px;
229
+ height: 22px;
230
+ &:hover {
231
+ background: #286a9d;
232
+ color: #fff;
233
+ text-decoration: none;
234
+ }
235
+ }
236
+ }
237
+ .mobileMenuWrapper {
238
+ .toggleIcon {
239
+ color: #5a5a5a;
240
+ margin-left: auto;
241
+ &:hover {
242
+ background-color: transparent;
243
+ }
244
+ }
245
+ }
246
+ .navbarMobileMenu {
247
+ flex-direction: column;
248
+ .openstackSearchBarMobile {
249
+ display: block;
250
+ visibility: hidden;
251
+ opacity: 0;
252
+ transition: visibility 0.3s ease;
253
+ }
254
+ .mobileOption {
255
+ color: #8a959e;
256
+ justify-content: space-between;
257
+ line-height: 20px;
258
+ padding-bottom: 20px;
259
+ font-size: 12px;
260
+ font-weight: 400;
261
+ text-transform: uppercase;
262
+ position: relative;
263
+ padding: 15px 15px;
264
+ cursor: pointer;
265
+ &:hover,
266
+ &:visited {
267
+ color: #333;
268
+ background-color: transparent;
269
+ }
270
+ }
271
+ .mobileDropdownMenu {
272
+ position: relative;
273
+ border: 0;
274
+ box-shadow: none;
275
+ height: auto;
276
+ width: 100%;
277
+ padding: 10px 5%;
278
+ background: #edf2f7;
279
+ opacity: 1;
280
+ border-radius: 4px;
281
+ .mobileDropdownOption {
282
+ color: #8a959e;
283
+ font-size: 12px;
284
+ font-weight: 400;
285
+ text-align: left;
286
+ &:hover,
287
+ &:visited {
288
+ color: #333;
289
+ background-color: transparent;
290
+ }
291
+ }
292
+ .divider {
293
+ width: 100%;
294
+ height: 1px;
295
+ margin: 9px 0;
296
+ overflow: hidden;
297
+ background-color: #e5e5e5;
298
+ }
299
+ }
300
+ }
301
+ }
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import NavigationWidget from 'navigation-widget/dist';
3
+ import 'navigation-widget/dist/index.css';
4
+ import sponsored_projects from 'data/sponsored-projects.json';
5
+ import styles from "./index.module.scss";
6
+
7
+ const SponsoredProjectsNav = () => {
8
+
9
+ // get this from data
10
+ const widgetProps = {
11
+ projects:sponsored_projects,
12
+ currentProject: parseInt(process.env.GATSBY_SPONSORED_PROJECTS_CURRENT),
13
+ containerClass: styles.sponsored_project_nav,
14
+ navbarTitle: "An OpenInfra Foundation Project",
15
+ popupTitle: "More OpenInfra Foundation Projects",
16
+ };
17
+
18
+ return (
19
+ <NavigationWidget {...widgetProps} />
20
+ );
21
+ }
22
+ export default SponsoredProjectsNav;
@@ -0,0 +1,7 @@
1
+ .sponsored_project_nav {
2
+ max-width: 1170px;
3
+ padding-right: 15px;
4
+ padding-left: 15px;
5
+ margin-right: auto;
6
+ margin-left: auto;
7
+ }
@@ -0,0 +1,47 @@
1
+ import React from "react";
2
+ import { Container} from "@mui/material";
3
+ import '@fortawesome/fontawesome-free/css/all.css';
4
+
5
+ import styles from "./index.module.scss";
6
+
7
+ const SubscribeForm = () => {
8
+
9
+ return (
10
+ <div className={styles.wrapper}>
11
+ <Container maxWidth="lg" className={styles.formContainer}>
12
+ <h3>Subscribe to News About OpenStack</h3>
13
+ <p>Stay up to date on OpenStack and the Open Infrastructure community.</p>
14
+ <form
15
+ method="post"
16
+ id="e2ma_signup"
17
+ action="https://app.e2ma.net/app2/audience/signup/1900249/1771360/"
18
+ >
19
+ <input id="id_prev_member_email" name="prev_member_email" type="hidden"/>
20
+ <input id="id_source" name="source" type="hidden"/>
21
+ <input id="id_group_4036448" name="group_4036448" type="hidden" value="4036448"/>
22
+ <input type="hidden" name="private_set" value="{num_private}"/>
23
+ <input
24
+ placeholder="Email Address"
25
+ id="id_email"
26
+ name="email"
27
+ type="email"
28
+ required
29
+ className={styles.feedbackInput}
30
+ size="is-large"
31
+ />
32
+ <button
33
+ type="submit"
34
+ className={styles.feedbackBtn}
35
+ data-sitekey="6LeKvr0UAAAAAItxLgobGpatgngglauCXrZw2Yw4"
36
+ data-callback='onSubmit'
37
+ >
38
+ <span>SUBMIT</span>
39
+ <i className="fa fa-chevron-right"></i>
40
+ </button>
41
+ </form>
42
+ </Container>
43
+ </div>
44
+ );
45
+ };
46
+
47
+ export default SubscribeForm;
@@ -0,0 +1,114 @@
1
+ .wrapper {
2
+ background-color: #ed1944;
3
+ color: #ffffff;
4
+ padding: 50px 0;
5
+ text-align: center;
6
+ width: 100%;
7
+ font-size: 12px;
8
+ margin-bottom: -50px;
9
+ vertical-align: middle;
10
+
11
+ h3 {
12
+ font-size: 24px;
13
+ font-weight: 400;
14
+ margin-top: 10px;
15
+ margin-bottom: 10px;
16
+ }
17
+
18
+ p {
19
+ font-size: 14px;
20
+ padding-bottom: 20px;
21
+ margin: 0 0 10px;
22
+ }
23
+
24
+ .formContainer {
25
+
26
+ @media (max-width: 767px) {
27
+ padding: 0;
28
+ }
29
+
30
+ .feedbackInput {
31
+ display: inline-block;
32
+ background: #ed1944;
33
+ border: 2px solid #fff;
34
+ border-radius: 4px;
35
+ color: #fff;
36
+ font-size: 12px;
37
+ font-weight: 400;
38
+ padding: 10px 20px;
39
+ width: 260px;
40
+
41
+ &:focus {
42
+ outline: none;
43
+ border: 2px solid #fff;
44
+ }
45
+ }
46
+
47
+ @media (max-width: 767px) {
48
+ .feedbackInput {
49
+ width: 50%;
50
+ }
51
+ }
52
+
53
+ .feedbackInput::-webkit-input-placeholder {
54
+ color: #fff;
55
+ font-size: 12px;
56
+ font-weight: 400;
57
+ }
58
+
59
+ .feedbackInput:-moz-placeholder {
60
+ /* Firefox 18- */
61
+ color: #fff;
62
+ font-size: 12px;
63
+ font-weight: 400;
64
+ }
65
+
66
+ .feedbackInput::-moz-placeholder {
67
+ /* Firefox 19+ */
68
+ color: #fff;
69
+ font-size: 12px;
70
+ font-weight: 400;
71
+ }
72
+
73
+ .feedbackInput:-ms-input-placeholder {
74
+ color: #fff;
75
+ font-size: 12px;
76
+ font-weight: 400;
77
+ }
78
+
79
+ .feedbackBtn {
80
+ margin-left: 11px;
81
+ display: inline-block;
82
+ background: #ed1944;
83
+ border: 2px solid #fff;
84
+ border-radius: 4px;
85
+ color: #fff;
86
+ font-size: 12px;
87
+ font-weight: 400;
88
+ padding: 10px 30px;
89
+ cursor: pointer;
90
+
91
+ i {
92
+ margin-left: 5px;
93
+
94
+ @media (max-width: 767px) {
95
+ display: none;
96
+ }
97
+ }
98
+
99
+ &:hover {
100
+ border: 2px solid #fff;
101
+ color: #fff;
102
+ }
103
+ }
104
+
105
+ @media (max-width: 767px) {
106
+ .feedbackBtn {
107
+ width: 18%;
108
+ margin-left: 2%;
109
+ padding: 10px;
110
+ }
111
+ }
112
+
113
+ }
114
+ }
@@ -0,0 +1,5 @@
1
+ const customBingTracker = `
2
+ (function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"${process.env.MICROSOFT_BING_ID}"};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq");
3
+ `;
4
+
5
+ export default customBingTracker;
@@ -0,0 +1,51 @@
1
+ import React from "react";
2
+
3
+ const CustomGoogleTracker = () => (
4
+ <>
5
+ <style>{`.async-hide { opacity: 0 !important}`}</style>
6
+ <script type="text/javascript">{`
7
+ // Used to record outbound links before the browser resets to the new site
8
+ function recordOutboundLink(link, category, action) {
9
+ try {
10
+ ga('send', 'event', {
11
+ eventCategory: category,
12
+ eventAction: 'click',
13
+ eventLabel: link.href
14
+ });
15
+ setTimeout('document.location = "' + link.href + '"', 100)
16
+ }
17
+ catch(err){}
18
+ }
19
+
20
+ // Used to minimize flickering during GA A/B testing
21
+ (function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
22
+ h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
23
+ (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
24
+ })(window,document.documentElement,'async-hide','dataLayer',4000,
25
+ {'${process.env.GATSBY_GOOGLE_TAGMANAGER_ID}':true});
26
+
27
+ // Google Analytics tracking script
28
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
29
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
30
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
31
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
32
+
33
+ ga('create', '${process.env.GATSBY_GOOGLE_ANALYTICS_KEY}', 'auto');
34
+ ga('require', 'linker');
35
+ ga('linker:autoLink', ['openstack.org', 'eventbrite.com'] );
36
+ ga('require', '${process.env.GATSBY_GOOGLE_TAGMANAGER_ID}');
37
+ ga('send', 'pageview');
38
+
39
+ ga(function(tracker) {
40
+ var googleClientID = tracker.get('clientId');
41
+
42
+ $("a.eventbrite-register-link").each(function() {
43
+ var href = $(this).attr("href");
44
+ $(this).attr("href", href + '&_eboga=' + googleClientID);
45
+ });
46
+ });
47
+ `}</script>
48
+ </>
49
+ );
50
+
51
+ export default CustomGoogleTracker;
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import customGoogleTracker from "./Tracking/custom-google-tracker";
3
+ import customBingTracker from "./Tracking/custom-bing-tracker";
4
+
5
+ export const HeadComponents = [
6
+ <style
7
+ key="google-tracker-style"
8
+ dangerouslySetInnerHTML={{ __html: `.async-hide { opacity: 0 !important}` }}
9
+ />,
10
+ <script
11
+ key="google-tracker"
12
+ dangerouslySetInnerHTML={{ __html: customGoogleTracker }}
13
+ />,
14
+ <script
15
+ data-obct
16
+ type="text/javascript"
17
+ key={`gatsby-plugin-ms-bing`}
18
+ dangerouslySetInnerHTML={{ __html: customBingTracker }}
19
+ />,
20
+ ];
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+
3
+ const RightArrow = () => (
4
+ <svg width="21" height="11" viewBox="0 0 21 11" fill="none" xmlns="http://www.w3.org/2000/svg">
5
+ <path d="M15.4828 1L19.6207 5.48M19.6207 5.48L15.4828 9.96M19.6207 5.48L1 5.48" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"></path>
6
+ </svg>
7
+ );
8
+
9
+ export default RightArrow;
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"><defs><style>.cls-1{fill:#f7b749;}.cls-2{fill:#ed362f;}.cls-3{fill:#43b85c;}.cls-4{fill:#2cb4e2;}</style></defs><polygon class="cls-1" points="0 33.33 0 50 114.64 50 0 164.64 11.79 176.43 154.88 33.33 0 33.33"/><polygon class="cls-2" points="171.55 16.67 188.22 0 0 0 0 16.67 171.55 16.67"/><polygon class="cls-3" points="183.33 28.45 183.33 200 200 200 200 11.78 183.33 28.45"/><polygon class="cls-4" points="166.67 200 166.67 45.12 23.57 188.21 35.35 200 150 85.36 150 200 166.67 200"/></svg>
@@ -0,0 +1,8 @@
1
+ {
2
+ "title": "OpenInfra Summit > Asia '24",
3
+ "logo": "OpenInfrastructureFoundation-icon-RGB.svg",
4
+ "text": "Join the OpenStack community in Suwon, South Korea from September 3-4 at the first regional OpenInfra Summit Asia! Hear how OpenStack developers and operators are collaborating to define AI requirements, new OpenStack + Kubernetes production use cases and how organizations continue to scale their OpenStack footprint.",
5
+ "cta_title": "Submit to the CFP! Deadline: May 29, 2024",
6
+ "cta_label": "Submit Now",
7
+ "cta_link": "https://openinfrafoundation.formstack.com/forms/openinfra_asia_summit_2024"
8
+ }