From 46d88feb0c71a7c445696bb03f2fe36ced02ef53 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sun, 19 Jul 2015 23:36:37 +0100 Subject: [PATCH] Added IsVisible property to recipe builders to control their visibility. This is useful for builder steps that should only be rendered when there's actually something to render. For example, the Custom Steps step should only be visible if there actually are any custom steps available for execution. --- .../ExportActions/BuildRecipeAction.cs | 3 ++- .../Recipes/Builders/CustomStepsStep.cs | 4 ++++ .../ViewModels/ExportStepViewModel.cs | 1 + .../ExportActions/BuildRecipe.cshtml | 23 ++++++++++--------- .../Recipes/Services/IRecipeBuilderStep.cs | 1 + .../Recipes/Services/RecipeBuilderStep.cs | 1 + 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ExportActions/BuildRecipeAction.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ExportActions/BuildRecipeAction.cs index 5d53bf200..3c7a9a71a 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ExportActions/BuildRecipeAction.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ExportActions/BuildRecipeAction.cs @@ -38,7 +38,8 @@ namespace Orchard.ImportExport.Providers.ExportActions { Name = x.Name, DisplayName = x.DisplayName, Description = x.Description, - Editor = x.BuildEditor(shapeFactory) + Editor = x.BuildEditor(shapeFactory), + IsVisible = x.IsVisible }); var viewModel = new RecipeBuilderViewModel { diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Recipes/Builders/CustomStepsStep.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Recipes/Builders/CustomStepsStep.cs index 8729c06d4..d944fff42 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Recipes/Builders/CustomStepsStep.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Recipes/Builders/CustomStepsStep.cs @@ -32,6 +32,10 @@ namespace Orchard.ImportExport.Recipes.Builders { get { return T("Exports additional items."); } } + public override bool IsVisible { + get { return CustomSteps.Any(); } + } + public override int Priority { get { return -50; } } public override int Position { get { return 500; } } diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportStepViewModel.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportStepViewModel.cs index cdd53aae5..ba644db40 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportStepViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportStepViewModel.cs @@ -7,5 +7,6 @@ namespace Orchard.ImportExport.ViewModels { public LocalizedString Description { get; set; } public bool IsSelected { get; set; } public dynamic Editor { get; set; } + public bool IsVisible { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Views/EditorTemplates/ExportActions/BuildRecipe.cshtml b/src/Orchard.Web/Modules/Orchard.ImportExport/Views/EditorTemplates/ExportActions/BuildRecipe.cshtml index 1e60195c2..436103e31 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Views/EditorTemplates/ExportActions/BuildRecipe.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Views/EditorTemplates/ExportActions/BuildRecipe.cshtml @@ -4,26 +4,27 @@ Script.Require("ShapesBase"); } @{ - var exportStepIndex = 0; - foreach (var exportStep in Model.Steps) { - var stepName = Html.NameFor(m => m.Steps[exportStepIndex].IsSelected).ToString(); + var stepIndex = 0; + var steps = Model.Steps.Where(x => x.IsVisible).ToArray(); + foreach (var step in steps) { + var stepName = Html.NameFor(m => m.Steps[stepIndex].IsSelected).ToString(); var stepId = stepName.HtmlClassify(); -
+
- + - + - @Html.Hint(@exportStep.Description) - @if (exportStep.Editor != null) { + @Html.Hint(step.Description) + @if (step.Editor != null) {
- @Display(exportStep.Editor) + @Display(step.Editor)
}
- exportStepIndex++; - if (exportStepIndex < Model.Steps.Count) { + stepIndex++; + if (stepIndex < steps.Count()) {
} } diff --git a/src/Orchard/Recipes/Services/IRecipeBuilderStep.cs b/src/Orchard/Recipes/Services/IRecipeBuilderStep.cs index a05d4c91f..067e0be74 100644 --- a/src/Orchard/Recipes/Services/IRecipeBuilderStep.cs +++ b/src/Orchard/Recipes/Services/IRecipeBuilderStep.cs @@ -18,6 +18,7 @@ namespace Orchard.Recipes.Services { /// The order in which this builder should be displayed. /// int Position { get; } + bool IsVisible { get; } dynamic BuildEditor(dynamic shapeFactory); dynamic UpdateEditor(dynamic shapeFactory, IUpdateModel updater); diff --git a/src/Orchard/Recipes/Services/RecipeBuilderStep.cs b/src/Orchard/Recipes/Services/RecipeBuilderStep.cs index 6a871e260..75b984cec 100644 --- a/src/Orchard/Recipes/Services/RecipeBuilderStep.cs +++ b/src/Orchard/Recipes/Services/RecipeBuilderStep.cs @@ -9,6 +9,7 @@ namespace Orchard.Recipes.Services { public abstract LocalizedString Description { get; } public virtual int Priority { get { return 0; } } public virtual int Position { get { return 0; } } + public virtual bool IsVisible { get { return true; } } protected virtual string Prefix { get { return GetType().Name; }