private void ApplyImplementation(BuildShapeContext context, string displayType) { if (!string.Equals(context.GroupId ?? "", _groupId ?? "", StringComparison.OrdinalIgnoreCase)) return; var placement = context.FindPlacement(_shapeType, _differentiator, _defaultLocation); if (string.IsNullOrEmpty(placement.Location) || placement.Location == "-") return; dynamic parentShape = context.Shape; var newShape = _shapeBuilder(context); if (ContentPart != null && newShape.ContentPart == null) { newShape.ContentPart = ContentPart; } if (ContentField != null && newShape.ContentField == null) { newShape.ContentField = ContentField; } ShapeMetadata newShapeMetadata = newShape.Metadata; newShapeMetadata.Prefix = _prefix; newShapeMetadata.DisplayType = displayType; newShapeMetadata.PlacementSource = placement.Source; // if a specific shape is provided, remove all previous alternates and wrappers if (!String.IsNullOrEmpty(placement.ShapeType)) { newShapeMetadata.Type = placement.ShapeType; newShapeMetadata.Alternates.Clear(); newShapeMetadata.Wrappers.Clear(); } foreach (var alternate in placement.Alternates) { newShapeMetadata.Alternates.Add(alternate); } foreach (var wrapper in placement.Wrappers) { newShapeMetadata.Wrappers.Add(wrapper); } var delimiterIndex = placement.Location.IndexOf(':'); if (delimiterIndex < 0) { parentShape.Zones[placement.Location].Add(newShape); } else { var zoneName = placement.Location.Substring(0, delimiterIndex); var position = placement.Location.Substring(delimiterIndex + 1); parentShape.Zones[zoneName].Add(newShape, position); } }
private IEnumerable<DriverResultPlacement> ExtractPlacement(DriverResult result, BuildShapeContext context) { if (result is CombinedResult) { foreach (var subResult in ((CombinedResult)result).GetResults()) { foreach (var placement in ExtractPlacement(subResult, context)) { yield return placement; } } } else if (result is ContentShapeResult) { var contentShapeResult = (ContentShapeResult)result; var placement = context.FindPlacement( contentShapeResult.GetShapeType(), contentShapeResult.GetDifferentiator(), contentShapeResult.GetLocation() ); string zone = placement.Location; string position = String.Empty; // if no placement is found, it's hidden, e.g., no placement was found for the specific ContentType/DisplayType if (placement.Location != null) { var delimiterIndex = placement.Location.IndexOf(':'); if (delimiterIndex >= 0) { zone = placement.Location.Substring(0, delimiterIndex); position = placement.Location.Substring(delimiterIndex + 1); } } var content = _contentManager.New(context.ContentItem.ContentType); dynamic itemShape = CreateItemShape("Content_Edit"); itemShape.ContentItem = content; if (context is BuildDisplayContext) { var newContext = new BuildDisplayContext(itemShape, content, "Detail", "", context.New); BindPlacement(newContext, "Detail", "Content"); contentShapeResult.Apply(newContext); } else { var newContext = new BuildEditorContext(itemShape, content, "", context.New); BindPlacement(newContext, null, "Content"); contentShapeResult.Apply(newContext); } yield return new DriverResultPlacement { Shape = itemShape.Content, ShapeResult = contentShapeResult, PlacementSettings = new PlacementSettings { ShapeType = contentShapeResult.GetShapeType(), Zone = zone, Position = position, Differentiator = contentShapeResult.GetDifferentiator() ?? String.Empty } }; } }
private void ApplyImplementation(BuildShapeContext context, string displayType) { var placement = context.FindPlacement(_shapeType, _differentiator, _defaultLocation); if (string.IsNullOrEmpty(placement.Location) || placement.Location == "-") return; // parse group placement var group = placement.GetGroup(); if (!String.IsNullOrEmpty(group)) { _groupId = group; } if (!string.Equals(context.GroupId ?? "", _groupId ?? "", StringComparison.OrdinalIgnoreCase)) return; dynamic parentShape = context.Shape; context.ContentPart = ContentPart; var newShape = _shapeBuilder(context); // ignore it if the driver returned a null shape if(newShape == null) { return; } // add a ContentPart property to the final shape if (ContentPart != null && newShape.ContentPart == null) { newShape.ContentPart = ContentPart; } // add a ContentField property to the final shape if (ContentField != null && newShape.ContentField == null) { newShape.ContentField = ContentField; } ShapeMetadata newShapeMetadata = newShape.Metadata; newShapeMetadata.Prefix = _prefix; newShapeMetadata.DisplayType = displayType; newShapeMetadata.PlacementSource = placement.Source; // if a specific shape is provided, remove all previous alternates and wrappers if (!String.IsNullOrEmpty(placement.ShapeType)) { newShapeMetadata.Type = placement.ShapeType; newShapeMetadata.Alternates.Clear(); newShapeMetadata.Wrappers.Clear(); } foreach (var alternate in placement.Alternates) { newShapeMetadata.Alternates.Add(alternate); } foreach (var wrapper in placement.Wrappers) { newShapeMetadata.Wrappers.Add(wrapper); } // the zone name is in reference of Layout, e.g. /AsideSecond if (placement.IsLayoutZone()) { parentShape = context.Layout; } var position = placement.GetPosition(); var zone = placement.GetZone(); if (String.IsNullOrEmpty(position)) { parentShape.Zones[zone].Add(newShape); } else { parentShape.Zones[zone].Add(newShape, position); } }
private void ApplyImplementation(BuildShapeContext context, string displayType) { if (!string.Equals(context.GroupId ?? "", _groupId ?? "", StringComparison.OrdinalIgnoreCase)) return; var placement = context.FindPlacement(_shapeType, _differentiator, _defaultLocation); if (string.IsNullOrEmpty(placement.Location) || placement.Location == "-") return; dynamic parentShape = context.Shape; context.ContentPart = ContentPart; var newShape = _shapeBuilder(context); // ignore it if the driver returned a null shape if(newShape == null) { return; } // add a ContentPart property to the final shape if (ContentPart != null && newShape.ContentPart == null) { newShape.ContentPart = ContentPart; } // add a ContentField property to the final shape if (ContentField != null && newShape.ContentField == null) { newShape.ContentField = ContentField; } ShapeMetadata newShapeMetadata = newShape.Metadata; newShapeMetadata.Prefix = _prefix; newShapeMetadata.DisplayType = displayType; newShapeMetadata.PlacementSource = placement.Source; // if a specific shape is provided, remove all previous alternates and wrappers if (!String.IsNullOrEmpty(placement.ShapeType)) { newShapeMetadata.Type = placement.ShapeType; newShapeMetadata.Alternates.Clear(); newShapeMetadata.Wrappers.Clear(); } foreach (var alternate in placement.Alternates) { newShapeMetadata.Alternates.Add(alternate); } foreach (var wrapper in placement.Wrappers) { newShapeMetadata.Wrappers.Add(wrapper); } // copy the current location for further processing var localPlacement = placement.Location; // the zone name is in reference of Layout, e.g. /AsideSecond if (placement.Location.StartsWith("/")) { localPlacement = placement.Location.Substring(1); parentShape = context.Layout; } var delimiterIndex = localPlacement.IndexOf(':'); if (delimiterIndex < 0) { parentShape.Zones[localPlacement].Add(newShape); } else { var zoneName = localPlacement.Substring(0, delimiterIndex); var position = localPlacement.Substring(delimiterIndex + 1); parentShape.Zones[zoneName].Add(newShape, position); } }