public ActionResult DetailsById(int id = invalidId, string slug = null) { if (id == invalidId) { return(NoId()); } // TODO: write test for null slug slug = slug ?? string.Empty; var tagName = queries.LoadTag(id, t => t.UrlSlug ?? string.Empty); if (slug != tagName) { return(RedirectToActionPermanent("DetailsById", new { id, slug = tagName })); } var contract = queries.GetDetails(id); var prop = PageProperties; var thumbUrl = Url.EntryImageOld(contract.Thumb, ImageSize.Original); if (!string.IsNullOrEmpty(thumbUrl)) { PageProperties.OpenGraph.Image = thumbUrl; } prop.Description = markdownParser.GetPlainText(contract.Description.EnglishOrOriginal); return(RenderDetails(contract)); }
// // GET: /Artist/Details/5 public ActionResult Details(int id = invalidId) { if (id == invalidId) { return(HttpNotFound()); } WebHelper.VerifyUserAgent(Request); var model = queries.GetDetails(id); var hasDescription = !model.Description.IsEmpty; var prop = PageProperties; prop.GlobalSearchType = EntryType.Artist; prop.Title = model.Name; prop.Subtitle = string.Format("({0})", Translate.ArtistTypeName(model.ArtistType)); prop.Description = hasDescription ? markdownParser.GetPlainText(model.Description.EnglishOrOriginal) : new ArtistDescriptionGenerator().GenerateDescription(model, a => Translate.ArtistTypeNames.GetName(a, CultureInfo.InvariantCulture)); prop.CanonicalUrl = UrlMapper.FullAbsolute(Url.Action("Details", new { id })); prop.OpenGraph.Image = Url.ImageThumb(model, Model.Domain.Images.ImageSize.Original, fullUrl: true); prop.OpenGraph.Title = hasDescription ? string.Format("{0} ({1})", model.Name, Translate.ArtistTypeName(model.ArtistType)) : model.Name; prop.OpenGraph.ShowTwitterCard = true; return(View(model)); }
// // GET: /Song/Details/5 public ActionResult Details(int id = invalidId, int albumId = 0) { if (id == invalidId) { return(NoId()); } WebHelper.VerifyUserAgent(Request); var contract = queries.GetSongDetails(id, albumId, GetHostnameForValidHit(), null, WebHelper.GetUserLanguageCodes(Request)); var model = new SongDetails(contract, PermissionContext); var hasDescription = !model.Notes.IsEmpty; var prop = PageProperties; prop.GlobalSearchType = EntryType.Song; prop.Title = model.Name; prop.Description = hasDescription ? markdownParser.GetPlainText(model.Notes.EnglishOrOriginal) : new SongDescriptionGenerator().GenerateDescription(contract.Song, Translate.SongTypeNames); prop.OpenGraph.ShowTwitterCard = true; string titleAndArtist; if (!string.IsNullOrEmpty(model.ArtistString)) { titleAndArtist = string.Format("{0} - {1}", model.Name, model.ArtistString); } else { titleAndArtist = model.Name; } prop.PageTitle = titleAndArtist; prop.Subtitle = string.Format("{0} ({1})", model.ArtistString, Translate.SongTypeNames[model.SongType]); if (!string.IsNullOrEmpty(model.ThumbUrlMaxSize)) { prop.OpenGraph.Image = model.ThumbUrlMaxSize; } prop.CanonicalUrl = VocaUriBuilder.CreateAbsolute(Url.Action("Details", new { id })).ToString(); prop.OpenGraph.Title = hasDescription ? string.Format("{0} ({1})", titleAndArtist, Translate.SongTypeNames[model.SongType]) : model.Name; prop.OpenGraph.Type = OpenGraphTypes.Song; return(View(model)); }
// // GET: /Album/Details/5 public ActionResult Details(int id = invalidId) { if (id == invalidId) { return(NoId()); } WebHelper.VerifyUserAgent(Request); var model = queries.GetAlbumDetails(id, WebHelper.IsValidHit(Request) ? WebHelper.GetRealHost(Request) : string.Empty); var prop = PageProperties; prop.Title = model.Name; prop.CanonicalUrl = VocaUriBuilder.CreateAbsolute(Url.Action("Details", new { id })).ToString(); prop.GlobalSearchType = EntryType.Album; prop.OpenGraph.Image = Url.ImageThumb(model, Model.Domain.Images.ImageSize.Original, fullUrl: true); prop.OpenGraph.Type = OpenGraphTypes.Album; prop.OpenGraph.ShowTwitterCard = true; string titleAndArtist; if (!string.IsNullOrEmpty(model.ArtistString)) { titleAndArtist = string.Format("{0} - {1}", model.Name, model.ArtistString); } else { titleAndArtist = model.Name; } PageProperties.OpenGraph.Title = string.Format("{0} ({1})", titleAndArtist, Translate.DiscTypeName(model.DiscType)); PageProperties.PageTitle = titleAndArtist; PageProperties.Subtitle = string.Format("{0} ({1})", model.ArtistString, Translate.DiscTypeName(model.DiscType)); prop.Description = !model.Description.IsEmpty ? markdownParser.GetPlainText(model.Description.EnglishOrOriginal) : albumDescriptionGenerator.GenerateDescription(model, d => Translate.DiscTypeNames.GetName(d, CultureInfo.InvariantCulture)); return(View(new AlbumDetails(model, PermissionContext))); }
public ActionResult Details(int id = InvalidId) { if (id == InvalidId) { return(NotFound()); } WebHelper.VerifyUserAgent(Request); var model = _queries.GetDetails(id, GetHostnameForValidHit()); var hasDescription = !model.Description.IsEmpty; var prop = PageProperties; prop.GlobalSearchType = EntryType.Artist; prop.Title = model.Name; prop.Subtitle = $"({Translate.ArtistTypeName(model.ArtistType)})"; prop.Description = new ArtistDescriptionGenerator().GenerateDescription(model, _markdownParser.GetPlainText(model.Description.EnglishOrOriginal), Translate.ArtistTypeNames); prop.CanonicalUrl = UrlMapper.FullAbsolute(Url.Action("Details", new { id })); prop.OpenGraph.Image = Url.ImageThumb(model, Model.Domain.Images.ImageSize.Original, fullUrl: true); prop.OpenGraph.Title = hasDescription ? $"{model.Name} ({Translate.ArtistTypeName(model.ArtistType)})" : model.Name; prop.OpenGraph.ShowTwitterCard = true; return(View(model)); }
private void TestGetPlainText(string expected, string input) { var result = parser.GetPlainText(input)?.Trim(); Assert.AreEqual(expected, result, input); }