Exemplo n.º 1
0
        /// <summary>
        /// Returns previewing of a single post.
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        /// <param name="day"></param>
        /// <param name="slug"></param>
        /// <returns></returns>
        public async Task <IActionResult> Preview(int year, int month, int day, string slug)
        {
            try
            {
                // Get back blog post from TempData
                DateTime dt       = new DateTime(year, month, day);
                var      link     = BlogRoutes.GetPostPreviewRelativeLink(dt, slug);
                var      blogPost = TempData.Get <BlogPost>(link);

                // Prep it
                blogPost.Body = _shortcodeSvc.Parse(blogPost.Body);
                blogPost.Body = OembedParser.Parse(blogPost.Body);
                var blogSettings = await _settingSvc.GetSettingsAsync <BlogSettings>();

                blogSettings.DisqusShortname = ""; // when preview turn off disqus
                var vm = new BlogPostViewModel(blogPost, blogSettings, Request);

                // Show it
                return(View("Post", vm));
            }
            catch (Exception)
            {
                // when user access the preview link directly or when user clicks on other links
                // and navigates away during the preview, hacky need to find a better way.
                return(RedirectToAction("ErrorCode", "Home", new { statusCode = 404 }));
            }
        }
Exemplo n.º 2
0
        public async Task <BlogPostVM> GetBlogPostVMPreviewAsync(BlogPost blogPost)
        {
            blogPost.Body = OembedParser.Parse(blogPost.Body);
            var blogPostVM = await GetBlogPostVMAsync(blogPost);

            blogPostVM.DisqusShortname = ""; // when preview turn off disqus
            return(blogPostVM);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Pre render processing of a blog post.
        /// </summary>
        /// <param name="blogPost"></param>
        /// <returns></returns>
        private async Task <BlogPost> PreRenderAsync(BlogPost blogPost)
        {
            if (blogPost == null)
            {
                return(blogPost);
            }

            blogPost.Body = OembedParser.Parse(blogPost.Body);
            blogPost.Body = await _imageService.ProcessResponsiveImageAsync(blogPost.Body);

            return(blogPost);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Gets a <see cref="BlogPost"/> for display to client from a <see cref="Post"/>.
        /// </summary>
        /// <param name="post"></param>
        /// <param name="parseShortcode">True will parse shortcode into html, false otherwise.</param>
        /// <returns></returns>
        /// <remarks>
        /// It readies <see cref="Post.CreatedOnDisplay"/>, Title, Excerpt, CategoryTitle, Tags and Body with shortcodes.
        /// </remarks>
        private async Task <BlogPost> GetBlogPostAsync(Post post, bool parseShortcode)
        {
            var blogPost     = _mapper.Map <Post, BlogPost>(post);
            var coreSettings = await _settingSvc.GetSettingsAsync <CoreSettings>();

            var blogSettings = await _settingSvc.GetSettingsAsync <BlogSettings>();

            // Friendly post time if the post was published within 2 days
            // else show the actual date time in setting's timezone
            blogPost.CreatedOnDisplay = (DateTimeOffset.UtcNow.Day - blogPost.CreatedOn.Day) > 2 ?
                                        Util.ConvertTime(blogPost.CreatedOn, coreSettings.TimeZoneId).ToString("dddd, MMMM dd, yyyy") :
                                        Util.ConvertTime(blogPost.CreatedOn, coreSettings.TimeZoneId).Humanize();

            if (blogPost.UpdatedOn.HasValue)
            {
                blogPost.UpdatedOnDisplay =
                    Util.ConvertTime(blogPost.UpdatedOn.Value, coreSettings.TimeZoneId).ToString("MM/dd/yyyy");
            }

            // Title
            blogPost.Title = WebUtility.HtmlDecode(blogPost.Title); // since OLW encodes it, we decode it here

            // Excerpt
            blogPost.Excerpt = post.Excerpt.IsNullOrEmpty() ? Util.GetExcerpt(post.Body, EXCERPT_WORD_LIMIT) : post.Excerpt;

            // CategoryTitle
            blogPost.CategoryTitle = post.Category.Title;

            // Tags and TagTitles
            foreach (var postTag in post.PostTags)
            {
                blogPost.Tags.Add(postTag.Tag);
                blogPost.TagTitles.Add(postTag.Tag.Title);
            }

            // Shortcodes
            blogPost.Body = parseShortcode ? _shortcodeSvc.Parse(post.Body) : post.Body;

            // Embeds
            blogPost.Body = parseShortcode ? OembedParser.Parse(blogPost.Body) : blogPost.Body;

            _logger.LogDebug("Show {@BlogPost}", blogPost);
            return(blogPost);
        }
 public void Parse_returns_body_with_proper_html_embed(string body, string expected)
 {
     Assert.Equal(expected, OembedParser.Parse(body));
 }
        public void GetVimeoEmbed_returns_vimeo_embed_html(string url)
        {
            string expected = @"<iframe width=""800"" height=""450"" src =""https://player.vimeo.com/video/1084537"" frameborder =""0"" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>";

            Assert.Equal(expected, OembedParser.GetVimeoEmbed(url));
        }
        public void GetYouTubeEmbed_returns_youtube_embed_html_with_size_and_start_info(string url, int width, int height, int start)
        {
            string expected = $@"<iframe width=""{width}"" height=""{height}"" src =""https://www.youtube.com/embed/MNor4dYXa6U?start={start}"" frameborder =""0"" allow=""autoplay; encrypted - media"" allowfullscreen></iframe>";

            Assert.Equal(expected, OembedParser.GetYouTubeEmbed(url));
        }
        public void GetYouTubeEmbed_returns_youtube_embed_html(string url)
        {
            string expected = @"<iframe width=""800"" height=""450"" src =""https://www.youtube.com/embed/MNor4dYXa6U"" frameborder =""0"" allow=""autoplay; encrypted - media"" allowfullscreen></iframe>";

            Assert.Equal(expected, OembedParser.GetYouTubeEmbed(url));
        }
 public void GetYouTubeVideoKey_gets_key_from_url(string url, string expected)
 {
     Assert.Equal(expected, OembedParser.GetYouTubeVideoKey(url));
 }
Exemplo n.º 10
0
 public void GetOembedType_returns_type_Vimeo_given_vimeo_url()
 {
     Assert.Equal(EEmbedType.Vimeo, OembedParser.GetOembedType("https://vimeo.com/1084537"));
 }
Exemplo n.º 11
0
 public void GetOembedType_returns_type_YouTube_given_any_youtube_urls(string url)
 {
     Assert.Equal(EEmbedType.YouTube, OembedParser.GetOembedType(url));
 }