public IEnumerable <FilePath> Visit(WorkbookPage page) { if (page == null) { throw new ArgumentNullException(nameof(page)); } foreach (var cell in page.Contents) { switch (cell) { case MarkdownCell markdownCell: foreach (var dependency in Visit(markdownCell)) { yield return(dependency); } break; case CodeCell codeCell: foreach (var dependency in Visit(codeCell)) { yield return(dependency); } break; } } }
public void TestWritingNewPackages() { var page = new WorkbookPage(new WorkbookPackage()); var packageVersion = "9.0.1"; var package = new InteractivePackageDescription("Fake.Package1", versionRange: packageVersion); page.Manifest.Packages = page.Manifest.Packages.Add(package); var writer = new StringWriter(); page.Write(writer, null); var serializedPage = writer.ToString(); var deserializedPage = new WorkbookPage(new WorkbookPackage()); deserializedPage.Read(new StringReader(serializedPage)); deserializedPage.Packages.Length.ShouldEqual(1); var deserializedPackage = deserializedPage.Packages [0]; deserializedPackage.PackageId.ShouldEqual(package.PackageId); // Make sure this doesn't serialize as [9.0.1, ) deserializedPackage.VersionRange.ShouldEqual(packageVersion); }
ReadResult ReadWorkbookPage(string resourceName) { var source = new StreamReader(TestHelpers.GetResource(resourceName)).ReadToEnd(); var workbook = new WorkbookPage(new WorkbookPackage()); workbook.Read(new StringReader(source)); return(new ReadResult { Source = source, Page = workbook }); }
public void AppendCellToEmptyWorkbook() { var page = new WorkbookPage(new WorkbookPackage()); page.Read(new StringReader(emptyWorkbookSource)); page.Contents.AppendCell(new CodeCell("csharp", "2 + 2")); var writer = new StringWriter(); page.Write(writer, null); writer.ToString().ShouldEqual( emptyWorkbookSource + "\n\n```csharp\n2 + 2\n```", ShouldEqualOptions.LineDiff); }
public XcbWorkbookPageView( XcbWebView webView, ClientSession clientSession, WorkbookPage workbookPage) : base(clientSession, workbookPage) { this.webView = webView ?? throw new ArgumentNullException(nameof(webView)); void ObserveWorkbookMutationModelChanges(dynamic self, dynamic args) => TableOfContentsNodeExtensions.RebuildFromJavaScript(workbookPage.TableOfContents, args [0]); webView.Document.Context.GlobalObject.xiexports.WorkbookMutationObserver.observeModelChanges( (ScriptAction)ObserveWorkbookMutationModelChanges); rendererContext = new RendererContext(clientSession, webView.Document); rendererContext.MemberReferenceRequested += OnRendererContextMemberReferenceRequested; rendererContext.AsyncRenderComplete += (sender, e) => { var view = focusedCellState?.View; // Image rendering can happen asynchronously. If the last cell is evaluated, and // the focus has shifted to a new last cell, make sure the new last cell's // input doesn't get pushed out of the view by the image load. if (view != null && focusedWorkbookCell != null && focusedWorkbookCell.NextCell == null) { SynchronizationContext.Current.Post(o => view.Focus(), null); } }; clientSession.Workbook.EditorHub.Events.Subscribe( new Observer <EditorEvent> (HandleEditorEvent)); var document = webView.Document; xiexports = document.Context.GlobalObject.xiexports; outputElement = document.CreateElement("main"); outputElement.AddCssClass("interactive-workspace"); outputElement.AddCssClass(HostEnvironment.OS == HostOS.macOS ? "is-mac" : "is-windows"); outputElement.AddCssClass( $"session-kind-{clientSession.SessionKind.ToString ().ToLowerInvariant ()}"); document.Body.AppendChild(outputElement); AppendFirstCellActions(outputElement); }
public void SaveEmptyWorkbook(bool readEmptyWorkbookSource) { var writer = new StringWriter(); var page = new WorkbookPage(new WorkbookPackage()); if (readEmptyWorkbookSource) { page.Read(new StringReader(emptyWorkbookSource)); } else { page.Manifest.Guid = Guid.Parse(emptyWorkbookGuid); } page.Write(writer, null); writer.ToString().ShouldEqual( emptyWorkbookSource, ShouldEqualOptions.LineDiff); }
public void InsertNewHeadCellInWorkbookWithManifest() { var page = new WorkbookPage(new WorkbookPackage()); page.Read(new StringReader(emptyWorkbookSource + "\n\n# Head Cell")); // page.Contents => // [0]: MarkdownWorkbookEntry // // Simulate the first save with no changes: the issue here was that // the write left the manifest in the model, so subsequent writes // would insert a new manifest and write the previous one. page.Write(new StringWriter(), null); // page.Contents => // [0]: YamlMetadataWorkbookEntry (!! this was the bug) // [1]: MarkdownWorkbookEntry // // Now insert a new head cell: page.Contents.InsertCellBefore( page.Contents.FirstCell, new CodeCell("csharp", "2 + 2")); // page.Contents => // [0]: CodeWorkbookEntry // [1]: YamlMetadataWorkbookEntry // [2]: MarkdownWorkbookEntry // // Now save again, and we'll get a new manifest entry at the head // since the previous one was left in the model and had a new cell // inserted before it. var writer = new StringWriter(); page.Write(writer, null); // page.Contents => // [0]: YamlMetadataWorkbookEntry // [1]: CodeWorkbookEntry // [2]: YamlMetadataWorkbookEntry // [3]: MarkdownWorkbookEntry writer.ToString().ShouldEqual( emptyWorkbookSource + "\n\n```csharp\n2 + 2\n```\n\n# Head Cell", ShouldEqualOptions.LineDiff); }
public ConsoleWorkbookPageViewModel(ClientSession clientSession, WorkbookPage workbookPage) : base(clientSession, workbookPage) { }
public WorkbookPageViewModel CreatePageViewModel( ClientSession clientSession, WorkbookPage workbookPage) => new ConsoleWorkbookPageViewModel(clientSession, workbookPage);