Adding simple search to gallery. Fixinx ratings CSS.

--HG--
branch : dev
This commit is contained in:
Andre Rodrigues
2011-02-20 11:59:26 -08:00
parent 6b88f4f859
commit a480aaa746
6 changed files with 66 additions and 38 deletions

View File

@@ -18,8 +18,8 @@ namespace Orchard.Packaging {
.Add(T("Available"), "2", item => item.Action("Modules", "Gallery", new { area = "Orchard.Packaging" }) .Add(T("Available"), "2", item => item.Action("Modules", "Gallery", new { area = "Orchard.Packaging" })
.Permission(StandardPermissions.SiteOwner).LocalNav())); .Permission(StandardPermissions.SiteOwner).LocalNav()));
builder.Add(T("Settings"), "30", menu => menu builder.Add(T("Configuration"), "50", menu => menu
.Add(T("Feeds"), "3", item => item.Action("Sources", "Gallery", new { area = "Orchard.Packaging" }) .Add(T("Feeds"), "25", item => item.Action("Sources", "Gallery", new { area = "Orchard.Packaging" })
.Permission(StandardPermissions.SiteOwner))); .Permission(StandardPermissions.SiteOwner)));
} }
} }

View File

@@ -1,3 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -149,7 +150,8 @@ namespace Orchard.Packaging.Controllers {
var sourceExtensions = _packagingSourceManager.GetExtensionList( var sourceExtensions = _packagingSourceManager.GetExtensionList(
source, source,
packages => { packages => {
packages = packages.Where(p => p.PackageType == packageType); packages = packages.Where(p => p.PackageType == packageType &&
(string.IsNullOrEmpty(options.SearchText) || p.Id.Contains(options.SearchText)));
switch (options.Order) { switch (options.Order) {
case PackagingExtensionsOrder.Downloads: case PackagingExtensionsOrder.Downloads:
@@ -174,7 +176,8 @@ namespace Orchard.Packaging.Controllers {
// count packages separately to prevent loading everything just to count // count packages separately to prevent loading everything just to count
totalCount += _packagingSourceManager.GetExtensionCount( totalCount += _packagingSourceManager.GetExtensionCount(
source, source,
packages => packages.Where(p => p.PackageType == packageType) packages => packages.Where(p => p.PackageType == packageType &&
(string.IsNullOrEmpty(options.SearchText) || p.Id.Contains(options.SearchText)))
); );
extensions = extensions == null ? sourceExtensions : extensions.Concat(sourceExtensions); extensions = extensions == null ? sourceExtensions : extensions.Concat(sourceExtensions);

View File

@@ -47,7 +47,11 @@
width: 171px; width: 171px;
height: 128px; height: 128px;
} }
.properties li p {
float: left;
}
.ratings { .ratings {
float: right;
background:url(../Content/Images/stars.png) repeat-x; background:url(../Content/Images/stars.png) repeat-x;
height: 14px; height: 14px;
width: 75px; width: 75px;
@@ -57,4 +61,11 @@
background: url(../Content/Images/stars.png) repeat-x 0 -14px; background: url(../Content/Images/stars.png) repeat-x 0 -14px;
position: absolute; position: absolute;
width: 45px; width: 45px;
}
.search-actions {
float: right;
display: inline;
height: auto;
margin: 0 1.4em 0 0;
padding-top: 0;
} }

View File

@@ -1,6 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using Orchard.Packaging.Models; using Orchard.Packaging.Models;
using Orchard.Packaging.Services;
namespace Orchard.Packaging.ViewModels { namespace Orchard.Packaging.ViewModels {
public class PackagingExtensionsViewModel { public class PackagingExtensionsViewModel {
@@ -13,6 +12,7 @@ namespace Orchard.Packaging.ViewModels {
public class PackagingExtensionsOptions { public class PackagingExtensionsOptions {
public int? SourceId { get; set; } public int? SourceId { get; set; }
public string SearchText { get; set; }
public PackagingExtensionsOrder Order { get; set; } public PackagingExtensionsOrder Order { get; set; }
} }

View File

@@ -7,7 +7,7 @@
var pageSizes = new List<int?>() { 10, 50, 100 }; var pageSizes = new List<int?>() { 10, 50, 100 };
var defaultPageSize = WorkContext.CurrentSite.PageSize; var defaultPageSize = WorkContext.CurrentSite.PageSize;
if(!pageSizes.Contains(defaultPageSize)) { if (!pageSizes.Contains(defaultPageSize)) {
pageSizes.Add(defaultPageSize); pageSizes.Add(defaultPageSize);
} }
@@ -24,6 +24,7 @@
} }
</select> </select>
</fieldset> </fieldset>
<fieldset class="bulk-actions"> <fieldset class="bulk-actions">
<label for="filterResults">@T("Sort by:")</label> <label for="filterResults">@T("Sort by:")</label>
<select id="filterResults" name="@Html.NameOf(m => m.Options.Order)"> <select id="filterResults" name="@Html.NameOf(m => m.Options.Order)">
@@ -38,19 +39,25 @@
@foreach(int size in pageSizes.OrderBy(p => p)) { @foreach(int size in pageSizes.OrderBy(p => p)) {
@Html.SelectOption((int)Model.Pager.PageSize, size, size.ToString()) @Html.SelectOption((int)Model.Pager.PageSize, size, size.ToString())
} }
<select> </select>
<button type="submit">@T("Apply")</button> <button type="submit">@T("Apply")</button>
</fieldset> </fieldset>
<fieldset class="search-actions">
<input type="text" id="searchText" name="@Html.NameOf(m => m.Options.SearchText)" />
<button type="submit">@T("Search")</button>
</fieldset>
if (Model.Extensions.Count() > 0) { if (Model.Extensions.Count() > 0) {
<ul class="contentItems"> <ul class="contentItems">
@foreach (var item in Model.Extensions) { @foreach (var item in Model.Extensions) {
<li> <li>
@{ @{
string iconUrl = @item.IconUrl; string iconUrl = @item.IconUrl;
if (string.IsNullOrWhiteSpace(iconUrl)) { if (string.IsNullOrWhiteSpace(iconUrl)) {
iconUrl = Href("../../Content/Images/ModuleDefaultIcon.png"); iconUrl = Href("../../Content/Images/ModuleDefaultIcon.png");
} }
} }
<div class="iconThumbnail"> <div class="iconThumbnail">
@@ -79,9 +86,10 @@
<li>&nbsp;&#124;&nbsp;@T("Website: ") <li>&nbsp;&#124;&nbsp;@T("Website: ")
@if (!string.IsNullOrEmpty(item.ProjectUrl)) { <a href="@item.ProjectUrl">@item.ProjectUrl</a> } else { @T("Unknown").ToString() } @if (!string.IsNullOrEmpty(item.ProjectUrl)) { <a href="@item.ProjectUrl">@item.ProjectUrl</a> } else { @T("Unknown").ToString() }
</li> </li>
<li>&nbsp;&#124;&nbsp;@T("Rating") <li><div>&nbsp;&#124;&nbsp;@T("Rating: ")
<div class="ratings" style="width:@(15*5)px" title="@T("Ratings: {0} ({1})", item.Rating, item.RatingsCount)"> <div class="ratings" style="width:@(15 * 5)px" title="@T("Ratings: {0} ({1})", item.Rating, item.RatingsCount)">
<div class="score" style="width:@(15*(item.Rating))px">&nbsp;</div> <div class="score" style="width:@(15 * (item.Rating))px">&nbsp;</div>
</div>
</div> </div>
</li> </li>
</ul> </ul>
@@ -95,6 +103,6 @@
</li>} </li>}
</ul> </ul>
} }
@Display(Model.Pager) @Display(Model.Pager)
} }

View File

@@ -3,27 +3,28 @@
@using System.Linq; @using System.Linq;
@{ @{
Style.Require("PackagingAdmin"); Style.Require("PackagingAdmin");
var pageSizes = new List<int?>() { 10, 50, 100 }; var pageSizes = new List<int?>() { 10, 50, 100 };
var defaultPageSize = WorkContext.CurrentSite.PageSize; var defaultPageSize = WorkContext.CurrentSite.PageSize;
if(!pageSizes.Contains(defaultPageSize)) { if (!pageSizes.Contains(defaultPageSize)) {
pageSizes.Add(defaultPageSize); pageSizes.Add(defaultPageSize);
} }
Layout.Title = T("Themes").ToString(); Layout.Title = T("Themes").ToString();
} }
@using ( Html.BeginFormAntiForgeryPost(Url.Action("Themes", "Gallery")) ) { @using (Html.BeginFormAntiForgeryPost(Url.Action("Themes", "Gallery"))) {
<fieldset class="bulk-actions"> <fieldset class="bulk-actions">
<label for="filterResults" class="bulk-filter">@T("Feed:")</label> <label for="filterResults" class="bulk-filter">@T("Show")</label>
<select id="sourceId" name="sourceId"> <select id="sourceId" name="sourceId">
@Html.SelectOption("", Model.SelectedSource == null, T("Any (show all feeds)").ToString()) @Html.SelectOption("", Model.SelectedSource == null, T("All feeds").ToString())
@foreach (var source in Model.Sources) { @foreach (var source in Model.Sources) {
@Html.SelectOption(source.Id, Model.SelectedSource != null && Model.SelectedSource.Id == source.Id, source.FeedTitle) @Html.SelectOption(source.Id, Model.SelectedSource != null && Model.SelectedSource.Id == source.Id, source.FeedTitle)
} }
</select> </select>
</fieldset> </fieldset>
<fieldset class="bulk-actions"> <fieldset class="bulk-actions">
<label for="filterResults">@T("Sort by:")</label> <label for="filterResults">@T("Sort by:")</label>
<select id="filterResults" name="@Html.NameOf(m => m.Options.Order)"> <select id="filterResults" name="@Html.NameOf(m => m.Options.Order)">
@@ -35,28 +36,33 @@
<label for="pageSize">@T("Show:")</label> <label for="pageSize">@T("Show:")</label>
<select id="pageSize" name="PageSize"> <select id="pageSize" name="PageSize">
@Html.SelectOption((int)Model.Pager.PageSize, 0, T("All").ToString()) @Html.SelectOption((int)Model.Pager.PageSize, 0, T("All").ToString())
@foreach(int size in pageSizes.OrderBy(p => p)) { @foreach (int size in pageSizes.OrderBy(p => p)) {
@Html.SelectOption((int)Model.Pager.PageSize, size, size.ToString()) @Html.SelectOption((int)Model.Pager.PageSize, size, size.ToString())
} }
<select> </select>
<button type="submit">@T("Apply")</button> <button type="submit">@T("Apply")</button>
</fieldset> </fieldset>
<fieldset class="search-actions">
<input type="text" id="searchText" name="@Html.NameOf(m => m.Options.SearchText)" value="@Model.Options.SearchText" />
<button type="submit">@T("Search")</button>
</fieldset>
if (Model.Extensions.Count() > 0) { if (Model.Extensions.Count() > 0) {
<ul class="contentItems theme"> <ul class="contentItems theme">
@foreach (var item in Model.Extensions) { @foreach (var item in Model.Extensions) {
<li> <li>
@{ @{
string extensionClass = "iconThumbnail"; string extensionClass = "iconThumbnail";
string iconUrl = @item.IconUrl; string iconUrl = @item.IconUrl;
if (!string.IsNullOrWhiteSpace(@item.FirstScreenshot)) { if (!string.IsNullOrWhiteSpace(@item.FirstScreenshot)) {
iconUrl = @item.FirstScreenshot; iconUrl = @item.FirstScreenshot;
extensionClass = "screenshotThumbnail"; extensionClass = "screenshotThumbnail";
} } else if (string.IsNullOrWhiteSpace(iconUrl)) {
else if (string.IsNullOrWhiteSpace(iconUrl)) { iconUrl = Href("../../Content/Images/imagePlaceholder.png");
iconUrl = Href("../../Content/Images/imagePlaceholder.png"); extensionClass = "screenshotThumbnail";
extensionClass = "screenshotThumbnail"; }
}
} }
<div class="@extensionClass"> <div class="@extensionClass">
@@ -72,7 +78,7 @@
</div> </div>
<div class="related"> <div class="related">
@Html.ActionLink(T("Install").ToString(), "Install", new RouteValueDictionary {{"packageId", item.PackageId}, {"version", item.Version}, {"sourceId", item.Source.Id}, {"redirectTo", "Themes"}})@T(" | ") @Html.ActionLink(T("Install").ToString(), "Install", new RouteValueDictionary { { "packageId", item.PackageId }, { "version", item.Version }, { "sourceId", item.Source.Id }, { "redirectTo", "Themes" } })@T(" | ")
<a href="@item.PackageStreamUri">@T("Download")</a> <a href="@item.PackageStreamUri">@T("Download")</a>
</div> </div>
@@ -83,12 +89,12 @@
<li>&nbsp;&#124;&nbsp;@T("Author: {0}", !string.IsNullOrEmpty(item.Authors) ? item.Authors : T("Unknown").ToString())</li> <li>&nbsp;&#124;&nbsp;@T("Author: {0}", !string.IsNullOrEmpty(item.Authors) ? item.Authors : T("Unknown").ToString())</li>
<li>&nbsp;&#124;&nbsp;@T("Downloads: {0}", item.DownloadCount)</li> <li>&nbsp;&#124;&nbsp;@T("Downloads: {0}", item.DownloadCount)</li>
<li>&nbsp;&#124;&nbsp;@T("Website: ") <li>&nbsp;&#124;&nbsp;@T("Website: ")
@if(!string.IsNullOrEmpty(item.ProjectUrl)) { <a href="@item.ProjectUrl">@item.ProjectUrl</a> } @if (!string.IsNullOrEmpty(item.ProjectUrl)) { <a href="@item.ProjectUrl">@item.ProjectUrl</a> } else { @T("Unknown").ToString() }
else { @T("Unknown").ToString() }
</li> </li>
<li>&nbsp;&#124;&nbsp;@T("Rating") <li><div>&nbsp;&#124;&nbsp;@T("Rating: ")
<div class="ratings" style="width:@(15*5)px" title="@T("Ratings: {0} ({1})", item.Rating, item.RatingsCount)"> <div class="ratings" style="width:@(15 * 5)px" title="@T("Ratings: {0} ({1})", item.Rating, item.RatingsCount)">
<div class="score" style="width:@(15*(item.Rating))px">&nbsp;</div> <div class="score" style="width:@(15 * (item.Rating))px">&nbsp;</div>
</div>
</div> </div>
</li> </li>
</ul> </ul>