public dynamic DisplayElement( Element element, IContent content, string displayType = null, IUpdateModel updater = null, string renderEventName = null, string renderEventArgs = null) { var createShapeContext = new ElementCreatingDisplayShapeContext { Element = element, DisplayType = displayType, Content = content, }; element.Descriptor.CreatingDisplay(createShapeContext); var typeName = element.GetType().Name; var category = element.Category.ToSafeName(); var drivers = element.Descriptor.GetDrivers(); var elementShapeArguments = CreateArguments(element, content); var elementShape = (dynamic)_shapeFactory.Create("Element", elementShapeArguments, () => new ZoneHolding(() => _shapeFactory.Create("ElementZone"))); elementShape.Metadata.DisplayType = displayType; elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}", typeName)); elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}_{1}", typeName, displayType)); elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}__{1}", typeName, category)); elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}_{1}__{2}", typeName, displayType, category)); var displayContext = new ElementDisplayContext { Element = element, ElementShape = elementShape, DisplayType = displayType, Content = content, Updater = updater, RenderEventName = renderEventName, RenderEventArgs = renderEventArgs }; _elementEventHandlerHandler.Displaying(displayContext); InvokeDrivers(drivers, driver => driver.Displaying(displayContext)); element.Descriptor.Display(displayContext); var container = element as Container; if (container != null) { if (container.Elements.Any()) { foreach (var child in container.Elements) { var childShape = DisplayElement(child, content, displayType: displayType, updater: updater); childShape.Parent = elementShape; elementShape.Add(childShape); } } } return(elementShape); }
public dynamic DisplayElement( Element element, IContent content, string displayType = null, IUpdateModel updater = null) { var typeName = element.GetType().Name; var category = element.Category.ToSafeName(); var drivers = element.Descriptor.GetDrivers().ToList(); var createShapeContext = new ElementCreatingDisplayShapeContext { Element = element, DisplayType = displayType, Content = content, }; _elementEventHandlerHandler.CreatingDisplay(createShapeContext); drivers.Invoke(driver => driver.CreatingDisplay(createShapeContext), Logger); if (element.Descriptor.CreatingDisplay != null) { element.Descriptor.CreatingDisplay(createShapeContext); } if (createShapeContext.Cancel) { return(null); } var elementShapeArguments = CreateArguments(element, content); var elementShape = (dynamic)_shapeFactory.Create("Element", elementShapeArguments, () => new ZoneHolding(() => _shapeFactory.Create("ElementZone"))); elementShape.Metadata.DisplayType = displayType; elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}", typeName)); elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}_{1}", typeName, displayType)); elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}__{1}", typeName, category)); elementShape.Metadata.Alternates.Add(String.Format("Elements_{0}_{1}__{2}", typeName, displayType, category)); var displayingContext = new ElementDisplayingContext { Element = element, ElementShape = elementShape, DisplayType = displayType, Content = content, Updater = updater }; _elementEventHandlerHandler.Displaying(displayingContext); drivers.Invoke(driver => driver.Displaying(displayingContext), Logger); if (element.Descriptor.Displaying != null) { element.Descriptor.Displaying(displayingContext); } var container = element as Container; if (container != null) { if (container.Elements.Any()) { var childIndex = 0; foreach (var child in container.Elements) { var childShape = DisplayElement(child, content, displayType: displayType, updater: updater); if (childShape != null) { childShape.Parent = elementShape; elementShape.Add(childShape, childIndex++.ToString()); } } } } var displayedContext = new ElementDisplayedContext { Element = element, ElementShape = elementShape, DisplayType = displayType, Content = content, Updater = updater }; _elementEventHandlerHandler.Displayed(displayedContext); drivers.Invoke(driver => driver.Displayed(displayedContext), Logger); if (element.Descriptor.Displayed != null) { element.Descriptor.Displayed(displayedContext); } return(elementShape); }