From a9f1312b88c8ea02eba41f5c464c786e90baa0d3 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Tue, 20 Nov 2012 17:21:52 -0800 Subject: [PATCH] Removing clay usage in favor or pre-configured dynamic objects --HG-- branch : clayless extra : rebase_source : fe1f730585d0df763d4dd4215b11bace48bcd944 --- lib/claysharp/ClaySharp.dll | Bin 49664 -> 0 bytes lib/claysharp/ClaySharp.pdb | Bin 134656 -> 0 bytes .../Orchard.Core.Tests.csproj | 3 - .../Orchard.Tests.Modules.csproj | 3 - .../Scripting.Dlr/ScriptingTests.cs | 17 -- .../DisplayManagement/ArgsUtility.cs | 3 +- .../DisplayManagement/CompositeTests.cs | 61 +++++ .../ShapeTemplateBindingStrategyTests.cs | 2 +- .../DisplayManagement/ShapeFactoryTests.cs | 38 ++- .../DisplayManagement/ZoneHoldingTests.cs | 88 +++++++ .../Orchard.Framework.Tests.csproj | 6 +- src/Orchard.Tests/UI/ShapeTests.cs | 140 +++++------ src/Orchard.Web/Core/Orchard.Core.csproj | 5 - src/Orchard.Web/Core/Shapes/CoreShapes.cs | 4 +- .../Orchard.ContentTypes.csproj | 5 +- .../Services/PlacementService.cs | 6 +- .../Orchard.DesignerTools.csproj | 8 +- .../orchard-designertools-shapetracing.js | 2 +- .../Services/ObjectDumper.cs | 16 +- .../Orchard.Forms/Orchard.Forms.csproj | 7 +- .../Orchard.Forms/Shapes/EditorShapes.cs | 4 +- .../Shapes/PropertyItemsBehavior.cs | 30 +-- .../Orchard.Rules/Orchard.Rules.csproj | 5 +- .../Orchard.Setup/Orchard.Setup.csproj | 3 - .../Themes/TheAdmin/Views/Menu.cshtml | 8 +- src/Orchard.Web/Web.config | 118 ++++----- src/Orchard/ContentManagement/ContentItem.cs | 25 +- .../ContentManagement/ContentItemBehavior.cs | 21 -- src/Orchard/ContentManagement/ContentPart.cs | 35 ++- .../ContentManagement/ContentPartBehavior.cs | 20 -- .../DefaultContentDisplay.cs | 4 +- .../ContentManagement/IContentBehavior.cs | 7 - src/Orchard/DisplayManagement/Arguments.cs | 152 ++++++++++++ .../DisplayManagement/INamedEnumerable.cs | 8 + .../DisplayManagement/IShapeFactory.cs | 6 +- .../Implementation/DefaultShapeFactory.cs | 63 ++--- .../Implementation/DisplayHelper.cs | 23 +- .../Implementation/DisplayHelperFactory.cs | 16 +- .../Implementation/IShapeFactoryEvents.cs | 4 +- .../DisplayManagement/Shapes/Composite.cs | 137 +++++++++++ src/Orchard/DisplayManagement/Shapes/Shape.cs | 227 +++++++++-------- .../Shapes/ShapeDebugView.cs | 29 +-- src/Orchard/Orchard.Framework.csproj | 11 +- src/Orchard/UI/Zones/LayoutWorkContext.cs | 1 - src/Orchard/UI/Zones/ZoneHoldingBehavior.cs | 231 ++++++++++++------ src/Orchard/WorkContext.cs | 2 +- 46 files changed, 1036 insertions(+), 568 deletions(-) delete mode 100644 lib/claysharp/ClaySharp.dll delete mode 100644 lib/claysharp/ClaySharp.pdb create mode 100644 src/Orchard.Tests/DisplayManagement/CompositeTests.cs create mode 100644 src/Orchard.Tests/DisplayManagement/ZoneHoldingTests.cs delete mode 100644 src/Orchard/ContentManagement/ContentItemBehavior.cs delete mode 100644 src/Orchard/ContentManagement/ContentPartBehavior.cs delete mode 100644 src/Orchard/ContentManagement/IContentBehavior.cs create mode 100644 src/Orchard/DisplayManagement/Arguments.cs create mode 100644 src/Orchard/DisplayManagement/INamedEnumerable.cs create mode 100644 src/Orchard/DisplayManagement/Shapes/Composite.cs diff --git a/lib/claysharp/ClaySharp.dll b/lib/claysharp/ClaySharp.dll deleted file mode 100644 index 51179ddadcc8214e0d58bf3a60bb5ff2fe2f09c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49664 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 diff --git a/lib/claysharp/ClaySharp.pdb b/lib/claysharp/ClaySharp.pdb deleted file mode 100644 index 991b7fc8093647e7f9fbc0af50734efc3537548c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134656 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 U@auG=M={@mH-X=|-#!ccKmSkl^8f$< diff --git a/src/Orchard.Core.Tests/Orchard.Core.Tests.csproj b/src/Orchard.Core.Tests/Orchard.Core.Tests.csproj index dc1c81a42..8e9111d77 100644 --- a/src/Orchard.Core.Tests/Orchard.Core.Tests.csproj +++ b/src/Orchard.Core.Tests/Orchard.Core.Tests.csproj @@ -59,9 +59,6 @@ False ..\..\lib\autofac\Autofac.dll - - ..\..\lib\claysharp\ClaySharp.dll - False ..\..\lib\nhibernate\FluentNHibernate.dll diff --git a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj index 6dbf81e48..29e87559c 100644 --- a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj +++ b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj @@ -62,9 +62,6 @@ ..\..\lib\Castle Windsor 2.0\bin\Castle.Core.dll - - ..\..\lib\claysharp\ClaySharp.dll - False ..\..\lib\nhibernate\FluentNHibernate.dll diff --git a/src/Orchard.Tests.Modules/Scripting.Dlr/ScriptingTests.cs b/src/Orchard.Tests.Modules/Scripting.Dlr/ScriptingTests.cs index 7f926a971..dbf09e961 100644 --- a/src/Orchard.Tests.Modules/Scripting.Dlr/ScriptingTests.cs +++ b/src/Orchard.Tests.Modules/Scripting.Dlr/ScriptingTests.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using Autofac; -using ClaySharp; using NUnit.Framework; using Orchard.Scripting.Dlr.Services; using Path = Bleroy.FluentPath.Path; @@ -83,22 +82,6 @@ namespace Orchard.Tests.Modules.Scripting.Dlr { Assert.That(_scriptingManager.ExecuteExpression("f / 4"), Is.EqualTo(8)); } - - [Test] - public void CanDeclareCallbackOnGlobalMethod() { - _scriptingManager.SetVariable("x", new Clay(new ReturnMethodNameLengthBehavior())); - - Assert.That(_scriptingManager.ExecuteExpression("3 + x.foo()"), Is.EqualTo(6)); - } - - - public class ReturnMethodNameLengthBehavior : ClayBehavior { - public override object InvokeMemberMissing(Func proceed, object self, string name, INamedEnumerable args) { - Trace.WriteLine("Returning length of " + name); - return name.Length; - } - } - [Test] public void CanDeclareCallbackOnInstanceEvalWithFile() { var targetPath = _tempFolderName.Combine("CallbackOnInstanceEval.rb"); diff --git a/src/Orchard.Tests/DisplayManagement/ArgsUtility.cs b/src/Orchard.Tests/DisplayManagement/ArgsUtility.cs index 8c0eed77d..25d124717 100644 --- a/src/Orchard.Tests/DisplayManagement/ArgsUtility.cs +++ b/src/Orchard.Tests/DisplayManagement/ArgsUtility.cs @@ -1,8 +1,7 @@ using System.Collections.Generic; using System.Linq; using System.Web.Routing; -using ClaySharp; -using ClaySharp.Implementation; +using Orchard.DisplayManagement; namespace Orchard.Tests.DisplayManagement { public static class ArgsUtility { diff --git a/src/Orchard.Tests/DisplayManagement/CompositeTests.cs b/src/Orchard.Tests/DisplayManagement/CompositeTests.cs new file mode 100644 index 000000000..5fcba7567 --- /dev/null +++ b/src/Orchard.Tests/DisplayManagement/CompositeTests.cs @@ -0,0 +1,61 @@ +using NUnit.Framework; +using Orchard.DisplayManagement.Shapes; + +namespace Orchard.Tests.DisplayManagement { + [TestFixture] + public class CompositeTests { + + [Test] + public void CompositesShouldNotOverrideExistingMembers() { + var composite = new Animal {Color = "Pink"}; + + Assert.That(composite.Color, Is.EqualTo("Pink")); + } + + [Test] + public void CompositesShouldNotOverrideExistingMembersWhenUsedAsDynamic() { + dynamic composite = new Animal(); + + composite.Color = "Pink"; + Assert.That(composite.Color, Is.EqualTo("Pink")); + } + + [Test] + public void CompositesShouldAccessUnknownProperties() { + dynamic composite = new Animal(); + + composite.Fake = 42; + Assert.That(composite.Fake, Is.EqualTo(42)); + } + + [Test] + public void CompositesShouldAccessUnknownPropertiesByIndex() { + dynamic composite = new Animal(); + + composite["Fake"] = 42; + Assert.That(composite["Fake"], Is.EqualTo(42)); + } + + [Test] + public void CompositesShouldAccessKnownPropertiesByIndex() { + dynamic composite = new Animal(); + + composite["Pink"] = "Pink"; + Assert.That(composite["Pink"], Is.EqualTo("Pink")); + } + + [Test] + public void ChainProperties() { + dynamic foo = new Animal(); + foo.Bar("bar"); + + Assert.That(foo.Bar, Is.EqualTo("bar")); + Assert.That(foo.Bar == null, Is.False); + } + } + + public class Animal : Composite { + public string Kind { get; set; } + public string Color { get; set; } + } +} diff --git a/src/Orchard.Tests/DisplayManagement/Descriptors/ShapeTemplateBindingStrategyTests.cs b/src/Orchard.Tests/DisplayManagement/Descriptors/ShapeTemplateBindingStrategyTests.cs index 7347dfb50..a1feb0f6b 100644 --- a/src/Orchard.Tests/DisplayManagement/Descriptors/ShapeTemplateBindingStrategyTests.cs +++ b/src/Orchard.Tests/DisplayManagement/Descriptors/ShapeTemplateBindingStrategyTests.cs @@ -94,7 +94,7 @@ namespace Orchard.Tests.DisplayManagement.Descriptors { } public bool DirectoryExists(string virtualPath) { - throw new NotImplementedException(); + return true; } public void CreateDirectory(string virtualPath) { diff --git a/src/Orchard.Tests/DisplayManagement/ShapeFactoryTests.cs b/src/Orchard.Tests/DisplayManagement/ShapeFactoryTests.cs index 7ee8a5964..f85cbbbfb 100644 --- a/src/Orchard.Tests/DisplayManagement/ShapeFactoryTests.cs +++ b/src/Orchard.Tests/DisplayManagement/ShapeFactoryTests.cs @@ -37,7 +37,43 @@ namespace Orchard.Tests.DisplayManagement { [Test] public void CreateShapeWithNamedArguments() { var factory = _container.Resolve(); - var foo = factory.Create("Foo", ArgsUtility.Named(new { one = 1, two = "dos" })); + dynamic foo = factory.Create("Foo", ArgsUtility.Named(new { one = 1, two = "dos" })); + Assert.That(foo.one, Is.EqualTo(1)); + Assert.That(foo.two, Is.EqualTo("dos")); } + + [Test] + public void CallSyntax() { + dynamic factory = _container.Resolve(); + var foo = factory.Foo(); + ShapeMetadata metadata = foo.Metadata; + Assert.That(metadata.Type, Is.EqualTo("Foo")); + } + + [Test] + public void CallInitializer() { + dynamic factory = _container.Resolve(); + var bar = new {One = 1, Two = "two"}; + var foo = factory.Foo(bar); + + Assert.That(foo.One, Is.EqualTo(1)); + Assert.That(foo.Two, Is.EqualTo("two")); + } + + [Test] + public void CallInitializerWithBaseType() { + dynamic factory = _container.Resolve(); + var bar = new { One = 1, Two = "two" }; + var foo = factory.Foo(typeof(MyShape), bar); + + Assert.That(foo, Is.InstanceOf()); + Assert.That(foo.One, Is.EqualTo(1)); + Assert.That(foo.Two, Is.EqualTo("two")); + } + + public class MyShape : Shape { + public string Kind { get; set; } + } + } } diff --git a/src/Orchard.Tests/DisplayManagement/ZoneHoldingTests.cs b/src/Orchard.Tests/DisplayManagement/ZoneHoldingTests.cs new file mode 100644 index 000000000..ac3c4bff3 --- /dev/null +++ b/src/Orchard.Tests/DisplayManagement/ZoneHoldingTests.cs @@ -0,0 +1,88 @@ +using System; +using NUnit.Framework; +using Orchard.DisplayManagement.Shapes; +using Orchard.UI.Zones; + +namespace Orchard.Tests.DisplayManagement { + [TestFixture] + public class ZoneHoldingTests { + + [Test] + public void ZonesShouldReturn() { + Func factory = () => new Shape(); + + var foo = new ZoneHolding(factory); + Assert.That(foo.Zones, Is.InstanceOf()); + } + + [Test] + public void MemberShouldCreateAZone() { + Func factory = () => new Shape(); + + dynamic foo = new ZoneHolding(factory); + Assert.That(foo.Header, Is.InstanceOf()); + } + + [Test] + public void IndexShouldCreateAZone() { + Func factory = () => new Shape(); + + dynamic foo = new ZoneHolding(factory); + Assert.That(foo.Zones["Header"], Is.InstanceOf()); + } + + [Test] + public void ZonesMemberShouldCreateAZone() { + Func factory = () => new Shape(); + + dynamic foo = new ZoneHolding(factory); + Assert.That(foo.Zones.Header, Is.InstanceOf()); + } + + [Test] + public void ZonesShouldBeUnique() { + Func factory = () => new Shape(); + + dynamic foo = new ZoneHolding(factory); + var header = foo.Header; + + Assert.That(foo.Zones.Header, Is.EqualTo(header)); + Assert.That(foo.Zones["Header"], Is.EqualTo(header)); + Assert.That(foo.Header, Is.EqualTo(header)); + } + + + [Test] + public void EmptyZonesShouldBeNull() { + Func factory = () => new Shape(); + + dynamic foo = new ZoneHolding(factory); + + Assert.That(foo.Header == 1, Is.False); + Assert.That(foo.Header != 1, Is.True); + + dynamic header = foo.Header; + + Assert.That(header == null, Is.True); + Assert.That(header != null, Is.False); + + Assert.That(header == Nil.Instance, Is.True); + Assert.That(header != Nil.Instance, Is.False); + } + + [Test] + public void NoneEmptyZonesShouldBeNull() { + Func factory = () => new Shape(); + + dynamic foo = new ZoneHolding(factory); + foo.Header.Add("blah"); + + Assert.That(foo.Header == null, Is.False); + Assert.That(foo.Header != null, Is.True); + + Assert.That(foo.Header == Nil.Instance, Is.False); + Assert.That(foo.Header != Nil.Instance, Is.True); + } + + } +} diff --git a/src/Orchard.Tests/Orchard.Framework.Tests.csproj b/src/Orchard.Tests/Orchard.Framework.Tests.csproj index a3121bb14..3398ed49a 100644 --- a/src/Orchard.Tests/Orchard.Framework.Tests.csproj +++ b/src/Orchard.Tests/Orchard.Framework.Tests.csproj @@ -71,10 +71,6 @@ False ..\..\lib\Castle Windsor 2.0\bin\Castle.DynamicProxy2.dll - - False - ..\..\lib\claysharp\ClaySharp.dll - False ..\..\lib\nhibernate\FluentNHibernate.dll @@ -219,6 +215,8 @@ + + diff --git a/src/Orchard.Tests/UI/ShapeTests.cs b/src/Orchard.Tests/UI/ShapeTests.cs index 202f2b59d..3e5ef2e7d 100644 --- a/src/Orchard.Tests/UI/ShapeTests.cs +++ b/src/Orchard.Tests/UI/ShapeTests.cs @@ -2,107 +2,98 @@ using System.Collections.Generic; using System.Linq; using Autofac; -using ClaySharp; using NUnit.Framework; +using Orchard.Core.Shapes; using Orchard.DisplayManagement; using Orchard.DisplayManagement.Descriptors; using Orchard.DisplayManagement.Implementation; -using Orchard.DisplayManagement.Shapes; -using Orchard.Environment; -using Orchard.Mvc; +using Orchard.Tests.DisplayManagement; using Orchard.UI.Zones; namespace Orchard.Tests.UI { [TestFixture] public class ShapeTests : ContainerTestBase { - private WorkContext _workContext; + dynamic _layout; protected override void Register(ContainerBuilder builder) { - builder.RegisterType().As(); - builder.RegisterType().As(); + var defaultShapeTable = new ShapeTable { + Descriptors = new Dictionary(StringComparer.OrdinalIgnoreCase), + Bindings = new Dictionary(StringComparer.OrdinalIgnoreCase) + }; + builder.Register(ctx => defaultShapeTable); + + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); - //builder.RegisterType().As(); - builder.RegisterType().As(); - - throw new NotImplementedException("this test fixture needs to move to modules tests now"); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); } protected override void Resolve(ILifetimeScope container) { - _workContext = container.Resolve().CreateWorkContextScope().WorkContext; + var shapeFactory = _container.Resolve(); + _layout = new ZoneHolding(() => shapeFactory.Create("Zone")); } - [Test, Ignore("implementation pending")] - public void WorkContextPageIsLayoutShape() { - var layout = _workContext.Layout; - ShapeMetadata pageMetadata = layout.Metadata; - Assert.That(pageMetadata.Type, Is.EqualTo("Layout")); - Assert.That(layout.Metadata.Type, Is.EqualTo("Layout")); - } - - [Test, Ignore("implementation pending")] + [Test] public void PagePropertiesAreNil() { - var layout = _workContext.Layout; - var pageFoo = layout.Foo; + + var pageFoo = _layout.Foo; Assert.That(pageFoo == null); } - [Test, Ignore("implementation pending")] + [Test] public void PageZonesPropertyIsNotNil() { - var layout = _workContext.Layout; - var pageZones = layout.Zones; + var pageZones = _layout.Zones; Assert.That(pageZones != null); Assert.That(pageZones.Foo == null); } - [Test, Ignore("implementation pending")] + [Test] public void AddingToZonePropertyMakesItExist() { - var layout = _workContext.Layout; - Assert.That(layout.Zones.Foo == null); + Assert.That(_layout.Zones.Foo == null); - var pageZonesFoo = layout.Zones.Foo; + var pageZonesFoo = _layout.Zones.Foo; pageZonesFoo.Add("hello"); - Assert.That(layout.Zones.Foo != null); - Assert.That(layout.Foo != null); - Assert.That(layout.Foo.Metadata.Type, Is.EqualTo("Zone")); + Assert.That(_layout.Zones.Foo != null); + Assert.That(_layout.Foo != null); + Assert.That(_layout.Foo.Metadata.Type, Is.EqualTo("Zone")); } - [Test, Ignore("implementation pending")] + [Test] public void AddingToZoneIndexedMakesItExist() { - var layout = _workContext.Layout; - Assert.That(layout.Zones["Foo"] == null); + Assert.That(_layout.Zones["Foo"] == null); - var pageZonesFoo = layout.Zones["Foo"]; + var pageZonesFoo = _layout.Zones["Foo"]; pageZonesFoo.Add("hello"); - Assert.That(layout.Zones["Foo"] != null); - Assert.That(layout["Foo"] != null); - Assert.That(layout["Foo"].Metadata.Type, Is.EqualTo("Zone")); + Assert.That(_layout.Zones["Foo"] != null); + Assert.That(_layout["Foo"] != null); + Assert.That(_layout["Foo"].Metadata.Type, Is.EqualTo("Zone")); } - [Test, Ignore("implementation pending")] + [Test] public void CallingAddOnNilPropertyMakesItBecomeZone() { - var layout = _workContext.Layout; - Assert.That(layout.Foo == null); + Assert.That(_layout.Foo == null); - layout.Foo.Add("hello"); + _layout.Foo.Add("hello"); - Assert.That(layout.Foo != null); - Assert.That(layout.Foo.Metadata.Type, Is.EqualTo("Zone")); + Assert.That(_layout.Foo != null); + Assert.That(_layout.Foo.Metadata.Type, Is.EqualTo("Zone")); } - [Test, Ignore("implementation pending")] + [Test] public void ZoneContentsAreEnumerable() { - var layout = _workContext.Layout; - Assert.That(layout.Foo == null); + Assert.That(_layout.Foo == null); - layout.Foo.Add("hello"); - layout.Foo.Add("world"); + _layout.Foo.Add("hello"); + _layout.Foo.Add("world"); var list = new List(); - foreach (var item in layout.Foo) { + foreach (var item in _layout.Foo) { list.Add(item); } @@ -111,27 +102,38 @@ namespace Orchard.Tests.UI { Assert.That(list.Last(), Is.EqualTo("world")); } + [Test] + public void ZoneContentsCastBeConvertedToEnunerableOfObject() { + Assert.That(_layout.Foo == null); - class NumberIsAlwaysFortyTwo : ShapeFactoryEvents { - public override void Creating(ShapeCreatingContext context) { - context.Behaviors.Add(new Behavior()); - } + _layout.Foo.Add("hello"); + _layout.Foo.Add("world"); - class Behavior : ClayBehavior { - public override object GetMember(Func proceed, object self, string name) { - return name == "Number" ? 42 : proceed(); - } - } + IEnumerable list = _layout.Foo; + + Assert.That(list.Count(), Is.EqualTo(2)); + Assert.That(list.First(), Is.EqualTo("hello")); + Assert.That(list.Last(), Is.EqualTo("world")); + + var first = ((IEnumerable)_layout.Foo).FirstOrDefault(); + Assert.That(first, Is.EqualTo("hello")); } - [Test, Ignore("implementation pending")] - public void NumberIsFortyTwo() { - var layout = _workContext.Layout; - Assert.That(layout.Number, Is.EqualTo(42)); - Assert.That(layout.Foo.Number == null); - layout.Foo.Add("yarg"); - Assert.That(layout.Foo.Number, Is.EqualTo(42)); + [Test] + public void ZoneContentsCastBeConvertedToEnunerableOfDynamics() { + Assert.That(_layout.Foo == null); + + _layout.Foo.Add("hello"); + _layout.Foo.Add("world"); + + IEnumerable list = _layout.Foo; + + Assert.That(list.Count(), Is.EqualTo(2)); + Assert.That(list.First(), Is.EqualTo("hello")); + Assert.That(list.Last(), Is.EqualTo("world")); + + var first = ((IEnumerable) _layout.Foo).FirstOrDefault(); + Assert.That(first, Is.EqualTo("hello")); } } - } diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index a3579ca58..a4b76040a 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -46,11 +46,6 @@ AllRules.ruleset - - False - ..\..\..\lib\claysharp\ClaySharp.dll - True - diff --git a/src/Orchard.Web/Core/Shapes/CoreShapes.cs b/src/Orchard.Web/Core/Shapes/CoreShapes.cs index ab2b5113c..47c5c8418 100644 --- a/src/Orchard.Web/Core/Shapes/CoreShapes.cs +++ b/src/Orchard.Web/Core/Shapes/CoreShapes.cs @@ -47,7 +47,7 @@ namespace Orchard.Core.Shapes { // and has an automatic zone creating behavior builder.Describe("Layout") .Configure(descriptor => descriptor.Wrappers.Add("Document")) - .OnCreating(creating => creating.Behaviors.Add(new ZoneHoldingBehavior(() => creating.New.Zone(), null))) + .OnCreating(creating => creating.Create = () => new ZoneHolding(() => creating.New.Zone())) .OnCreated(created => { var layout = created.Shape; @@ -67,7 +67,7 @@ namespace Orchard.Core.Shapes { // They have class="zone zone-{name}" // and the template can be specialized with "Zone-{Name}" base file name builder.Describe("Zone") - .OnCreating(creating => creating.BaseType = typeof(Zone)) + .OnCreating(creating => creating.Create = () => new Zone()) .OnDisplaying(displaying => { var zone = displaying.Shape; string zoneName = zone.ZoneName; diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj b/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj index 997162bb1..aa7266286 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj @@ -21,6 +21,10 @@ 4.0 + + + + true @@ -41,7 +45,6 @@ 4 - diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/PlacementService.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/PlacementService.cs index e0af18790..ddfaa1c31 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/PlacementService.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/PlacementService.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Routing; -using ClaySharp.Implementation; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; @@ -215,8 +214,9 @@ namespace Orchard.ContentTypes.Services { } private dynamic CreateItemShape(string actualShapeType) { - var zoneHoldingBehavior = new ZoneHoldingBehavior((Func)(() => _shapeFactory.Create("ContentZone", Arguments.Empty())), _workContextAccessor.GetContext().Layout); - return _shapeFactory.Create(actualShapeType, Arguments.Empty(), new[] { zoneHoldingBehavior }); + var zoneHolding = new ZoneHolding(() => _shapeFactory.Create("ContentZone", Arguments.Empty())); + zoneHolding.Metadata.Type = actualShapeType; + return zoneHolding; } private void BindPlacement(BuildShapeContext context, string displayType, string stereotype) { diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj b/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj index 513a9a638..e48d7db9e 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj @@ -21,6 +21,10 @@ false + + + + true @@ -42,10 +46,6 @@ AllRules.ruleset - - ..\..\..\..\lib\claysharp\ClaySharp.dll - True - diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js b/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js index a6431a172..a90572c3e 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Scripts/orchard-designertools-shapetracing.js @@ -550,7 +550,7 @@ jQuery(function ($) { var text = shapeNode.type; // add the hint to the tree node if available - if (shapeNode.hint != '') { + if (shapeNode.hint && shapeNode.hint != '') { text += ' [' + shapeNode.hint + ']'; } diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs index 063294a35..7392d3b82 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/ObjectDumper.cs @@ -4,7 +4,6 @@ using System.Collections; using System.Linq; using System.Reflection; using System.Xml.Linq; -using ClaySharp; using Orchard.ContentManagement; using Orchard.DisplayManagement; using Orchard.DisplayManagement.Shapes; @@ -195,12 +194,19 @@ namespace Orchard.DesignerTools.Services { } private void DumpShape(IShape shape) { - var members = new Dictionary(); - ((IClayBehaviorProvider) (dynamic) shape).Behavior.GetMembers(() => null, shape, members); + var value = shape as Shape; - foreach (var key in members.Keys.Where(key => !key.StartsWith("_"))) { + if (value == null) { + return; + } + + foreach (DictionaryEntry entry in value.Properties) { // ignore private members (added dynamically by the shape wrapper) - Dump(members[key], key); + if (entry.Key.ToString().StartsWith("_")) { + continue; + } + + Dump(entry.Value, entry.Key.ToString()); } } diff --git a/src/Orchard.Web/Modules/Orchard.Forms/Orchard.Forms.csproj b/src/Orchard.Web/Modules/Orchard.Forms/Orchard.Forms.csproj index 2554bb139..868ccdd0b 100644 --- a/src/Orchard.Web/Modules/Orchard.Forms/Orchard.Forms.csproj +++ b/src/Orchard.Web/Modules/Orchard.Forms/Orchard.Forms.csproj @@ -21,6 +21,10 @@ false + + + + true @@ -42,9 +46,6 @@ AllRules.ruleset - - ..\..\..\..\lib\claysharp\ClaySharp.dll - diff --git a/src/Orchard.Web/Modules/Orchard.Forms/Shapes/EditorShapes.cs b/src/Orchard.Web/Modules/Orchard.Forms/Shapes/EditorShapes.cs index fc9a9c92f..42eebdfd1 100644 --- a/src/Orchard.Web/Modules/Orchard.Forms/Shapes/EditorShapes.cs +++ b/src/Orchard.Web/Modules/Orchard.Forms/Shapes/EditorShapes.cs @@ -26,8 +26,8 @@ namespace Orchard.Forms.Shapes { builder.Describe("Input").Configure(descriptor => descriptor.Wrappers.Add("InputWrapper")); builder.Describe("SelectList").Configure(descriptor => descriptor.Wrappers.Add("InputWrapper")); builder.Describe("Textarea").Configure(descriptor => descriptor.Wrappers.Add("InputWrapper")); - builder.Describe("Form").OnCreating(ctx => ctx.Behaviors.Add(new PropertiesAreItems())); - builder.Describe("Fieldset").OnCreating(ctx => ctx.Behaviors.Add(new PropertiesAreItems())); + builder.Describe("Form").OnCreating(ctx => ctx.Create = () => new PropertiesAreItems()); + builder.Describe("Fieldset").OnCreating(ctx => ctx.Create = () => new PropertiesAreItems()); } [Shape] diff --git a/src/Orchard.Web/Modules/Orchard.Forms/Shapes/PropertyItemsBehavior.cs b/src/Orchard.Web/Modules/Orchard.Forms/Shapes/PropertyItemsBehavior.cs index 1fa9691c6..4bc96cb48 100644 --- a/src/Orchard.Web/Modules/Orchard.Forms/Shapes/PropertyItemsBehavior.cs +++ b/src/Orchard.Web/Modules/Orchard.Forms/Shapes/PropertyItemsBehavior.cs @@ -1,26 +1,26 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Orchard.DisplayManagement; -using ClaySharp; +using Orchard.DisplayManagement.Shapes; namespace Orchard.Forms.Shapes { - public class PropertiesAreItems : ClayBehavior { - public override object SetMember(Func proceed, dynamic self, string name, object value) { - Patch(self, name, value); - return proceed(); + public class PropertiesAreItems : Composite { + public override bool TrySetMember(System.Dynamic.SetMemberBinder binder, object value) { + Patch(this, binder.Name, value); + return base.TrySetMember(binder, value); } - public override object SetIndex(Func proceed, dynamic self, IEnumerable keys, object value) { - if (keys.Count() == 1 && keys.All(k => k is string)) - Patch(self, System.Convert.ToString(keys.Single()), value); - return proceed(); + public override bool TrySetIndex(System.Dynamic.SetIndexBinder binder, object[] indexes, object value) { + if (indexes.Count() == 1 && indexes.All(k => k is string)) + Patch(this, System.Convert.ToString(indexes.Single()), value); + return base.TrySetIndex(binder, indexes, value); } - public override object InvokeMember(Func proceed, dynamic self, string name, INamedEnumerable args) { - if (args.Count() == 1 && args.Named.Count() == 0) - Patch(self, name, args.Single()); - return proceed(); + public override bool TryInvokeMember(System.Dynamic.InvokeMemberBinder binder, object[] args, out object result) { + var arguments = Arguments.From(args, binder.CallInfo.ArgumentNames); + if (args.Count() == 1 && !arguments.Named.Any()) + Patch(this, binder.Name, args.Single()); + return base.TryInvokeMember(binder, args, out result); } readonly IDictionary _assigned = new Dictionary(); diff --git a/src/Orchard.Web/Modules/Orchard.Rules/Orchard.Rules.csproj b/src/Orchard.Web/Modules/Orchard.Rules/Orchard.Rules.csproj index 578960cf7..dabcc5317 100644 --- a/src/Orchard.Web/Modules/Orchard.Rules/Orchard.Rules.csproj +++ b/src/Orchard.Web/Modules/Orchard.Rules/Orchard.Rules.csproj @@ -21,6 +21,10 @@ false + + + + true @@ -42,7 +46,6 @@ AllRules.ruleset - diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Orchard.Setup.csproj b/src/Orchard.Web/Modules/Orchard.Setup/Orchard.Setup.csproj index 3ca370a28..f0ba33f90 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Orchard.Setup.csproj +++ b/src/Orchard.Web/Modules/Orchard.Setup/Orchard.Setup.csproj @@ -50,9 +50,6 @@ False ..\..\..\..\lib\autofac\Autofac.dll - - ..\..\..\..\lib\claysharp\ClaySharp.dll - diff --git a/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml b/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml index bcf5586d4..3ef9783e7 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml +++ b/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml @@ -30,7 +30,11 @@ : null; IHtmlString sectionHeaderMarkup; - if (firstOfTheSecond != null && firstLevelMenuItem.LinkToFirstChild && (firstOfTheSecond.RouteValues != null || HasText(firstOfTheSecond.Url))) { + if (firstOfTheSecond != null + && firstLevelMenuItem.LinkToFirstChild + && ( + firstOfTheSecond.RouteValues != null + || HasText(firstOfTheSecond.Url))) { sectionHeaderMarkup = HasText(itemId) ? Html.Link(sectionHeaderText, (string)firstOfTheSecond.Href, new { @class = itemClassName, id = itemId }) : Html.Link(sectionHeaderText, (string)firstOfTheSecond.Href, new { @class = itemClassName }); @@ -72,7 +76,7 @@