Beispiel #1
0
        public void TogglePopup(ImageRun imgRun)
        {
            if (imgRun == null || _imageSets.Count == 0)
            {
                return;
            }

            var imgSet = (from imgset in _imageSets
                          where imgset.Key.FirstOrDefault(item => item.Image == imgRun.Image) != null
                          select imgset).FirstOrDefault();

            if (imgSet.Key == null)
            {
                return;
            }

            if (imgSet.Value)
            {
                _popup.IsOpen          = false;
                _imageSets[imgSet.Key] = false;
            }
            else
            {
                var selected = imgSet.Key.FirstOrDefault(img => img.Image == imgRun.Image);

                _imageViewer.SetDatasource(imgSet.Key, selected);

                _imageSets[imgSet.Key] = true;

                _popup.IsOpen = true;
            }
        }
Beispiel #2
0
        public void SetDatasource(IList <ImageRun> images, ImageRun selected)
        {
            this.FlipView.ItemsSource = images;

            if (selected != null)
            {
                _firstImageRun             = selected;
                this.FlipView.SelectedItem = selected;
            }
        }
Beispiel #3
0
        private IEnumerable <RunBase> GetInlines(HtmlNode node)
        {
            try
            {
                var collection = new List <RunBase>();

                #region 遍历子节点

                if (node.Name == "#text" || node.Name == "span")
                {
                    #region #text

                    if (node.ParentNode.Name == "a")
                    {
                        var isRelative = false;
                        try
                        {
                            var uri = new Uri(node.ParentNode.Attributes["href"].Value, UriKind.Absolute);
                            isRelative = false;
                        }
                        catch (Exception)
                        {
                            isRelative = true;
                        }

                        collection.Add(new TextHrefRun()
                        {
                            Text       = node.InnerText,
                            Href       = node.ParentNode.Attributes["href"].Value,
                            IsRelative = isRelative,
                        });
                    }
                    else
                    {
                        switch (node.ParentNode.Name)
                        {
                        case "b":
                        case "u":
                        case "strong":
                            collection.Add(new TextRun()
                            {
                                Text = node.InnerText, Type = TextType.Bold
                            });
                            break;

                        case "h2":
                            collection.Add(new TextRun()
                            {
                                Text = node.InnerText, Type = TextType.H2
                            });
                            break;

                        case "p":
                        case "ol":
                        default:
                            collection.Add(new TextRun()
                            {
                                Text = node.InnerText, Type = TextType.Plain
                            });
                            break;
                        }
                    }

                    #endregion
                }
                else if (node.Name == "br")
                {
                    #region br

                    collection.Add(new LineBreakRun());

                    #endregion
                }
                else if (node.Name == "a")
                {
                    #region a

                    if (node.ChildNodes.Count > 0)
                    {
                        foreach (var child in node.ChildNodes)
                        {
                            foreach (var inline in GetInlines(child))
                            {
                                collection.Add(inline);
                            }
                        }
                    }

                    #endregion
                }
                else if (node.Name == "b" || node.Name == "u" || node.Name == "strong")
                {
                    #region b

                    foreach (var grandChild in node.ChildNodes)
                    {
                        collection.AddRange(GetInlines(grandChild));
                    }

                    #endregion
                }
                else if (node.Name == "ul")
                {
                    #region ul li

                    foreach (var grandChild in node.ChildNodes)
                    {
                        collection.AddRange(GetInlines(grandChild));
                    }
                    collection.Add(new LineBreakRun());

                    #endregion
                }
                else if (node.Name == "li")
                {
                    #region ul li

                    collection.Add(new TextRun()
                    {
                        Text = " • "
                    });

                    foreach (var grandChild in node.ChildNodes)
                    {
                        collection.AddRange(GetInlines(grandChild));
                    }

                    if (false == collection.LastOrDefault() is LineBreakRun)
                    {
                        collection.Add(new LineBreakRun());
                    }

                    #endregion
                }
                else if (node.Name == "img")
                {
                    #region img

                    if (node.ParentNode.Name == "a")
                    {
                        var imageHrefRun = new ImageHrefRun()
                        {
                            Image = node.InnerText,
                            Href  = node.ParentNode.Attributes["href"].Value
                        };

                        if (true == node.Attributes.Hashitems.ContainsKey("width"))
                        {
                            imageHrefRun.Width = Double.Parse(node.Attributes["width"].Value);
                        }

                        collection.Add(imageHrefRun);

                        if (imageHrefRun.Width > 0)
                        {
                            collection.Add(new LineBreakRun());
                        }
                    }
                    else
                    {
                        var imageRun = new ImageRun()
                        {
                            Image = node.Attributes["src"].Value,
                        };

                        if (true == node.Attributes.Hashitems.ContainsKey("data-rawwidth"))
                        {
                            imageRun.Width = Double.Parse(node.Attributes["data-rawwidth"].Value);
                        }

                        if (true == node.Attributes.Hashitems.ContainsKey("data-rawheight"))
                        {
                            imageRun.Height = Double.Parse(node.Attributes["data-rawheight"].Value);
                        }

                        collection.Add(imageRun);

                        if (imageRun.Width > 0)
                        {
                            collection.Add(new LineBreakRun());
                        }
                    }

                    #endregion
                }
                else
                {
                    foreach (var childNode in node.ChildNodes)
                    {
                        collection.AddRange(GetInlines(childNode));
                    }
                }

                #endregion

                return(collection);
            }
            catch (Exception)
            {
                throw;
            }
        }
