Adding a "content-items" class name to the blog post list

--HG--
branch : dev
This commit is contained in:
Nathan Heskew
2010-10-17 02:03:00 -07:00
parent 1b113bbcdb
commit bdea6c5386
4 changed files with 37 additions and 17 deletions

View File

@@ -5,10 +5,15 @@ using Orchard.Utility.Extensions;
namespace Orchard.Tests.Utility.Extensions {
[TestFixture]
public class StringExtensionsTests {
[Test]
public void HtmlClassify_ValidReallySimpleClassNameReturnsSame() {
const string toClassify = "someclass";
Assert.That(toClassify.HtmlClassify(), Is.StringMatching(toClassify));
}
[Test]
public void HtmlClassify_ValidSimpleClassNameReturnsSame() {
const string toClassify = "some-class";
Assert.That(toClassify.HtmlClassify(), Is.StringMatching("some-class"));
Assert.That(toClassify.HtmlClassify(), Is.StringMatching(toClassify));
}
[Test]
public void HtmlClassify_SimpleStringReturnsSimpleClassName() {
@@ -26,6 +31,16 @@ namespace Orchard.Tests.Utility.Extensions {
Assert.That(toClassify.HtmlClassify(), Is.StringMatching(""));
}
[Test]
public void HtmlClassify_LowerCamelCasedStringReturnsLowerHyphenatedClassName() {
const string toClassify = "camelCased";
Assert.That(toClassify.HtmlClassify(), Is.StringMatching("camel-cased"));
}
[Test]
public void HtmlClassify_PascalCasedStringReturnsLowerHyphenatedClassName() {
const string toClassify = "PascalCased";
Assert.That(toClassify.HtmlClassify(), Is.StringMatching("pascal-cased"));
}
[Test]
public void OrDefault_ReturnsDefaultForNull() {
const string s = null;
var def = new LocalizedString("test");

View File

@@ -12,6 +12,7 @@ using Orchard.Settings;
using Orchard.UI;
using Orchard.UI.Resources;
using Orchard.UI.Zones;
using Orchard.Utility.Extensions;
// ReSharper disable InconsistentNaming
@@ -237,27 +238,29 @@ namespace Orchard.Core.Shapes {
IEnumerable<string> ItemClasses,
IDictionary<string, string> ItemAttributes) {
if (Items == null)
return;
var listTagName = string.IsNullOrEmpty(Tag) ? "ul" : Tag;
const string itemTagName = "li";
var listTag = GetTagBuilder(listTagName, Id, Classes, Attributes);
Output.Write(listTag.ToString(TagRenderMode.StartTag));
if (Items != null) {
var count = Items.Count();
var index = 0;
foreach (var item in Items) {
var itemTag = GetTagBuilder(itemTagName, null, ItemClasses, ItemAttributes);
if (index == 0)
itemTag.AddCssClass("first");
if (index == count - 1)
itemTag.AddCssClass("last");
Output.Write(itemTag.ToString(TagRenderMode.StartTag));
Output.Write(Display(item));
Output.Write(itemTag.ToString(TagRenderMode.EndTag));
++index;
}
var count = Items.Count();
var index = 0;
foreach (var item in Items) {
var itemTag = GetTagBuilder(itemTagName, null, ItemClasses, ItemAttributes);
if (index == 0)
itemTag.AddCssClass("first");
if (index == count - 1)
itemTag.AddCssClass("last");
Output.Write(itemTag.ToString(TagRenderMode.StartTag));
Output.Write(Display(item));
Output.Write(itemTag.ToString(TagRenderMode.EndTag));
++index;
}
Output.Write(listTag.ToString(TagRenderMode.EndTag));
}

View File

@@ -1,5 +1,6 @@
@{
IEnumerable<object> blogPosts = Model.ContentItems;
Model.ContentItems.Classes.Add("content-items");
}
@Display(Model.ContentItems)
@if (blogPosts == null || blogPosts.Count() < 1) {

View File

@@ -4,7 +4,7 @@ using Orchard.Localization;
namespace Orchard.Utility.Extensions {
public static class StringExtensions {
private static readonly Regex humps = new Regex("[A-Z][^A-Z]*");
private static readonly Regex humps = new Regex("(?:^[a-zA-Z][^A-Z]*|[A-Z][^A-Z]*)");
public static string CamelFriendly(this string camel) {
if (camel == null)
return null;
@@ -29,7 +29,8 @@ namespace Orchard.Utility.Extensions {
}
public static string HtmlClassify(this string text) {
return Regex.Replace(text, @"[^a-zA-Z]+", m => m.Index == 0 ? "" : "-").ToLowerInvariant();
var friendlier = text.CamelFriendly();
return Regex.Replace(friendlier, @"[^a-zA-Z]+", m => m.Index == 0 ? "" : "-").ToLowerInvariant();
}
public static bool IsNullOrEmptyTrimmed(this string text) {