public void Describe(DescribeSortCriterionContext describe) {
            foreach(var part in _contentDefinitionManager.ListPartDefinitions()) {
                if(!part.Fields.Any()) {
                    continue;
                }

                var descriptor = describe.For(part.Name + "ContentFields", T("{0} Content Fields", part.Name.CamelFriendly()), T("Content Fields for {0}", part.Name.CamelFriendly()));

                foreach(var field in part.Fields) {
                    var localField = field;
                    var localPart = part;
                    var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == localField.FieldDefinition.Name)).ToList();

                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                            // look for a compatible field type editor
                            IFieldTypeEditor fieldTypeEditor = _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(storageType));

                            descriptor.Element(
                                type: localPart.Name + "." + localField.Name + "." + storageName ?? "",
                                name: new LocalizedString(localField.DisplayName + (displayName != null ? ":" + displayName.Text : "")),
                                description: description ?? T("{0} property for {1}", storageName, localField.DisplayName),
                                sort: context => ApplySortCriterion(context, fieldTypeEditor, storageName, storageType, localPart, localField),
                                display: context => DisplaySortCriterion(context, localPart, localField),
                                form: SortCriterionFormProvider.FormName);
                        });
                    
                    foreach(var driver in drivers) {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
 public void Describe(DescribeSortCriterionContext describe) {
     describe.For("General", T("General"), T("General sort criteria"))
         .Element("Random", T("Random"), T("Sorts the results randomly."),
                  context => context.Query.OrderBy(alias => alias.ContentItem(), order => order.Random()),
                  context => T("Random order")
         );
 }
Esempio n. 3
0
        public IEnumerable<TypeDescriptor<SortCriterionDescriptor>> DescribeSortCriteria() {
            var context = new DescribeSortCriterionContext();

            foreach (var provider in _sortCriterionProviders) {
                provider.Describe(context);
            }
            return context.Describe();
        }
Esempio n. 4
0
 public void Describe(DescribeSortCriterionContext describe) {
     foreach (var customSort in _customSortService.Query()) {
         var descriptor = describe.For("CustomSorts",
             T("Custom Sorts"), T("Manually-defined sort orders."));
         var sortId = customSort.Id;
         var sortName = customSort.Name;
         var sortEditUrl = _url.Action("Edit", "CustomSortAdmin", new {id = sortId, area="Vandelay.Industries"});
         descriptor.Element(
             type: customSort.Name,
             name: new LocalizedString(customSort.Name),
             description: T("Custom sort order <a href=\"{1}\">{0}</a>",
                 customSort.Name,
                 sortEditUrl),
             sort: context => ApplySortCriterion(context, sortId, sortName),
             display: context => DisplaySortCriterion(context, sortName));
     }
 }
        public void Describe(DescribeSortCriterionContext describe) {
            var builder = new BindingBuilder();

            foreach(var bindingProvider in _bindingProviders) {
                bindingProvider.GetMemberBindings(builder);
            }

            var groupedMembers = builder.Build().GroupBy(b => b.Property.DeclaringType).ToDictionary(b => b.Key, b => b);

            foreach (var typeMembers in groupedMembers.Keys) {
                var descriptor = describe.For(typeMembers.Name, new LocalizedString(typeMembers.Name.CamelFriendly()), T("Members for {0}", typeMembers.Name));
                foreach (var member in groupedMembers[typeMembers]) {
                    var closureMember = member;
                    descriptor.Element(member.Property.Name, member.DisplayName, member.Description,
                        context => ApplyFilter(context, closureMember.Property),
                        context => DisplaySortCriterion(context, closureMember.DisplayName.Text),
                        SortCriterionFormProvider.FormName
                    );
                }
            }
        }