@@ -31,22 +31,72 @@ for version in "${versions[@]}"; do
3131done
3232
3333links=" "
34+ URL_COUNT=0
3435for url in " ${all_urls[@]} " ; do
35- filename=$( basename " $url " )
36- echo " $url "
37- link=" https://www.mongodb.com/docs/openapi/preview/?src=$url "
38- echo " Branded preview: ${link} "
39- links=" ${links} <li><a href='$link ' target=\" _blank\" >${filename} </a></li>"
36+ URL_COUNT=$(( URL_COUNT + 1 ))
37+ filename=$( basename " ${url} " )
38+ echo " ${url} "
39+ links=" ${links} <div class='url-container'><button onclick=\" generateLink(this, 'preview-url-${URL_COUNT} ', '$url ')\" >Generate preview link for ${filename} </button><span class='preview-span' id='preview-url-${URL_COUNT} '></span></div>"
4040done
4141
42+ # Uses a proxied endpoint for creating preview links to prevent CORS issues
4243cat << EOF > branded-preview.html
4344<!DOCTYPE html>
4445<html lang="en">
46+ <head>
47+ <style>
48+ .url-container {
49+ margin: 16px 0;
50+ }
51+
52+ .preview-span {
53+ margin-left: 8px;
54+ }
55+ </style>
56+ </head>
4557 <body>
4658 <h2>Preview docs for:</h2>
47- <ul>
48- ${links}
49- </ul>
59+ ${links}
60+ <script>
61+ async function generateLink(buttonEl, elId, url) {
62+ const previewSpan = document.getElementById(elId);
63+ if (!previewSpan) {
64+ return;
65+ }
66+
67+ buttonEl.disabled = true;
68+ previewSpan.innerHTML = 'Loading...';
69+
70+ try {
71+ const buildPreviewEndpoint = 'https://populate-data-extension.netlify.app/.netlify/functions/create-bump-preview';
72+ const res = await fetch(buildPreviewEndpoint, {
73+ method: 'POST',
74+ headers: {
75+ 'Content-Type': 'application/json',
76+ },
77+ body: JSON.stringify({ url }),
78+ });
79+
80+ if (res.status === 201) {
81+ const { public_url: previewUrl } = await res.json();
82+ previewSpan.innerHTML = '';
83+ const link = document.createElement('a');
84+ link.href = previewUrl;
85+ link.textContent = previewUrl;
86+ link.target = '_blank';
87+ previewSpan.appendChild(link);
88+ }
89+
90+ if (res.status === 422) {
91+ const resText = await res.text();
92+ previewSpan.innerHTML = resText;
93+ }
94+ } catch (err) {
95+ console.error(err);
96+ previewSpan.innerHTML = 'Error!';
97+ }
98+ }
99+ </script>
50100 </body>
51101</html>
52102EOF
0 commit comments