index.html 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Excalidraw | Hand-drawn look & feel • Collaborative • Secure</title>
  6. <meta
  7. name="viewport"
  8. content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover, shrink-to-fit=no"
  9. />
  10. <meta name="referrer" content="origin" />
  11. <meta name="mobile-web-app-capable" content="yes" />
  12. <meta name="theme-color" content="#121212" />
  13. <!-- Primary Meta Tags -->
  14. <meta
  15. name="title"
  16. content="Excalidraw — Collaborative whiteboarding made easy"
  17. />
  18. <meta
  19. name="description"
  20. content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
  21. />
  22. <meta name="image" content="https://excalidraw.com/og-general-v1.png" />
  23. <!-- Open Graph / Facebook -->
  24. <meta property="og:site_name" content="Excalidraw" />
  25. <meta property="og:type" content="website" />
  26. <meta property="og:url" content="https://excalidraw.com" />
  27. <meta
  28. property="og:title"
  29. content="Excalidraw — Collaborative whiteboarding made easy"
  30. />
  31. <meta property="og:image:alt" content="Excalidraw logo" />
  32. <meta
  33. property="og:description"
  34. content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
  35. />
  36. <meta property="og:image" content="https://excalidraw.com/og-fb-v1.png" />
  37. <!-- Twitter -->
  38. <meta property="twitter:card" content="summary_large_image" />
  39. <meta property="twitter:site" content="@excalidraw" />
  40. <meta property="twitter:url" content="https://excalidraw.com" />
  41. <meta
  42. property="twitter:title"
  43. content="Excalidraw — Collaborative whiteboarding made easy"
  44. />
  45. <meta
  46. property="twitter:description"
  47. content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
  48. />
  49. <meta
  50. property="twitter:image"
  51. content="https://excalidraw.com/og-twitter-v1.png"
  52. />
  53. <!-- General tags -->
  54. <meta
  55. name="description"
  56. content="Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them."
  57. />
  58. <!------------------------------------------------------------------------->
  59. <!-- to minimize white flash on load when user has dark mode enabled -->
  60. <script>
  61. try {
  62. //
  63. const theme = window.localStorage.getItem("excalidraw-theme");
  64. if (theme === "dark") {
  65. document.documentElement.classList.add("dark");
  66. }
  67. } catch {}
  68. </script>
  69. <style>
  70. html.dark {
  71. background-color: #121212;
  72. color: #fff;
  73. }
  74. </style>
  75. <!------------------------------------------------------------------------->
  76. <script>
  77. // Redirect Excalidraw+ users which have auto-redirect enabled.
  78. //
  79. // Redirect only the bare root path, so link/room/library urls are not
  80. // redirected.
  81. //
  82. // Putting into index.html for best performance (can't redirect on server
  83. // due to location.hash checks).
  84. if (
  85. window.location.pathname === "/" &&
  86. !window.location.hash &&
  87. !window.location.search &&
  88. // if its present redirect
  89. document.cookie.includes("excplus-autoredirect=true")
  90. ) {
  91. window.location.href = "https://app.excalidraw.com";
  92. }
  93. </script>
  94. <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
  95. <!-- Excalidraw version -->
  96. <meta name="version" content="{version}" />
  97. <link
  98. rel="preload"
  99. href="Virgil.woff2"
  100. as="font"
  101. type="font/woff2"
  102. crossorigin="anonymous"
  103. />
  104. <link
  105. rel="preload"
  106. href="Cascadia.woff2"
  107. as="font"
  108. type="font/woff2"
  109. crossorigin="anonymous"
  110. />
  111. <link
  112. rel="manifest"
  113. href="manifest.json"
  114. style="--pwacompat-splash-font: 24px Virgil"
  115. />
  116. <link rel="stylesheet" href="fonts.css" type="text/css" />
  117. <% if (process.env.REACT_APP_DEV_DISABLE_LIVE_RELOAD==="true" ) { %>
  118. <script>
  119. {
  120. const _WebSocket = window.WebSocket;
  121. window.WebSocket = function (url) {
  122. if (/ws:\/\/localhost:.+?\/sockjs-node/.test(url)) {
  123. console.info(
  124. "[!!!] Live reload is disabled via process.env.REACT_APP_DEV_DISABLE_LIVE_RELOAD [!!!]",
  125. );
  126. } else {
  127. return new _WebSocket(url);
  128. }
  129. };
  130. }
  131. </script>
  132. <% } %>
  133. <script>
  134. window.EXCALIDRAW_ASSET_PATH = "/";
  135. // setting this so that libraries installation reuses this window tab.
  136. window.name = "_excalidraw";
  137. </script>
  138. <% if (process.env.REACT_APP_DISABLE_TRACKING !== 'true') { %>
  139. <!-- LEGACY GOOGLE ANALYTICS -->
  140. <% if (process.env.REACT_APP_GOOGLE_ANALYTICS_ID) { %>
  141. <script
  142. async
  143. src="https://www.googletagmanager.com/gtag/js?id=%REACT_APP_GOOGLE_ANALYTICS_ID%"
  144. ></script>
  145. <script>
  146. window.dataLayer = window.dataLayer || [];
  147. function gtag() {
  148. dataLayer.push(arguments);
  149. }
  150. gtag("js", new Date());
  151. gtag("config", "%REACT_APP_GOOGLE_ANALYTICS_ID%");
  152. </script>
  153. <% } %>
  154. <!-- end LEGACY GOOGLE ANALYTICS -->
  155. <!-- Matomo -->
  156. <% if (process.env.REACT_APP_MATOMO_URL &&
  157. process.env.REACT_APP_MATOMO_SITE_ID &&
  158. process.env.REACT_APP_CDN_MATOMO_TRACKER_URL) { %>
  159. <script>
  160. var _paq = (window._paq = window._paq || []);
  161. /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  162. _paq.push(["trackPageView"]);
  163. _paq.push(["enableLinkTracking"]);
  164. (function () {
  165. var u = "%REACT_APP_MATOMO_URL%";
  166. _paq.push(["setTrackerUrl", u + "matomo.php"]);
  167. _paq.push(["setSiteId", "%REACT_APP_MATOMO_SITE_ID%"]);
  168. var d = document,
  169. g = d.createElement("script"),
  170. s = d.getElementsByTagName("script")[0];
  171. g.async = true;
  172. g.src = "%REACT_APP_CDN_MATOMO_TRACKER_URL%";
  173. s.parentNode.insertBefore(g, s);
  174. })();
  175. </script>
  176. <% } %>
  177. <!-- end Matomo analytics -->
  178. <% } %>
  179. <!-- FIXME: remove this when we update CRA (fix SW caching) -->
  180. <style>
  181. body,
  182. html {
  183. margin: 0;
  184. -webkit-text-size-adjust: 100%;
  185. width: 100%;
  186. height: 100%;
  187. overflow: hidden;
  188. }
  189. .visually-hidden {
  190. position: absolute !important;
  191. height: 1px;
  192. width: 1px;
  193. overflow: hidden;
  194. clip: rect(1px, 1px, 1px, 1px);
  195. white-space: nowrap;
  196. user-select: none;
  197. }
  198. #root {
  199. height: 100%;
  200. -webkit-touch-callout: none;
  201. -webkit-user-select: none;
  202. -khtml-user-select: none;
  203. -moz-user-select: none;
  204. -ms-user-select: none;
  205. user-select: none;
  206. }
  207. @media screen and (min-width: 1200px) {
  208. #root {
  209. -webkit-touch-callout: default;
  210. -webkit-user-select: auto;
  211. -khtml-user-select: auto;
  212. -moz-user-select: auto;
  213. -ms-user-select: auto;
  214. user-select: auto;
  215. }
  216. }
  217. </style>
  218. </head>
  219. <body>
  220. <noscript> You need to enable JavaScript to run this app. </noscript>
  221. <header>
  222. <h1 class="visually-hidden">Excalidraw</h1>
  223. </header>
  224. <div id="root"></div>
  225. </body>
  226. </html>