diff --git a/.gitignore b/.gitignore index ea15d0ba2d..027400d386 100644 --- a/.gitignore +++ b/.gitignore @@ -54,9 +54,8 @@ Temporary Items .directory .Trash-* -# Ignore all modules except the default modules. +# Ignore all modules /modules/* -!/modules/default # Ignore changes to the custom css files but keep the sample and main. /css/* diff --git a/cspell.config.json b/cspell.config.json index ec3afdc3f6..33ff5bcb04 100644 --- a/cspell.config.json +++ b/cspell.config.json @@ -343,11 +343,11 @@ "ignorePaths": [ "css/roboto.css", "node_modules/**", - "modules/!(default)/**", - "modules/default/**/translations/!(en).json", - "modules/default/calendar/windowsZones.json", - "modules/default/clock/faces/*.svg", - "modules/default/weather/providers/yr.js", + "modules/**", + "defaultmodules/**/translations/!(en).json", + "defaultmodules/calendar/windowsZones.json", + "defaultmodules/clock/faces/*.svg", + "defaultmodules/weather/providers/yr.js", "tests/mocks/**", "tests/e2e/modules/clock_es_spec.js", "translations/**" diff --git a/modules/default/alert/README.md b/defaultmodules/alert/README.md similarity index 100% rename from modules/default/alert/README.md rename to defaultmodules/alert/README.md diff --git a/modules/default/alert/alert.js b/defaultmodules/alert/alert.js similarity index 100% rename from modules/default/alert/alert.js rename to defaultmodules/alert/alert.js diff --git a/modules/default/alert/notificationFx.js b/defaultmodules/alert/notificationFx.js similarity index 100% rename from modules/default/alert/notificationFx.js rename to defaultmodules/alert/notificationFx.js diff --git a/modules/default/alert/styles/center.css b/defaultmodules/alert/styles/center.css similarity index 100% rename from modules/default/alert/styles/center.css rename to defaultmodules/alert/styles/center.css diff --git a/modules/default/alert/styles/left.css b/defaultmodules/alert/styles/left.css similarity index 100% rename from modules/default/alert/styles/left.css rename to defaultmodules/alert/styles/left.css diff --git a/modules/default/alert/styles/notificationFx.css b/defaultmodules/alert/styles/notificationFx.css similarity index 100% rename from modules/default/alert/styles/notificationFx.css rename to defaultmodules/alert/styles/notificationFx.css diff --git a/modules/default/alert/styles/right.css b/defaultmodules/alert/styles/right.css similarity index 100% rename from modules/default/alert/styles/right.css rename to defaultmodules/alert/styles/right.css diff --git a/modules/default/alert/templates/alert.njk b/defaultmodules/alert/templates/alert.njk similarity index 100% rename from modules/default/alert/templates/alert.njk rename to defaultmodules/alert/templates/alert.njk diff --git a/modules/default/alert/templates/notification.njk b/defaultmodules/alert/templates/notification.njk similarity index 100% rename from modules/default/alert/templates/notification.njk rename to defaultmodules/alert/templates/notification.njk diff --git a/modules/default/alert/translations/bg.json b/defaultmodules/alert/translations/bg.json similarity index 100% rename from modules/default/alert/translations/bg.json rename to defaultmodules/alert/translations/bg.json diff --git a/modules/default/alert/translations/da.json b/defaultmodules/alert/translations/da.json similarity index 100% rename from modules/default/alert/translations/da.json rename to defaultmodules/alert/translations/da.json diff --git a/modules/default/alert/translations/de.json b/defaultmodules/alert/translations/de.json similarity index 100% rename from modules/default/alert/translations/de.json rename to defaultmodules/alert/translations/de.json diff --git a/modules/default/alert/translations/el.json b/defaultmodules/alert/translations/el.json similarity index 100% rename from modules/default/alert/translations/el.json rename to defaultmodules/alert/translations/el.json diff --git a/modules/default/alert/translations/en.json b/defaultmodules/alert/translations/en.json similarity index 100% rename from modules/default/alert/translations/en.json rename to defaultmodules/alert/translations/en.json diff --git a/modules/default/alert/translations/eo.json b/defaultmodules/alert/translations/eo.json similarity index 100% rename from modules/default/alert/translations/eo.json rename to defaultmodules/alert/translations/eo.json diff --git a/modules/default/alert/translations/es.json b/defaultmodules/alert/translations/es.json similarity index 100% rename from modules/default/alert/translations/es.json rename to defaultmodules/alert/translations/es.json diff --git a/modules/default/alert/translations/fr.json b/defaultmodules/alert/translations/fr.json similarity index 100% rename from modules/default/alert/translations/fr.json rename to defaultmodules/alert/translations/fr.json diff --git a/modules/default/alert/translations/hu.json b/defaultmodules/alert/translations/hu.json similarity index 100% rename from modules/default/alert/translations/hu.json rename to defaultmodules/alert/translations/hu.json diff --git a/modules/default/alert/translations/nl.json b/defaultmodules/alert/translations/nl.json similarity index 100% rename from modules/default/alert/translations/nl.json rename to defaultmodules/alert/translations/nl.json diff --git a/modules/default/alert/translations/pt-br.json b/defaultmodules/alert/translations/pt-br.json similarity index 100% rename from modules/default/alert/translations/pt-br.json rename to defaultmodules/alert/translations/pt-br.json diff --git a/modules/default/alert/translations/pt.json b/defaultmodules/alert/translations/pt.json similarity index 100% rename from modules/default/alert/translations/pt.json rename to defaultmodules/alert/translations/pt.json diff --git a/modules/default/alert/translations/ru.json b/defaultmodules/alert/translations/ru.json similarity index 100% rename from modules/default/alert/translations/ru.json rename to defaultmodules/alert/translations/ru.json diff --git a/modules/default/alert/translations/th.json b/defaultmodules/alert/translations/th.json similarity index 100% rename from modules/default/alert/translations/th.json rename to defaultmodules/alert/translations/th.json diff --git a/modules/default/calendar/README.md b/defaultmodules/calendar/README.md similarity index 100% rename from modules/default/calendar/README.md rename to defaultmodules/calendar/README.md diff --git a/modules/default/calendar/calendar.css b/defaultmodules/calendar/calendar.css similarity index 100% rename from modules/default/calendar/calendar.css rename to defaultmodules/calendar/calendar.css diff --git a/modules/default/calendar/calendar.js b/defaultmodules/calendar/calendar.js similarity index 100% rename from modules/default/calendar/calendar.js rename to defaultmodules/calendar/calendar.js diff --git a/modules/default/calendar/calendarfetcher.js b/defaultmodules/calendar/calendarfetcher.js similarity index 100% rename from modules/default/calendar/calendarfetcher.js rename to defaultmodules/calendar/calendarfetcher.js diff --git a/modules/default/calendar/calendarfetcherutils.js b/defaultmodules/calendar/calendarfetcherutils.js similarity index 100% rename from modules/default/calendar/calendarfetcherutils.js rename to defaultmodules/calendar/calendarfetcherutils.js diff --git a/modules/default/calendar/calendarutils.js b/defaultmodules/calendar/calendarutils.js similarity index 100% rename from modules/default/calendar/calendarutils.js rename to defaultmodules/calendar/calendarutils.js diff --git a/modules/default/calendar/debug.js b/defaultmodules/calendar/debug.js similarity index 96% rename from modules/default/calendar/debug.js rename to defaultmodules/calendar/debug.js index 53a0d78046..87f2b788f2 100644 --- a/modules/default/calendar/debug.js +++ b/defaultmodules/calendar/debug.js @@ -4,7 +4,7 @@ * of starting the MagicMirror² core. Adjust the values below to your desire. */ // Load internal alias resolver -require("../../../js/alias-resolver"); +require("../../js/alias-resolver"); const Log = require("logger"); const CalendarFetcher = require("./calendarfetcher"); diff --git a/modules/default/calendar/node_helper.js b/defaultmodules/calendar/node_helper.js similarity index 100% rename from modules/default/calendar/node_helper.js rename to defaultmodules/calendar/node_helper.js diff --git a/modules/default/calendar/windowsZones.json b/defaultmodules/calendar/windowsZones.json similarity index 100% rename from modules/default/calendar/windowsZones.json rename to defaultmodules/calendar/windowsZones.json diff --git a/modules/default/clock/README.md b/defaultmodules/clock/README.md similarity index 100% rename from modules/default/clock/README.md rename to defaultmodules/clock/README.md diff --git a/modules/default/clock/clock.js b/defaultmodules/clock/clock.js similarity index 100% rename from modules/default/clock/clock.js rename to defaultmodules/clock/clock.js diff --git a/modules/default/clock/clock_styles.css b/defaultmodules/clock/clock_styles.css similarity index 100% rename from modules/default/clock/clock_styles.css rename to defaultmodules/clock/clock_styles.css diff --git a/modules/default/clock/faces/face-001.svg b/defaultmodules/clock/faces/face-001.svg similarity index 100% rename from modules/default/clock/faces/face-001.svg rename to defaultmodules/clock/faces/face-001.svg diff --git a/modules/default/clock/faces/face-002.svg b/defaultmodules/clock/faces/face-002.svg similarity index 100% rename from modules/default/clock/faces/face-002.svg rename to defaultmodules/clock/faces/face-002.svg diff --git a/modules/default/clock/faces/face-003.svg b/defaultmodules/clock/faces/face-003.svg similarity index 100% rename from modules/default/clock/faces/face-003.svg rename to defaultmodules/clock/faces/face-003.svg diff --git a/modules/default/clock/faces/face-004.svg b/defaultmodules/clock/faces/face-004.svg similarity index 100% rename from modules/default/clock/faces/face-004.svg rename to defaultmodules/clock/faces/face-004.svg diff --git a/modules/default/clock/faces/face-005.svg b/defaultmodules/clock/faces/face-005.svg similarity index 100% rename from modules/default/clock/faces/face-005.svg rename to defaultmodules/clock/faces/face-005.svg diff --git a/modules/default/clock/faces/face-006.svg b/defaultmodules/clock/faces/face-006.svg similarity index 100% rename from modules/default/clock/faces/face-006.svg rename to defaultmodules/clock/faces/face-006.svg diff --git a/modules/default/clock/faces/face-007.svg b/defaultmodules/clock/faces/face-007.svg similarity index 100% rename from modules/default/clock/faces/face-007.svg rename to defaultmodules/clock/faces/face-007.svg diff --git a/modules/default/clock/faces/face-008.svg b/defaultmodules/clock/faces/face-008.svg similarity index 100% rename from modules/default/clock/faces/face-008.svg rename to defaultmodules/clock/faces/face-008.svg diff --git a/modules/default/clock/faces/face-009.svg b/defaultmodules/clock/faces/face-009.svg similarity index 100% rename from modules/default/clock/faces/face-009.svg rename to defaultmodules/clock/faces/face-009.svg diff --git a/modules/default/clock/faces/face-010.svg b/defaultmodules/clock/faces/face-010.svg similarity index 100% rename from modules/default/clock/faces/face-010.svg rename to defaultmodules/clock/faces/face-010.svg diff --git a/modules/default/clock/faces/face-011.svg b/defaultmodules/clock/faces/face-011.svg similarity index 100% rename from modules/default/clock/faces/face-011.svg rename to defaultmodules/clock/faces/face-011.svg diff --git a/modules/default/clock/faces/face-012.svg b/defaultmodules/clock/faces/face-012.svg similarity index 100% rename from modules/default/clock/faces/face-012.svg rename to defaultmodules/clock/faces/face-012.svg diff --git a/modules/default/compliments/README.md b/defaultmodules/compliments/README.md similarity index 100% rename from modules/default/compliments/README.md rename to defaultmodules/compliments/README.md diff --git a/modules/default/compliments/compliments.js b/defaultmodules/compliments/compliments.js similarity index 100% rename from modules/default/compliments/compliments.js rename to defaultmodules/compliments/compliments.js diff --git a/modules/default/defaultmodules.js b/defaultmodules/defaultmodules.js similarity index 100% rename from modules/default/defaultmodules.js rename to defaultmodules/defaultmodules.js diff --git a/modules/default/helloworld/README.md b/defaultmodules/helloworld/README.md similarity index 100% rename from modules/default/helloworld/README.md rename to defaultmodules/helloworld/README.md diff --git a/modules/default/helloworld/helloworld.js b/defaultmodules/helloworld/helloworld.js similarity index 100% rename from modules/default/helloworld/helloworld.js rename to defaultmodules/helloworld/helloworld.js diff --git a/modules/default/helloworld/helloworld.njk b/defaultmodules/helloworld/helloworld.njk similarity index 100% rename from modules/default/helloworld/helloworld.njk rename to defaultmodules/helloworld/helloworld.njk diff --git a/modules/default/newsfeed/README.md b/defaultmodules/newsfeed/README.md similarity index 100% rename from modules/default/newsfeed/README.md rename to defaultmodules/newsfeed/README.md diff --git a/modules/default/newsfeed/fullarticle.njk b/defaultmodules/newsfeed/fullarticle.njk similarity index 100% rename from modules/default/newsfeed/fullarticle.njk rename to defaultmodules/newsfeed/fullarticle.njk diff --git a/modules/default/newsfeed/newsfeed.css b/defaultmodules/newsfeed/newsfeed.css similarity index 100% rename from modules/default/newsfeed/newsfeed.css rename to defaultmodules/newsfeed/newsfeed.css diff --git a/modules/default/newsfeed/newsfeed.js b/defaultmodules/newsfeed/newsfeed.js similarity index 100% rename from modules/default/newsfeed/newsfeed.js rename to defaultmodules/newsfeed/newsfeed.js diff --git a/modules/default/newsfeed/newsfeed.njk b/defaultmodules/newsfeed/newsfeed.njk similarity index 100% rename from modules/default/newsfeed/newsfeed.njk rename to defaultmodules/newsfeed/newsfeed.njk diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/defaultmodules/newsfeed/newsfeedfetcher.js similarity index 100% rename from modules/default/newsfeed/newsfeedfetcher.js rename to defaultmodules/newsfeed/newsfeedfetcher.js diff --git a/modules/default/newsfeed/node_helper.js b/defaultmodules/newsfeed/node_helper.js similarity index 100% rename from modules/default/newsfeed/node_helper.js rename to defaultmodules/newsfeed/node_helper.js diff --git a/modules/default/newsfeed/oldconfig.njk b/defaultmodules/newsfeed/oldconfig.njk similarity index 100% rename from modules/default/newsfeed/oldconfig.njk rename to defaultmodules/newsfeed/oldconfig.njk diff --git a/modules/default/updatenotification/README.md b/defaultmodules/updatenotification/README.md similarity index 100% rename from modules/default/updatenotification/README.md rename to defaultmodules/updatenotification/README.md diff --git a/modules/default/updatenotification/git_helper.js b/defaultmodules/updatenotification/git_helper.js similarity index 100% rename from modules/default/updatenotification/git_helper.js rename to defaultmodules/updatenotification/git_helper.js diff --git a/modules/default/updatenotification/node_helper.js b/defaultmodules/updatenotification/node_helper.js similarity index 96% rename from modules/default/updatenotification/node_helper.js rename to defaultmodules/updatenotification/node_helper.js index b5c5fbd113..a80c09b800 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/defaultmodules/updatenotification/node_helper.js @@ -2,7 +2,7 @@ const fs = require("node:fs"); const path = require("node:path"); const NodeHelper = require("node_helper"); -const defaultModules = require(`${global.root_path}/modules/default/defaultmodules`); +const defaultModules = require(`${global.root_path}/${global.defaultModulesDir}/defaultmodules`); const GitHelper = require("./git_helper"); const UpdateHelper = require("./update_helper"); diff --git a/modules/default/updatenotification/update_helper.js b/defaultmodules/updatenotification/update_helper.js similarity index 100% rename from modules/default/updatenotification/update_helper.js rename to defaultmodules/updatenotification/update_helper.js diff --git a/modules/default/updatenotification/updatenotification.css b/defaultmodules/updatenotification/updatenotification.css similarity index 100% rename from modules/default/updatenotification/updatenotification.css rename to defaultmodules/updatenotification/updatenotification.css diff --git a/modules/default/updatenotification/updatenotification.js b/defaultmodules/updatenotification/updatenotification.js similarity index 100% rename from modules/default/updatenotification/updatenotification.js rename to defaultmodules/updatenotification/updatenotification.js diff --git a/modules/default/updatenotification/updatenotification.njk b/defaultmodules/updatenotification/updatenotification.njk similarity index 100% rename from modules/default/updatenotification/updatenotification.njk rename to defaultmodules/updatenotification/updatenotification.njk diff --git a/modules/default/utils.js b/defaultmodules/utils.js similarity index 100% rename from modules/default/utils.js rename to defaultmodules/utils.js diff --git a/modules/default/weather/README.md b/defaultmodules/weather/README.md similarity index 100% rename from modules/default/weather/README.md rename to defaultmodules/weather/README.md diff --git a/modules/default/weather/current.njk b/defaultmodules/weather/current.njk similarity index 100% rename from modules/default/weather/current.njk rename to defaultmodules/weather/current.njk diff --git a/modules/default/weather/forecast.njk b/defaultmodules/weather/forecast.njk similarity index 100% rename from modules/default/weather/forecast.njk rename to defaultmodules/weather/forecast.njk diff --git a/modules/default/weather/hourly.njk b/defaultmodules/weather/hourly.njk similarity index 100% rename from modules/default/weather/hourly.njk rename to defaultmodules/weather/hourly.njk diff --git a/modules/default/weather/providers/README.md b/defaultmodules/weather/providers/README.md similarity index 100% rename from modules/default/weather/providers/README.md rename to defaultmodules/weather/providers/README.md diff --git a/modules/default/weather/providers/envcanada.js b/defaultmodules/weather/providers/envcanada.js similarity index 100% rename from modules/default/weather/providers/envcanada.js rename to defaultmodules/weather/providers/envcanada.js diff --git a/modules/default/weather/providers/openmeteo.js b/defaultmodules/weather/providers/openmeteo.js similarity index 100% rename from modules/default/weather/providers/openmeteo.js rename to defaultmodules/weather/providers/openmeteo.js diff --git a/modules/default/weather/providers/openweathermap.js b/defaultmodules/weather/providers/openweathermap.js similarity index 100% rename from modules/default/weather/providers/openweathermap.js rename to defaultmodules/weather/providers/openweathermap.js diff --git a/modules/default/weather/providers/overrideWrapper.js b/defaultmodules/weather/providers/overrideWrapper.js similarity index 100% rename from modules/default/weather/providers/overrideWrapper.js rename to defaultmodules/weather/providers/overrideWrapper.js diff --git a/modules/default/weather/providers/pirateweather.js b/defaultmodules/weather/providers/pirateweather.js similarity index 100% rename from modules/default/weather/providers/pirateweather.js rename to defaultmodules/weather/providers/pirateweather.js diff --git a/modules/default/weather/providers/smhi.js b/defaultmodules/weather/providers/smhi.js similarity index 100% rename from modules/default/weather/providers/smhi.js rename to defaultmodules/weather/providers/smhi.js diff --git a/modules/default/weather/providers/ukmetofficedatahub.js b/defaultmodules/weather/providers/ukmetofficedatahub.js similarity index 100% rename from modules/default/weather/providers/ukmetofficedatahub.js rename to defaultmodules/weather/providers/ukmetofficedatahub.js diff --git a/modules/default/weather/providers/weatherbit.js b/defaultmodules/weather/providers/weatherbit.js similarity index 100% rename from modules/default/weather/providers/weatherbit.js rename to defaultmodules/weather/providers/weatherbit.js diff --git a/modules/default/weather/providers/weatherflow.js b/defaultmodules/weather/providers/weatherflow.js similarity index 100% rename from modules/default/weather/providers/weatherflow.js rename to defaultmodules/weather/providers/weatherflow.js diff --git a/modules/default/weather/providers/weathergov.js b/defaultmodules/weather/providers/weathergov.js similarity index 100% rename from modules/default/weather/providers/weathergov.js rename to defaultmodules/weather/providers/weathergov.js diff --git a/modules/default/weather/providers/yr.js b/defaultmodules/weather/providers/yr.js similarity index 100% rename from modules/default/weather/providers/yr.js rename to defaultmodules/weather/providers/yr.js diff --git a/modules/default/weather/weather.css b/defaultmodules/weather/weather.css similarity index 100% rename from modules/default/weather/weather.css rename to defaultmodules/weather/weather.css diff --git a/modules/default/weather/weather.js b/defaultmodules/weather/weather.js similarity index 100% rename from modules/default/weather/weather.js rename to defaultmodules/weather/weather.js diff --git a/modules/default/weather/weatherobject.js b/defaultmodules/weather/weatherobject.js similarity index 100% rename from modules/default/weather/weatherobject.js rename to defaultmodules/weather/weatherobject.js diff --git a/modules/default/weather/weatherprovider.js b/defaultmodules/weather/weatherprovider.js similarity index 100% rename from modules/default/weather/weatherprovider.js rename to defaultmodules/weather/weatherprovider.js diff --git a/modules/default/weather/weatherutils.js b/defaultmodules/weather/weatherutils.js similarity index 100% rename from modules/default/weather/weatherutils.js rename to defaultmodules/weather/weatherutils.js diff --git a/eslint.config.mjs b/eslint.config.mjs index b15ba037e0..d6cdcdc311 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -9,7 +9,7 @@ import stylistic from "@stylistic/eslint-plugin"; import vitest from "@vitest/eslint-plugin"; export default defineConfig([ - globalIgnores(["config/**", "modules/**/*", "!modules/default/**", "js/positions.js"]), + globalIgnores(["config/**", "modules/**/*", "js/positions.js"]), { files: ["**/*.js"], languageOptions: { diff --git a/index.html b/index.html index e3fb8497a5..dcd354b776 100644 --- a/index.html +++ b/index.html @@ -46,8 +46,8 @@ - - + + diff --git a/jest.config.js b/jest.config.js index ee51664fc9..bb4942cf4b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -31,7 +31,7 @@ const config = { collectCoverageFrom: [ "/clientonly/**/*.js", "/js/**/*.js", - "/modules/default/**/*.js", + "/defaultmodules/**/*.js", "/serveronly/**/*.js" ], coverageReporters: ["lcov", "text"], diff --git a/js/app.js b/js/app.js index 85baed381f..a67bf1b8cd 100644 --- a/js/app.js +++ b/js/app.js @@ -13,7 +13,6 @@ global.root_path = path.resolve(`${__dirname}/../`); const Server = require(`${__dirname}/server`); const Utils = require(`${__dirname}/utils`); -const defaultModules = require(`${global.root_path}/modules/default/defaultmodules`); // used to control fetch timeout for node_helpers const { setGlobalDispatcher, Agent } = require("undici"); const { getEnvVarsAsObj, getConfigFilePath } = require("#server_functions"); @@ -57,6 +56,7 @@ process.on("uncaughtException", function (err) { function App () { let nodeHelpers = []; let httpServer; + let defaultModules; /** * Loads the config file. Combines it with the defaults and returns the config @@ -185,7 +185,7 @@ function App () { let moduleFolder = path.resolve(`${global.root_path}/${env.modulesDir}`, module); if (defaultModules.includes(moduleName)) { - const defaultModuleFolder = path.resolve(`${global.root_path}/modules/default/`, module); + const defaultModuleFolder = path.resolve(`${global.root_path}/${global.defaultModulesDir}/`, module); if (!global.mmTestMode) { moduleFolder = defaultModuleFolder; } else { @@ -291,6 +291,9 @@ function App () { this.start = async function () { config = await loadConfig(); + global.defaultModulesDir = config.defaultModulesDir; + defaultModules = require(`${global.root_path}/${global.defaultModulesDir}/defaultmodules`); + Log.setLogLevel(config.logLevel); // get the used module positions diff --git a/js/defaults.js b/js/defaults.js index 469a172b37..88a706d7e4 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -20,6 +20,7 @@ const defaults = { zoom: 1, customCss: "css/custom.css", foreignModulesDir: "modules", + defaultModulesDir: "defaultmodules", // httpHeaders used by helmet, see https://helmetjs.github.io/. You can add other/more object values by overriding this in config.js, // e.g. you need to add `frameguard: false` for embedding MagicMirror in another website, see https://github.com/MagicMirrorOrg/MagicMirror/issues/2847 httpHeaders: { contentSecurityPolicy: false, crossOriginOpenerPolicy: false, crossOriginEmbedderPolicy: false, crossOriginResourcePolicy: false, originAgentCluster: false }, diff --git a/js/loader.js b/js/loader.js index b3cfd71910..dac0b5f56b 100644 --- a/js/loader.js +++ b/js/loader.js @@ -17,6 +17,7 @@ const Loader = (function () { const getEnvVarsFromConfig = function () { return { modulesDir: config.foreignModulesDir || "modules", + defaultModulesDir: config.defaultModulesDir || "defaultmodules", customCss: config.customCss || "css/custom.css" }; }; @@ -103,7 +104,7 @@ const Loader = (function () { let moduleFolder = `${envVars.modulesDir}/${module}`; if (defaultModules.indexOf(moduleName) !== -1) { - const defaultModuleFolder = `modules/default/${module}`; + const defaultModuleFolder = `${envVars.defaultModulesDir}/${module}`; if (window.name !== "jsdom") { moduleFolder = defaultModuleFolder; } else { diff --git a/js/server.js b/js/server.js index 2caaad60f7..e96a6cc862 100644 --- a/js/server.js +++ b/js/server.js @@ -89,7 +89,7 @@ function Server (config) { app.use(helmet(config.httpHeaders)); app.use("/js", express.static(__dirname)); - let directories = ["/config", "/css", "/favicon.svg", "/modules", "/node_modules/animate.css", "/node_modules/@fontsource", "/node_modules/@fortawesome", "/translations", "/tests/configs", "/tests/mocks"]; + let directories = ["/config", "/css", "/favicon.svg", "/defaultmodules", "/modules", "/node_modules/animate.css", "/node_modules/@fontsource", "/node_modules/@fortawesome", "/translations", "/tests/configs", "/tests/mocks"]; for (const [key, value] of Object.entries(vendor)) { const dirArr = value.split("/"); if (dirArr[0] === "node_modules") directories.push(`/${dirArr[0]}/${dirArr[1]}`); diff --git a/js/server_functions.js b/js/server_functions.js index a7eba8c358..aedf6fa43c 100644 --- a/js/server_functions.js +++ b/js/server_functions.js @@ -162,7 +162,7 @@ function getUserAgent () { * @returns {object} environment variables key: values */ function getEnvVarsAsObj () { - const obj = { modulesDir: `${config.foreignModulesDir}`, customCss: `${config.customCss}` }; + const obj = { modulesDir: `${config.foreignModulesDir}`, defaultModulesDir: `${config.defaultModulesDir}`, customCss: `${config.customCss}` }; if (process.env.MM_MODULES_DIR) { obj.modulesDir = process.env.MM_MODULES_DIR.replace(`${global.root_path}/`, ""); } diff --git a/modules/.gitkeep b/modules/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package.json b/package.json index e2eaa69597..9af69d78f2 100644 --- a/package.json +++ b/package.json @@ -40,10 +40,10 @@ "main": "js/electron.js", "scripts": { "config:check": "node js/check_config.js", - "postinstall": "git clean -df fonts vendor", + "postinstall": "git clean -df fonts vendor modules/default", "install-mm": "npm install --no-audit --no-fund --no-update-notifier --only=prod --omit=dev", "install-mm:dev": "npm install --no-audit --no-fund --no-update-notifier && npx playwright install chromium", - "lint:css": "stylelint 'css/main.css' 'css/roboto.css' 'css/font-awesome.css' 'modules/default/**/*.css' --fix", + "lint:css": "stylelint 'css/main.css' 'css/roboto.css' 'css/font-awesome.css' 'defaultmodules/**/*.css' --fix", "lint:js": "eslint --fix", "lint:markdown": "markdownlint-cli2 . --fix", "lint:prettier": "prettier . --write", @@ -59,9 +59,9 @@ "start:x11": "DISPLAY=\"${DISPLAY:=:0}\" ./node_modules/.bin/electron js/electron.js", "start:x11:dev": "node --run start:x11 -- dev", "test": "vitest run", - "test:calendar": "node ./modules/default/calendar/debug.js", + "test:calendar": "node ./defaultmodules/calendar/debug.js", "test:coverage": "vitest run --coverage", - "test:css": "stylelint 'css/main.css' 'css/roboto.css' 'css/font-awesome.css' 'modules/default/**/*.css'", + "test:css": "stylelint 'css/main.css' 'css/roboto.css' 'css/font-awesome.css' 'defaultmodules/**/*.css'", "test:e2e": "vitest run tests/e2e", "test:electron": "vitest run tests/electron", "test:js": "eslint", diff --git a/tests/e2e/modules/newsfeed_spec.js b/tests/e2e/modules/newsfeed_spec.js index 4cee4a75b4..4a86d4af24 100644 --- a/tests/e2e/modules/newsfeed_spec.js +++ b/tests/e2e/modules/newsfeed_spec.js @@ -80,7 +80,7 @@ describe("Newsfeed module", () => { describe("Newsfeed module located in config directory", () => { beforeAll(() => { - fs.cpSync(`${global.root_path}/modules/default/newsfeed`, `${global.root_path}/config/newsfeed`, { recursive: true }); + fs.cpSync(`${global.root_path}/${global.defaultModulesDir}/newsfeed`, `${global.root_path}/config/newsfeed`, { recursive: true }); process.env.MM_MODULES_DIR = "config"; }); diff --git a/tests/unit/functions/updatenotification_spec.js b/tests/unit/functions/updatenotification_spec.js index ebf7580b81..09b39b18cb 100644 --- a/tests/unit/functions/updatenotification_spec.js +++ b/tests/unit/functions/updatenotification_spec.js @@ -19,7 +19,8 @@ async function createGitHelper (fsStatSyncMockRef, loggerMockRef, execShellSpyRe vi.doMock("logger", () => loggerMockRef.current); - const gitHelperModule = await import("../../../modules/default/updatenotification/git_helper"); + const defaults = await import("../../../js/defaults"); + const gitHelperModule = await import(`../../../${defaults.defaultModulesDir}/updatenotification/git_helper`); const GitHelper = gitHelperModule.default || gitHelperModule; const instance = new GitHelper(); execShellSpyRef.current = vi.spyOn(instance, "execShell"); diff --git a/tests/unit/global_vars/defaults_modules_spec.js b/tests/unit/global_vars/defaults_modules_spec.js index 465e2232d0..993dcb63ee 100644 --- a/tests/unit/global_vars/defaults_modules_spec.js +++ b/tests/unit/global_vars/defaults_modules_spec.js @@ -1,14 +1,15 @@ const fs = require("node:fs"); const path = require("node:path"); +const defaults = require("../../../js/defaults"); const root_path = path.join(__dirname, "../../.."); -describe("Default modules set in modules/default/defaultmodules.js", () => { - const expectedDefaultModules = require(`${root_path}/modules/default/defaultmodules`); +describe("Default modules set in defaultmodules/defaultmodules.js", () => { + const expectedDefaultModules = require(`${root_path}/${defaults.defaultModulesDir}/defaultmodules`); for (const defaultModule of expectedDefaultModules) { - it(`contains a folder for modules/default/${defaultModule}"`, () => { - expect(fs.existsSync(path.join(root_path, "modules/default", defaultModule))).toBe(true); + it(`contains a folder for defaultmodules/${defaultModule}"`, () => { + expect(fs.existsSync(path.join(root_path, "defaultmodules", defaultModule))).toBe(true); }); } }); diff --git a/tests/unit/modules/default/calendar/calendar_fetcher_utils_bad_rrule.js b/tests/unit/modules/default/calendar/calendar_fetcher_utils_bad_rrule.js index 4475c65c26..6b4a8dc651 100644 --- a/tests/unit/modules/default/calendar/calendar_fetcher_utils_bad_rrule.js +++ b/tests/unit/modules/default/calendar/calendar_fetcher_utils_bad_rrule.js @@ -1,6 +1,8 @@ global.moment = require("moment-timezone"); -const CalendarFetcherUtils = require("../../../../../modules/default/calendar/calendarfetcherutils"); +const defaults = require("../../../js/defaults"); + +const CalendarFetcherUtils = require(`../../../../../${defaults.defaultModulesDir}/calendar/calendarfetcherutils`); describe("Calendar fetcher utils test", () => { const defaultConfig = { diff --git a/tests/unit/modules/default/calendar/calendar_fetcher_utils_spec.js b/tests/unit/modules/default/calendar/calendar_fetcher_utils_spec.js index 8f5ab5bc67..31a179a520 100644 --- a/tests/unit/modules/default/calendar/calendar_fetcher_utils_spec.js +++ b/tests/unit/modules/default/calendar/calendar_fetcher_utils_spec.js @@ -2,7 +2,9 @@ global.moment = require("moment-timezone"); const ical = require("node-ical"); const moment = require("moment-timezone"); -const CalendarFetcherUtils = require("../../../../../modules/default/calendar/calendarfetcherutils"); +const defaults = require("../../../../../js/defaults"); + +const CalendarFetcherUtils = require(`../../../../../${defaults.defaultModulesDir}/calendar/calendarfetcherutils`); describe("Calendar fetcher utils test", () => { const defaultConfig = { diff --git a/tests/unit/modules/default/calendar/calendar_utils_spec.js b/tests/unit/modules/default/calendar/calendar_utils_spec.js index ff37299fe9..77d358ddfa 100644 --- a/tests/unit/modules/default/calendar/calendar_utils_spec.js +++ b/tests/unit/modules/default/calendar/calendar_utils_spec.js @@ -1,6 +1,8 @@ global.moment = require("moment"); -const CalendarUtils = require("../../../../../modules/default/calendar/calendarutils"); +const defaults = require("../../../../../js/defaults"); + +const CalendarUtils = require(`../../../../../${defaults.defaultModulesDir}/calendar/calendarutils`); describe("Calendar utils tests", () => { describe("capFirst", () => { diff --git a/tests/unit/modules/default/compliments/compliments_spec.js b/tests/unit/modules/default/compliments/compliments_spec.js index 8d3aef3011..c1b76fcc09 100644 --- a/tests/unit/modules/default/compliments/compliments_spec.js +++ b/tests/unit/modules/default/compliments/compliments_spec.js @@ -16,12 +16,13 @@ describe("Compliments module", () => { global.Cron = vi.fn(); // Load the module - require("../../../../../modules/default/compliments/compliments"); + const defaults = require("../../../../../js/defaults"); + require(`../../../../../${defaults.defaultModulesDir}/compliments/compliments`); // Setup module instance complimentsModule.config = { ...complimentsModule.defaults }; complimentsModule.name = "compliments"; - complimentsModule.file = vi.fn((path) => `http://localhost:8080/modules/default/compliments/${path}`); + complimentsModule.file = vi.fn((path) => `http://localhost:8080/${defaults.defaultModulesDir}/compliments/${path}`); }); afterEach(() => { @@ -144,7 +145,7 @@ describe("Compliments module", () => { await complimentsModule.loadComplimentFile(); const calledUrl = fetch.mock.calls[0][0]; - expect(calledUrl).toBe("http://localhost:8080/modules/default/compliments/compliments.json"); + expect(calledUrl).toBe("http://localhost:8080/defaultmodules/compliments/compliments.json"); expect(calledUrl).not.toContain("dummy="); }); }); diff --git a/tests/unit/modules/default/utils_spec.js b/tests/unit/modules/default/utils_spec.js index 9677f3df20..4af7db6765 100644 --- a/tests/unit/modules/default/utils_spec.js +++ b/tests/unit/modules/default/utils_spec.js @@ -1,5 +1,7 @@ global.moment = require("moment-timezone"); -const { performWebRequest, formatTime } = require("../../../../modules/default/utils"); +const defaults = require("../../../../js/defaults"); + +const { performWebRequest, formatTime } = require(`../../../../${defaults.defaultModulesDir}/utils`); describe("Default modules utils tests", () => { describe("performWebRequest", () => { diff --git a/tests/unit/modules/default/weather/weather_object_spec.js b/tests/unit/modules/default/weather/weather_object_spec.js index 2bc87d78e3..cef65bfe4e 100644 --- a/tests/unit/modules/default/weather/weather_object_spec.js +++ b/tests/unit/modules/default/weather/weather_object_spec.js @@ -1,4 +1,6 @@ -const WeatherObject = require("../../../../../modules/default/weather/weatherobject"); +const defaults = require("../../../../../js/defaults"); + +const WeatherObject = require(`../../../../../${defaults.defaultModulesDir}/weather/weatherobject`); global.moment = require("moment-timezone"); global.SunCalc = require("suncalc"); diff --git a/tests/unit/modules/default/weather/weather_utils_spec.js b/tests/unit/modules/default/weather/weather_utils_spec.js index da3979cdb7..5f21121994 100644 --- a/tests/unit/modules/default/weather/weather_utils_spec.js +++ b/tests/unit/modules/default/weather/weather_utils_spec.js @@ -1,5 +1,7 @@ -const weather = require("../../../../../modules/default/weather/weatherutils"); -const WeatherUtils = require("../../../../../modules/default/weather/weatherutils"); +const defaults = require("../../../../../js/defaults"); + +const weather = require(`../../../../../${defaults.defaultModulesDir}/weather/weatherutils`); +const WeatherUtils = require(`../../../../../${defaults.defaultModulesDir}/weather/weatherutils`); describe("Weather utils tests", () => { describe("temperature conversion to imperial", () => { diff --git a/vitest.config.mjs b/vitest.config.mjs index 83d857ccf0..75808c82fc 100644 --- a/vitest.config.mjs +++ b/vitest.config.mjs @@ -45,7 +45,7 @@ export default defineConfig({ setupFiles: ["./tests/utils/vitest-setup.js"], include: [ "tests/unit/**/*_spec.js", - "tests/unit/modules/default/calendar/calendar_fetcher_utils_bad_rrule.js" + "tests/unit/defaultmodules/calendar/calendar_fetcher_utils_bad_rrule.js" ], testTimeout: 20000, hookTimeout: 10000 @@ -82,7 +82,7 @@ export default defineConfig({ include: [ "clientonly/**/*.js", "js/**/*.js", - "modules/default/**/*.js", + "defaultmodules/**/*.js", "serveronly/**/*.js" ], exclude: [