Extending manifest parser to support flatenned default feature.

--HG--
branch : dev
This commit is contained in:
Andre Rodrigues
2011-03-16 08:55:07 -07:00
parent 7d44329f5a
commit 173af2bcbe
49 changed files with 260 additions and 258 deletions

View File

@@ -169,6 +169,26 @@ Features:
Assert.That(descriptor.Features.First().Description, Is.EqualTo("My super wiki module for Orchard.")); Assert.That(descriptor.Features.First().Description, Is.EqualTo("My super wiki module for Orchard."));
} }
[Test]
public void ExtensionDescriptorsShouldBeParsedForMinimalModuleTxtWithSimpleFormat() {
_folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
OrchardVersion: 1
Description: My super wiki module for Orchard.
");
var descriptor = _manager.AvailableExtensions().Single();
Assert.That(descriptor.Id, Is.EqualTo("SuperWiki"));
Assert.That(descriptor.Version, Is.EqualTo("1.0.3"));
Assert.That(descriptor.OrchardVersion, Is.EqualTo("1"));
Assert.That(descriptor.Features.Count(), Is.EqualTo(1));
Assert.That(descriptor.Features.First().Id, Is.EqualTo("SuperWiki"));
Assert.That(descriptor.Features.First().Extension.Id, Is.EqualTo("SuperWiki"));
Assert.That(descriptor.Features.First().Description, Is.EqualTo("My super wiki module for Orchard."));
}
[Test] [Test]
public void ExtensionDescriptorsShouldBeParsedForCompleteModuleTxt() { public void ExtensionDescriptorsShouldBeParsedForCompleteModuleTxt() {
@@ -250,6 +270,84 @@ Features:
} }
} }
[Test]
public void ExtensionDescriptorsShouldBeParsedForCompleteModuleTxtWithSimpleFormat() {
_folders.Manifests.Add("AnotherWiki", @"
Name: AnotherWiki
Author: Coder Notaprogrammer
Website: http://anotherwiki.codeplex.com
Version: 1.2.3
OrchardVersion: 1
Description: Module Description
FeatureDescription: My super wiki module for Orchard.
Dependencies: Versioning, Search
Category: Content types
Features:
AnotherWiki Editor:
Description: A rich editor for wiki contents.
Dependencies: TinyMCE, AnotherWiki
Category: Input methods
AnotherWiki DistributionList:
Description: Sends e-mail alerts when wiki contents gets published.
Dependencies: AnotherWiki, Email Subscriptions
Category: Email
AnotherWiki Captcha:
Description: Kills spam. Or makes it zombie-like.
Dependencies: AnotherWiki, reCaptcha
Category: Spam
");
var descriptor = _manager.AvailableExtensions().Single();
Assert.That(descriptor.Id, Is.EqualTo("AnotherWiki"));
Assert.That(descriptor.Name, Is.EqualTo("AnotherWiki"));
Assert.That(descriptor.Author, Is.EqualTo("Coder Notaprogrammer"));
Assert.That(descriptor.WebSite, Is.EqualTo("http://anotherwiki.codeplex.com"));
Assert.That(descriptor.Version, Is.EqualTo("1.2.3"));
Assert.That(descriptor.OrchardVersion, Is.EqualTo("1"));
Assert.That(descriptor.Description, Is.EqualTo("Module Description"));
Assert.That(descriptor.Features.Count(), Is.EqualTo(4));
foreach (var featureDescriptor in descriptor.Features) {
switch (featureDescriptor.Id) {
case "AnotherWiki":
Assert.That(featureDescriptor.Extension, Is.SameAs(descriptor));
Assert.That(featureDescriptor.Description, Is.EqualTo("My super wiki module for Orchard."));
Assert.That(featureDescriptor.Category, Is.EqualTo("Content types"));
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
Assert.That(featureDescriptor.Dependencies.Contains("Versioning"));
Assert.That(featureDescriptor.Dependencies.Contains("Search"));
break;
case "AnotherWiki Editor":
Assert.That(featureDescriptor.Extension, Is.SameAs(descriptor));
Assert.That(featureDescriptor.Description, Is.EqualTo("A rich editor for wiki contents."));
Assert.That(featureDescriptor.Category, Is.EqualTo("Input methods"));
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
Assert.That(featureDescriptor.Dependencies.Contains("TinyMCE"));
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
break;
case "AnotherWiki DistributionList":
Assert.That(featureDescriptor.Extension, Is.SameAs(descriptor));
Assert.That(featureDescriptor.Description, Is.EqualTo("Sends e-mail alerts when wiki contents gets published."));
Assert.That(featureDescriptor.Category, Is.EqualTo("Email"));
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
Assert.That(featureDescriptor.Dependencies.Contains("Email Subscriptions"));
break;
case "AnotherWiki Captcha":
Assert.That(featureDescriptor.Extension, Is.SameAs(descriptor));
Assert.That(featureDescriptor.Description, Is.EqualTo("Kills spam. Or makes it zombie-like."));
Assert.That(featureDescriptor.Category, Is.EqualTo("Spam"));
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
Assert.That(featureDescriptor.Dependencies.Contains("reCaptcha"));
break;
default:
Assert.Fail("Features not parsed correctly");
break;
}
}
}
[Test] [Test]
public void ExtensionManagerShouldLoadFeatures() { public void ExtensionManagerShouldLoadFeatures() {
var extensionLoader = new StubLoaders(); var extensionLoader = new StubLoaders();

View File

@@ -5,8 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The common module introduces content parts that are going to be used by most content types (common, body and routable). Description: The common module introduces content parts that are going to be used by most content types (common, body and routable).
Features: FeatureDescription: Core content parts.
Common: Dependencies: Settings
Description: Core content parts. Category: Core
Dependencies: Settings
Category: Core

View File

@@ -5,8 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The containers module introduces container and containable behaviors for content items. Description: The containers module introduces container and containable behaviors for content items.
Features: FeatureDescription: Container and containable parts to enable parent-child relationships between content items.
Containers: Dependencies: Contents, Routable
Description: Container and containable parts to enable parent-child relationships between content items. Category: Content
Dependencies: Contents, Routable
Category: Content

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The contents module enables the creation of custom content types. Description: The contents module enables the creation of custom content types.
Features: FeatureDescription: Default custom content type definition, creation and management.
Contents: Category: Core
Description: Default custom content type definition, creation and management.
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The dashboard module is providing the dashboard screen of the admininstration UI of the application. Description: The dashboard module is providing the dashboard screen of the admininstration UI of the application.
Features: FeatureDescription: Standard admin dashboard.
Dashboard: Category: Core
Description: Standard admin dashboard.
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The Feeds module is providing RSS feeds to content items. Description: The Feeds module is providing RSS feeds to content items.
Features: FeatureDescription: RSS feeds for content items.
Feeds: Category: Syndication
Description: RSS feeds for content items.
Category: Syndication

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The HomePage module enables the promotion of a content item or container to be the home page of the site. Description: The HomePage module enables the promotion of a content item or container to be the home page of the site.
Features: FeatureDescription: Standard site home page that allows a specified content type or container to *be* the home page.
HomePage: Category: Core
Description: Standard site home page that allows a specified content type or container to *be* the home page.
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The navigation module creates and manages a simple navigation menu for the front-end of the application and allows you to add content items to the admin menu. Description: The navigation module creates and manages a simple navigation menu for the front-end of the application and allows you to add content items to the admin menu.
Features: FeatureDescription: Menu management.
Navigation: Category: Core
Description: Menu management.
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The dashboard module is providing the reports screen of the application. Description: The dashboard module is providing the reports screen of the application.
Features: FeatureDescription: Reports management.
Reports: Category: Core
Description: Reports management.
Category: Core

View File

@@ -5,8 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The routable module enables content items to be accessed through a friendly human-readable URL. Description: The routable module enables content items to be accessed through a friendly human-readable URL.
Features: FeatureDescription: Routable content part.
Routable: Dependencies: Settings
Description: Routable content part. Category: Core
Dependencies: Settings
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The scheduling module enables background task scheduling. Description: The scheduling module enables background task scheduling.
Features: FeatureDescription: Scheduled background tasks.
Scheduling: Category: Core
Description: Scheduled background tasks.
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The settings module creates site settings that other modules can contribute to. Description: The settings module creates site settings that other modules can contribute to.
Features: FeatureDescription: Site settings.
Settings: Category: Core
Description: Site settings.
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The shapes module contains core shape templates and display hooks. Description: The shapes module contains core shape templates and display hooks.
Features: FeatureDescription: Core shape templates and display hooks.
Shapes: Category: Core
Description: Core shape templates and display hooks.
Category: Core

View File

@@ -5,7 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The XmlRpc module enables creation of contents from client applications such as LiveWriter. Description: The XmlRpc module enables creation of contents from client applications such as LiveWriter.
Features: FeatureDescription: XML-RPC opt-in implementation.
XmlRpc: Category: Content Publishing
Description: XML-RPC opt-in implementation.
Category: Content Publishing

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The Lucene module enables the site to be indexed using Lucene.NET. The index generated by this module can then be used by the search module to provide an integrated full-text search experience to a web site. Description: The Lucene module enables the site to be indexed using Lucene.NET. The index generated by this module can then be used by the search module to provide an integrated full-text search experience to a web site.
Features: FeatureDescription: Lucene indexing services.
Lucene: Category: Search
Name: Lucene
Description: Lucene indexing services.
Category: Search

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The ArchiveLater module introduces scheduled archiving functionality. Description: The ArchiveLater module introduces scheduled archiving functionality.
Features: FeatureDescription: Scheduled archiving.
Orchard.ArchiveLater: Category: Content
Name: Archive Later Dependencies: Common, Scheduling, Orchard.jQuery
Description: Scheduled archiving.
Category: Content
Dependencies: Common, Scheduling, Orchard.jQuery

View File

@@ -5,12 +5,10 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The Orchard Blogs module is implementing basic blogging features. Description: The Orchard Blogs module is implementing basic blogging features.
FeatureDescription: A simple web log.
Dependencies: Shapes, Common, Routable, Feeds, Navigation, Orchard.Widgets, Orchard.jQuery, Orchard.PublishLater
Category: Content
Features: Features:
Orchard.Blogs:
Name: Blogs
Description: A simple web log.
Dependencies: Shapes, Common, Routable, Feeds, Navigation, Orchard.Widgets, Orchard.jQuery, Orchard.PublishLater
Category: Content
Orchard.Blogs.RemotePublishing: Orchard.Blogs.RemotePublishing:
Name: Remote Blog Publishing Name: Remote Blog Publishing
Description: Blog easier using a dedicated MetaWeblogAPI-compatible publishing tool. Description: Blog easier using a dedicated MetaWeblogAPI-compatible publishing tool.

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: Tools to create Orchard components. Description: Tools to create Orchard components.
Features: FeatureDescription: Tools to create Orchard components.
Orchard.CodeGeneration: Category: Developer
Name: Code Generation
Description: Tools to create Orchard components.
Category: Developer

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The comments system implemented by this module can be applied to arbitrary Orchard content types, such as blogs and pages. It includes comment validation and spam protection through the Akismet service. Description: The comments system implemented by this module can be applied to arbitrary Orchard content types, such as blogs and pages. It includes comment validation and spam protection through the Akismet service.
Features: FeatureDescription: Standard content item comments.
Orchard.Comments: Dependencies: Settings
Name: Comments Category: Social
Description: Standard content item comments.
Dependencies: Settings
Category: Social

View File

@@ -4,9 +4,6 @@ Author: The Orchard Team
Website: http://orchardproject.net Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Features: Description: ContentTypes modules enables the creation and alteration of content types not based on code.
Orchard.ContentTypes: Dependencies: Contents
Name: Content Types Category: Content
Description: ContentTypes modules enables the creation and alteration of content types not based on code.
Dependencies: Contents
Category: Content

View File

@@ -5,12 +5,10 @@ Website: http://orchardproject.net
Version: 1.0 Version: 1.0
OrchardVersion: 1.0 OrchardVersion: 1.0
Description: Contains designer tools to ease the Themes development process Description: Contains designer tools to ease the Themes development process
Category: Designer
FeatureDescription: Displays all currently displayed shapes and some information to customize them
Dependencies: Orchard.jQuery
Features: Features:
Orchard.DesignerTools:
Name: Shape Tracing
Category: Designer
Description: Displays all currently displayed shapes and some information to customize them
Dependencies: Orchard.jQuery
UrlAlternates: UrlAlternates:
Name: Url Alternates Name: Url Alternates
Category: Designer Category: Designer

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The Email Messaging module adds Email sending functionalities. Description: The Email Messaging module adds Email sending functionalities.
Features: FeatureDescription: Email Messaging services.
Orchard.Email: Category: Messaging
Name: Email Dependencies: Orchard.Messaging
Description: Email Messaging services.
Category: Messaging
Dependencies: Orchard.Messaging

View File

@@ -5,11 +5,8 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: An assortment of debugging tools. Description: An assortment of debugging tools.
Category: Developer
Features: Features:
Orchard.Experimental:
Name: Experimental
Description: An assortment of debugging tools.
Category: Developer
Profiling: Profiling:
Name: Profiling Name: Profiling
Description: Tools to help profile Orchard. Description: Tools to help profile Orchard.

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: Provides content item data import and export capability. Description: Provides content item data import and export capability.
Features: FeatureDescription: Imports and exports content item data
Orchard.ImportExport: Category: Content
Name: Import Export
Description: Imports and exports content item data
Category: Content

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The Indexing module enables the site to be indexed. The index generated by this module can then be used by the search module to provide an integrated full-text search experience to a web site. Description: The Indexing module enables the site to be indexed. The index generated by this module can then be used by the search module to provide an integrated full-text search experience to a web site.
Features: FeatureDescription: Indexing infrastructure. Requires an index implementation like the Lucene module.
Orchard.Indexing: Category: Search
Name: Indexing
Description: Indexing infrastructure. Requires an index implementation like the Lucene module.
Category: Search

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: Introduces a preconfigured container-enabled content type. Description: Introduces a preconfigured container-enabled content type.
Features: FeatureDescription: A basic container-enabled content type.
Orchard.Lists: Dependencies: Contents, Containers, Navigation
Name: Lists Category: Content
Description: A basic container-enabled content type.
Dependencies: Contents, Containers, Navigation
Category: Content

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The localization module enables the localization of content items. Description: The localization module enables the localization of content items.
Features: FeatureDescription: Localize content items.
Orchard.Localization: Dependencies: Settings
Name: Localization Category: Content
Description: Localize content items.
Dependencies: Settings
Category: Content

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The media module offer basic media management features. It currently only supports image files. Storage goes into the current Orchard file system, which can be the server's physical file system or Azure blob storage. Description: The media module offer basic media management features. It currently only supports image files. Storage goes into the current Orchard file system, which can be the server's physical file system or Azure blob storage.
Features: FeatureDescription: File system based media upload, storage and management.
Orchard.Media: Category: Media
Name: Media
Description: File system based media upload, storage and management.
Category: Media

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0 Version: 1.0
OrchardVersion: 1.0 OrchardVersion: 1.0
Description: Description for the module Description: Description for the module
Features: Dependencies: Orchard.Media, Orchard.jQuery
Orchard.MediaPicker: FeatureDescription: UI for browsing for, uploading, or selecting an image for an HTML editor.
Name: MediaPicker Category: Input Editor
Dependencies: Orchard.Media, Orchard.jQuery
Description: UI for browsing for, uploading, or selecting an image for an HTML editor.
Category: Input Editor

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The Messaging module adds messaging functionalities. Description: The Messaging module adds messaging functionalities.
Features: FeatureDescription: Messaging services.
Orchard.Messaging: Category: Messaging
Name: Messaging Dependencies: Settings
Description: Messaging services.
Category: Messaging
Dependencies: Settings

View File

@@ -5,11 +5,9 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: Data migration commands. Description: Data migration commands.
FeatureDescription: Data migration commands.
Category: Developer
Features: Features:
Orchard.Migrations:
Name: Migrations
Description: Data migration commands.
Category: Developer
DatabaseUpdate: DatabaseUpdate:
Name: Database Update Name: Database Update
Description: Commands for updating the database schema according to the definition of the "Record" classes in code. Description: Commands for updating the database schema according to the definition of the "Record" classes in code.

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The Modules module enables the administrator of the site to manage the installed modules as well as activate and de-activate features. Description: The Modules module enables the administrator of the site to manage the installed modules as well as activate and de-activate features.
Features: FeatureDescription: Standard module and feature management.
Orchard.Modules: Category: Core
Name: Modules
Description: Standard module and feature management.
Category: Core

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The multi-tenancy module enables multiple Orchard sites to run in isolation inside of a single web application, improving site density on a single server or hosted account. Description: The multi-tenancy module enables multiple Orchard sites to run in isolation inside of a single web application, improving site density on a single server or hosted account.
Features: FeatureDescription: Configure multiple site tenants.
Orchard.MultiTenancy: Category: Hosting
Name: Multi Tenancy
Description: Configure multiple site tenants.
Category: Hosting

View File

@@ -5,16 +5,14 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The packaging module enables packaging modules using the OPC format. Description: The packaging module enables packaging modules using the OPC format.
FeatureDescription: Commands for creating/installing local modules.
Category: Packaging
Dependencies: PackagingServices
Features: Features:
PackagingServices: PackagingServices:
Name: Packaging Services Name: Packaging Services
Description: Core services for packaging using the OPC format. Description: Core services for packaging using the OPC format.
Category: Packaging Category: Packaging
Orchard.Packaging:
Name: Packaging
Description: Commands for creating/installing local modules.
Category: Packaging
Dependencies: PackagingServices
Gallery: Gallery:
Name: Gallery Name: Gallery
Description: Module gallery management. Description: Module gallery management.

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: Introduces a preconfigured page content type. Description: Introduces a preconfigured page content type.
Features: FeatureDescription: A basic page content type.
Orchard.Pages: Dependencies: Contents
Name: Pages Category: Content
Description: A basic page content type.
Dependencies: Contents
Category: Content

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The PublishLater module introduces draft creation and scheduled publishing functionality. Description: The PublishLater module introduces draft creation and scheduled publishing functionality.
Features: FeatureDescription: Draft creation and scheduled publishing.
Orchard.PublishLater: Category: Content
Name: Publish Later Dependencies: Common, Scheduling, Orchard.jQuery
Description: Draft creation and scheduled publishing.
Category: Content
Dependencies: Common, Scheduling, Orchard.jQuery

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: Provides Orchard Recipes. Description: Provides Orchard Recipes.
Features: FeatureDescription: Implementation of Orchard recipes.
Orchard.Recipes: Category: Core
Name: Recipes
Description: Implementation of Orchard recipes.
Category: Core

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The roles module is adding the ability to assign roles to users. It's also providing a set of default roles for which other modules can define default permissions. Description: The roles module is adding the ability to assign roles to users. It's also providing a set of default roles for which other modules can define default permissions.
Features: FeatureDescription: Standard user roles.
Orchard.Roles: Category: Core
Name: Roles Dependencies: Orchard.Users
Description: Standard user roles.
Category: Core
Dependencies: Orchard.Users

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The DLR scripting module enables the possibility to execute scripts using the DLR. Description: The DLR scripting module enables the possibility to execute scripts using the DLR.
Features: FeatureDescription: DLR scripting support.
Orchard.Scripting.Dlr: Dependencies: Orchard.Scripting
Name: DLR Scripting Category: Scripting
Description: DLR scripting support.
Dependencies: Orchard.Scripting
Category: Scripting

View File

@@ -5,11 +5,9 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The scripting module enables the possibility to execute scripts using a simple custom scripting language. Description: The scripting module enables the possibility to execute scripts using a simple custom scripting language.
FeatureDescription: Scripting support.
Category: Scripting
Features: Features:
Orchard.Scripting:
Name: Scripting
Description: Scripting support.
Category: Scripting
Orchard.Scripting.Lightweight: Orchard.Scripting.Lightweight:
Name: Lightweight scripting Name: Lightweight scripting
Description: Custom lightweight and simple scripting language. Description: Custom lightweight and simple scripting language.

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The search module enables the management of the search index and provides the front-end searching user interface. Description: The search module enables the management of the search index and provides the front-end searching user interface.
Features: FeatureDescription: Standard interface to Orchard's built-in search.
Orchard.Search: Category: Search
Name: Search Dependencies: Orchard.Indexing
Description: Standard interface to Orchard's built-in search.
Category: Search
Dependencies: Orchard.Indexing

View File

@@ -4,8 +4,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The setup module is creating the application's setup experience. Description: The setup module is creating the application's setup experience.
Features: FeatureDescription: Standard site setup. This feature is disabled automatically once setup is over.
Orchard.Setup: Category: Core
Name: Setup
Description: Standard site setup. This feature is disabled automatically once setup is over.
Category: Core

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The tags module is providing basic tagging for arbitrary content types. Description: The tags module is providing basic tagging for arbitrary content types.
Features: FeatureDescription: Tag a content item.
Orchard.Tags: Dependencies: Settings
Name: Tags Category: Navigation
Description: Tag a content item.
Dependencies: Settings
Category: Navigation

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The themes module makes it possible for Orchard applications to customize the look and feel of an Orchard web site. Description: The themes module makes it possible for Orchard applications to customize the look and feel of an Orchard web site.
Features: FeatureDescription: Basic theming capability.
Orchard.Themes: Category: Core
Name: Themes
Description: Basic theming capability.
Category: Core

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The users module enables user management. Description: The users module enables user management.
Features: FeatureDescription: Standard users.
Orchard.Users: Category: Core
Name: Users Dependencies: Settings
Description: Standard users.
Category: Core
Dependencies: Settings

View File

@@ -5,9 +5,6 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: An implementation of widgets for Orchard. Description: An implementation of widgets for Orchard.
Features: FeatureDescription: An implementation of widgets.
Orchard.Widgets: Category: Widget
Name: Widgets Dependencies: Orchard.Scripting
Description: An implementation of widgets.
Category: Widget
Dependencies: Orchard.Scripting

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The jQuery module contains the jQuery and related script libraries. Description: The jQuery module contains the jQuery and related script libraries.
Features: FeatureDescription: A common location for jQuery and related script libraries.
Orchard.jQuery: Category: Core
Name: jQuery
Description: A common location for jQuery and related script libraries.
Category: Core

View File

@@ -5,8 +5,5 @@ Website: http://orchardproject.net
Version: 1.0.20 Version: 1.0.20
OrchardVersion: 1.0.20 OrchardVersion: 1.0.20
Description: The TinyMCE module enables rich text contents to be created using a "What You See Is What You Get" user interface. Description: The TinyMCE module enables rich text contents to be created using a "What You See Is What You Get" user interface.
Features: FeatureDescription: TinyMCE HTML WYSIWYG editor.
TinyMce: Category: Input Editor
Name: TinyMce
Description: TinyMCE HTML WYSIWYG editor.
Category: Input Editor

View File

@@ -101,7 +101,7 @@ namespace Orchard.Environment.Extensions.Folders {
Zones = GetValue(manifest, "Zones"), Zones = GetValue(manifest, "Zones"),
BaseTheme = GetValue(manifest, "BaseTheme"), BaseTheme = GetValue(manifest, "BaseTheme"),
}; };
extensionDescriptor.Features = GetFeaturesForExtension(GetValue(manifest, "Features"), extensionDescriptor); extensionDescriptor.Features = GetFeaturesForExtension(manifest, extensionDescriptor);
return extensionDescriptor; return extensionDescriptor;
} }
@@ -174,6 +174,15 @@ namespace Orchard.Environment.Extensions.Folders {
case "BaseTheme": case "BaseTheme":
manifest.Add("BaseTheme", field[1]); manifest.Add("BaseTheme", field[1]);
break; break;
case "Dependencies":
manifest.Add("Dependencies", field[1]);
break;
case "Category":
manifest.Add("Category", field[1]);
break;
case "FeatureDescription":
manifest.Add("FeatureDescription", field[1]);
break;
case "Features": case "Features":
manifest.Add("Features", reader.ReadToEnd()); manifest.Add("Features", reader.ReadToEnd());
break; break;
@@ -184,8 +193,23 @@ namespace Orchard.Environment.Extensions.Folders {
return manifest; return manifest;
} }
private static IEnumerable<FeatureDescriptor> GetFeaturesForExtension(string featuresText, ExtensionDescriptor extensionDescriptor) { private static IEnumerable<FeatureDescriptor> GetFeaturesForExtension(IDictionary<string, string> manifest, ExtensionDescriptor extensionDescriptor) {
var featureDescriptors = new List<FeatureDescriptor>(); var featureDescriptors = new List<FeatureDescriptor>();
// Default feature
FeatureDescriptor defaultFeature = new FeatureDescriptor {
Id = extensionDescriptor.Id,
Name = extensionDescriptor.Name,
Description = GetValue(manifest, "FeatureDescription") ?? GetValue(manifest, "Description") ?? string.Empty,
Dependencies = ParseFeatureDependenciesEntry(GetValue(manifest, "Dependencies")),
Extension = extensionDescriptor,
Category = GetValue(manifest, "Category")
};
featureDescriptors.Add(defaultFeature);
// Remaining features
string featuresText = GetValue(manifest, "Features");
if (featuresText != null) { if (featuresText != null) {
FeatureDescriptor featureDescriptor = null; FeatureDescriptor featureDescriptor = null;
using (StringReader reader = new StringReader(featuresText)) { using (StringReader reader = new StringReader(featuresText)) {
@@ -193,17 +217,25 @@ namespace Orchard.Environment.Extensions.Folders {
while ((line = reader.ReadLine()) != null) { while ((line = reader.ReadLine()) != null) {
if (IsFeatureDeclaration(line)) { if (IsFeatureDeclaration(line)) {
if (featureDescriptor != null) { if (featureDescriptor != null) {
featureDescriptors.Add(featureDescriptor); if (!featureDescriptor.Equals(defaultFeature)) {
featureDescriptors.Add(featureDescriptor);
}
featureDescriptor = null; featureDescriptor = null;
} }
featureDescriptor = new FeatureDescriptor {
Extension = extensionDescriptor
};
string[] featureDeclaration = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries); string[] featureDeclaration = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
featureDescriptor.Id = featureDeclaration[0].Trim(); string featureDescriptorId = featureDeclaration[0].Trim();
if (featureDescriptor.Id == extensionDescriptor.Id) { if (featureDescriptorId == extensionDescriptor.Id) {
featureDescriptor = defaultFeature;
featureDescriptor.Name = extensionDescriptor.Name; featureDescriptor.Name = extensionDescriptor.Name;
} }
else {
featureDescriptor = new FeatureDescriptor {
Id = featureDescriptorId,
Extension = extensionDescriptor
};
}
} }
else if (IsFeatureFieldDeclaration(line)) { else if (IsFeatureFieldDeclaration(line)) {
if (featureDescriptor != null) { if (featureDescriptor != null) {
@@ -239,20 +271,12 @@ namespace Orchard.Environment.Extensions.Folders {
throw new ArgumentException(message); throw new ArgumentException(message);
} }
} }
if (featureDescriptor != null)
if (featureDescriptor != null && !featureDescriptor.Equals(defaultFeature))
featureDescriptors.Add(featureDescriptor); featureDescriptors.Add(featureDescriptor);
} }
} }
if (!featureDescriptors.Any(fd => fd.Id == extensionDescriptor.Id)) {
featureDescriptors.Add(new FeatureDescriptor {
Id = extensionDescriptor.Id,
Name = extensionDescriptor.Name,
Dependencies = new string[0],
Extension = extensionDescriptor
});
}
return featureDescriptors; return featureDescriptors;
} }
@@ -277,12 +301,15 @@ namespace Orchard.Environment.Extensions.Folders {
return false; return false;
} }
private static string[] ParseFeatureDependenciesEntry(string dependenciesEntry) { private static IEnumerable<string> ParseFeatureDependenciesEntry(string dependenciesEntry) {
if (string.IsNullOrEmpty(dependenciesEntry))
return Enumerable.Empty<string>();
var dependencies = new List<string>(); var dependencies = new List<string>();
foreach (var s in dependenciesEntry.Split(',')) { foreach (var s in dependenciesEntry.Split(',')) {
dependencies.Add(s.Trim()); dependencies.Add(s.Trim());
} }
return dependencies.ToArray(); return dependencies;
} }
private static string GetValue(IDictionary<string, string> fields, string key) { private static string GetValue(IDictionary<string, string> fields, string key) {