1
0
mirror of https://github.com/pcvolkmer/osc-variant.git synced 2025-04-19 19:56:50 +00:00

Add support for script replacing

This commit is contained in:
Paul-Christian Volkmer 2023-06-14 00:34:27 +02:00
parent c9046a3e02
commit 92acd7655a
5 changed files with 41 additions and 1 deletions

View File

@ -53,6 +53,9 @@ forms:
referenced_data_form: "Formularverweis.Variante" referenced_data_form: "Formularverweis.Variante"
anzeige_auswahl: "Referenziertes Formular vom: {Datum}" anzeige_auswahl: "Referenziertes Formular vom: {Datum}"
anzeige: "Datum im referenzierten Formular: {Datum}" anzeige: "Datum im referenzierten Formular: {Datum}"
scripts_code: |
// Beispielcode
console.log(getFieldValue('ref_first_mtb'));
menu_category: menu_category:
name: Beispielformulare name: Beispielformulare
position: 1.0 position: 1.0
@ -64,12 +67,15 @@ Hierzu wird die Anwendung angewiesen im Formular "ExampleForm" den Formularverwe
* den Verweis auf das Formular "Formularverweis.Variante" zu setzen * den Verweis auf das Formular "Formularverweis.Variante" zu setzen
* die Anzeige im Auswahlmenü auf "Referenziertes Formular vom: {Datum}" zu setzen * die Anzeige im Auswahlmenü auf "Referenziertes Formular vom: {Datum}" zu setzen
* die Anzeige unterhalb des Auswahlmenüs auf "Datum im referenzierten Formular: {Datum}" zu setzen * die Anzeige unterhalb des Auswahlmenüs auf "Datum im referenzierten Formular: {Datum}" zu setzen
* den Code zur Ausführung "nach Aktualisierung" für das Formularfeld auf die angegebene, mehrzeilige Zeichenkette anzupassen
und dabei die vorhandenen Angaben für den Formularverweis zu ersetzen. und dabei die vorhandenen Angaben für den Formularverweis zu ersetzen.
Die Angaben für `referenced_data_form`, `anzeige_auswahl` und `anzeige` sind optional. Die Angaben für `referenced_data_form`, `anzeige_auswahl`, `anzeige` und `scripts_code` sind optional.
Wird keine Angabe gemacht, wird der bestehende Wert beibehalten. Wird keine Angabe gemacht, wird der bestehende Wert beibehalten.
**Achtung!** Diese Anwendung überprüft keine Scripts und verwendet angegebene Scripts als "valid" im resultierenden OSC-File.
Zudem kann die Menükategorie angepasst werden. Zudem kann die Menükategorie angepasst werden.
Die Angabe einer `menu_category` ist fakultativ. Die Angabe einer `menu_category` ist fakultativ.
Wird sie angeben, sind die Felder `name`, `position` und `column` verpflichtend. Wird sie angeben, sind die Felder `name`, `position` und `column` verpflichtend.

View File

@ -9,6 +9,10 @@ forms:
- name: referstemtb - name: referstemtb
referenced_data_form: 'UMG.MolTB_neu' referenced_data_form: 'UMG.MolTB_neu'
anzeige_auswahl: 'MTB vom {DatumErstevorstellung}' anzeige_auswahl: 'MTB vom {DatumErstevorstellung}'
scripts_code: |
// Angepass an UMG: Verwende 'DatumErstevorstellung'
var datum = getFieldValue('referstemtb').DatumErstevorstellung;
setFieldValue('datum', datum);
- name: reftkhumangenber - name: reftkhumangenber
referenced_data_form: 'UMG.MolTB_neu' referenced_data_form: 'UMG.MolTB_neu'
anzeige_auswahl: 'MTB vom {DatumErstevorstellung}' anzeige_auswahl: 'MTB vom {DatumErstevorstellung}'

View File

@ -173,6 +173,12 @@ impl DataForm {
{ {
entry.anzeige_auswahl = Some(profile_anzeige_auswahl.clone()) entry.anzeige_auswahl = Some(profile_anzeige_auswahl.clone())
} }
if let Some(scripts_code) = &form_reference.escaped_scripts_code() {
entry.scripts = Some(Script {
code: scripts_code.clone(),
valid: true,
})
}
} }
}); });

View File

@ -185,6 +185,12 @@ impl Unterformular {
{ {
entry.anzeige_auswahl = Some(profile_anzeige_auswahl.clone()) entry.anzeige_auswahl = Some(profile_anzeige_auswahl.clone())
} }
if let Some(scripts_code) = &form_reference.escaped_scripts_code() {
entry.scripts = Some(Script {
code: scripts_code.clone(),
valid: true,
})
}
} }
}); });

View File

@ -25,6 +25,10 @@
use serde::Deserialize; use serde::Deserialize;
use std::str::FromStr; use std::str::FromStr;
fn escape_script(script: &str) -> String {
script.replace('\n', "
")
}
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct Profile { pub struct Profile {
pub forms: Vec<Form>, pub forms: Vec<Form>,
@ -55,6 +59,13 @@ pub struct FormReference {
pub referenced_data_form: Option<String>, pub referenced_data_form: Option<String>,
pub anzeige: Option<String>, pub anzeige: Option<String>,
pub anzeige_auswahl: Option<String>, pub anzeige_auswahl: Option<String>,
scripts_code: Option<String>,
}
impl FormReference {
pub fn escaped_scripts_code(&self) -> Option<String> {
self.scripts_code.as_ref().map(|code| escape_script(code))
}
} }
#[derive(Deserialize)] #[derive(Deserialize)]
@ -104,6 +115,9 @@ mod tests {
referenced_data_form: 'OS.Tumorkonferenz.VarianteUKW' referenced_data_form: 'OS.Tumorkonferenz.VarianteUKW'
anzeige: 'Datum: {Datum}' anzeige: 'Datum: {Datum}'
anzeige_auswahl: 'TK vom {Datum}' anzeige_auswahl: 'TK vom {Datum}'
scripts_code: |-
// Example code
console.log(42);
"; ";
match Profile::from_str(content) { match Profile::from_str(content) {
@ -124,6 +138,10 @@ mod tests {
profile.forms[0].form_references[0].anzeige_auswahl, profile.forms[0].form_references[0].anzeige_auswahl,
Some("TK vom {Datum}".to_string()) Some("TK vom {Datum}".to_string())
); );
assert_eq!(
profile.forms[0].form_references[0].escaped_scripts_code(),
Some("// Example code&#10;console.log(42);".to_string())
);
} }
Err(e) => panic!("Cannot deserialize profile: {}", e), Err(e) => panic!("Cannot deserialize profile: {}", e),
} }