Beispiel #4
0
        public IList <ParagraphModel> GetParagraphs(HtmlNodeCollection nodeCollection, Boolean topEndHolder = false)
        {
            var paragraphs = new List <ParagraphModel>();

            //var header = new ParagraphModel();
            //header.Runs.Add(new LineBreakRun());
            //paragraphs.Add(header);

            try
            {
                var paragraph = new ParagraphModel();

                foreach (var node in nodeCollection)
                {
                    if (node.Name == "#text")
                    {
                        #region #text

                        var run = new TextRun()
                        {
                            Text = node.InnerText, Type = TextType.Plain
                        };

                        paragraph.Runs.Add(run);

                        #endregion
                    }
                    else if (node.Name == "div" &&
                             node.Attributes.Hashitems.ContainsKey("class") &&
                             node.Attributes["class"].Value == "video-box")
                    {
                        #region video-box-inner

                        var videoRun = GetVideobox(node);

                        if (videoRun != null)
                        {
                            paragraph = MergePhagraph(paragraphs, paragraph);

                            var para = new ParagraphModel();

                            para.Runs.Add(videoRun);

                            paragraphs.Add(para);
                        }

                        #endregion
                    }
                    else if (node.Name == "br")
                    {
                        #region br

                        paragraph.Runs.Add(new LineBreakRun());

                        #endregion
                    }
                    else if (node.Name == "b")
                    {
                        #region b

                        foreach (var child in node.ChildNodes)
                        {
                            foreach (var inline in GetInlines(child))
                            {
                                paragraph.Runs.Add(inline);
                            }
                        }

                        #endregion
                    }
                    else if (node.Name == "a")
                    {
                        #region a

                        foreach (var child in node.ChildNodes)
                        {
                            foreach (var inline in GetInlines(child))
                            {
                                paragraph.Runs.Add(inline);
                            }
                        }

                        #endregion
                    }
                    else if (node.Name == "h2" || node.Name == "p" || node.Name == "ol")
                    {
                        #region h2 p ol

                        paragraph = MergePhagraph(paragraphs, paragraph);

                        var para = new ParagraphModel();

                        foreach (var child in node.ChildNodes)
                        {
                            foreach (var inline in GetInlines(child))
                            {
                                para.Runs.Add(inline);
                            }
                        }

                        paragraphs.Add(para);

                        #endregion
                    }
                    else if (node.Name == "img")
                    {
                        #region img

                        var imageRun = new ImageRun()
                        {
                            Image = node.Attributes["src"].Value
                        };

                        if (true == node.Attributes.Hashitems.ContainsKey("data-rawwidth"))
                        {
                            imageRun.Width = Double.Parse(node.Attributes["data-rawwidth"].Value);
                        }

                        if (true == node.Attributes.Hashitems.ContainsKey("data-rawheight"))
                        {
                            imageRun.Height = Double.Parse(node.Attributes["data-rawheight"].Value);
                        }

                        if (imageRun.Width > 0)
                        {
                            paragraph = MergePhagraph(paragraphs, paragraph);

                            var para = new ParagraphModel();

                            para.Runs.Add(imageRun);

                            para.Runs.Add(new LineBreakRun());
                            paragraphs.Add(para);
                        }
                        else
                        {
                            paragraph.Runs.Add(imageRun);
                        }

                        #endregion
                    }
                    else if (node.ChildNodes.Count > 0)
                    {
                        #region Inner

                        paragraph = MergePhagraph(paragraphs, paragraph);

                        var para = new ParagraphModel();

                        foreach (var grandChildNode in node.ChildNodes)
                        {
                            var inlines = GetInlines(grandChildNode);

                            foreach (var inlineItem in inlines)
                            {
                                paragraph.Runs.Add(inlineItem);
                            }
                        }

                        paragraphs.Add(para);

                        #endregion
                    }
                }

                paragraphs.Add(paragraph);
            }
            catch (Exception ex)
            {
                UmengAnalytics.TrackException(ex, ex.Message);
            }

            return(paragraphs);
        }