Пример #1
0
        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());
        }
Пример #2
0
        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)
                });
            }
        }
Пример #3
0
        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"
                });
            }
        }
Пример #6
0
        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();
            }));
        }
Пример #7
0
        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 }
                    }
                };
            }));
        }
Пример #9
0
        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
                };
            }));
        }
Пример #10
0
        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)));
        }