Add working module based clone from original openrc-run generator

See http://openrc.run/

This able to split the same working piece as a node and browser module
This commit is contained in:
Lenny Andreu 2025-05-17 20:38:35 -04:00
parent 1163906176
commit 331d7980be
3 changed files with 129 additions and 13 deletions

89
index.html Normal file
View file

@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>The #!openrc-run generator</title>
<style>
body {
display: flex;
flex-wrap: wrap;
}
section {
flex-basis: 0;
flex-grow: 1;
padding: 10px;
}
header {
flex: 0 0 100%;
}
pre {
padding: 10px;
background: #eee;
}
</style>
</head>
<body>
<header>
<h1>The #!openrc-run generator</h1>
</header>
<section id="source">
<p>
Paste a systemd service unit here to convert it to openrc
</p>
<textarea style="width: 100%" id="unit" rows="15"></textarea>
</section>
<section id="settings">
<button id="convert">Convert</button>
<details>
<summary>
Supported systemd keys
</summary>
<ul>
<li>Description</li>
<li>Before</li>
<li>After</li>
<li>Requires</li>
<li>Wants</li>
<li>Type (simple, exec, forking and oneshot)</li>
<li>ExecStart</li>
<li>ExecStop</li>
<li>ExecReload</li>
<li>PIDFile</li>
<li>User</li>
<li>Group</li>
</ul>
<p>For "simple" and "exec" type:</p>
<ul>
<li>WorkingDirectory</li>
<li>RootDirectory</li>
<li>UMask</li>
<li>Nice</li>
<li>Environment</li>
<li>IOSchedulingClass</li>
<li>IOSchedulingPriority</li>
<li>StandardOutput=file:...</li>
<li>StandardError=file:...</li>
</ul>
<p>For "oneshot" and "forking" type:</p>
<ul>
<li>WorkingDirectory</li>
<li>RootDirectory</li>
<li>UMask</li>
<li>Nice</li>
<li>IOSchedulingClass</li>
<li>IOSchedulingPriority</li>
<li>CPUSchedulingPolicy</li>
<li>CPUSchedulingPriority</li>
</ul>
</details>
</section>
<section id="result">
<div id="error"></div>
<pre id="openrc"></pre>
</section>
<script type="module" src="index.js"></script>
</body>
</html>

31
index.js Normal file
View file

@ -0,0 +1,31 @@
import { convert } from './magic.js'
function convertForBrowser (convertFunction){
return function(event){
event.preventDefault();
const raw = document.getElementById('unit').value;
const response = convertFunction(raw)
const validated = response.validated;
const result = response.result;
if (validated !== null) {
document.getElementById('error').innerHTML = validated;
return;
} else {
document.getElementById('error').innerHTML = '';
}
document.getElementById('openrc').innerText = result;
}
}
function setup(){
if(typeof window !== "undefined" && typeof window.document !== "undefined"){
const convertFunction = convertForBrowser(convert)
document.addEventListener("DOMContentLoaded", function () {
document.getElementById('convert').addEventListener('click', convertFunction);
});
}
}
setup();

View file

@ -270,17 +270,10 @@ function generateReload(unit) {
} }
function convert(event) { export function convert(raw) {
event.preventDefault();
var raw = document.getElementById('unit').value;
var parsed = parseINIString(raw); var parsed = parseINIString(raw);
var validated = validate(parsed); var validated = validate(parsed);
if (validated !== null) {
document.getElementById('error').innerHTML = validated;
return;
} else {
document.getElementById('error').innerHTML = '';
}
console.log(parsed); console.log(parsed);
var result = '#!/sbin/openrc-run\n\nname=$RC_SVCNAME\ndescription="' + parsed.Unit.Description + '"\n'; var result = '#!/sbin/openrc-run\n\nname=$RC_SVCNAME\ndescription="' + parsed.Unit.Description + '"\n';
@ -311,9 +304,12 @@ function convert(event) {
result += generateStop(parsed); result += generateStop(parsed);
result += generateReload(parsed); result += generateReload(parsed);
document.getElementById('openrc').innerText = result; var response = {
validated,
parsed,
result
}
return response;
} }
document.addEventListener("DOMContentLoaded", function () { // This does not run a function like the default
document.getElementById('convert').addEventListener('click', convert);
});