yavsc/yavscModel/Blogs/BlogEntryCollection.cs
Paul Schneider 77149697dd * font-awesome.css: an awesome css
* hallo.js: Use a forked Hallo.js

* showdown.js:
* to-markdown.js:
* mdd_gripper.png:
* mdd_toolbar.png:
* mdd_modal_background.png: The client side Markdown is now
  implemented using Hallo.js

* FontAwesome.otf:
* fontawesome-webfont.eot:
* fontawesome-webfont.svg:
* fontawesome-webfont.ttf:
* fontawesome-webfont.woff:
* fontawesome-webfont.woff2: awesome

* MarkdownDeep.dll: a modified version to render video and audio tags

* NpgsqlBlogProvider.cs:
* CalendarController.cs:
* WorkFlowController.cs: refactoring: The `UserName` property from the
  `BlogEntry` class is renamed to `Author`

* InputUserName.cs: formatting

* BlogsController.cs: * refactoring: The `UserName` property from the
  `BlogEntry` class is renamed to `Author`
* Fixes pandoc process on file named with some spaces

* BlogsController.cs: UserName became Author on BlogEntry objects

* Global.asax.cs: route /fonts is now ignored.

* MarkdownHelper.cs: transform Markdown using a given base url

* App.master: jquery was not needed on all pages.

* Edit.aspx: using Hallo.js

* BlogEntry.cs:
* UserPost.aspx:
* UserPosts.aspx:
* BlogManager.cs:
* RemoveTitle.aspx:
* BlogEntryCollection.cs:
* UUBlogEntryCollection.cs:
* UUTBlogEntryCollection.cs: refactoring

* Web.config: ?

* Web.csproj: * use my local assembly for MarkdownDeep.dll
* fontawesome integration
* Hallo.js, to-markdown.js, showdowwn.js integration

* packages.config: Now use forked MarkdownDeep

* MarkdownDeepLib.min.js:
* MarkdownDeep License.txt:
* MarkdownDeep Quick Reference.txt: using my local revision

* mdd_ajax_loader.gif: The client side Markdown is now implemented
  using Hallo.js
2015-09-23 18:48:38 +02:00

149 lines
3.5 KiB
C#

using System;
using System.Configuration;
using System.Collections.Generic;
using Yavsc.Model.Blogs;
using System.Linq;
namespace Yavsc.Model.Blogs
{
/// <summary>
/// Blog entry collection.
/// </summary>
public class BlogEntryCollection : List<BlogEntry>
{
/// <summary>
/// Initializes a new instance of the <see cref="Yavsc.Model.Blogs.BlogEntryCollection"/> class.
/// </summary>
public BlogEntryCollection ()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="Yavsc.Model.Blogs.BlogEntryCollection"/> class.
/// </summary>
/// <param name="items">Items.</param>
public BlogEntryCollection(IEnumerable<BlogEntry> items)
{
if (items!=null)
this.AddRange (items);
}
/// <summary>
/// Returns a <see cref="System.String"/> that represents the current <see cref="Yavsc.Model.Blogs.BlogEntryCollection"/>.
/// </summary>
/// <returns>A <see cref="System.String"/> that represents the current <see cref="Yavsc.Model.Blogs.BlogEntryCollection"/>.</returns>
public override string ToString ()
{
string titles = Titles == null ?
"none" : string.Join (", ", Titles);
return string.Format ("[BlogEntryCollection: Titles={0}]", titles);
}
/// <summary>
/// Get the specified bid.
/// </summary>
/// <param name="bid">Bid.</param>
public BlogEntry Get (long bid)
{
return this.First (x => x.Id == bid);
}
/// <summary>
/// Filters this collection on
/// the given title.
/// </summary>
/// <returns>The by title.</returns>
/// <param name="title">Title.</param>
public BlogEntry [] FilterOnTitle (string title)
{
return this.Where (x => x.Title == title).ToArray ();
}
/// <summary>
/// Post info.
/// </summary>
public struct PostInfoByTitle {
/// <summary>
/// The name of the user.
/// </summary>
public string Author;
/// <summary>
/// The identifier.
/// </summary>
public long Id;
/// <summary>
/// The posted.
/// </summary>
public DateTime Posted;
/// <summary>
/// The modified.
/// </summary>
public DateTime Modified;
}
/// <summary>
/// Post info by user.
/// </summary>
public struct PostInfoByUser {
/// <summary>
/// The name of the user.
/// </summary>
public string Title;
/// <summary>
/// The identifier.
/// </summary>
public long Id;
/// <summary>
/// The posted.
/// </summary>
public DateTime Posted;
/// <summary>
/// The modified.
/// </summary>
public DateTime Modified;
}
/// <summary>
/// Groups by title.
/// </summary>
public IEnumerable<IGrouping<string,PostInfoByTitle>> GroupByTitle()
{
return from be in this
orderby be.Posted descending
group
new PostInfoByTitle { Author=be.Author, Id=be.Id,
Posted=be.Posted, Modified=be.Modified }
by be.Title
into titlegroup
select titlegroup;
}
/// <summary>
/// Groups by user.
/// </summary>
/// <returns>The by user.</returns>
public IEnumerable<IGrouping<string,PostInfoByUser>> GroupByUser()
{
return from be in this
orderby be.Posted descending
group
new PostInfoByUser { Title=be.Title, Id=be.Id,
Posted=be.Posted, Modified=be.Modified }
by be.Author
into usergroup
select usergroup;
}
/// <summary>
/// Gets the titles.
/// </summary>
/// <value>The titles.</value>
public string[] Titles { get {
string[] result = this.Select (x => x.Title).Distinct ().ToArray ();
if (result == null)
return new string[0];
return result;
} }
}
}