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.visualize(); var ta = editor.textArea(); onLeftClick(ta, (IVF1) evt -> { int ofs = ta.viewToModel2D(evt.getPoint()); LS tok = hashRefTok(ta.getText()); int iTok = charToTokenIndex_left(tok, ofs); if (iTok >= 0 && odd(iTok)) { S t = get(tok, i); S url = unbracket(dropPrefix("#", t)); infoBox("Link URL: " + url); } }); ret withTopAndBottomMargin(jRaisedCenteredSection("Project Story", editor.visualize() )); } }