public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { if (context.IsHarvesting) { return(Enumerable.Empty <ElementDescriptor>()); } var blueprints = _elementBlueprintService.Value.GetBlueprints().ToArray(); var query = from blueprint in blueprints let describeContext = new DescribeElementsContext { Content = context.Content, CacheVaryParam = "Blueprints", IsHarvesting = true } let baseElementDescriptor = _elementManager.Value.GetElementDescriptorByTypeName(describeContext, blueprint.BaseElementTypeName) let baseElement = _elementManager.Value.ActivateElement(baseElementDescriptor) select new ElementDescriptor( baseElement.Descriptor.ElementType, blueprint.ElementTypeName, T(blueprint.ElementDisplayName), T(!String.IsNullOrWhiteSpace(blueprint.ElementDescription) ? blueprint.ElementDescription : blueprint.ElementDisplayName), GetCategory(blueprint)) { EnableEditorDialog = false, IsSystemElement = false, CreatingDisplay = creatingDisplayContext => CreatingDisplay(creatingDisplayContext, blueprint), Displaying = displayContext => Displaying(displayContext, baseElement), StateBag = new Dictionary <string, object> { { "Blueprint", true }, { "ElementTypeName", baseElement.Descriptor.TypeName } } }; return(query.ToArray()); }
public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { var currentThemeName = _siteThemeService.Value.GetCurrentThemeName(); var shapeTable = _shapeTableLocator.Value.Lookup(currentThemeName); var shapeDescriptors = shapeTable.Bindings .Where(x => !string.Equals(x.Key, "Elements_Snippet", StringComparison.OrdinalIgnoreCase) && x.Key.EndsWith(SnippetShapeSuffix, StringComparison.OrdinalIgnoreCase)) .ToDictionary(x => x.Key, x => x.Value.ShapeDescriptor); var elementType = typeof(Snippet); var snippetElement = (Snippet)_elementFactory.Value.Activate(elementType); foreach (var shapeDescriptor in shapeDescriptors) { var snippetDescriptor = CreateSnippetDescriptor(shapeDescriptor.Value, snippetElement); var shapeType = shapeDescriptor.Value.ShapeType; yield return(new ElementDescriptor(elementType, shapeType, snippetDescriptor.DisplayName, snippetDescriptor.Description, snippetDescriptor.Category) { Displaying = displayContext => Displaying(displayContext, shapeDescriptor.Value, snippetDescriptor), ToolboxIcon = snippetDescriptor.ToolboxIcon, EnableEditorDialog = snippetDescriptor.Fields.Any(), Editor = ctx => Editor(snippetDescriptor, ctx), UpdateEditor = ctx => UpdateEditor(snippetDescriptor, ctx) }); } }
public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { var currentThemeName = _siteThemeService.Value.GetCurrentThemeName(); var shapeTable = _shapeTableLocator.Value.Lookup(currentThemeName); var shapeDescriptors = shapeTable.Bindings.Where(x => !String.Equals(x.Key, "Elements_Snippet", StringComparison.OrdinalIgnoreCase) && x.Key.EndsWith(SnippetShapeSuffix, StringComparison.OrdinalIgnoreCase)).ToDictionary(x => x.Key, x => x.Value.ShapeDescriptor); var elementType = typeof(Snippet); var snippetElement = (Snippet)_elementFactory.Value.Activate(elementType); foreach (var shapeDescriptor in shapeDescriptors) { var snippetManifest = ParseSnippetManifest(shapeDescriptor.Value.BindingSource); var shapeType = shapeDescriptor.Value.ShapeType; var elementName = GetDisplayName(snippetManifest, shapeDescriptor.Value.BindingSource); var toolboxIcon = GetToolboxIcon(snippetManifest, snippetElement); var description = GetDescription(snippetManifest, shapeType); var category = GetCategory(snippetManifest, snippetElement); var closureDescriptor = shapeDescriptor; var snippetDescriptor = ParseSnippetDescriptor(snippetManifest); yield return(new ElementDescriptor(elementType, shapeType, new LocalizedString(elementName), description, category) { Displaying = displayContext => Displaying(displayContext, closureDescriptor.Value, snippetDescriptor), ToolboxIcon = toolboxIcon, EnableEditorDialog = snippetDescriptor != null || HasSnippetFields(shapeDescriptor.Value), Editor = ctx => Editor(snippetDescriptor ?? DescribeSnippet(shapeType, snippetElement), ctx), UpdateEditor = ctx => UpdateEditor(snippetDescriptor ?? DescribeSnippet(shapeType, snippetElement), ctx) }); } }
private IEnumerable <ContentPartDefinition> GetContentParts(HarvestElementsContext context) { var contentTypeDefinition = context.Content != null ? _contentDefinitionManager.Value.GetTypeDefinition(context.Content.ContentItem.ContentType) : default(ContentTypeDefinition); var parts = contentTypeDefinition != null ? contentTypeDefinition.Parts.Select(x => x.PartDefinition) : _contentDefinitionManager.Value.ListPartDefinitions(); return(parts.Where(p => p.Settings.GetModel <ContentPartLayoutSettings>().Placable)); }
public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { var elementType = typeof(Elements.ContentField); var contentFieldElement = _elementFactory.Value.Activate(elementType); var tuples = GetContentFieldTuples(context); foreach (var tuple in tuples) { var part = tuple.Item1; var field = tuple.Item2; var name = String.Format("{0}.{1}", part.Name, field.Name); var displayName = field.DisplayName; yield return(new ElementDescriptor(elementType, name, T.Encode(displayName), T.Encode(field.DisplayName), contentFieldElement.Category) { Displaying = displayContext => Displaying(displayContext), ToolboxIcon = "\uf1b2" }); } }
public IEnumerable <ElementDescriptor> DescribeElements(DescribeElementsContext context) { var contentType = context.Content != null ? context.Content.ContentItem.ContentType : default(string); var cacheKey = String.Format("LayoutElementTypes-{0}-{1}", contentType ?? "AnyType", context.CacheVaryParam); return(_cacheManager.Get(cacheKey, acquireContext => { var harvesterContext = new HarvestElementsContext { Content = context.Content }; var query = from harvester in _elementHarvesters.Value from elementDescriptor in harvester.HarvestElements(harvesterContext) orderby elementDescriptor.DisplayText.Text select elementDescriptor; acquireContext.Monitor(_signals.When(Signals.ElementDescriptors)); return query.ToArray(); })); }
public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { var currentThemeName = _siteThemeService.Value.GetCurrentThemeName(); var shapeTable = _shapeTableLocator.Value.Lookup(currentThemeName); var shapeDescriptors = shapeTable.Bindings.Where(x => !String.Equals(x.Key, "Elements_Snippet", StringComparison.OrdinalIgnoreCase) && x.Key.EndsWith(SnippetShapeSuffix, StringComparison.OrdinalIgnoreCase)).ToDictionary(x => x.Key, x => x.Value.ShapeDescriptor); var elementType = typeof(Snippet); var snippetElement = _elementFactory.Value.Activate(elementType); foreach (var shapeDescriptor in shapeDescriptors) { var shapeType = shapeDescriptor.Value.ShapeType; var elementName = GetDisplayName(shapeDescriptor.Value.BindingSource); var closureDescriptor = shapeDescriptor; yield return(new ElementDescriptor(elementType, shapeType, T(elementName), T("An element that renders the {0} shape.", shapeType), snippetElement.Category) { Display = displayContext => Displaying(displayContext, closureDescriptor.Value), ToolboxIcon = "\uf10c" }); } }
public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { var elementType = typeof(Elements.ContentPart); var contentPartElement = _elementFactory.Value.Activate(elementType); var contentParts = GetContentParts(context); return(contentParts.Select(contentPart => { var partSettings = contentPart.Settings.TryGetModel <ContentPartSettings>(); var partDescription = partSettings != null ? partSettings.Description : null; var description = T(!String.IsNullOrWhiteSpace(partDescription) ? partDescription : contentPart.Name); return new ElementDescriptor(elementType, contentPart.Name, T(contentPart.Name.CamelFriendly()), description, contentPartElement.Category) { Display = displayContext => Displaying(displayContext), ToolboxIcon = "\uf1b2", StateBag = new Dictionary <string, object> { { "ElementTypeName", contentPart.Name } } }; })); }
public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { var drivers = _elementManager.Value.GetDrivers(); var elementTypes = drivers .Select(x => x.GetType().BaseType.GenericTypeArguments[0]) .Where(x => !x.IsAbstract && !x.IsInterface) .Distinct() .ToArray(); return(elementTypes.Select(elementType => { var element = _factory.Value.Activate(elementType); return new ElementDescriptor(elementType, element.Type, element.DisplayText, element.Description, element.Category) { GetDrivers = () => _elementManager.Value.GetDrivers(element), IsSystemElement = element.IsSystemElement, EnableEditorDialog = element.HasEditor, ToolboxIcon = element.ToolboxIcon }; })); }
public IEnumerable <ElementDescriptor> HarvestElements(HarvestElementsContext context) { var contentTypeDefinitions = GetPlaceableContentTypeDefinitions(); return(contentTypeDefinitions.Select(contentTypeDefinition => { var settings = contentTypeDefinition.Settings; var description = settings.ContainsKey("Description") ? settings["Description"] : contentTypeDefinition.DisplayName; return new ElementDescriptor(typeof(PlaceableContentItem), contentTypeDefinition.Name, T.Encode(contentTypeDefinition.DisplayName), T.Encode(description), category: "Content Items") { Displaying = Displaying, Editor = Editor, UpdateEditor = UpdateEditor, ToolboxIcon = "\uf1b2", EnableEditorDialog = true, Removing = RemoveContentItem, Exporting = ExportElement, Importing = ImportElement, StateBag = new Dictionary <string, object> { { "ContentTypeName", contentTypeDefinition.Name } } }; })); }
private IEnumerable <Tuple <ContentPartDefinition, ContentPartFieldDefinition> > GetContentFieldTuples(HarvestElementsContext context) { // If there is no content item provided as context, there are no fields made available. if (context.Content == null) { return(Enumerable.Empty <Tuple <ContentPartDefinition, ContentPartFieldDefinition> >()); } var contentTypeDefinition = _contentDefinitionManager.Value.GetTypeDefinition(context.Content.ContentItem.ContentType); var parts = contentTypeDefinition.Parts.Select(x => x.PartDefinition); var fields = parts.SelectMany(part => part.Fields.Select(field => Tuple.Create(part, field))); // TODO: Each module should be able to tell which fields are supported as droppable elements. var blackList = new string[0]; return(fields.Where(t => blackList.All(x => t.Item2.FieldDefinition.Name != x)).ToList()); }
private IEnumerable <Tuple <ContentPartDefinition, ContentPartFieldDefinition> > GetContentFieldTuples(HarvestElementsContext context) { var contentTypeDefinition = context.Content != null ? _contentDefinitionManager.Value.GetTypeDefinition(context.Content.ContentItem.ContentType) : default(ContentTypeDefinition); var parts = contentTypeDefinition != null ? contentTypeDefinition.Parts.Select(x => x.PartDefinition) : _contentDefinitionManager.Value.ListPartDefinitions(); var fields = parts.SelectMany(part => part.Fields.Select(field => Tuple.Create(part, field))); // TODO: Each module should be able to tell which fields are supported as droppable elements. var blackList = new string[0]; return(fields.Where(t => blackList.All(x => t.Item2.FieldDefinition.Name != x))); }