srecord noeq G22ProjectStoryEditor(G22Utils g22utils) { JSyntaxTextFileEditor editor; File textFile() { ret g22utils.projectStoryTextFile(); } IVarWithNotify varText() { ret textFileAsVarWithNotify(textFile()); } cachedVisualize { editor = new JSyntaxTextFileEditor(textFile()).autoSave(true); editor.adaptSyntaxTextArea = textArea -> { ((RSyntaxDocument) textArea.getDocument()).setSyntaxStyle(new HashRefTokenMaker); textArea.setHyperlinksEnabled(true); textArea.addHyperlinkListener(evt -> { print("Hyperlink event"); if (evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { infoBox("Link URL: " + evt.getURL()); } }); }; ret withTopAndBottomMargin(jRaisedCenteredSection("Project Story", editor.visualize() )); } }