diff --git a/README.md b/README.md index 95812c5e2..2de45e1f9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Build Status](https://github.com/compiler-explorer/compiler-explorer/workflows/Compiler%20Explorer/badge.svg)](https://github.com/compiler-explorer/compiler-explorer/actions?query=workflow%3A%22Compiler+Explorer%22) [![codecov](https://codecov.io/gh/compiler-explorer/compiler-explorer/branch/main/graph/badge.svg)](https://codecov.io/gh/compiler-explorer/compiler-explorer) -[![logo](views/resources/logos/assembly.png)](https://godbolt.org/) +[![logo](public/logos/assembly.png)](https://godbolt.org/) # Compiler Explorer diff --git a/docs/AddingALanguage.md b/docs/AddingALanguage.md index 5a8363580..260e95dc0 100644 --- a/docs/AddingALanguage.md +++ b/docs/AddingALanguage.md @@ -12,8 +12,8 @@ If you want to add a new language to the site, you should follow this steps: monaco: MONACO_MODE_ID, extensions: ARRAY_OF_FILE_EXTENSIONS_OF_YOUR_LANGUAGE, alias: [], // Leave empty unless needed, - logoUrl: PATH_TO_LOGO, - logoUrlDark: PATH_TO_DARK_LOGO, // Optional if not needed + logoFilename: NAME_OF_LOGO_FILE, // Name of the logo file in views/resources/logos/ + logoFilenameDark: NAME_OF_DARK_LOGO_FILE, // Optional, if there is a dark version of the logo } ``` @@ -24,8 +24,9 @@ If you want to add a new language to the site, you should follow this steps: _require_ your mode file in `static/modes/_all.ts`, in alphabetical order - `language-key` is how your language will be referred internally by the code. In the rest of this document, replace `{language-key}` by the corresponding value in the real files. - - Add a logo file to the `views/resources/logos/` folder and add its path to the `logoUrl{Dark}` key(s) in the + - Add a logo file to the `views/resources/logos/` folder and add its path to the `logoFilename{Dark}` key(s) in the language object + - Add the logo keys to the `static/logos.ts` file, in alphabetical order. - Add `{language-key}` to type list in `types/languages.interfaces.ts` - Add a `lib/compilers/{language-key}.ts` file using the template below: diff --git a/docs/AddingASiteTemplate.md b/docs/AddingASiteTemplate.md index c912283f4..4a360d5a3 100644 --- a/docs/AddingASiteTemplate.md +++ b/docs/AddingASiteTemplate.md @@ -30,5 +30,5 @@ npm i puppeteer --no-save && npx node --no-warnings=ExperimentalWarning --import The script uses puppeteer and chrome to generate screenshots. The script will take a little while to run as it generates multiple screenshots per template and gives pages ample time to load. -Screenshots are located in [`views/resources/template_screenshots/`](../views/resources/template_screenshots/). The +Screenshots are located in [`views/resources/template_screenshots/`](../public/template_screenshots/). The script won't regenerate everything by default, to regenerate delete the screenshot images you want deleted. diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties index 25fbd49dc..c201a4d14 100644 --- a/etc/config/c++.amazon.properties +++ b/etc/config/c++.amazon.properties @@ -6603,8 +6603,8 @@ tools.strings.stdinHint=disabled tools.Sonar.name=Sonar tools.Sonar.exe=/opt/compiler-explorer/sonar/sonar.sh -tools.Sonar.icon=./Sonar.svg -tools.Sonar.darkIcon=./Sonar-dark.svg +tools.Sonar.icon=sonar.svg +tools.Sonar.darkIcon=sonar-dark.svg tools.Sonar.type=independent tools.Sonar.class=sonar-tool tools.Sonar.stdinHint=disabled diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties index 82374d92b..29c40d8e7 100644 --- a/etc/config/c.amazon.properties +++ b/etc/config/c.amazon.properties @@ -4253,8 +4253,8 @@ tools.nm.stdinHint=disabled tools.Sonar.name=Sonar tools.Sonar.exe=/opt/compiler-explorer/sonar/sonar.sh -tools.Sonar.icon=./Sonar.svg -tools.Sonar.darkIcon=./Sonar-dark.svg +tools.Sonar.icon=./sonar.svg +tools.Sonar.darkIcon=./sonar-dark.svg tools.Sonar.type=independent tools.Sonar.class=sonar-tool tools.Sonar.stdinHint=disabled diff --git a/lib/app/config.ts b/lib/app/config.ts index 63188e741..305c4af59 100644 --- a/lib/app/config.ts +++ b/lib/app/config.ts @@ -169,7 +169,7 @@ export function loadConfiguration(appArgs: AppArguments): AppConfiguration { const httpRoot = urljoin(ceProps('httpRoot', '/'), '/'); const staticUrl = ceProps('staticUrl'); - const staticRoot = urljoin(staticUrl || urljoin(httpRoot, 'static'), '/'); + const staticRoot = urljoin(staticUrl || httpRoot, '/'); return { ceProps, diff --git a/lib/app/main.ts b/lib/app/main.ts index ea9710668..7dd9f01b6 100644 --- a/lib/app/main.ts +++ b/lib/app/main.ts @@ -104,7 +104,7 @@ export async function initialiseApplication(options: ApplicationOptions): Promis staticRoot: config.staticRoot, httpRoot: config.httpRoot, sentrySlowRequestMs: ceProps('sentrySlowRequestMs', 0), - distPath: distPath, + manifestPath: distPath, extraBodyClass: config.extraBodyClass, maxUploadSize: config.maxUploadSize, }; diff --git a/lib/app/rendering.ts b/lib/app/rendering.ts index 6307c568a..5b32d45a6 100644 --- a/lib/app/rendering.ts +++ b/lib/app/rendering.ts @@ -25,6 +25,7 @@ import express, {Request, Response} from 'express'; import _ from 'underscore'; +import {AppArguments} from '../app.interfaces.js'; import {GoldenLayoutRootStruct} from '../clientstate-normalizer.js'; import * as normalizer from '../clientstate-normalizer.js'; import type {ShortLinkMetaData} from '../handlers/handler.interfaces.js'; @@ -37,6 +38,7 @@ import { ServerDependencies, ServerOptions, } from './server.interfaces.js'; +import {getFaviconFilename} from './static-assets.js'; import {isMobileViewer} from './url-handlers.js'; /** @@ -44,12 +46,14 @@ import {isMobileViewer} from './url-handlers.js'; * @param pugRequireHandler - Handler for Pug requires * @param options - Server options * @param dependencies - Server dependencies + * @param appArgs - App arguments * @returns Rendering functions */ export function createRenderHandlers( pugRequireHandler: PugRequireHandler, options: ServerOptions, dependencies: ServerDependencies, + appArgs: AppArguments, ): { renderConfig: RenderConfigFunction; renderGoldenLayout: RenderGoldenLayoutHandler; @@ -80,7 +84,7 @@ export function createRenderHandlers( allExtraOptions.slides = glnormalizer.generatePresentationModeMobileViewerSlides(clientstate); } - const options = _.extend({}, allExtraOptions, clientOptionsHandler.get()); + const options: RenderConfig = _.extend({}, allExtraOptions, clientOptionsHandler.get()); options.optionsHash = clientOptionsHandler.getHash(); options.compilerExplorerOptions = JSON.stringify(allExtraOptions); options.extraBodyClass = options.embedded ? 'embedded' : extraBodyClass; @@ -89,6 +93,7 @@ export function createRenderHandlers( options.storageSolution = options.storageSolution || storageSolution; options.require = pugRequireHandler; options.sponsors = sponsorConfig; + options.faviconFilename = getFaviconFilename(appArgs.devMode, appArgs.env); return options; }; diff --git a/lib/app/server-config.ts b/lib/app/server-config.ts index 18758e914..530916926 100644 --- a/lib/app/server-config.ts +++ b/lib/app/server-config.ts @@ -28,7 +28,6 @@ import express from 'express'; import type {NextFunction, Request, Response, Router} from 'express'; import morgan from 'morgan'; import sanitize from 'sanitize-filename'; -import sFavicon from 'serve-favicon'; import {cached, csp} from '../handlers/middleware.js'; import {logger, makeLogStream} from '../logger.js'; @@ -119,25 +118,36 @@ export function setupLoggingMiddleware(isDevMode: boolean, router: Router): void morgan(morganFormat, { stream: makeLogStream('info'), // Skip for non errors (2xx, 3xx) - skip: (req: Request, res: Response) => res.statusCode >= 400, + skip: (req: Request, res: Response) => res.statusCode >= 400 || isFaviconRequest(req), }), ); router.use( morgan(morganFormat, { stream: makeLogStream('warn'), // Skip for non user errors (4xx) - skip: (req: Request, res: Response) => res.statusCode < 400 || res.statusCode >= 500, + skip: (req: Request, res: Response) => + res.statusCode < 400 || res.statusCode >= 500 || isFaviconRequest(req), }), ); router.use( morgan(morganFormat, { stream: makeLogStream('error'), // Skip for non server errors (5xx) - skip: (req: Request, res: Response) => res.statusCode < 500, + skip: (req: Request, res: Response) => res.statusCode < 500 || isFaviconRequest(req), }), ); } +function isFaviconRequest(req: Request): boolean { + return [ + 'favicon.ico', + 'favicon-beta.ico', + 'favicon-dev.ico', + 'favicon-staging.ico', + 'favicon-suspend.ico', + ].includes(req.path); +} + /** * Setup basic routes for the web server * @param router - Express router @@ -145,7 +155,6 @@ export function setupLoggingMiddleware(isDevMode: boolean, router: Router): void * @param embeddedHandler - Handler for embedded mode * @param ceProps - Compiler Explorer properties * @param awsProps - AWS properties - * @param faviconFilename - Favicon filename * @param options - Server options * @param clientOptionsHandler - Client options handler */ @@ -155,7 +164,6 @@ export function setupBasicRoutes( embeddedHandler: express.Handler, ceProps: PropertyGetter, awsProps: PropertyGetter, - faviconFilename: string, options: ServerOptions, clientOptionsHandler: ClientOptionsSource, ): void { @@ -199,14 +207,6 @@ export function setupBasicRoutes( res.render('sitemap'); }); - // Try to add favicon support, but don't fail if it's not available (useful for tests) - try { - router.use(sFavicon(utils.resolvePathFromAppRoot('static/favicons', faviconFilename))); - } catch (err: unknown) { - const error = err as Error; - logger.warn(`Could not set up favicon: ${error.message}`); - } - router .get('/client-options.js', cached, (req, res) => { res.set('Content-Type', 'application/javascript'); diff --git a/lib/app/server.interfaces.ts b/lib/app/server.interfaces.ts index ce81a0dff..fc6b0b750 100644 --- a/lib/app/server.interfaces.ts +++ b/lib/app/server.interfaces.ts @@ -37,7 +37,7 @@ export interface ServerOptions { staticRoot: string; httpRoot: string; sentrySlowRequestMs: number; - distPath: string; + manifestPath: string; extraBodyClass: string; maxUploadSize: string; } @@ -57,6 +57,7 @@ export interface RenderConfig extends PugOptions { readOnly?: boolean; config?: GoldenLayoutRootStruct; metadata?: ShortLinkMetaData; + faviconFilename: string; storedStateId?: string | false; require?: PugRequireHandler; sponsors?: Sponsors; diff --git a/lib/app/server.ts b/lib/app/server.ts index ce7db197e..463f18311 100644 --- a/lib/app/server.ts +++ b/lib/app/server.ts @@ -28,13 +28,11 @@ import type {AppArguments} from '../app.interfaces.js'; import {logger} from '../logger.js'; import {createRenderHandlers} from './rendering.js'; import {setupBaseServerConfig, setupBasicRoutes, setupLoggingMiddleware} from './server-config.js'; -import {startListening} from './server-listening.js'; import {ServerDependencies, ServerOptions, WebServerResult} from './server.interfaces.js'; -import {getFaviconFilename, setupStaticMiddleware, setupWebPackDevMiddleware} from './static-assets.js'; -import {isMobileViewer} from './url-handlers.js'; +import {setupStaticMiddleware, setupWebPackDevMiddleware} from './static-assets.js'; -// Re-exporting functions that are used by other modules -export {getFaviconFilename, isMobileViewer, startListening}; +export {startListening} from './server-listening.js'; +export {isMobileViewer} from './url-handlers.js'; /** * Configure a web server and its routes @@ -67,6 +65,7 @@ export async function setupWebServer( pugRequireHandler, options, dependencies, + appArgs, ); // Add healthcheck before logging middleware to prevent excessive log entries @@ -81,7 +80,6 @@ export async function setupWebServer( embeddedHandler, dependencies.ceProps, dependencies.awsProps, - getFaviconFilename(appArgs.devMode, appArgs.env), options, dependencies.clientOptionsHandler, ); diff --git a/lib/app/static-assets.ts b/lib/app/static-assets.ts index bc877ecdc..645059981 100644 --- a/lib/app/static-assets.ts +++ b/lib/app/static-assets.ts @@ -74,7 +74,7 @@ export async function setupWebPackDevMiddleware(options: ServerOptions, router: const webpackCompiler = webpack([webpackConfig as WebpackConfiguration]); router.use( webpackDevMiddleware(webpackCompiler, { - publicPath: '/static', + publicPath: '/', stats: { preset: 'errors-only', timings: true, @@ -82,7 +82,7 @@ export async function setupWebPackDevMiddleware(options: ServerOptions, router: }), ); - return path => urljoin(options.httpRoot, 'static', path); + return path => urljoin(options.httpRoot, path); } /** @@ -92,14 +92,14 @@ export async function setupWebPackDevMiddleware(options: ServerOptions, router: * @returns Function to handle Pug requires */ export async function setupStaticMiddleware(options: ServerOptions, router: Router): Promise { - const staticManifest = JSON.parse(await fs.readFile(path.join(options.distPath, 'manifest.json'), 'utf-8')); + const staticManifest = JSON.parse(await fs.readFile(path.join(options.manifestPath, 'manifest.json'), 'utf-8')); if (options.staticUrl) { logger.info(` using static files from '${options.staticUrl}'`); } else { logger.info(` serving static files from '${options.staticPath}'`); router.use( - '/static', + '/', express.static(options.staticPath, { maxAge: options.staticMaxAgeSecs * 1000, }), diff --git a/lib/languages.ts b/lib/languages.ts index a3a622a87..7e9b6776c 100644 --- a/lib/languages.ts +++ b/lib/languages.ts @@ -35,8 +35,8 @@ type DefKeys = | 'alias' | 'previewFilter' | 'formatter' - | 'logoUrl' - | 'logoUrlDark' + | 'logoFilename' + | 'logoFilenameDark' | 'monacoDisassembly' | 'tooltip' | 'digitSeparator'; @@ -48,8 +48,8 @@ const definitions: Record = { monaco: 'jakt', extensions: ['.jakt'], alias: [], - logoUrl: '', - logoUrlDark: null, + logoFilename: null, + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: 'cppp', @@ -59,8 +59,8 @@ const definitions: Record = { monaco: 'cppp', extensions: ['.cpp', '.cxx', '.h', '.hpp', '.hxx', '.c', '.cc', '.ixx'], alias: ['gcc', 'cpp'], - logoUrl: 'c++.svg', - logoUrlDark: null, + logoFilename: 'c++.svg', + logoFilenameDark: null, formatter: 'clangformat', previewFilter: /^\s*#include/, monacoDisassembly: null, @@ -71,8 +71,8 @@ const definitions: Record = { monaco: 'ada', extensions: ['.adb', '.ads'], alias: [], - logoUrl: 'ada.svg', - logoUrlDark: 'ada-dark.svg', + logoFilename: 'ada.svg', + logoFilenameDark: 'ada-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -82,8 +82,8 @@ const definitions: Record = { monaco: 'algol68', extensions: ['.a68'], alias: [], - logoUrl: '', - logoUrlDark: '', + logoFilename: null, + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -93,8 +93,8 @@ const definitions: Record = { monaco: 'asm', extensions: ['.asm'], // maybe add more? Change to a unique one? alias: ['tool', 'tools'], - logoUrl: 'analysis.png', // TODO: Find a better alternative - logoUrlDark: null, + logoFilename: 'analysis.png', // TODO: Find a better alternative + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -105,8 +105,8 @@ const definitions: Record = { monaco: 'java', extensions: ['.java'], alias: [], - logoUrl: 'android.svg', - logoUrlDark: 'android-dark.svg', + logoFilename: 'android.svg', + logoFilenameDark: 'android-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -117,8 +117,8 @@ const definitions: Record = { monaco: 'kotlin', extensions: ['.kt'], alias: [], - logoUrl: 'android.svg', - logoUrlDark: 'android-dark.svg', + logoFilename: 'android.svg', + logoFilenameDark: 'android-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -129,8 +129,8 @@ const definitions: Record = { monaco: 'asm', extensions: ['.asm', '.6502', '.s'], alias: ['asm'], - logoUrl: 'assembly.png', // TODO: Find a better alternative - logoUrlDark: null, + logoFilename: 'assembly.png', // TODO: Find a better alternative + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -140,8 +140,8 @@ const definitions: Record = { monaco: 'nc', extensions: ['.c', '.h'], alias: [], - logoUrl: 'c.svg', - logoUrlDark: null, + logoFilename: 'c.svg', + logoFilenameDark: null, formatter: 'clangformat', previewFilter: /^\s*#include/, monacoDisassembly: null, @@ -152,8 +152,8 @@ const definitions: Record = { monaco: 'c3', extensions: ['.c3'], alias: [], - logoUrl: 'c3.svg', - logoUrlDark: null, + logoFilename: 'c3.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -163,8 +163,8 @@ const definitions: Record = { monaco: 'carbon', extensions: ['.carbon'], alias: [], - logoUrl: 'carbon.png', - logoUrlDark: null, + logoFilename: 'carbon.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -174,8 +174,8 @@ const definitions: Record = { monaco: 'nc', extensions: ['.c', '.h'], alias: [], - logoUrl: 'c.svg', - logoUrlDark: null, + logoFilename: 'c.svg', + logoFilenameDark: null, formatter: 'clangformat', previewFilter: /^\s*#include/, monacoDisassembly: null, @@ -186,8 +186,8 @@ const definitions: Record = { monaco: 'cppp', extensions: ['.cpp', '.h'], alias: [], - logoUrl: 'c++.svg', - logoUrlDark: null, + logoFilename: 'c++.svg', + logoFilenameDark: null, formatter: 'clangformat', previewFilter: /^\s*#include/, monacoDisassembly: null, @@ -199,8 +199,8 @@ const definitions: Record = { extensions: ['.cpp', '.cxx', '.h', '.hpp', '.hxx', '.c'], alias: [], previewFilter: /^\s*#include/, - logoUrl: 'c++.svg', // TODO: Find a better alternative - logoUrlDark: null, + logoFilename: 'c++.svg', // TODO: Find a better alternative + logoFilenameDark: null, formatter: null, monacoDisassembly: null, digitSeparator: "'", @@ -210,9 +210,9 @@ const definitions: Record = { monaco: 'mlir', extensions: ['.mlir'], alias: [], - logoUrl: 'circt.svg', + logoFilename: 'circt.svg', formatter: null, - logoUrlDark: null, + logoFilenameDark: null, previewFilter: null, monacoDisassembly: 'mlir', }, @@ -221,8 +221,8 @@ const definitions: Record = { monaco: 'clean', extensions: ['.icl'], alias: [], - logoUrl: 'clean.svg', // TODO: Find a better alternative - logoUrlDark: null, + logoFilename: 'clean.svg', // TODO: Find a better alternative + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -232,8 +232,8 @@ const definitions: Record = { monaco: 'cmake', extensions: ['.txt'], alias: [], - logoUrl: 'cmake.svg', - logoUrlDark: null, + logoFilename: 'cmake.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -243,8 +243,8 @@ const definitions: Record = { monaco: 'cmake', extensions: ['.cmake'], alias: [], - logoUrl: 'cmake.svg', - logoUrlDark: null, + logoFilename: 'cmake.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -254,9 +254,9 @@ const definitions: Record = { monaco: 'cobol', extensions: ['.cob', '.cbl', '.cobol'], alias: [], - logoUrl: null, // TODO: Find a better alternative + logoFilename: null, // TODO: Find a better alternative formatter: null, - logoUrlDark: null, + logoFilenameDark: null, previewFilter: null, monacoDisassembly: null, }, @@ -265,8 +265,8 @@ const definitions: Record = { monaco: 'cpp-for-opencl', extensions: ['.clcpp', '.cl', '.ocl'], alias: [], - logoUrl: 'opencl.svg', // TODO: Find a better alternative - logoUrlDark: 'opencl-dark.svg', + logoFilename: 'opencl.svg', // TODO: Find a better alternative + logoFilenameDark: 'opencl-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -277,9 +277,9 @@ const definitions: Record = { monaco: 'mlir', extensions: ['.mlir'], alias: [], - logoUrl: 'mlir.svg', + logoFilename: 'mlir.svg', formatter: null, - logoUrlDark: null, + logoFilenameDark: null, previewFilter: null, monacoDisassembly: null, }, @@ -288,8 +288,8 @@ const definitions: Record = { monaco: 'cppp', extensions: ['.cpp', '.cxx', '.h', '.hpp', '.hxx', '.c'], alias: [], - logoUrl: 'c++.svg', - logoUrlDark: null, + logoFilename: 'c++.svg', + logoFilenameDark: null, formatter: null, previewFilter: /^\s*#include/, monacoDisassembly: null, @@ -300,8 +300,8 @@ const definitions: Record = { monaco: 'cppx-blue', extensions: ['.blue', '.cpp', '.cxx', '.h', '.hpp', '.hxx', '.c'], alias: [], - logoUrl: 'c++.svg', // TODO: Find a better alternative - logoUrlDark: null, + logoFilename: 'c++.svg', // TODO: Find a better alternative + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -311,8 +311,8 @@ const definitions: Record = { monaco: 'cppx-gold', extensions: ['.usyntax', '.cpp', '.cxx', '.h', '.hpp', '.hxx', '.c'], alias: [], - logoUrl: 'c++.svg', // TODO: Find a better alternative - logoUrlDark: null, + logoFilename: 'c++.svg', // TODO: Find a better alternative + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -323,8 +323,8 @@ const definitions: Record = { monaco: 'cpp2-cppfront', extensions: ['.cpp2'], alias: [], - logoUrl: 'c++.svg', // TODO: Find a better alternative - logoUrlDark: null, + logoFilename: 'c++.svg', // TODO: Find a better alternative + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: 'cppp', @@ -335,8 +335,8 @@ const definitions: Record = { monaco: 'crystal', extensions: ['.cr'], alias: [], - logoUrl: 'crystal.svg', - logoUrlDark: 'crystal-dark.svg', + logoFilename: 'crystal.svg', + logoFilenameDark: 'crystal-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -347,8 +347,8 @@ const definitions: Record = { monaco: 'csharp', extensions: ['.cs'], alias: [], - logoUrl: 'dotnet.svg', - logoUrlDark: null, + logoFilename: 'dotnet.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -359,8 +359,8 @@ const definitions: Record = { monaco: 'cuda', extensions: ['.cu'], alias: ['nvcc'], - logoUrl: 'cuda.svg', - logoUrlDark: 'cuda-dark.svg', + logoFilename: 'cuda.svg', + logoFilenameDark: 'cuda-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -371,8 +371,8 @@ const definitions: Record = { monaco: 'd', extensions: ['.d'], alias: [], - logoUrl: 'd.svg', - logoUrlDark: null, + logoFilename: 'd.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -382,8 +382,8 @@ const definitions: Record = { monaco: 'dart', extensions: ['.dart'], alias: [], - logoUrl: 'dart.svg', - logoUrlDark: null, + logoFilename: 'dart.svg', + logoFilenameDark: null, formatter: 'dartformat', previewFilter: null, monacoDisassembly: null, @@ -393,8 +393,8 @@ const definitions: Record = { monaco: 'elixir', extensions: ['.ex'], alias: [], - logoUrl: 'elixir.svg', - logoUrlDark: null, + logoFilename: 'elixir.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -404,8 +404,8 @@ const definitions: Record = { monaco: 'erlang', extensions: ['.erl', '.hrl'], alias: [], - logoUrl: 'erlang.svg', - logoUrlDark: null, + logoFilename: 'erlang.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -415,8 +415,8 @@ const definitions: Record = { monaco: 'fortran', extensions: ['.f90', '.F90', '.f95', '.F95', '.f'], alias: [], - logoUrl: 'fortran.svg', - logoUrlDark: null, + logoFilename: 'fortran.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -426,8 +426,8 @@ const definitions: Record = { monaco: 'fsharp', extensions: ['.fs'], alias: [], - logoUrl: 'fsharp.svg', - logoUrlDark: null, + logoFilename: 'fsharp.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -437,8 +437,8 @@ const definitions: Record = { monaco: 'glsl', extensions: ['.glsl'], alias: [], - logoUrl: 'glsl.svg', - logoUrlDark: 'glsl-dark.svg', + logoFilename: 'glsl.svg', + logoFilenameDark: 'glsl-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -448,8 +448,8 @@ const definitions: Record = { monaco: 'go', extensions: ['.go'], alias: [], - logoUrl: 'go.svg', - logoUrlDark: null, + logoFilename: 'go.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -460,8 +460,8 @@ const definitions: Record = { monaco: 'haskell', extensions: ['.hs', '.haskell'], alias: [], - logoUrl: 'haskell.png', - logoUrlDark: null, + logoFilename: 'haskell.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -472,8 +472,8 @@ const definitions: Record = { monaco: 'hlsl', extensions: ['.hlsl', '.hlsli'], alias: [], - logoUrl: 'hlsl.png', - logoUrlDark: null, + logoFilename: 'hlsl.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -483,8 +483,8 @@ const definitions: Record = { monaco: 'hook', extensions: ['.hk', '.hook'], alias: [], - logoUrl: 'hook.png', - logoUrlDark: 'hook-dark.png', + logoFilename: 'hook.png', + logoFilenameDark: 'hook-dark.png', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -494,8 +494,8 @@ const definitions: Record = { monaco: 'hylo', extensions: ['.hylo'], alias: [], - logoUrl: 'hylo.svg', - logoUrlDark: null, + logoFilename: 'hylo.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -505,8 +505,8 @@ const definitions: Record = { monaco: 'asm', extensions: ['.il'], alias: [], - logoUrl: 'dotnet.svg', - logoUrlDark: null, + logoFilename: 'dotnet.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -516,8 +516,8 @@ const definitions: Record = { monaco: 'ispc', extensions: ['.ispc'], alias: [], - logoUrl: 'ispc.png', - logoUrlDark: null, + logoFilename: 'ispc.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -527,8 +527,8 @@ const definitions: Record = { monaco: 'java', extensions: ['.java'], alias: [], - logoUrl: 'java.svg', - logoUrlDark: null, + logoFilename: 'java.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -539,8 +539,8 @@ const definitions: Record = { monaco: 'julia', extensions: ['.jl'], alias: [], - logoUrl: 'julia.svg', - logoUrlDark: null, + logoFilename: 'julia.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -551,8 +551,8 @@ const definitions: Record = { monaco: 'kotlin', extensions: ['.kt'], alias: [], - logoUrl: 'kotlin.svg', - logoUrlDark: null, + logoFilename: 'kotlin.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -563,8 +563,8 @@ const definitions: Record = { monaco: 'llvm-ir', extensions: ['.ll'], alias: [], - logoUrl: 'llvm.png', - logoUrlDark: null, + logoFilename: 'llvm.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -574,8 +574,8 @@ const definitions: Record = { monaco: 'llvm-ir', extensions: ['.mir'], alias: [], - logoUrl: 'llvm.png', - logoUrlDark: null, + logoFilename: 'llvm.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -585,8 +585,8 @@ const definitions: Record = { monaco: 'modula2', extensions: ['.mod'], alias: [], - logoUrl: null, - logoUrlDark: null, + logoFilename: null, + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -596,8 +596,8 @@ const definitions: Record = { monaco: 'mojo', extensions: ['.mojo', '.🔥'], alias: [], - logoUrl: 'mojo.svg', - logoUrlDark: null, + logoFilename: 'mojo.svg', + logoFilenameDark: null, formatter: 'mblack', previewFilter: null, monacoDisassembly: null, @@ -608,8 +608,8 @@ const definitions: Record = { monaco: 'nim', extensions: ['.nim'], alias: [], - logoUrl: 'nim.svg', - logoUrlDark: null, + logoFilename: 'nim.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -619,8 +619,8 @@ const definitions: Record = { monaco: 'python', extensions: ['.py'], alias: [], - logoUrl: 'numba.svg', - logoUrlDark: null, + logoFilename: 'numba.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -630,8 +630,8 @@ const definitions: Record = { monaco: 'nix', extensions: ['.nix'], alias: [], - logoUrl: 'nix.svg', - logoUrlDark: null, + logoFilename: 'nix.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -641,8 +641,8 @@ const definitions: Record = { monaco: 'objective-c', extensions: ['.m'], alias: [], - logoUrl: null, - logoUrlDark: null, + logoFilename: null, + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -652,8 +652,8 @@ const definitions: Record = { monaco: 'objective-c', extensions: ['.mm'], alias: [], - logoUrl: null, - logoUrlDark: null, + logoFilename: null, + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -664,8 +664,8 @@ const definitions: Record = { monaco: 'ocaml', extensions: ['.ml', '.mli'], alias: [], - logoUrl: 'ocaml.svg', - logoUrlDark: null, + logoFilename: 'ocaml.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -675,8 +675,8 @@ const definitions: Record = { monaco: 'odin', extensions: ['.odin'], alias: [], - logoUrl: 'odin.png', - logoUrlDark: null, + logoFilename: 'odin.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -686,8 +686,8 @@ const definitions: Record = { monaco: 'openclc', extensions: ['.cl', '.ocl'], alias: [], - logoUrl: 'opencl.svg', - logoUrlDark: 'opencl-dark.svg', + logoFilename: 'opencl.svg', + logoFilenameDark: 'opencl-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -697,8 +697,8 @@ const definitions: Record = { monaco: 'pascal', extensions: ['.pas', '.dpr'], alias: [], - logoUrl: 'pascal.svg', // TODO: Find a better alternative - logoUrlDark: 'pascal-dark.svg', + logoFilename: 'pascal.svg', // TODO: Find a better alternative + logoFilenameDark: 'pascal-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -708,8 +708,8 @@ const definitions: Record = { monaco: 'pony', extensions: ['.pony'], alias: [], - logoUrl: 'pony.svg', - logoUrlDark: null, + logoFilename: 'pony.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -719,8 +719,8 @@ const definitions: Record = { monaco: 'ptx', extensions: ['.ptx'], alias: [], - logoUrl: 'cuda.svg', - logoUrlDark: 'cuda-dark.svg', + logoFilename: 'cuda.svg', + logoFilenameDark: 'cuda-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -730,8 +730,8 @@ const definitions: Record = { monaco: 'python', extensions: ['.py'], alias: [], - logoUrl: 'python.svg', - logoUrlDark: null, + logoFilename: 'python.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -742,8 +742,8 @@ const definitions: Record = { monaco: 'scheme', extensions: ['.rkt'], alias: [], - logoUrl: 'racket.svg', - logoUrlDark: null, + logoFilename: 'racket.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: 'scheme', @@ -753,8 +753,8 @@ const definitions: Record = { monaco: 'perl', extensions: ['.raku', '.rakutest', '.rakumod', '.rakudoc'], alias: ['Perl 6'], - logoUrl: 'camelia.svg', - logoUrlDark: null, + logoFilename: 'camelia.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -764,8 +764,8 @@ const definitions: Record = { monaco: 'ruby', extensions: ['.rb'], alias: [], - logoUrl: 'ruby.svg', - logoUrlDark: null, + logoFilename: 'ruby.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: 'asmruby', @@ -776,8 +776,8 @@ const definitions: Record = { monaco: 'rustp', extensions: ['.rs'], alias: [], - logoUrl: 'rust.svg', - logoUrlDark: 'rust-dark.svg', + logoFilename: 'rust.svg', + logoFilenameDark: 'rust-dark.svg', formatter: 'rustfmt', previewFilter: null, monacoDisassembly: null, @@ -788,8 +788,8 @@ const definitions: Record = { monaco: 'sail', extensions: ['.sail'], alias: [], - logoUrl: 'sail.svg', - logoUrlDark: null, + logoFilename: 'sail.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -799,8 +799,8 @@ const definitions: Record = { monaco: 'swift', extensions: ['.sn'], alias: [], - logoUrl: 'snowball.svg', - logoUrlDark: 'snowball.svg', + logoFilename: 'snowball.svg', + logoFilenameDark: 'snowball.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -810,8 +810,8 @@ const definitions: Record = { monaco: 'scala', extensions: ['.scala'], alias: [], - logoUrl: 'scala.png', - logoUrlDark: null, + logoFilename: 'scala.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -822,8 +822,8 @@ const definitions: Record = { monaco: 'slang', extensions: ['.slang'], alias: [], - logoUrl: 'slang.svg', - logoUrlDark: 'slang-dark.svg', + logoFilename: 'slang.svg', + logoFilenameDark: 'slang-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -833,8 +833,8 @@ const definitions: Record = { monaco: 'sol', extensions: ['.sol'], alias: [], - logoUrl: 'solidity.svg', - logoUrlDark: null, + logoFilename: 'solidity.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -844,8 +844,8 @@ const definitions: Record = { monaco: 'spice', extensions: ['.spice'], alias: [], - logoUrl: 'spice.png', - logoUrlDark: null, + logoFilename: 'spice.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -855,8 +855,8 @@ const definitions: Record = { monaco: 'spirv', extensions: ['.spvasm'], alias: [], - logoUrl: 'spirv.svg', - logoUrlDark: 'spirv-dark.svg', + logoFilename: 'spirv.svg', + logoFilenameDark: 'spirv-dark.svg', formatter: null, previewFilter: null, monacoDisassembly: null, @@ -866,8 +866,8 @@ const definitions: Record = { monaco: 'swift', extensions: ['.swift'], alias: [], - logoUrl: 'swift.svg', - logoUrlDark: null, + logoFilename: 'swift.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -878,8 +878,8 @@ const definitions: Record = { monaco: 'tablegen', extensions: ['.td'], alias: [], - logoUrl: 'llvm.png', - logoUrlDark: null, + logoFilename: 'llvm.png', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -889,8 +889,8 @@ const definitions: Record = { monaco: 'toit', extensions: ['.toit'], alias: [], - logoUrl: 'toit.svg', - logoUrlDark: null, + logoFilename: 'toit.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -900,8 +900,8 @@ const definitions: Record = { monaco: 'typescript', extensions: ['.ts', '.d.ts'], alias: [], - logoUrl: 'ts.svg', - logoUrlDark: null, + logoFilename: 'ts.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -912,8 +912,8 @@ const definitions: Record = { monaco: 'v', extensions: ['.v', '.vsh'], alias: [], - logoUrl: 'v.svg', - logoUrlDark: null, + logoFilename: 'v.svg', + logoFilenameDark: null, formatter: 'vfmt', previewFilter: null, monacoDisassembly: 'nc', @@ -923,8 +923,8 @@ const definitions: Record = { monaco: 'vala', extensions: ['.vala'], alias: [], - logoUrl: 'vala.svg', - logoUrlDark: null, + logoFilename: 'vala.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -934,8 +934,8 @@ const definitions: Record = { monaco: 'vb', extensions: ['.vb'], alias: [], - logoUrl: 'dotnet.svg', - logoUrlDark: null, + logoFilename: 'dotnet.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -945,8 +945,8 @@ const definitions: Record = { monaco: 'python', extensions: ['.vy'], alias: [], - logoUrl: 'vyper.svg', - logoUrlDark: null, + logoFilename: 'vyper.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -956,8 +956,8 @@ const definitions: Record = { monaco: 'wat', extensions: ['.wat'], alias: [], - logoUrl: 'wasm.svg', - logoUrlDark: null, + logoFilename: 'wasm.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -967,8 +967,8 @@ const definitions: Record = { monaco: 'zig', extensions: ['.zig'], alias: [], - logoUrl: 'zig.svg', - logoUrlDark: null, + logoFilename: 'zig.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -979,8 +979,8 @@ const definitions: Record = { monaco: 'typescript', extensions: ['.mjs'], alias: [], - logoUrl: 'js.svg', - logoUrlDark: null, + logoFilename: 'js.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -991,8 +991,8 @@ const definitions: Record = { monaco: 'nc', extensions: ['.c'], alias: [], - logoUrl: 'gimple.svg', - logoUrlDark: null, + logoFilename: 'gimple.svg', + logoFilenameDark: null, formatter: null, previewFilter: /^\s*#include/, monacoDisassembly: null, @@ -1002,8 +1002,8 @@ const definitions: Record = { monaco: 'llvm-ir', extensions: ['.yl'], alias: [], - logoUrl: null, // ygen does not yet have a logo ping me if it requires one (@Cr0a3) - logoUrlDark: null, + logoFilename: null, // ygen does not yet have a logo ping me if it requires one (@Cr0a3) + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, @@ -1013,8 +1013,8 @@ const definitions: Record = { monaco: 'sway', extensions: ['.sw'], alias: [], - logoUrl: 'sway.svg', - logoUrlDark: null, + logoFilename: 'sway.svg', + logoFilenameDark: null, formatter: null, previewFilter: null, monacoDisassembly: null, diff --git a/package-lock.json b/package-lock.json index 48bb646ec..1667e4bb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,7 +56,6 @@ "sanitize-filename": "^1.6.3", "scroll-into-view-if-needed": "^3.1.0", "semver": "^7.7.2", - "serve-favicon": "^2.5.1", "systemd-socket": "0.0.0", "tar-stream": "^3.1.7", "tom-select": "^2.4.3", @@ -89,7 +88,6 @@ "@types/node-targz": "^0.2.4", "@types/request": "^2.48.12", "@types/response-time": "^2.3.9", - "@types/serve-favicon": "^2.5.7", "@types/temp": "^0.9.4", "@types/underscore": "^1.13.0", "@types/webpack-env": "^1.18.8", @@ -4816,15 +4814,6 @@ "@types/node": "*" } }, - "node_modules/@types/serve-favicon": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/@types/serve-favicon/-/serve-favicon-2.5.7.tgz", - "integrity": "sha512-z9TNUQXdQ+W/OJMP1e3KOYUZ99qJS4+ZfFOIrPGImcayqKoyifbJSEFkVq1MCKBbqjMZpjPj3B5ilrQAR2+TOw==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, "node_modules/@types/serve-static": { "version": "1.15.8", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", @@ -12625,29 +12614,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-favicon": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.1.tgz", - "integrity": "sha512-JndLBslCLA/ebr7rS3d+/EKkzTsTi1jI2T9l+vHfAaGJ7A7NhtDpSZ0lx81HCNWnnE0yHncG+SSnVf9IMxOwXQ==", - "dependencies": { - "etag": "~1.8.1", - "fresh": "~0.5.2", - "ms": "~2.1.3", - "parseurl": "~1.3.2", - "safe-buffer": "~5.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-favicon/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-static": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", diff --git a/package.json b/package.json index 32f39da96..ca51a4830 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "sanitize-filename": "^1.6.3", "scroll-into-view-if-needed": "^3.1.0", "semver": "^7.7.2", - "serve-favicon": "^2.5.1", "systemd-socket": "0.0.0", "tar-stream": "^3.1.7", "tom-select": "^2.4.3", @@ -98,7 +97,6 @@ "@types/node-targz": "^0.2.4", "@types/request": "^2.48.12", "@types/response-time": "^2.3.9", - "@types/serve-favicon": "^2.5.7", "@types/temp": "^0.9.4", "@types/underscore": "^1.13.0", "@types/webpack-env": "^1.18.8", diff --git a/views/resources/cppinsights.svg b/public/cppinsights.svg similarity index 100% rename from views/resources/cppinsights.svg rename to public/cppinsights.svg diff --git a/static/favicons/favicon-beta.ico b/public/favicon-beta.ico similarity index 100% rename from static/favicons/favicon-beta.ico rename to public/favicon-beta.ico diff --git a/static/favicons/favicon-dev.ico b/public/favicon-dev.ico similarity index 100% rename from static/favicons/favicon-dev.ico rename to public/favicon-dev.ico diff --git a/static/favicons/favicon-staging.ico b/public/favicon-staging.ico similarity index 100% rename from static/favicons/favicon-staging.ico rename to public/favicon-staging.ico diff --git a/static/favicons/favicon-suspend.ico b/public/favicon-suspend.ico similarity index 100% rename from static/favicons/favicon-suspend.ico rename to public/favicon-suspend.ico diff --git a/static/favicons/favicon.ico b/public/favicon.ico similarity index 100% rename from static/favicons/favicon.ico rename to public/favicon.ico diff --git a/views/resources/logos/ada-dark.svg b/public/logos/ada-dark.svg similarity index 100% rename from views/resources/logos/ada-dark.svg rename to public/logos/ada-dark.svg diff --git a/views/resources/logos/ada.svg b/public/logos/ada.svg similarity index 100% rename from views/resources/logos/ada.svg rename to public/logos/ada.svg diff --git a/views/resources/logos/analysis.png b/public/logos/analysis.png similarity index 100% rename from views/resources/logos/analysis.png rename to public/logos/analysis.png diff --git a/views/resources/logos/android-dark.svg b/public/logos/android-dark.svg similarity index 100% rename from views/resources/logos/android-dark.svg rename to public/logos/android-dark.svg diff --git a/views/resources/logos/android.svg b/public/logos/android.svg similarity index 100% rename from views/resources/logos/android.svg rename to public/logos/android.svg diff --git a/views/resources/logos/assembly.png b/public/logos/assembly.png similarity index 100% rename from views/resources/logos/assembly.png rename to public/logos/assembly.png diff --git a/views/resources/logos/c++.svg b/public/logos/c++.svg similarity index 98% rename from views/resources/logos/c++.svg rename to public/logos/c++.svg index 4c4b9645c..5e117077e 100755 --- a/views/resources/logos/c++.svg +++ b/public/logos/c++.svg @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/views/resources/logos/c.svg b/public/logos/c.svg similarity index 100% rename from views/resources/logos/c.svg rename to public/logos/c.svg diff --git a/views/resources/logos/c3.svg b/public/logos/c3.svg similarity index 100% rename from views/resources/logos/c3.svg rename to public/logos/c3.svg diff --git a/views/resources/logos/camelia.svg b/public/logos/camelia.svg similarity index 100% rename from views/resources/logos/camelia.svg rename to public/logos/camelia.svg diff --git a/views/resources/logos/carbon.png b/public/logos/carbon.png similarity index 100% rename from views/resources/logos/carbon.png rename to public/logos/carbon.png diff --git a/views/resources/logos/circt.svg b/public/logos/circt.svg similarity index 100% rename from views/resources/logos/circt.svg rename to public/logos/circt.svg diff --git a/views/resources/logos/clean.svg b/public/logos/clean.svg similarity index 100% rename from views/resources/logos/clean.svg rename to public/logos/clean.svg diff --git a/views/resources/logos/cmake.svg b/public/logos/cmake.svg similarity index 100% rename from views/resources/logos/cmake.svg rename to public/logos/cmake.svg diff --git a/views/resources/logos/crystal-dark.svg b/public/logos/crystal-dark.svg similarity index 98% rename from views/resources/logos/crystal-dark.svg rename to public/logos/crystal-dark.svg index d0eae8c11..8e3a0b587 100644 --- a/views/resources/logos/crystal-dark.svg +++ b/public/logos/crystal-dark.svg @@ -1,18 +1,18 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/views/resources/logos/crystal.svg b/public/logos/crystal.svg similarity index 98% rename from views/resources/logos/crystal.svg rename to public/logos/crystal.svg index 1b417fe0d..8ec60f881 100644 --- a/views/resources/logos/crystal.svg +++ b/public/logos/crystal.svg @@ -1,16 +1,16 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/views/resources/logos/cuda-dark.svg b/public/logos/cuda-dark.svg similarity index 100% rename from views/resources/logos/cuda-dark.svg rename to public/logos/cuda-dark.svg diff --git a/views/resources/logos/cuda.svg b/public/logos/cuda.svg similarity index 99% rename from views/resources/logos/cuda.svg rename to public/logos/cuda.svg index 93930024f..d230e0150 100644 --- a/views/resources/logos/cuda.svg +++ b/public/logos/cuda.svg @@ -1,32 +1,32 @@ - - - - -generated by pstoedit version:3.44 from NVBadge_2D.eps - - - - + + + + +generated by pstoedit version:3.44 from NVBadge_2D.eps + + + + diff --git a/views/resources/logos/d.svg b/public/logos/d.svg similarity index 100% rename from views/resources/logos/d.svg rename to public/logos/d.svg diff --git a/views/resources/logos/dart.svg b/public/logos/dart.svg similarity index 100% rename from views/resources/logos/dart.svg rename to public/logos/dart.svg diff --git a/views/resources/logos/dotnet.svg b/public/logos/dotnet.svg similarity index 100% rename from views/resources/logos/dotnet.svg rename to public/logos/dotnet.svg diff --git a/views/resources/logos/elixir.svg b/public/logos/elixir.svg similarity index 100% rename from views/resources/logos/elixir.svg rename to public/logos/elixir.svg diff --git a/views/resources/logos/erlang.svg b/public/logos/erlang.svg similarity index 100% rename from views/resources/logos/erlang.svg rename to public/logos/erlang.svg diff --git a/views/resources/logos/fortran.svg b/public/logos/fortran.svg similarity index 100% rename from views/resources/logos/fortran.svg rename to public/logos/fortran.svg diff --git a/views/resources/logos/fsharp.svg b/public/logos/fsharp.svg similarity index 100% rename from views/resources/logos/fsharp.svg rename to public/logos/fsharp.svg diff --git a/views/resources/logos/gimple.svg b/public/logos/gimple.svg similarity index 100% rename from views/resources/logos/gimple.svg rename to public/logos/gimple.svg diff --git a/views/resources/logos/glsl-dark.svg b/public/logos/glsl-dark.svg similarity index 100% rename from views/resources/logos/glsl-dark.svg rename to public/logos/glsl-dark.svg diff --git a/views/resources/logos/glsl.svg b/public/logos/glsl.svg similarity index 100% rename from views/resources/logos/glsl.svg rename to public/logos/glsl.svg diff --git a/views/resources/logos/go.svg b/public/logos/go.svg similarity index 100% rename from views/resources/logos/go.svg rename to public/logos/go.svg diff --git a/views/resources/logos/haskell.png b/public/logos/haskell.png similarity index 100% rename from views/resources/logos/haskell.png rename to public/logos/haskell.png diff --git a/views/resources/logos/hlsl.png b/public/logos/hlsl.png similarity index 100% rename from views/resources/logos/hlsl.png rename to public/logos/hlsl.png diff --git a/views/resources/logos/hook-dark.png b/public/logos/hook-dark.png similarity index 100% rename from views/resources/logos/hook-dark.png rename to public/logos/hook-dark.png diff --git a/views/resources/logos/hook.png b/public/logos/hook.png similarity index 100% rename from views/resources/logos/hook.png rename to public/logos/hook.png diff --git a/views/resources/logos/hylo.svg b/public/logos/hylo.svg similarity index 100% rename from views/resources/logos/hylo.svg rename to public/logos/hylo.svg diff --git a/views/resources/logos/ispc.png b/public/logos/ispc.png similarity index 100% rename from views/resources/logos/ispc.png rename to public/logos/ispc.png diff --git a/views/resources/logos/java.svg b/public/logos/java.svg similarity index 97% rename from views/resources/logos/java.svg rename to public/logos/java.svg index f2e8ad65e..0803e7c27 100644 --- a/views/resources/logos/java.svg +++ b/public/logos/java.svg @@ -1,49 +1,49 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/views/resources/logos/js.svg b/public/logos/js.svg similarity index 100% rename from views/resources/logos/js.svg rename to public/logos/js.svg diff --git a/views/resources/logos/julia.svg b/public/logos/julia.svg similarity index 100% rename from views/resources/logos/julia.svg rename to public/logos/julia.svg diff --git a/views/resources/logos/kotlin.svg b/public/logos/kotlin.svg similarity index 100% rename from views/resources/logos/kotlin.svg rename to public/logos/kotlin.svg diff --git a/views/resources/logos/llvm.png b/public/logos/llvm.png similarity index 100% rename from views/resources/logos/llvm.png rename to public/logos/llvm.png diff --git a/views/resources/logos/mlir.svg b/public/logos/mlir.svg similarity index 100% rename from views/resources/logos/mlir.svg rename to public/logos/mlir.svg diff --git a/views/resources/logos/mojo.svg b/public/logos/mojo.svg similarity index 100% rename from views/resources/logos/mojo.svg rename to public/logos/mojo.svg diff --git a/views/resources/logos/nim.svg b/public/logos/nim.svg similarity index 100% rename from views/resources/logos/nim.svg rename to public/logos/nim.svg diff --git a/views/resources/logos/nix.svg b/public/logos/nix.svg similarity index 100% rename from views/resources/logos/nix.svg rename to public/logos/nix.svg diff --git a/views/resources/logos/numba.svg b/public/logos/numba.svg similarity index 100% rename from views/resources/logos/numba.svg rename to public/logos/numba.svg diff --git a/views/resources/logos/ocaml.svg b/public/logos/ocaml.svg similarity index 100% rename from views/resources/logos/ocaml.svg rename to public/logos/ocaml.svg diff --git a/views/resources/logos/odin.png b/public/logos/odin.png similarity index 100% rename from views/resources/logos/odin.png rename to public/logos/odin.png diff --git a/views/resources/logos/opencl-dark.svg b/public/logos/opencl-dark.svg similarity index 100% rename from views/resources/logos/opencl-dark.svg rename to public/logos/opencl-dark.svg diff --git a/views/resources/logos/opencl.svg b/public/logos/opencl.svg similarity index 100% rename from views/resources/logos/opencl.svg rename to public/logos/opencl.svg diff --git a/views/resources/logos/pascal-dark.svg b/public/logos/pascal-dark.svg similarity index 100% rename from views/resources/logos/pascal-dark.svg rename to public/logos/pascal-dark.svg diff --git a/views/resources/logos/pascal.svg b/public/logos/pascal.svg similarity index 100% rename from views/resources/logos/pascal.svg rename to public/logos/pascal.svg diff --git a/views/resources/logos/pony.svg b/public/logos/pony.svg similarity index 100% rename from views/resources/logos/pony.svg rename to public/logos/pony.svg diff --git a/views/resources/logos/python.svg b/public/logos/python.svg similarity index 100% rename from views/resources/logos/python.svg rename to public/logos/python.svg diff --git a/views/resources/logos/racket.svg b/public/logos/racket.svg similarity index 100% rename from views/resources/logos/racket.svg rename to public/logos/racket.svg diff --git a/views/resources/logos/ruby.svg b/public/logos/ruby.svg similarity index 100% rename from views/resources/logos/ruby.svg rename to public/logos/ruby.svg diff --git a/views/resources/logos/rust-dark.svg b/public/logos/rust-dark.svg similarity index 100% rename from views/resources/logos/rust-dark.svg rename to public/logos/rust-dark.svg diff --git a/views/resources/logos/rust.svg b/public/logos/rust.svg similarity index 100% rename from views/resources/logos/rust.svg rename to public/logos/rust.svg diff --git a/views/resources/logos/sail.svg b/public/logos/sail.svg similarity index 100% rename from views/resources/logos/sail.svg rename to public/logos/sail.svg diff --git a/views/resources/logos/scala.png b/public/logos/scala.png similarity index 100% rename from views/resources/logos/scala.png rename to public/logos/scala.png diff --git a/views/resources/logos/slang-dark.svg b/public/logos/slang-dark.svg similarity index 98% rename from views/resources/logos/slang-dark.svg rename to public/logos/slang-dark.svg index 39080725d..ff505fef4 100644 --- a/views/resources/logos/slang-dark.svg +++ b/public/logos/slang-dark.svg @@ -1,94 +1,94 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/views/resources/logos/slang.svg b/public/logos/slang.svg similarity index 98% rename from views/resources/logos/slang.svg rename to public/logos/slang.svg index 6c4194565..c63968b99 100644 --- a/views/resources/logos/slang.svg +++ b/public/logos/slang.svg @@ -1,93 +1,93 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/views/resources/logos/snowball.svg b/public/logos/snowball.svg similarity index 100% rename from views/resources/logos/snowball.svg rename to public/logos/snowball.svg diff --git a/views/resources/logos/solidity.svg b/public/logos/solidity.svg similarity index 100% rename from views/resources/logos/solidity.svg rename to public/logos/solidity.svg diff --git a/views/resources/logos/Sonar-dark.svg b/public/logos/sonar-dark.svg similarity index 100% rename from views/resources/logos/Sonar-dark.svg rename to public/logos/sonar-dark.svg diff --git a/views/resources/logos/Sonar.svg b/public/logos/sonar.svg similarity index 100% rename from views/resources/logos/Sonar.svg rename to public/logos/sonar.svg diff --git a/views/resources/logos/spice.png b/public/logos/spice.png similarity index 100% rename from views/resources/logos/spice.png rename to public/logos/spice.png diff --git a/views/resources/logos/spirv-dark.svg b/public/logos/spirv-dark.svg similarity index 98% rename from views/resources/logos/spirv-dark.svg rename to public/logos/spirv-dark.svg index e358df9be..d221ca890 100644 --- a/views/resources/logos/spirv-dark.svg +++ b/public/logos/spirv-dark.svg @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/views/resources/logos/spirv.svg b/public/logos/spirv.svg similarity index 98% rename from views/resources/logos/spirv.svg rename to public/logos/spirv.svg index d0f140f4f..c371a7325 100644 --- a/views/resources/logos/spirv.svg +++ b/public/logos/spirv.svg @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/views/resources/logos/sway.svg b/public/logos/sway.svg similarity index 100% rename from views/resources/logos/sway.svg rename to public/logos/sway.svg diff --git a/views/resources/logos/swift.svg b/public/logos/swift.svg similarity index 100% rename from views/resources/logos/swift.svg rename to public/logos/swift.svg diff --git a/views/resources/logos/toit.svg b/public/logos/toit.svg similarity index 100% rename from views/resources/logos/toit.svg rename to public/logos/toit.svg diff --git a/views/resources/logos/ts.svg b/public/logos/ts.svg similarity index 100% rename from views/resources/logos/ts.svg rename to public/logos/ts.svg diff --git a/views/resources/logos/v.svg b/public/logos/v.svg similarity index 100% rename from views/resources/logos/v.svg rename to public/logos/v.svg diff --git a/views/resources/logos/vala.svg b/public/logos/vala.svg similarity index 100% rename from views/resources/logos/vala.svg rename to public/logos/vala.svg diff --git a/views/resources/logos/vyper.svg b/public/logos/vyper.svg similarity index 100% rename from views/resources/logos/vyper.svg rename to public/logos/vyper.svg diff --git a/views/resources/logos/wasm.svg b/public/logos/wasm.svg similarity index 100% rename from views/resources/logos/wasm.svg rename to public/logos/wasm.svg diff --git a/views/resources/logos/zig.svg b/public/logos/zig.svg similarity index 100% rename from views/resources/logos/zig.svg rename to public/logos/zig.svg diff --git a/views/resources/quickbench.svg b/public/quickbench.svg similarity index 100% rename from views/resources/quickbench.svg rename to public/quickbench.svg diff --git a/views/resources/site-logo-beta.svg b/public/site-logo-beta.svg similarity index 100% rename from views/resources/site-logo-beta.svg rename to public/site-logo-beta.svg diff --git a/views/resources/site-logo-dev.svg b/public/site-logo-dev.svg similarity index 100% rename from views/resources/site-logo-dev.svg rename to public/site-logo-dev.svg diff --git a/views/resources/site-logo-staging.svg b/public/site-logo-staging.svg similarity index 100% rename from views/resources/site-logo-staging.svg rename to public/site-logo-staging.svg diff --git a/views/resources/site-logo.svg b/public/site-logo.svg similarity index 100% rename from views/resources/site-logo.svg rename to public/site-logo.svg diff --git a/views/resources/template_screenshots/Ada IDE.dark.png b/public/template_screenshots/Ada IDE.dark.png similarity index 100% rename from views/resources/template_screenshots/Ada IDE.dark.png rename to public/template_screenshots/Ada IDE.dark.png diff --git a/views/resources/template_screenshots/Ada IDE.darkplus.png b/public/template_screenshots/Ada IDE.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Ada IDE.darkplus.png rename to public/template_screenshots/Ada IDE.darkplus.png diff --git a/views/resources/template_screenshots/Ada IDE.default.png b/public/template_screenshots/Ada IDE.default.png similarity index 100% rename from views/resources/template_screenshots/Ada IDE.default.png rename to public/template_screenshots/Ada IDE.default.png diff --git a/views/resources/template_screenshots/Ada IDE.onedark.png b/public/template_screenshots/Ada IDE.onedark.png similarity index 100% rename from views/resources/template_screenshots/Ada IDE.onedark.png rename to public/template_screenshots/Ada IDE.onedark.png diff --git a/views/resources/template_screenshots/Ada IDE.pink.png b/public/template_screenshots/Ada IDE.pink.png similarity index 100% rename from views/resources/template_screenshots/Ada IDE.pink.png rename to public/template_screenshots/Ada IDE.pink.png diff --git a/views/resources/template_screenshots/Ada IDE.real-dark.png b/public/template_screenshots/Ada IDE.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Ada IDE.real-dark.png rename to public/template_screenshots/Ada IDE.real-dark.png diff --git a/views/resources/template_screenshots/Android Java IDE.dark.png b/public/template_screenshots/Android Java IDE.dark.png similarity index 100% rename from views/resources/template_screenshots/Android Java IDE.dark.png rename to public/template_screenshots/Android Java IDE.dark.png diff --git a/views/resources/template_screenshots/Android Java IDE.darkplus.png b/public/template_screenshots/Android Java IDE.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Android Java IDE.darkplus.png rename to public/template_screenshots/Android Java IDE.darkplus.png diff --git a/views/resources/template_screenshots/Android Java IDE.default.png b/public/template_screenshots/Android Java IDE.default.png similarity index 100% rename from views/resources/template_screenshots/Android Java IDE.default.png rename to public/template_screenshots/Android Java IDE.default.png diff --git a/views/resources/template_screenshots/Android Java IDE.onedark.png b/public/template_screenshots/Android Java IDE.onedark.png similarity index 100% rename from views/resources/template_screenshots/Android Java IDE.onedark.png rename to public/template_screenshots/Android Java IDE.onedark.png diff --git a/views/resources/template_screenshots/Android Java IDE.pink.png b/public/template_screenshots/Android Java IDE.pink.png similarity index 100% rename from views/resources/template_screenshots/Android Java IDE.pink.png rename to public/template_screenshots/Android Java IDE.pink.png diff --git a/views/resources/template_screenshots/Android Java IDE.real-dark.png b/public/template_screenshots/Android Java IDE.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Android Java IDE.real-dark.png rename to public/template_screenshots/Android Java IDE.real-dark.png diff --git a/views/resources/template_screenshots/Android Kotlin IDE.dark.png b/public/template_screenshots/Android Kotlin IDE.dark.png similarity index 100% rename from views/resources/template_screenshots/Android Kotlin IDE.dark.png rename to public/template_screenshots/Android Kotlin IDE.dark.png diff --git a/views/resources/template_screenshots/Android Kotlin IDE.darkplus.png b/public/template_screenshots/Android Kotlin IDE.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Android Kotlin IDE.darkplus.png rename to public/template_screenshots/Android Kotlin IDE.darkplus.png diff --git a/views/resources/template_screenshots/Android Kotlin IDE.default.png b/public/template_screenshots/Android Kotlin IDE.default.png similarity index 100% rename from views/resources/template_screenshots/Android Kotlin IDE.default.png rename to public/template_screenshots/Android Kotlin IDE.default.png diff --git a/views/resources/template_screenshots/Android Kotlin IDE.onedark.png b/public/template_screenshots/Android Kotlin IDE.onedark.png similarity index 100% rename from views/resources/template_screenshots/Android Kotlin IDE.onedark.png rename to public/template_screenshots/Android Kotlin IDE.onedark.png diff --git a/views/resources/template_screenshots/Android Kotlin IDE.pink.png b/public/template_screenshots/Android Kotlin IDE.pink.png similarity index 100% rename from views/resources/template_screenshots/Android Kotlin IDE.pink.png rename to public/template_screenshots/Android Kotlin IDE.pink.png diff --git a/views/resources/template_screenshots/Android Kotlin IDE.real-dark.png b/public/template_screenshots/Android Kotlin IDE.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Android Kotlin IDE.real-dark.png rename to public/template_screenshots/Android Kotlin IDE.real-dark.png diff --git a/views/resources/template_screenshots/C++ Cmake.dark.png b/public/template_screenshots/C++ Cmake.dark.png similarity index 100% rename from views/resources/template_screenshots/C++ Cmake.dark.png rename to public/template_screenshots/C++ Cmake.dark.png diff --git a/views/resources/template_screenshots/C++ Cmake.darkplus.png b/public/template_screenshots/C++ Cmake.darkplus.png similarity index 100% rename from views/resources/template_screenshots/C++ Cmake.darkplus.png rename to public/template_screenshots/C++ Cmake.darkplus.png diff --git a/views/resources/template_screenshots/C++ Cmake.default.png b/public/template_screenshots/C++ Cmake.default.png similarity index 100% rename from views/resources/template_screenshots/C++ Cmake.default.png rename to public/template_screenshots/C++ Cmake.default.png diff --git a/views/resources/template_screenshots/C++ Cmake.onedark.png b/public/template_screenshots/C++ Cmake.onedark.png similarity index 100% rename from views/resources/template_screenshots/C++ Cmake.onedark.png rename to public/template_screenshots/C++ Cmake.onedark.png diff --git a/views/resources/template_screenshots/C++ Cmake.pink.png b/public/template_screenshots/C++ Cmake.pink.png similarity index 100% rename from views/resources/template_screenshots/C++ Cmake.pink.png rename to public/template_screenshots/C++ Cmake.pink.png diff --git a/views/resources/template_screenshots/C++ Cmake.real-dark.png b/public/template_screenshots/C++ Cmake.real-dark.png similarity index 100% rename from views/resources/template_screenshots/C++ Cmake.real-dark.png rename to public/template_screenshots/C++ Cmake.real-dark.png diff --git a/views/resources/template_screenshots/Diff of Two Compilers.dark.png b/public/template_screenshots/Diff of Two Compilers.dark.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Compilers.dark.png rename to public/template_screenshots/Diff of Two Compilers.dark.png diff --git a/views/resources/template_screenshots/Diff of Two Compilers.darkplus.png b/public/template_screenshots/Diff of Two Compilers.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Compilers.darkplus.png rename to public/template_screenshots/Diff of Two Compilers.darkplus.png diff --git a/views/resources/template_screenshots/Diff of Two Compilers.default.png b/public/template_screenshots/Diff of Two Compilers.default.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Compilers.default.png rename to public/template_screenshots/Diff of Two Compilers.default.png diff --git a/views/resources/template_screenshots/Diff of Two Compilers.onedark.png b/public/template_screenshots/Diff of Two Compilers.onedark.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Compilers.onedark.png rename to public/template_screenshots/Diff of Two Compilers.onedark.png diff --git a/views/resources/template_screenshots/Diff of Two Compilers.pink.png b/public/template_screenshots/Diff of Two Compilers.pink.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Compilers.pink.png rename to public/template_screenshots/Diff of Two Compilers.pink.png diff --git a/views/resources/template_screenshots/Diff of Two Compilers.real-dark.png b/public/template_screenshots/Diff of Two Compilers.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Compilers.real-dark.png rename to public/template_screenshots/Diff of Two Compilers.real-dark.png diff --git a/views/resources/template_screenshots/Diff of Two Sources.dark.png b/public/template_screenshots/Diff of Two Sources.dark.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Sources.dark.png rename to public/template_screenshots/Diff of Two Sources.dark.png diff --git a/views/resources/template_screenshots/Diff of Two Sources.darkplus.png b/public/template_screenshots/Diff of Two Sources.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Sources.darkplus.png rename to public/template_screenshots/Diff of Two Sources.darkplus.png diff --git a/views/resources/template_screenshots/Diff of Two Sources.default.png b/public/template_screenshots/Diff of Two Sources.default.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Sources.default.png rename to public/template_screenshots/Diff of Two Sources.default.png diff --git a/views/resources/template_screenshots/Diff of Two Sources.onedark.png b/public/template_screenshots/Diff of Two Sources.onedark.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Sources.onedark.png rename to public/template_screenshots/Diff of Two Sources.onedark.png diff --git a/views/resources/template_screenshots/Diff of Two Sources.pink.png b/public/template_screenshots/Diff of Two Sources.pink.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Sources.pink.png rename to public/template_screenshots/Diff of Two Sources.pink.png diff --git a/views/resources/template_screenshots/Diff of Two Sources.real-dark.png b/public/template_screenshots/Diff of Two Sources.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Diff of Two Sources.real-dark.png rename to public/template_screenshots/Diff of Two Sources.real-dark.png diff --git a/views/resources/template_screenshots/Java IDE.dark.png b/public/template_screenshots/Java IDE.dark.png similarity index 100% rename from views/resources/template_screenshots/Java IDE.dark.png rename to public/template_screenshots/Java IDE.dark.png diff --git a/views/resources/template_screenshots/Java IDE.darkplus.png b/public/template_screenshots/Java IDE.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Java IDE.darkplus.png rename to public/template_screenshots/Java IDE.darkplus.png diff --git a/views/resources/template_screenshots/Java IDE.default.png b/public/template_screenshots/Java IDE.default.png similarity index 100% rename from views/resources/template_screenshots/Java IDE.default.png rename to public/template_screenshots/Java IDE.default.png diff --git a/views/resources/template_screenshots/Java IDE.onedark.png b/public/template_screenshots/Java IDE.onedark.png similarity index 100% rename from views/resources/template_screenshots/Java IDE.onedark.png rename to public/template_screenshots/Java IDE.onedark.png diff --git a/views/resources/template_screenshots/Java IDE.pink.png b/public/template_screenshots/Java IDE.pink.png similarity index 100% rename from views/resources/template_screenshots/Java IDE.pink.png rename to public/template_screenshots/Java IDE.pink.png diff --git a/views/resources/template_screenshots/Java IDE.real-dark.png b/public/template_screenshots/Java IDE.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Java IDE.real-dark.png rename to public/template_screenshots/Java IDE.real-dark.png diff --git a/views/resources/template_screenshots/LLVM IR.dark.png b/public/template_screenshots/LLVM IR.dark.png similarity index 100% rename from views/resources/template_screenshots/LLVM IR.dark.png rename to public/template_screenshots/LLVM IR.dark.png diff --git a/views/resources/template_screenshots/LLVM IR.darkplus.png b/public/template_screenshots/LLVM IR.darkplus.png similarity index 100% rename from views/resources/template_screenshots/LLVM IR.darkplus.png rename to public/template_screenshots/LLVM IR.darkplus.png diff --git a/views/resources/template_screenshots/LLVM IR.default.png b/public/template_screenshots/LLVM IR.default.png similarity index 100% rename from views/resources/template_screenshots/LLVM IR.default.png rename to public/template_screenshots/LLVM IR.default.png diff --git a/views/resources/template_screenshots/LLVM IR.onedark.png b/public/template_screenshots/LLVM IR.onedark.png similarity index 100% rename from views/resources/template_screenshots/LLVM IR.onedark.png rename to public/template_screenshots/LLVM IR.onedark.png diff --git a/views/resources/template_screenshots/LLVM IR.pink.png b/public/template_screenshots/LLVM IR.pink.png similarity index 100% rename from views/resources/template_screenshots/LLVM IR.pink.png rename to public/template_screenshots/LLVM IR.pink.png diff --git a/views/resources/template_screenshots/LLVM IR.real-dark.png b/public/template_screenshots/LLVM IR.real-dark.png similarity index 100% rename from views/resources/template_screenshots/LLVM IR.real-dark.png rename to public/template_screenshots/LLVM IR.real-dark.png diff --git a/views/resources/template_screenshots/Pascal IDE.dark.png b/public/template_screenshots/Pascal IDE.dark.png similarity index 100% rename from views/resources/template_screenshots/Pascal IDE.dark.png rename to public/template_screenshots/Pascal IDE.dark.png diff --git a/views/resources/template_screenshots/Pascal IDE.darkplus.png b/public/template_screenshots/Pascal IDE.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Pascal IDE.darkplus.png rename to public/template_screenshots/Pascal IDE.darkplus.png diff --git a/views/resources/template_screenshots/Pascal IDE.default.png b/public/template_screenshots/Pascal IDE.default.png similarity index 100% rename from views/resources/template_screenshots/Pascal IDE.default.png rename to public/template_screenshots/Pascal IDE.default.png diff --git a/views/resources/template_screenshots/Pascal IDE.onedark.png b/public/template_screenshots/Pascal IDE.onedark.png similarity index 100% rename from views/resources/template_screenshots/Pascal IDE.onedark.png rename to public/template_screenshots/Pascal IDE.onedark.png diff --git a/views/resources/template_screenshots/Pascal IDE.pink.png b/public/template_screenshots/Pascal IDE.pink.png similarity index 100% rename from views/resources/template_screenshots/Pascal IDE.pink.png rename to public/template_screenshots/Pascal IDE.pink.png diff --git a/views/resources/template_screenshots/Pascal IDE.real-dark.png b/public/template_screenshots/Pascal IDE.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Pascal IDE.real-dark.png rename to public/template_screenshots/Pascal IDE.real-dark.png diff --git a/views/resources/template_screenshots/Preprocessor.dark.png b/public/template_screenshots/Preprocessor.dark.png similarity index 100% rename from views/resources/template_screenshots/Preprocessor.dark.png rename to public/template_screenshots/Preprocessor.dark.png diff --git a/views/resources/template_screenshots/Preprocessor.darkplus.png b/public/template_screenshots/Preprocessor.darkplus.png similarity index 100% rename from views/resources/template_screenshots/Preprocessor.darkplus.png rename to public/template_screenshots/Preprocessor.darkplus.png diff --git a/views/resources/template_screenshots/Preprocessor.default.png b/public/template_screenshots/Preprocessor.default.png similarity index 100% rename from views/resources/template_screenshots/Preprocessor.default.png rename to public/template_screenshots/Preprocessor.default.png diff --git a/views/resources/template_screenshots/Preprocessor.onedark.png b/public/template_screenshots/Preprocessor.onedark.png similarity index 100% rename from views/resources/template_screenshots/Preprocessor.onedark.png rename to public/template_screenshots/Preprocessor.onedark.png diff --git a/views/resources/template_screenshots/Preprocessor.pink.png b/public/template_screenshots/Preprocessor.pink.png similarity index 100% rename from views/resources/template_screenshots/Preprocessor.pink.png rename to public/template_screenshots/Preprocessor.pink.png diff --git a/views/resources/template_screenshots/Preprocessor.real-dark.png b/public/template_screenshots/Preprocessor.real-dark.png similarity index 100% rename from views/resources/template_screenshots/Preprocessor.real-dark.png rename to public/template_screenshots/Preprocessor.real-dark.png diff --git a/static/client.d.ts b/static/client.d.ts index 105270869..ed2ce5256 100644 --- a/static/client.d.ts +++ b/static/client.d.ts @@ -36,6 +36,16 @@ declare module '*.pug' { export default content; } +declare module '*.svg' { + const src: string; + export default src; +} + +declare module '*.png' { + const src: string; + export default src; +} + declare module 'lodash.clonedeep' { const cloneDeep: (value: T) => T; export = cloneDeep; diff --git a/static/main.ts b/static/main.ts index 3fa19f102..f4f523508 100644 --- a/static/main.ts +++ b/static/main.ts @@ -27,6 +27,9 @@ import {SentryCapture, SetupSentry, setSentryLayout} from './sentry.js'; SetupSentry(); +// Then configure the options so that window.staticRoot/httpRoot are set +import './options.js'; + import 'whatwg-fetch'; import '@popperjs/core'; import 'bootstrap'; @@ -57,7 +60,7 @@ import {HistoryWidget} from './widgets/history-widget.js'; import {SimpleCook} from './widgets/simplecook.js'; import {setupSiteTemplateWidgetButton} from './widgets/site-templates-widget.js'; -import {Language, LanguageKey} from '../types/languages.interfaces.js'; +import {LanguageKey} from '../types/languages.interfaces.js'; import {ComponentConfig, ComponentStateMap, GoldenLayoutConfig} from './components.interfaces.js'; import {createDragSource, createLayoutItem, toGoldenLayoutConfig} from './components.js'; import {CompilerExplorerOptions} from './global.js'; @@ -65,18 +68,14 @@ import {CompilerExplorerOptions} from './global.js'; import * as utils from '../shared/common-utils.js'; import {ParseFiltersAndOutputOptions} from '../types/features/filters.interfaces.js'; import * as BootstrapUtils from './bootstrap-utils.js'; +import changelogDocument from './generated/changelog.pug'; +import cookiesDocument from './generated/cookies.pug'; +import privacyDocument from './generated/privacy.pug'; import {localStorage, sessionThenLocalStorage} from './local.js'; import {Printerinator} from './print-view.js'; import {setupRealDark, takeUsersOutOfRealDark} from './real-dark.js'; import {formatISODate, updateAndCalcTopBarHeight} from './utils.js'; -const logos = require.context('../views/resources/logos', false, /\.(png|svg)$/); -const siteTemplateScreenshots = require.context('../views/resources/template_screenshots', false, /\.png$/); -import changelogDocument from './generated/changelog.pug'; -import cookiesDocument from './generated/cookies.pug'; -import privacyDocument from './generated/privacy.pug'; - -//css import 'bootstrap/dist/css/bootstrap.min.css'; import 'golden-layout/src/css/goldenlayout-base.css'; import 'tom-select/dist/css/tom-select.bootstrap5.css'; @@ -473,21 +472,6 @@ function removeOrphanedMaximisedItemFromConfig(config) { } } -function setupLanguageLogos(languages: Partial>) { - for (const lang of Object.values(languages)) { - try { - if (lang.logoUrl !== null) { - lang.logoData = logos('./' + lang.logoUrl); - if (lang.logoUrlDark !== null) { - lang.logoDataDark = logos('./' + lang.logoUrlDark); - } - } - } catch (ignored) { - lang.logoData = ''; - } - } -} - function earlyGetDefaultLangSetting() { return Settings.getStoredSettings().defaultLanguage; } @@ -565,8 +549,6 @@ function start() { const defaultLangId = getDefaultLangId(subLangId, options); - setupLanguageLogos(options.languages); - // Cookie domains are matched as a RE against the window location. This allows a flexible // way that works across multiple domains (e.g. godbolt.org and compiler-explorer.com). // We allow this to be configurable so that (for example), gcc.godbolt.org and d.godbolt.org @@ -779,7 +761,7 @@ function start() { } History.trackHistory(layout); - setupSiteTemplateWidgetButton(siteTemplateScreenshots, layout); + setupSiteTemplateWidgetButton(layout); if (!options.embedded) new Sharing(layout); new Printerinator(hub, themer); } diff --git a/static/panes/compiler.ts b/static/panes/compiler.ts index a3a3cef27..93028d034 100644 --- a/static/panes/compiler.ts +++ b/static/panes/compiler.ts @@ -85,8 +85,6 @@ import {SourceAndFiles} from '../download-service.js'; import {SentryCapture} from '../sentry.js'; import {CompilerVersionInfo, setCompilerVersionPopoverForPane} from '../widgets/compiler-version-info.js'; -const toolIcons = require.context('../../views/resources/logos', false, /\.(png|svg)$/); - type CachedOpcode = { found: boolean; data: AssemblyInstructionInfo | string; @@ -2486,17 +2484,14 @@ export class Compiler extends MonacoPane' + '' + '' + - '', + toolIconDark || + toolIcon + '" class="theme-dark-only" width="16px" style="max-height: 16px"/>' + '', ); } else { btn.append(""); diff --git a/static/panes/editor.interfaces.ts b/static/panes/editor.interfaces.ts index 3e2c735cb..0197bef60 100644 --- a/static/panes/editor.interfaces.ts +++ b/static/panes/editor.interfaces.ts @@ -22,7 +22,7 @@ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -import {Language, LanguageKey} from '../../types/languages.interfaces.js'; +import {LanguageKey} from '../../types/languages.interfaces.js'; export type EditorState = { filename?: string; @@ -32,8 +32,3 @@ export type EditorState = { source?: string; lang: LanguageKey; }; - -export type LanguageSelectData = Language & { - logoData?: string; - logoDataDark?: string; -}; diff --git a/static/panes/editor.ts b/static/panes/editor.ts index c69a37784..b48c31b99 100644 --- a/static/panes/editor.ts +++ b/static/panes/editor.ts @@ -25,6 +25,7 @@ import {Buffer} from 'buffer'; import $ from 'jquery'; import * as monaco from 'monaco-editor'; +import {editor} from 'monaco-editor'; // @ts-ignore import * as monacoVim from 'monaco-vim'; import TomSelect from 'tom-select'; @@ -42,21 +43,20 @@ import * as loadSaveLib from '../widgets/load-save.js'; import '../formatter-registry'; import '../modes/_all'; import {Container} from 'golden-layout'; -import {editor} from 'monaco-editor'; -import {Language, LanguageKey} from '../../types/languages.interfaces.js'; -import {Hub} from '../hub.js'; -import {EditorState, LanguageSelectData} from './editor.interfaces.js'; -import {MonacoPaneState, PaneState} from './pane.interfaces.js'; -import {MonacoPane} from './pane.js'; -import IModelDeltaDecoration = editor.IModelDeltaDecoration; import type {escape_html} from 'tom-select/dist/types/utils.js'; import {escapeHTML, isString} from '../../shared/common-utils.js'; import {CompilationResult} from '../../types/compilation/compilation.interfaces.js'; import {CompilerInfo} from '../../types/compiler.interfaces.js'; +import {Language, LanguageKey} from '../../types/languages.interfaces.js'; import {MessageWithLocation, ResultLine} from '../../types/resultline/resultline.interfaces.js'; import {assert, unwrap} from '../assert.js'; +import {Hub} from '../hub.js'; import {Decoration, Motd} from '../motd.interfaces.js'; import {Compiler} from './compiler.js'; +import {EditorState} from './editor.interfaces.js'; +import {MonacoPaneState, PaneState} from './pane.interfaces.js'; +import {MonacoPane} from './pane.js'; +import IModelDeltaDecoration = editor.IModelDeltaDecoration; const loadSave = new loadSaveLib.LoadSave(); const languages = options.languages; @@ -1915,48 +1915,39 @@ export class Editor extends MonacoPane' + - '
' + - ''; - if (data.logoDataDark) { - result += - ''; - } - - result += '
'; - return result; + getSelectizeRenderHtml(language: Language, escapeHtml: typeof escape_html, width: number, height: number): string { + return ` +
+
+ Logo for ${escapeHtml(language.name)} + + ${ + language.logoFilenameDark + ? `Logo for ${escapeHtml(language.name)} + ` + : '' + } +
+
+ ${escapeHtml(language.name)} +
+
+ `; } - renderSelectizeOption(data: LanguageSelectData, escapeHtml: typeof escape_html) { + renderSelectizeOption(data: Language, escapeHtml: typeof escape_html) { return this.getSelectizeRenderHtml(data, escapeHtml, 23, 23); } - renderSelectizeItem(data: LanguageSelectData, escapeHtml: typeof escape_html) { + renderSelectizeItem(data: Language, escapeHtml: typeof escape_html) { return this.getSelectizeRenderHtml(data, escapeHtml, 20, 20); } diff --git a/static/widgets/site-templates-widget.ts b/static/widgets/site-templates-widget.ts index 82aa90543..2544b6663 100644 --- a/static/widgets/site-templates-widget.ts +++ b/static/widgets/site-templates-widget.ts @@ -37,15 +37,10 @@ import {Alert} from './alert.js'; class SiteTemplatesWidget { private readonly modal: JQuery; private readonly img: HTMLImageElement; - private readonly siteTemplateScreenshots: any; private readonly alertSystem: Alert; private templatesConfig: null | SiteTemplateResponse = null; private populated = false; - constructor( - siteTemplateScreenshots: any, - private readonly layout: GoldenLayout, - ) { - this.siteTemplateScreenshots = siteTemplateScreenshots; + constructor(private readonly layout: GoldenLayout) { this.modal = $('#site-template-loader'); const siteTemplatePreview = document.getElementById('site-template-preview'); if (siteTemplatePreview === null) { @@ -99,12 +94,15 @@ class SiteTemplatesWidget { return theme; } getAsset(name: string) { - return this.siteTemplateScreenshots(`./${name}.${this.getCurrentTheme()}.png`); + return `${window.staticRoot}template_screenshots/${name}.${this.getCurrentTheme()}.png`; + } + getDefaultAsset() { + return 'https://placehold.jp/30/4b4b4b/ffffff/1000x800.png?text=we%27ll+support+screenshot+generation+for+user+templates+some+day'; } async setDefaultPreview() { const templatesConfig = await this.getTemplates(); // by the time this is called it will be cached const first = Object.entries(templatesConfig.templates)[0][0]; // preview the first entry - this.img.src = this.getAsset(first); + this.img.src = this.getAsset(first) ?? this.getDefaultAsset(); } populateUserTemplates() { const userTemplates: Record = JSON.parse(localStorage.get('userSiteTemplates', '{}')); @@ -149,13 +147,8 @@ class SiteTemplatesWidget { 'mouseover', () => { const name = titleDivCopy.getAttribute('data-name'); - this.img.src = ''; - if (name) { - this.img.src = this.getAsset(name); - } else { - this.img.src = - 'https://placehold.jp/30/4b4b4b/ffffff/1000x800.png?text=we%27ll+support+screenshot+generation+for+user+templates+some+day'; - } + this.img.src = + name !== null ? (this.getAsset(name) ?? this.getDefaultAsset()) : this.getDefaultAsset(); }, false, ); @@ -183,8 +176,8 @@ class SiteTemplatesWidget { } } -export function setupSiteTemplateWidgetButton(siteTemplateScreenshots: any, layout: GoldenLayout) { - const siteTemplateModal = new SiteTemplatesWidget(siteTemplateScreenshots, layout); +export function setupSiteTemplateWidgetButton(layout: GoldenLayout) { + const siteTemplateModal = new SiteTemplatesWidget(layout); $('#loadSiteTemplate').on('click', () => { siteTemplateModal.show(); }); diff --git a/test/app/config-tests.ts b/test/app/config-tests.ts index c10e07692..aeee70225 100644 --- a/test/app/config-tests.ts +++ b/test/app/config-tests.ts @@ -204,8 +204,8 @@ describe('Config Module', () => { monaco: id, formatter: null, supportsExecute: null, - logoUrl: null, - logoUrlDark: null, + logoFilename: null, + logoFilenameDark: null, example: '', previewFilter: null, monacoDisassembly: null, @@ -358,7 +358,7 @@ describe('Config Module', () => { expect(result).toHaveProperty('extraBodyClass', 'test-class'); expect(result).toHaveProperty('storageSolution', 'local'); expect(result).toHaveProperty('httpRoot', '/ce/'); - expect(result).toHaveProperty('staticRoot', '/ce/static/'); + expect(result).toHaveProperty('staticRoot', '/ce/'); }); it('should enable property debugging when propDebug is true', () => { diff --git a/test/app/rendering-tests.ts b/test/app/rendering-tests.ts index e8bfab98e..3b090f6d8 100644 --- a/test/app/rendering-tests.ts +++ b/test/app/rendering-tests.ts @@ -25,6 +25,7 @@ import express, {type NextFunction, type Request, type Response} from 'express'; import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'; +import {AppArguments} from '../../lib/app.interfaces.js'; import {createRenderHandlers} from '../../lib/app/rendering.js'; import {PugRequireHandler, ServerDependencies, ServerOptions} from '../../lib/app/server.interfaces.js'; @@ -74,6 +75,31 @@ describe('Rendering Module', () => { let mockPugRequireHandler: PugRequireHandler; let mockOptions: ServerOptions; let mockDependencies: ServerDependencies; + const mockAppArgs: AppArguments = { + rootDir: '/test/root', + env: ['test'], + port: 10240, + gitReleaseName: 'test-release', + releaseBuildNumber: '123', + wantedLanguages: ['c++'], + doCache: true, + fetchCompilersFromRemote: true, + ensureNoCompilerClash: false, + prediscovered: undefined, + discoveryOnly: undefined, + staticPath: undefined, + metricsPort: undefined, + useLocalProps: true, + propDebug: false, + tmpDir: undefined, + isWsl: false, + devMode: false, + loggingOptions: { + debug: false, + suppressConsoleLog: false, + paperTrailIdentifier: 'test', + }, + }; beforeEach(() => { mockPugRequireHandler = vi.fn((file: string) => `/static/${file}`); @@ -108,7 +134,12 @@ describe('Rendering Module', () => { }); it('should create renderConfig function that correctly merges options', () => { - const {renderConfig} = createRenderHandlers(mockPugRequireHandler, mockOptions, mockDependencies); + const {renderConfig} = createRenderHandlers( + mockPugRequireHandler, + mockOptions, + mockDependencies, + mockAppArgs, + ); const result = renderConfig({userOption: 'value'}); @@ -130,7 +161,12 @@ describe('Rendering Module', () => { }); it('should set extraBodyClass to "embedded" when embedded is true', () => { - const {renderConfig} = createRenderHandlers(mockPugRequireHandler, mockOptions, mockDependencies); + const {renderConfig} = createRenderHandlers( + mockPugRequireHandler, + mockOptions, + mockDependencies, + mockAppArgs, + ); const result = renderConfig({embedded: true}); @@ -138,7 +174,12 @@ describe('Rendering Module', () => { }); it('should filter URL options to only allow whitelisted properties', () => { - const {renderConfig} = createRenderHandlers(mockPugRequireHandler, mockOptions, mockDependencies); + const {renderConfig} = createRenderHandlers( + mockPugRequireHandler, + mockOptions, + mockDependencies, + mockAppArgs, + ); const urlOptions = { readOnly: 'true', @@ -166,7 +207,12 @@ describe('Rendering Module', () => { it('should generate slides for mobile viewer', () => { // Skip complex mock setup due to TypeScript issues // Just verify we can call it without error - const {renderConfig} = createRenderHandlers(mockPugRequireHandler, mockOptions, mockDependencies); + const {renderConfig} = createRenderHandlers( + mockPugRequireHandler, + mockOptions, + mockDependencies, + mockAppArgs, + ); // This test is simplified to avoid complex mocking issues expect(renderConfig).toBeDefined(); @@ -174,7 +220,12 @@ describe('Rendering Module', () => { }); it('should create renderGoldenLayout function that renders correct template', () => { - const {renderGoldenLayout} = createRenderHandlers(mockPugRequireHandler, mockOptions, mockDependencies); + const {renderGoldenLayout} = createRenderHandlers( + mockPugRequireHandler, + mockOptions, + mockDependencies, + mockAppArgs, + ); const mockConfig = {}; const mockMetadata = {}; @@ -219,7 +270,12 @@ describe('Rendering Module', () => { }); it('should create embeddedHandler function that renders embed template', () => { - const {embeddedHandler} = createRenderHandlers(mockPugRequireHandler, mockOptions, mockDependencies); + const {embeddedHandler} = createRenderHandlers( + mockPugRequireHandler, + mockOptions, + mockDependencies, + mockAppArgs, + ); const mockReq = { query: {foo: 'bar'}, diff --git a/test/app/server-config-tests.ts b/test/app/server-config-tests.ts index a6d34279a..c164ccb45 100644 --- a/test/app/server-config-tests.ts +++ b/test/app/server-config-tests.ts @@ -52,12 +52,6 @@ vi.mock('../../lib/logger.js', async () => { }; }); -vi.mock('serve-favicon', () => { - return { - default: vi.fn(), - }; -}); - vi.mock('../../lib/utils.js', async () => { const actual = await vi.importActual('../../lib/utils.js'); return { diff --git a/test/app/server-tests.ts b/test/app/server-tests.ts index 27cd5d6fa..1b42e8e78 100644 --- a/test/app/server-tests.ts +++ b/test/app/server-tests.ts @@ -97,7 +97,7 @@ describe('Server Module', () => { staticRoot: '/static', httpRoot: '', sentrySlowRequestMs: 500, - distPath: '/mocked/dist', // Use absolute path for testing + manifestPath: '/mocked/dist', // Use absolute path for testing extraBodyClass: 'test-class', maxUploadSize: '1mb', }; diff --git a/test/app/static-assets-tests.ts b/test/app/static-assets-tests.ts index c1480c671..4e11cf95c 100644 --- a/test/app/static-assets-tests.ts +++ b/test/app/static-assets-tests.ts @@ -23,8 +23,7 @@ // POSSIBILITY OF SUCH DAMAGE. import {describe, expect, it, vi} from 'vitest'; -import {getFaviconFilename} from '../../lib/app/server.js'; -import {createDefaultPugRequireHandler} from '../../lib/app/static-assets.js'; +import {createDefaultPugRequireHandler, getFaviconFilename} from '../../lib/app/static-assets.js'; // Mock the logger vi.mock('../../lib/logger.js', () => ({ diff --git a/test/check-img.ts b/test/check-img.ts index 3badad26c..0e576465c 100644 --- a/test/check-img.ts +++ b/test/check-img.ts @@ -29,7 +29,7 @@ import {describe, expect, it} from 'vitest'; import {languages} from '../lib/languages.js'; -const img_dir = path.resolve('views/resources/logos'); +const img_dir = path.resolve('public/logos'); function checkImage(logo: string) { const logoPath = path.join(img_dir, logo); @@ -39,12 +39,12 @@ function checkImage(logo: string) { describe('Language logo check', () => { for (const langId in languages) { const language = languages[langId]; - if (language.logoUrl !== null) { - it(`check if default ${language.name} logo exists`, () => checkImage(language.logoUrl)); + if (language.logoFilename !== null) { + it(`check if default ${language.name} logo exists`, () => checkImage(language.logoFilename)); } - if (language.logoUrlDark !== null) { - it(`check if dark ${language.name} logo exists`, () => checkImage(language.logoUrlDark)); + if (language.logoFilenameDark !== null) { + it(`check if dark ${language.name} logo exists`, () => checkImage(language.logoFilenameDark)); } } }); diff --git a/types/languages.interfaces.ts b/types/languages.interfaces.ts index fce163822..976168207 100644 --- a/types/languages.interfaces.ts +++ b/types/languages.interfaces.ts @@ -125,14 +125,10 @@ export interface Language { formatter: string | null; /** Whether there's at least 1 compiler in this language that supportsExecute */ supportsExecute: boolean | null; - /** Path in /views/resources/logos to the logo of the language */ - logoUrl: string | null; - /** Path in /views/resources/logos to the logo of the language for dark mode use */ - logoUrlDark: string | null; - /** Data from webpack */ - logoData?: any; - /** Data from webpack */ - logoDataDark?: any; + /** Path in /public/logos to the logo of the language */ + logoFilename: string | null; + /** Path in /public/logos to the logo of the language for dark mode use */ + logoFilenameDark: string | null; /** Example code to show in the language's editor */ example: string; previewFilter: RegExp | null; diff --git a/views/error.pug b/views/error.pug index f7c172313..23c3cccc6 100644 --- a/views/error.pug +++ b/views/error.pug @@ -6,8 +6,7 @@ html(lang="en") body(style="background-color:#f2f2f2;display:flex;align-items: center;justify-content: center;") div(style="") a(href=httpRoot title="Go to main site") - svg.normal(height="50" width="165") - include resources/site-logo.svg + img(src=staticRoot + "site-logo.svg" alt="Compiler Explorer logo" height="50" width="165") p Whoops, #{error.message} hr a(href=httpRoot) Main site diff --git a/views/logo.pug b/views/logo.pug index d95aa6fad..c6966d64d 100644 --- a/views/logo.pug +++ b/views/logo.pug @@ -1,9 +1,8 @@ -a.navbar-brand(href=httpRoot title="Compiler Explorer") - svg.logo.align-top(height="50" width="165") - include resources/site-logo.svg - if extraBodyClass === "beta" - include resources/site-logo-beta.svg - else if extraBodyClass === "staging" - include resources/site-logo-staging.svg - else if extraBodyClass === "dev" - include resources/site-logo-dev.svg +a.navbar-brand(href=httpRoot title="Compiler Explorer", style="position: relative") + img(src=staticRoot + "site-logo.svg" alt="Compiler Explorer logo" height="50" width="165") + if extraBodyClass === "beta" + img(src=staticRoot + "site-logo-beta.svg" alt="Compiler Explorer logo (beta)" height="50" width="165" style="position: absolute; top: 0; right: 0;") + else if extraBodyClass === "staging" + img(src=staticRoot + "site-logo-staging.svg" alt="Compiler Explorer logo (staging)" height="50" width="165" style="position: absolute; top: 0; right: 0;") + else if extraBodyClass === "dev" + img(src=staticRoot + "site-logo-dev.svg" alt="Compiler Explorer logo (dev)" height="50" width="165" style="position: absolute; top: 0; right: 0;") diff --git a/views/meta.pug b/views/meta.pug index 31f36357a..a4678c775 100644 --- a/views/meta.pug +++ b/views/meta.pug @@ -1,4 +1,4 @@ -link(rel="icon" href=`${httpRoot}favicon.ico?v=1`) +link(rel="icon" href=`${staticRoot}${faviconFilename}`) meta(charset="utf-8") - var userScalable = mobileViewer ? "yes" : "no" meta(name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=" + userScalable + ", shrink-to-fit=no") diff --git a/views/templates/panes/codeEditor.pug b/views/templates/panes/codeEditor.pug index 179d98719..e0c9dbf51 100644 --- a/views/templates/panes/codeEditor.pug +++ b/views/templates/panes/codeEditor.pug @@ -24,12 +24,10 @@ mixin newPaneButton(classId, text, title, label, icon) if thirdPartyIntegrationEnabled .btn-group.btn-group-sm(role="group" aria-label="External Sites") a.btn.btn-sm.btn-light.open-in-cppinsights(href="https://cppinsights.io/" target="_blank" title="Open in Cppinsights" aria-label="Open in Cppinsights") - svg(height="16" width="16") - include ../../resources/cppinsights.svg + img(height="16" width="16" src=staticRoot + "cppinsights.svg" alt="Cppinsights logo") span.hideable CppInsights a.btn.btn-sm.btn-light.open-in-quickbench(href="http://quick-bench.com/" target="_blank" title="Open in Quick-bench" aria-label="Open in Quick-bench") - svg(height="16" width="16") - include ../../resources/quickbench.svg + img(height="16" width="16" src=staticRoot + "quickbench.svg" alt="Quick-bench logo") span.hideable Quick-bench .btn-group.btn-group-sm.mx-auto button.btn.btn-sm.btn-outline-info.ctrlSNothing(disabled=true style="display: none") diff --git a/webpack.config.esm.ts b/webpack.config.esm.ts index b374f07a9..f0aea3f59 100644 --- a/webpack.config.esm.ts +++ b/webpack.config.esm.ts @@ -47,7 +47,7 @@ log(`compiling for ${isDev ? 'development' : 'production'}.`); const parallelism = Math.floor(os.totalmem() / (4 * 1024 * 1024 * 1024)) + 1; log(`Limiting parallelism to ${parallelism}`); -const distPath = path.resolve(__dirname, 'out', 'dist'); +const manifestPath = path.resolve(__dirname, 'out', 'dist'); const staticPath = path.resolve(__dirname, 'out', 'webpack', 'static'); const hasGit = fs.existsSync(path.resolve(__dirname, '.git')); @@ -85,14 +85,14 @@ const plugins: Webpack.WebpackPluginInstance[] = [ filename: isDev ? '[name].css' : `[name]${webpackJsHack}[contenthash].css`, }), new WebpackManifestPlugin({ - fileName: path.resolve(distPath, 'manifest.json'), + fileName: path.resolve(manifestPath, 'manifest.json'), publicPath: '', }), new Webpack.DefinePlugin({ 'window.PRODUCTION': JSON.stringify(!isDev), }), new CopyWebpackPlugin({ - patterns: [{from: './static/favicons', to: path.resolve(distPath, 'static', 'favicons')}], + patterns: [{from: './public', to: staticPath}], }), ]; @@ -200,4 +200,4 @@ export default { ], }, plugins: plugins, -}; +} satisfies Webpack.Configuration;