1
0
mirror of https://github.com/KubaPro010/fm-dx-webserver.git synced 2026-02-26 22:13:53 +01:00

hotfix for plugins (missing files)

This commit is contained in:
NoobishSVK
2024-04-25 20:53:29 +02:00
parent 510ed6b8f3
commit 9475d2c96b
4 changed files with 127 additions and 0 deletions

14
plugins/example.js Normal file
View File

@@ -0,0 +1,14 @@
// Plugin configuration, this is used in the administration when plugins are loaded
var pluginConfig = {
name: 'Example plugin',
version: '1.0',
author: 'OpenRadio',
frontEndPath: 'example/frontend.js'
}
// Backend (server) changes can go here...
// Don't change anything below here if you are making your own plugin
module.exports = {
pluginConfig
}

View File

@@ -0,0 +1 @@
console.log('Webserver plugins loaded successfully.');

67
server/plugins.js Normal file
View File

@@ -0,0 +1,67 @@
const fs = require('fs');
const path = require('path');
const { serverConfig } = require('./server_config');
// Function to read all .js files in a directory
function readJSFiles(dir) {
const files = fs.readdirSync(dir);
return files.filter(file => file.endsWith('.js'));
}
// Function to parse plugin config from a file
function parsePluginConfig(filePath) {
const fileContent = fs.readFileSync(filePath, 'utf8');
const pluginConfig = {};
// Assuming pluginConfig is a JavaScript object defined in each .js file
try {
const pluginExports = require(filePath);
Object.assign(pluginConfig, pluginExports.pluginConfig);
// Check if pluginConfig has frontEndPath defined
if (pluginConfig.frontEndPath) {
const sourcePath = path.join(path.dirname(filePath), pluginConfig.frontEndPath);
const destinationDir = path.join(path.dirname(filePath), '../web/js/plugins', pluginConfig.frontEndPath, '..');
// Check if the destination directory exists, if not, create it
if (!fs.existsSync(destinationDir)) {
fs.mkdirSync(destinationDir, { recursive: true }); // Create directory recursively
}
// Copy the file to the destination directory
const destinationFile = path.join(destinationDir, path.basename(sourcePath));
fs.copyFileSync(sourcePath, destinationFile);
console.log(`File copied from ${sourcePath} to ${destinationFile}`);
} else {
console.error(`Error: frontEndPath is not defined in ${filePath}`);
}
} catch (err) {
console.error(`Error parsing plugin config from ${filePath}: ${err}`);
}
return pluginConfig;
}
// Main function to collect plugin configs from all .js files in the 'plugins' directory
function collectPluginConfigs() {
const pluginsDir = path.join(__dirname, '../plugins');
const jsFiles = readJSFiles(pluginsDir);
const pluginConfigs = [];
jsFiles.forEach(file => {
const filePath = path.join(pluginsDir, file);
const config = parsePluginConfig(filePath);
if (Object.keys(config).length > 0) {
pluginConfigs.push(config);
}
});
return pluginConfigs;
}
// Usage example
const allPluginConfigs = collectPluginConfigs();
module.exports = {
allPluginConfigs
}

45
web/css/multiselect.css Normal file
View File

@@ -0,0 +1,45 @@
.multiselect {
width: 400px;
height: 320px;
background-color: var(--color-2);
padding: 8px 16px;
border-radius: 30px;
padding: 20px;
}
.multiselect:hover {
background-color: var(--color-2);
}
.multiselect:focus {
outline: 0;
}
.multiselect option {
font-size: 14px;
font-weight: 500;
padding: 8px;
position: relative;
color: var(--color-4);
}
.multiselect option:checked::after {
content: attr(title);
background: var(--color-4);
color: var(--color-main);
position: absolute;
width: 344px;
height: 21px;
left: 0;
top: 0;
padding: 8px;
border: none;
}
.multiselect option:focus, .multiselect option:active {
background: transparent !important;
}
.multiselect:active > option:checked {
background: red !important;
}