protected void AddWebFigureLinkToBody(FlowDocument flowDocument, XPathNavigator navigator, Story story, FlowDocumentStyleProvider styleProvider) { MsdnStoryImageHyperlink hyperlink = GetLinkToWebFigures(story, navigator, styleProvider); if (hyperlink != null) { Paragraph webFigureDownloadPara = new Paragraph(); ApplyStyle(webFigureDownloadPara, GetBodyTextParagraphStyle(styleProvider, 0)); webFigureDownloadPara.Inlines.Add(hyperlink); flowDocument.Blocks.Add(webFigureDownloadPara); } }
protected MsdnStoryImageHyperlink GetLinkToWebFigures(Story story, XPathNavigator navigator, FlowDocumentStyleProvider styleProvider) { MsdnStoryImageHyperlink hyperlink = null; XPathNavigator figuresNavigator = navigator.SelectSingleNode("Figures"); if (figuresNavigator != null) { // Figures exist, add link hyperlink = new MsdnStoryImageHyperlink(GetMagazineArticleWebFigureUri(story), story); hyperlink.Inlines.Add(new Run("See all code figures for this article")); hyperlink.ToolTip = "View Code Figures In Browser"; hyperlink.RequestNavigate += ((MsdnViewManager)ServiceProvider.ViewManager).OnImageHyperlinkRequestNavigate; } return(hyperlink); }
/// <summary> /// Static handler for image hyperlink's request navigate event /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void OnImageHyperlinkRequestNavigate(object sender, RequestNavigateEventArgs e) { // Always set handled to true because hyperlinks to which this event is attached are not real weblinks and require special handling. // Don't let this go up to the navigation service e.Handled = true; MsdnStoryImageHyperlink hyperlink = sender as MsdnStoryImageHyperlink; if (hyperlink != null) { if (hyperlink.IsImageReferenceLink) { // Link to an image reference, open view OpenImageViewerWindow(hyperlink.ImageReference, hyperlink.Story); } else { // Not an image reference, this is a web link. Open web figure viewer window OpenWebFigureViewerWindow(hyperlink.NavigateUri, hyperlink.Story); } } }
/// <summary> /// Creates a an MsdnStoryImageHyperlink element with a link to the image Uri/ImageReference /// </summary> protected MsdnStoryImageHyperlink CreateImageHyperlink(XPathNavigator navigator, TextPointer textPointer, FlowDocumentStyleProvider styleProvider) { MsdnStoryImageHyperlink hyperlink = null; if (navigator != null) { // If it's a figure containing code/ javascript, it will be referenced using the "ref" attribute Run run = new Run(XmlHelper.GetNavigatorText(navigator)); string webFigureRef = navigator.GetAttribute("ref", String.Empty); if (!String.IsNullOrEmpty(webFigureRef) && _webFigureStore.ContainsKey(webFigureRef)) { // 'ref' attribute found, try to match it with a web figure Uri Uri uri = _webFigureStore[webFigureRef]; hyperlink = new MsdnStoryImageHyperlink(uri, Story, run, textPointer); hyperlink.ToolTip = "View Code In Browser"; } else { // No attribute matched. Try to match figure text to an image caption from an Image element in the doc string text = XmlHelper.GetNavigatorText(navigator); if (!String.IsNullOrEmpty(text) && _imageReferenceFigureStore.ContainsKey(text)) { ImageReference imageReference = _imageReferenceFigureStore[text]; hyperlink = new MsdnStoryImageHyperlink(imageReference, Story, run, textPointer); hyperlink.ToolTip = "View Image"; } } if (hyperlink != null) { ApplyStyle(hyperlink, GetHyperlinkStyle(styleProvider)); hyperlink.RequestNavigate += ((MsdnViewManager)ServiceProvider.ViewManager).OnImageHyperlinkRequestNavigate; } } return(hyperlink); }