concept G22LeftArrowScript { S description; // the script ("saved" text) S text; // text currently modified in an editor (or null) // Note that "" doesn't count as null. S editingText; @Override void _doneLoading2() { //print("_doneLoading " + this); cMigrateField(this, "code", "text"); } S myType() { ret dropPrefix("G22", shortClassName(this)); } toString { ret or2(description, myType() + " " + id); } S latestText() { ret or(editingText, text); } S stableText() { ret text; } }