Warning: session_start(): open(/var/lib/php/sessions/sess_6eafvm83hgd8ekfqm383k22e5l, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass HCRUD_Data {
new Map renderers;
new SS fieldHelp;
abstract sclass Renderer {
swappable O preprocessValue(O value) { ret value; }
}
srecord TextArea(int cols, int rows) extends Renderer {
// star constructor syntax not working here (transpiler bug)
TextArea(int cols, int rows, IF1 preprocessValue) {
this.cols = cols;
this.rows = rows;
this.preprocessValue = preprocessValue;
}
}
srecord TextField(int cols) extends Renderer {}
srecord ComboBox(LS entries) extends Renderer {
bool editable;
// help find item to select
swappable S valueToEntry(O value) { ret strOrNull(value); }
ComboBox(S... entries) { this(asList(entries)); }
// star constructor syntax not working here (transpiler bug)
ComboBox(LS entries, IF1 valueToEntry) {
this.entries = entries;
this.valueToEntry = valueToEntry;
}
}
srecord CheckBox() extends Renderer {}
srecord FlexibleLengthList(Renderer itemRenderer) extends Renderer {}
S itemName() { ret "object"; }
S itemNamePlural() { ret plural(itemName()); }
//LS fields() { null; }
L list() { null; }
L list(IntRange range) { ret subListOrFull(list(), range); }
S idField() { ret "id"; }
MapSO emptyObject() { null; }
MapSO getObject(O id) { null; }
swappable MapSO getObjectForDuplication(O id) { ret getObject(id); }
// return ID
O createObject(SS map) { throw unimplemented(); }
// return text msg
S deleteObject(O id) { throw unimplemented(); }
bool objectCanBeDeleted(O id) { true; }
// return text msg
S updateObject(O id, SS map) { throw unimplemented(); }
// return null for standard input field
Renderer getRenderer(S field) { ret renderers.get(field); }
// returns HTML
S fieldHelp(S field) { ret fieldHelp.get(field); }
returnSelf addRenderer(S field, Renderer renderer) { renderers.put(field, renderer); }
returnSelf fieldHelp(S field, S help, S... more) {
fieldHelp.put(field, help);
for (int i = 0; i+1 < l(more); i += 2)
fieldHelp.put(more[i], more[i+1]);
}
S fieldNameToHTML(S name) {
S help = fieldHelp.get(name);
ret spanTitle(help, htmlencode2(humanizeLabel(name)));
}
Set filteredFields() { null; }
}