" + TDev.Util.htmlEscape(app.getDescription() || "") + "
", steps: Step.splitActions(app).map(s => s.jsonInfo()), startDocs: docs("main"), finalDocs: docs("final"), } var translations = topic.translations(); if (translations) tut.translations = translations; return tut; } static renderDocs(stmts:Stmt[]) { var r = new CopyRenderer(); var md = new MdComments(r); md.useSVG = false; md.useExternalLinks = true; md.showCopy = false; return md.extractStmts(stmts) } private jsonInfo():StepInfo { return { stcheckpoint: this.stcheckpoint ? true : undefined, actionName: this.declName(), command: this.command, commandArg: this.commandArg, docs: Step.renderDocs(this.docs) } } public declName() { return this._actionName; } public matchesDecl(a:AST.Decl) { return a.getCoreName() == this.declName() && this.template.nodeType() == a.nodeType() } static splitActions(app:App):Step[] { var visibleRecordFields:StringMap