#20542 Collapsible media library tree in admin.

Dynamically loading MediaLibrary directory tree using ajax and knockout templates
This commit is contained in:
Benjamin Grabkowitz
2014-03-07 17:07:20 -05:00
committed by Sebastien Ros
parent ba09ba8053
commit 5d2a31ffc0
8 changed files with 798 additions and 683 deletions

View File

@@ -1,160 +1,173 @@
using System;
using System.Linq;
using System.Web.Mvc;
using Orchard.ContentManagement;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.MediaLibrary.Models;
using Orchard.MediaLibrary.Services;
using Orchard.MediaLibrary.ViewModels;
using Orchard.Mvc;
using Orchard.Themes;
using Orchard.UI.Navigation;
using Orchard.ContentManagement.MetaData;
using Orchard.Validation;
namespace Orchard.MediaLibrary.Controllers {
[ValidateInput(false)]
public class AdminController : Controller {
private readonly IMediaLibraryService _mediaLibraryService;
private readonly INavigationManager _navigationManager;
private readonly IContentDefinitionManager _contentDefinitionManager;
public AdminController(
IOrchardServices services,
IMediaLibraryService mediaLibraryService,
INavigationManager navigationManager,
IContentDefinitionManager contentDefinitionManager) {
_mediaLibraryService = mediaLibraryService;
_navigationManager = navigationManager;
_contentDefinitionManager = contentDefinitionManager;
Services = services;
T = NullLocalizer.Instance;
Logger = NullLogger.Instance;
}
public IOrchardServices Services { get; set; }
public Localizer T { get; set; }
public ILogger Logger { get; set; }
public ActionResult Index(string folderPath = "", bool dialog = false) {
// let other modules enhance the ui by providing custom navigation and actions
var explorer = Services.ContentManager.New("MediaLibraryExplorer");
explorer.Weld(new MediaLibraryExplorerPart());
var explorerShape = Services.ContentManager.BuildDisplay(explorer);
var viewModel = new MediaManagerIndexViewModel {
DialogMode = dialog,
Folders = _mediaLibraryService.GetMediaFolders(null).Select(GetFolderHierarchy),
FolderPath = folderPath,
MediaTypes = _mediaLibraryService.GetMediaTypes(),
CustomActionsShapes = explorerShape.Actions,
CustomNavigationShapes = explorerShape.Navigation,
};
foreach (var shape in explorerShape.Actions.Items) {
shape.MediaManagerIndexViewModel = viewModel;
}
foreach (var shape in explorerShape.Navigation.Items) {
shape.MediaManagerIndexViewModel = viewModel;
}
return View(viewModel);
}
public ActionResult Import(string folderPath) {
var mediaProviderMenu = _navigationManager.BuildMenu("mediaproviders");
var imageSets = _navigationManager.BuildImageSets("mediaproviders");
var viewModel = new MediaManagerImportViewModel {
Menu = mediaProviderMenu,
ImageSets = imageSets,
FolderPath = folderPath,
MediaTypes = _mediaLibraryService.GetMediaTypes()
};
return View(viewModel);
}
[Themed(false)]
public ActionResult MediaItems(string folderPath, int skip = 0, int count = 0, string order = "created", string mediaType = "") {
var mediaParts = _mediaLibraryService.GetMediaContentItems(folderPath, skip, count, order, mediaType, VersionOptions.Latest);
var mediaPartsCount = _mediaLibraryService.GetMediaContentItemsCount(folderPath, mediaType, VersionOptions.Latest);
var mediaItems = mediaParts.Select(x => new MediaManagerMediaItemViewModel {
MediaPart = x,
Shape = Services.ContentManager.BuildDisplay(x.ContentItem, "Thumbnail")
}).ToList();
var viewModel = new MediaManagerMediaItemsViewModel {
MediaItems = mediaItems,
MediaItemsCount = mediaPartsCount
};
return View(viewModel);
}
[Themed(false)]
public ActionResult RecentMediaItems(int skip = 0, int count = 0, string order = "created", string mediaType = "") {
var mediaParts = _mediaLibraryService.GetMediaContentItems(skip, count, order, mediaType, VersionOptions.Latest);
var mediaPartsCount = _mediaLibraryService.GetMediaContentItemsCount(mediaType, VersionOptions.Latest);
var mediaItems = mediaParts.Select(x => new MediaManagerMediaItemViewModel {
MediaPart = x,
Shape = Services.ContentManager.BuildDisplay(x, "Thumbnail")
}).ToList();
var viewModel = new MediaManagerMediaItemsViewModel {
MediaItems = mediaItems,
MediaItemsCount = mediaPartsCount
};
return View("MediaItems", viewModel);
}
[Themed(false)]
public ActionResult MediaItem(int id, string displayType = "SummaryAdmin") {
var contentItem = Services.ContentManager.Get(id, VersionOptions.Latest);
if (contentItem == null)
return HttpNotFound();
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent, contentItem, T("Cannot edit media")))
return new HttpUnauthorizedResult();
dynamic model = Services.ContentManager.BuildDisplay(contentItem, displayType);
return new ShapeResult(this, model);
}
[HttpPost]
public ActionResult Delete(int[] mediaItemIds) {
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent, T("Couldn't delete media items")))
return new HttpUnauthorizedResult();
try {
foreach (var media in Services.ContentManager.Query(VersionOptions.Latest).ForContentItems(mediaItemIds).List()) {
if (media != null) {
Services.ContentManager.Remove(media);
}
}
return Json(true);
}
catch(Exception e) {
Logger.Error(e, "Could not delete media items.");
return Json(false);
}
}
private FolderHierarchy GetFolderHierarchy(MediaFolder root) {
Argument.ThrowIfNull(root, "root");
return new FolderHierarchy(root) {Children = _mediaLibraryService.GetMediaFolders(root.MediaPath).Select(GetFolderHierarchy)};
}
}
using System;
using System.Linq;
using System.Web.Mvc;
using Orchard.ContentManagement;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.MediaLibrary.Models;
using Orchard.MediaLibrary.Services;
using Orchard.MediaLibrary.ViewModels;
using Orchard.Mvc;
using Orchard.Themes;
using Orchard.UI.Navigation;
using Orchard.ContentManagement.MetaData;
using Orchard.Validation;
namespace Orchard.MediaLibrary.Controllers {
[ValidateInput(false)]
public class AdminController : Controller {
private readonly IMediaLibraryService _mediaLibraryService;
private readonly INavigationManager _navigationManager;
private readonly IContentDefinitionManager _contentDefinitionManager;
public AdminController(
IOrchardServices services,
IMediaLibraryService mediaLibraryService,
INavigationManager navigationManager,
IContentDefinitionManager contentDefinitionManager) {
_mediaLibraryService = mediaLibraryService;
_navigationManager = navigationManager;
_contentDefinitionManager = contentDefinitionManager;
Services = services;
T = NullLocalizer.Instance;
Logger = NullLogger.Instance;
}
public IOrchardServices Services { get; set; }
public Localizer T { get; set; }
public ILogger Logger { get; set; }
public ActionResult Index(string folderPath = "", bool dialog = false) {
// let other modules enhance the ui by providing custom navigation and actions
var explorer = Services.ContentManager.New("MediaLibraryExplorer");
explorer.Weld(new MediaLibraryExplorerPart());
var explorerShape = Services.ContentManager.BuildDisplay(explorer);
var viewModel = new MediaManagerIndexViewModel {
DialogMode = dialog,
FolderPath = folderPath,
MediaTypes = _mediaLibraryService.GetMediaTypes(),
CustomActionsShapes = explorerShape.Actions,
CustomNavigationShapes = explorerShape.Navigation,
};
foreach (var shape in explorerShape.Actions.Items) {
shape.MediaManagerIndexViewModel = viewModel;
}
foreach (var shape in explorerShape.Navigation.Items) {
shape.MediaManagerIndexViewModel = viewModel;
}
return View(viewModel);
}
public ActionResult Import(string folderPath) {
var mediaProviderMenu = _navigationManager.BuildMenu("mediaproviders");
var imageSets = _navigationManager.BuildImageSets("mediaproviders");
var viewModel = new MediaManagerImportViewModel {
Menu = mediaProviderMenu,
ImageSets = imageSets,
FolderPath = folderPath,
MediaTypes = _mediaLibraryService.GetMediaTypes()
};
return View(viewModel);
}
[Themed(false)]
public ActionResult MediaItems(string folderPath, int skip = 0, int count = 0, string order = "created", string mediaType = "") {
var mediaParts = _mediaLibraryService.GetMediaContentItems(folderPath, skip, count, order, mediaType, VersionOptions.Latest);
var mediaPartsCount = _mediaLibraryService.GetMediaContentItemsCount(folderPath, mediaType, VersionOptions.Latest);
var mediaItems = mediaParts.Select(x => new MediaManagerMediaItemViewModel {
MediaPart = x,
Shape = Services.ContentManager.BuildDisplay(x.ContentItem, "Thumbnail")
}).ToList();
var viewModel = new MediaManagerMediaItemsViewModel {
MediaItems = mediaItems,
MediaItemsCount = mediaPartsCount
};
return View(viewModel);
}
[Themed(false)]
public ActionResult ChildFolders(string folderPath = null) {
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent, T("Cannot get child folder listing")))
return new HttpUnauthorizedResult();
var childFolders = _mediaLibraryService.GetMediaFolders(folderPath);
var viewModel = new MediaManagerChildFoldersViewModel {
Children = childFolders
};
return View(viewModel);
}
[Themed(false)]
public ActionResult RecentMediaItems(int skip = 0, int count = 0, string order = "created", string mediaType = "") {
var mediaParts = _mediaLibraryService.GetMediaContentItems(skip, count, order, mediaType, VersionOptions.Latest);
var mediaPartsCount = _mediaLibraryService.GetMediaContentItemsCount(mediaType, VersionOptions.Latest);
var mediaItems = mediaParts.Select(x => new MediaManagerMediaItemViewModel {
MediaPart = x,
Shape = Services.ContentManager.BuildDisplay(x, "Thumbnail")
}).ToList();
var viewModel = new MediaManagerMediaItemsViewModel {
MediaItems = mediaItems,
MediaItemsCount = mediaPartsCount
};
return View("MediaItems", viewModel);
}
[Themed(false)]
public ActionResult MediaItem(int id, string displayType = "SummaryAdmin") {
var contentItem = Services.ContentManager.Get(id, VersionOptions.Latest);
if (contentItem == null)
return HttpNotFound();
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent, contentItem, T("Cannot edit media")))
return new HttpUnauthorizedResult();
dynamic model = Services.ContentManager.BuildDisplay(contentItem, displayType);
return new ShapeResult(this, model);
}
[HttpPost]
public ActionResult Delete(int[] mediaItemIds) {
if (!Services.Authorizer.Authorize(Permissions.ManageMediaContent, T("Couldn't delete media items")))
return new HttpUnauthorizedResult();
try {
foreach (var media in Services.ContentManager.Query(VersionOptions.Latest).ForContentItems(mediaItemIds).List()) {
if (media != null) {
Services.ContentManager.Remove(media);
}
}
return Json(true);
}
catch(Exception e) {
Logger.Error(e, "Could not delete media items.");
return Json(false);
}
}
private FolderHierarchy GetFolderHierarchy(MediaFolder root) {
Argument.ThrowIfNull(root, "root");
return new FolderHierarchy(root) {Children = _mediaLibraryService.GetMediaFolders(root.MediaPath).Select(GetFolderHierarchy)};
}
}
}

View File

@@ -1,395 +1,396 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{73A7688A-5BD3-4F7E-ADFA-CE36C5A10E3B}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Orchard.MediaLibrary</RootNamespace>
<AssemblyName>Orchard.MediaLibrary</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation />
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\lib\newtonsoft.json\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.ComponentModel.DataAnnotations">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions" />
<Reference Include="System.Web.Routing" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Content Include="Scripts\knockout-2.3.0.js" />
<Content Include="Scripts\media-library.js" />
<Content Include="Scripts\modal-window.js" />
<Content Include="Scripts\history.js" />
<Content Include="Styles\font-awesome\css\font-awesome.css" />
<Content Include="Styles\font-awesome\css\font-awesome.min.css" />
<Content Include="Styles\font-awesome\font\fontawesome-webfont.svg" />
<Content Include="Styles\Images\menu.media.png" />
<Content Include="Styles\menu.media-library-admin.css" />
<Content Include="Styles\menu.oembed-mediaproviders.css" />
<Content Include="Styles\orchard-oembed-admin.css" />
<Content Include="Styles\menu.websearch-mediaproviders.css" />
<Content Include="Styles\menu.clientstorage-mediaproviders.css" />
<Content Include="Styles\dialog-mode.css" />
<Content Include="Styles\media-library-picker-admin.css" />
<Content Include="Styles\Images\folders-loader.gif" />
<Content Include="Styles\Images\loading.gif" />
<Content Include="Styles\Images\processing.gif" />
<Content Include="Styles\orchard-clientstorage-admin.css" />
<Content Include="Styles\Images\ajax-loader.gif" />
<Content Include="Styles\orchard-websearch-admin.css" />
<Content Include="Styles\orchard-mediaproviders-admin.css" />
<Content Include="Styles\orchard-medialibrary-admin.css" />
<Content Include="Web.config">
<SubType>Designer</SubType>
</Content>
<Content Include="Scripts\Web.config" />
<Content Include="Styles\Web.config" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="Module.txt" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
<Project>{2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6}</Project>
<Name>Orchard.Framework</Name>
</ProjectReference>
<ProjectReference Include="..\..\Core\Orchard.Core.csproj">
<Project>{9916839C-39FC-4CEB-A5AF-89CA7E87119F}</Project>
<Name>Orchard.Core</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Tokens\Orchard.Tokens.csproj">
<Project>{6f759635-13d7-4e94-bcc9-80445d63f117}</Project>
<Name>Orchard.Tokens</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Compile Include="Drivers\MediaLibraryExplorerPartDriver.cs" />
<Compile Include="ModalAdminFilter.cs" />
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\ClientStorageController.cs" />
<Compile Include="Controllers\OEmbedController.cs" />
<Compile Include="Controllers\FolderController.cs" />
<Compile Include="Controllers\WebSearchController.cs" />
<Compile Include="Drivers\AudioPartDriver.cs" />
<Compile Include="Drivers\OEmbedPartDriver.cs" />
<Compile Include="Drivers\MediaLibraryPickerFieldDriver.cs" />
<Compile Include="Drivers\DocumentPartDriver.cs" />
<Compile Include="Drivers\VideoPartDriver.cs" />
<Compile Include="Drivers\ImagePartDriver.cs" />
<Compile Include="Factories\AudioFactory.cs" />
<Compile Include="Factories\DocumentFactory.cs" />
<Compile Include="Factories\VideoFactory.cs" />
<Compile Include="Factories\ImageFactory.cs" />
<Compile Include="Factories\IMediaFactory.cs" />
<Compile Include="Factories\IMediaFactorySelector.cs" />
<Compile Include="Factories\MediaFactorySelectorResult.cs" />
<Compile Include="Fields\MediaLibraryPickerField.cs" />
<Compile Include="Handlers\MediaLibraryPickerFieldHandler.cs" />
<Compile Include="Handlers\MediaPartHandler.cs" />
<Compile Include="Drivers\MediaPartDriver.cs" />
<Compile Include="Handlers\WebSearchSettingsPartHandler.cs" />
<Compile Include="Migrations.cs" />
<Compile Include="Models\AudioPart.cs" />
<Compile Include="Models\FolderHierarchy.cs" />
<Compile Include="Models\MediaFile.cs" />
<Compile Include="Models\MediaFolder.cs" />
<Compile Include="Models\MediaLibraryExplorerPart.cs" />
<Compile Include="Models\WebSearchSettingsPart.cs" />
<Compile Include="Models\ImagePart.cs" />
<Compile Include="Models\DocumentPart.cs" />
<Compile Include="Models\VideoPart.cs" />
<Compile Include="Models\OEmbedPart.cs" />
<Compile Include="Models\MediaPart.cs" />
<Compile Include="Models\MediaPartRecord.cs" />
<Compile Include="Permissions.cs" />
<Compile Include="Providers\ClientStorageMenu.cs" />
<Compile Include="Providers\OEmbedMenu.cs" />
<Compile Include="Providers\WebSearchMenu.cs" />
<Compile Include="ResourceManifest.cs" />
<Compile Include="Services\IMediaLibraryService.cs" />
<Compile Include="Services\MediaLibraryService.cs" />
<Compile Include="Services\Shapes.cs" />
<Compile Include="Services\XmlRpcHandler.cs" />
<Compile Include="Settings\MediaLibraryPickerFieldEditorEvents.cs" />
<Compile Include="Settings\MediaLibraryPickerFieldSettings.cs" />
<Compile Include="Tokens\FieldTokens.cs" />
<Compile Include="ViewModels\ImportMediaViewModel.cs" />
<Compile Include="ViewModels\MediaLibraryPickerFieldViewModel.cs" />
<Compile Include="ViewModels\MediaManagerMediaItemsViewModel.cs" />
<Compile Include="ViewModels\MediaManagerFolderCreateViewModel.cs" />
<Compile Include="ViewModels\MediaManagerFolderEditViewModel.cs" />
<Compile Include="ViewModels\MediaManagerImportViewModel.cs" />
<Compile Include="ViewModels\MediaManagerIndexViewModel.cs" />
<Compile Include="ViewModels\OEmbedViewModel.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\MediaManagerFolder.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\ClientStorage\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\Import.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\WebSearch\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Folder\Create.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Folder\Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Image.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\MediaItems.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Video.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Media.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Placement.info">
<SubType>Designer</SubType>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\Parts.Media.Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Media.Actions.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Audio.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Document.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\DefinitionTemplates\MediaLibraryPickerFieldSettings.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\Fields\MediaLibraryPicker.Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Fields\MediaLibraryPicker.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Fields\MediaLibraryPicker.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\OEmbed\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-OEmbed.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\Parts\WebSearch.WebSearchSettings.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Raw.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Styles\font-awesome\font\fontawesome-webfont.eot" />
<Content Include="Styles\font-awesome\font\fontawesome-webfont.ttf" />
<Content Include="Styles\font-awesome\font\fontawesome-webfont.woff" />
<Content Include="Styles\font-awesome\font\FontAwesome.otf" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\MediaLibrary.Actions.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\MediaLibrary.Navigation.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Fields\MediaLibraryPicker.Summary.cshtml" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>Styles\orchard-medialibrary-admin.css</ApplicationManifest>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target> -->
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup>
<!-- If this is an area child project, uncomment the following line:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
-->
<!-- If this is an area parent project, uncomment the following lines:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Parent" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
<CopyAreaManifests ManifestPath="$(AreasManifestDir)" CrossCopy="false" RenameViews="true" />
-->
</Target>
<Target Name="AfterBuildCompiler" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>45979</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>
</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>True</UseCustomServer>
<CustomServerUrl>http://orchard.codeplex.com</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{73A7688A-5BD3-4F7E-ADFA-CE36C5A10E3B}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Orchard.MediaLibrary</RootNamespace>
<AssemblyName>Orchard.MediaLibrary</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation />
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\lib\newtonsoft.json\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.ComponentModel.DataAnnotations">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions" />
<Reference Include="System.Web.Routing" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Content Include="Scripts\knockout-2.3.0.js" />
<Content Include="Scripts\media-library.js" />
<Content Include="Scripts\modal-window.js" />
<Content Include="Scripts\history.js" />
<Content Include="Styles\font-awesome\css\font-awesome.css" />
<Content Include="Styles\font-awesome\css\font-awesome.min.css" />
<Content Include="Styles\font-awesome\font\fontawesome-webfont.svg" />
<Content Include="Styles\Images\menu.media.png" />
<Content Include="Styles\menu.media-library-admin.css" />
<Content Include="Styles\menu.oembed-mediaproviders.css" />
<Content Include="Styles\orchard-oembed-admin.css" />
<Content Include="Styles\menu.websearch-mediaproviders.css" />
<Content Include="Styles\menu.clientstorage-mediaproviders.css" />
<Content Include="Styles\dialog-mode.css" />
<Content Include="Styles\media-library-picker-admin.css" />
<Content Include="Styles\Images\folders-loader.gif" />
<Content Include="Styles\Images\loading.gif" />
<Content Include="Styles\Images\processing.gif" />
<Content Include="Styles\orchard-clientstorage-admin.css" />
<Content Include="Styles\Images\ajax-loader.gif" />
<Content Include="Styles\orchard-websearch-admin.css" />
<Content Include="Styles\orchard-mediaproviders-admin.css" />
<Content Include="Styles\orchard-medialibrary-admin.css" />
<Content Include="Web.config">
<SubType>Designer</SubType>
</Content>
<Content Include="Scripts\Web.config" />
<Content Include="Styles\Web.config" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="Module.txt" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
<Project>{2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6}</Project>
<Name>Orchard.Framework</Name>
</ProjectReference>
<ProjectReference Include="..\..\Core\Orchard.Core.csproj">
<Project>{9916839C-39FC-4CEB-A5AF-89CA7E87119F}</Project>
<Name>Orchard.Core</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Tokens\Orchard.Tokens.csproj">
<Project>{6f759635-13d7-4e94-bcc9-80445d63f117}</Project>
<Name>Orchard.Tokens</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Compile Include="Drivers\MediaLibraryExplorerPartDriver.cs" />
<Compile Include="ModalAdminFilter.cs" />
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\ClientStorageController.cs" />
<Compile Include="Controllers\OEmbedController.cs" />
<Compile Include="Controllers\FolderController.cs" />
<Compile Include="Controllers\WebSearchController.cs" />
<Compile Include="Drivers\AudioPartDriver.cs" />
<Compile Include="Drivers\OEmbedPartDriver.cs" />
<Compile Include="Drivers\MediaLibraryPickerFieldDriver.cs" />
<Compile Include="Drivers\DocumentPartDriver.cs" />
<Compile Include="Drivers\VideoPartDriver.cs" />
<Compile Include="Drivers\ImagePartDriver.cs" />
<Compile Include="Factories\AudioFactory.cs" />
<Compile Include="Factories\DocumentFactory.cs" />
<Compile Include="Factories\VideoFactory.cs" />
<Compile Include="Factories\ImageFactory.cs" />
<Compile Include="Factories\IMediaFactory.cs" />
<Compile Include="Factories\IMediaFactorySelector.cs" />
<Compile Include="Factories\MediaFactorySelectorResult.cs" />
<Compile Include="Fields\MediaLibraryPickerField.cs" />
<Compile Include="Handlers\MediaLibraryPickerFieldHandler.cs" />
<Compile Include="Handlers\MediaPartHandler.cs" />
<Compile Include="Drivers\MediaPartDriver.cs" />
<Compile Include="Handlers\WebSearchSettingsPartHandler.cs" />
<Compile Include="Migrations.cs" />
<Compile Include="Models\AudioPart.cs" />
<Compile Include="Models\FolderHierarchy.cs" />
<Compile Include="Models\MediaFile.cs" />
<Compile Include="Models\MediaFolder.cs" />
<Compile Include="Models\MediaLibraryExplorerPart.cs" />
<Compile Include="Models\WebSearchSettingsPart.cs" />
<Compile Include="Models\ImagePart.cs" />
<Compile Include="Models\DocumentPart.cs" />
<Compile Include="Models\VideoPart.cs" />
<Compile Include="Models\OEmbedPart.cs" />
<Compile Include="Models\MediaPart.cs" />
<Compile Include="Models\MediaPartRecord.cs" />
<Compile Include="Permissions.cs" />
<Compile Include="Providers\ClientStorageMenu.cs" />
<Compile Include="Providers\OEmbedMenu.cs" />
<Compile Include="Providers\WebSearchMenu.cs" />
<Compile Include="ResourceManifest.cs" />
<Compile Include="Services\IMediaLibraryService.cs" />
<Compile Include="Services\MediaLibraryService.cs" />
<Compile Include="Services\Shapes.cs" />
<Compile Include="Services\XmlRpcHandler.cs" />
<Compile Include="Settings\MediaLibraryPickerFieldEditorEvents.cs" />
<Compile Include="Settings\MediaLibraryPickerFieldSettings.cs" />
<Compile Include="Tokens\FieldTokens.cs" />
<Compile Include="ViewModels\MediaManagerChildFoldersViewModel.cs" />
<Compile Include="ViewModels\ImportMediaViewModel.cs" />
<Compile Include="ViewModels\MediaLibraryPickerFieldViewModel.cs" />
<Compile Include="ViewModels\MediaManagerMediaItemsViewModel.cs" />
<Compile Include="ViewModels\MediaManagerFolderCreateViewModel.cs" />
<Compile Include="ViewModels\MediaManagerFolderEditViewModel.cs" />
<Compile Include="ViewModels\MediaManagerImportViewModel.cs" />
<Compile Include="ViewModels\MediaManagerIndexViewModel.cs" />
<Compile Include="ViewModels\OEmbedViewModel.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\ClientStorage\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\Import.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\WebSearch\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Folder\Create.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Folder\Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Image.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\MediaItems.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Video.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Media.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Placement.info">
<SubType>Designer</SubType>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\Parts.Media.Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Media.Actions.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Audio.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-Document.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\DefinitionTemplates\MediaLibraryPickerFieldSettings.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\Fields\MediaLibraryPicker.Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Fields\MediaLibraryPicker.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Fields\MediaLibraryPicker.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Audio.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Document.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Image.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\Video.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\OEmbed\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-OEmbed.Thumbnail.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\Parts\WebSearch.WebSearchSettings.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Raw.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Styles\font-awesome\font\fontawesome-webfont.eot" />
<Content Include="Styles\font-awesome\font\fontawesome-webfont.ttf" />
<Content Include="Styles\font-awesome\font\fontawesome-webfont.woff" />
<Content Include="Styles\font-awesome\font\FontAwesome.otf" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\MediaLibrary.Actions.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\MediaLibrary.Navigation.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Fields\MediaLibraryPicker.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\ChildFolders.cshtml" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>Styles\orchard-medialibrary-admin.css</ApplicationManifest>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target> -->
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup>
<!-- If this is an area child project, uncomment the following line:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
-->
<!-- If this is an area parent project, uncomment the following lines:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Parent" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
<CopyAreaManifests ManifestPath="$(AreasManifestDir)" CrossCopy="false" RenameViews="true" />
-->
</Target>
<Target Name="AfterBuildCompiler" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>45979</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>
</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>True</UseCustomServer>
<CustomServerUrl>http://orchard.codeplex.com</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@@ -79,7 +79,29 @@ $(function () {
self.pendingRequest = ko.observable(false);
self.mediaItemsCount = 0;
self.orderMedia = ko.observableArray(['created']);
self.mediaType = ko.observableArray([]);
self.mediaType = ko.observableArray([]);
self.mediaFolders = ko.observableArray([]);
(function () {
var getChildFolderListUrl = function (f) {
return settings.childFolderListingActionUrl + '?folderPath=' + encodeURIComponent(f);
};
var url = getChildFolderListUrl(settings.folderPath);
$.ajax({
type: "GET",
url: url,
cache: false
}).done(function (data) {
var childFolders = data.childFolders;
for (var x = 0; x < childFolders.length; x++) {
self.mediaFolders.push(new mediaFolderViewModel(childFolders[x]));
}
}).fail(function (data) {
console.error(data);
});
})();
self.getMediaItems = function (count, append) {
var folderPath = self.displayed() || '';
@@ -164,7 +186,6 @@ $(function () {
});
self.displayFolder = function(folderPath) {
self.results([]);
self.displayed(folderPath);
@@ -172,10 +193,10 @@ $(function () {
return settings.mediaItemsActionUrl + '?folderPath=' + encodeURIComponent(f) + '&skip=' + skip + '&count=' + count + '&order=' + order + '&mediaType=' + mediaType;
};
self.getMediaItems(pageCount);
self.getMediaItems(pageCount);
};
self.selectFolder = function(folderPath) {
self.selectFolder = function (folderPath) {
History.pushState({ action: 'displayFolder', folderPath: folderPath }, '', '?folderPath=' + folderPath);
self.displayFolder(folderPath);
};
@@ -242,6 +263,73 @@ $(function () {
var viewModel = new mediaIndexViewModel();
function mediaFolderViewModel(data) {
var self = this;
self.mediaIndexViewModel = viewModel;
self.folderPath = ko.observable(data.folderPath);
self.name = ko.observable(data.name);
self.childFolders = ko.observableArray([]);
self.childFoldersFetchStatus = 0; //0 = unfetched, 1 = fetching, 2 = fetched
self.isExpanded = ko.observable(false);
self.isVisible = ko.observable(true);
self.isSelected = ko.computed(function() {
return (self.mediaIndexViewModel.displayed() == self.folderPath());
});
self.folderClicked = function () {
self.mediaIndexViewModel.selectFolder(self.folderPath());
var childFolders = self.childFolders();
if (self.isExpanded()) {
for (var x = 0; x < childFolders.length; x++) {
childFolders[x].isVisible(false);
}
self.isExpanded(false);
} else {
if (self.childFoldersFetchStatus !== 0) {
for (var x = 0; x < childFolders.length; x++) {
childFolders[x].isVisible(true);
}
} else {
self.childFoldersFetchStatus = 1;
var getChildFolderListUrl = function (f) {
return settings.childFolderListingActionUrl + '?folderPath=' + encodeURIComponent(f);
};
var url = getChildFolderListUrl(self.folderPath());
$.ajax({
type: "GET",
url: url,
cache: false
}).done(function (data) {
var newChildFolders = data.childFolders;
for (var y = 0; y < newChildFolders.length; y++) {
var newChildFolder = new mediaFolderViewModel(newChildFolders[y]);
newChildFolder.isVisible(true);
self.childFolders.push(newChildFolder);
}
self.childFoldersFetchStatus = 2;
}).fail(function (data) {
console.error(data);
self.childFoldersFetchStatus = 0;
});
}
self.isExpanded(true);
}
};
}
enhanceViewModel(viewModel);
ko.applyBindings(viewModel);
@@ -271,7 +359,7 @@ $(function () {
// only for left click
if (e.which != 1) {
return;
}
}
var searchResult = ko.dataFor(this);
if (e.ctrlKey) {

View File

@@ -0,0 +1,8 @@
using System.Collections.Generic;
using Orchard.MediaLibrary.Models;
namespace Orchard.MediaLibrary.ViewModels {
public class MediaManagerChildFoldersViewModel {
public IEnumerable<MediaFolder> Children { get; set; }
}
}

View File

@@ -4,7 +4,6 @@ using Orchard.MediaLibrary.Models;
namespace Orchard.MediaLibrary.ViewModels {
public class MediaManagerIndexViewModel {
public IEnumerable<FolderHierarchy> Folders { get; set; }
public string FolderPath { get; set; }
public bool DialogMode { get; set; }
public IEnumerable<ContentTypeDefinition> MediaTypes { get; set; }

View File

@@ -0,0 +1,15 @@
@using Orchard.Utility.Extensions
@model Orchard.MediaLibrary.ViewModels.MediaManagerChildFoldersViewModel
@{
Response.ContentType = "text/json";
@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(
new {
childFolders = Model.Children.Select(x => new {
folderPath = x.MediaPath,
name = x.Name,
lastUpdated = x.LastUpdated
}).ToArray()
}))
}

View File

@@ -1,109 +1,116 @@
@model Orchard.MediaLibrary.ViewModels.MediaManagerIndexViewModel
@{
var viewModel = Model;
Script.Require("ShapesBase");
Style.Require("MediaManagerAdmin");
Script.Require("jQuery");
Script.Require("jQueryUI_Droppable");
Script.Include("knockout-2.3.0.js");
Script.Include("history.js");
Script.Include("media-library.js");
Style.Require("FontAwesome");
Layout.Title = T("Media Library");
}
<div id="media-library" data-draft-text="@T("Draft")">
<div id="media-library-toolbar">
<a href="#" data-bind="visible: displayed(), click: importMedia" class="button" id="button-import">@T("Import")</a>
<a href="#" data-bind="visible: displayed(), attr: { href: '@HttpUtility.JavaScriptStringEncode(Url.Action("Edit", "Folder", new { area = "Orchard.MediaLibrary"}))?folderPath=' + encodeURIComponent(displayed()) }" class="button" id="button-edit-folder">@T("Edit Folder")</a>
<a href="#" data-bind="attr: { href: '@HttpUtility.JavaScriptStringEncode(Url.Action("Create", "Folder", new { area = "Orchard.MediaLibrary"}))?folderPath=' + encodeURIComponent(displayed() ? displayed() : '') }" class="button" id="button-create-folder">@T("Create Folder")</a>
@Display(Model.CustomActionsShapes)
</div>
<div id="media-library-main">
<div id="media-library-main-navigation">
<ul>
@Display(Model.CustomNavigationShapes)
<li id="media-library-main-navigation-tree">
<ul>
@foreach (var folder in viewModel.Folders) {
<li>
@Display.Partial(TemplateName: "MediaManagerFolder", Model: folder)
</li>
}
</ul>
</li>
</ul>
</div>
<div id="media-library-main-list-wrapper">
<div id="media-library-main-list" data-bind="event: { scroll: scrolled }, css: { pending: pendingRequest() }">
<ul data-bind="foreach: results">
<li data-bind="css: cssClass">
<div class="thumbnail" data-bind="html: data.thumbnail">
</div>
<div class="media-library-main-list-overlay">
<p class="title" data-bind="text: data.title"></p>
<p class="publication-status" data-bind="text: publicationStatus"></p>
</div>
</li>
</ul>
</div>
</div>
<div id="media-library-main-editor">
<div id="media-library-main-editor-focus" data-bind="with: focus">
<h1>@T("PROPERTIES")</h1>
<div class="summary" data-bind="html: summary">
</div>
</div>
<article>
<header>
<div id="media-library-main-selection" data-bind="visible: selection().length > 0">
<h1>@T("SELECTION")</h1>
<ul data-bind="foreach: selection">
<li data-bind="css: cssClass">
<div class="thumbnail selection" data-bind="html: data.thumbnail, click: $parent.focus">
</div>
</li>
</ul>
<div id="media-library-main-selection-actions">
<button id="delete-selection-button">@T("Delete")</button>
</div>
</div>
</header>
<footer>
<div id="media-library-main-selection-select">
<button class="button-select" data-bind="visible: selection().length > 0">@T("Select")</button>
<button class="button-cancel">@T("Cancel")</button>
</div>
</footer>
</article>
</div>
</div>
</div>
@using (Script.Foot()) {
<script type="text/javascript">
//<![CDATA[
var mediaLibrarySettings = {
mediaItemActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("MediaItem", "Admin"))',
mediaItemsActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("MediaItems", "Admin"))',
recentMediaItemsActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("RecentMediaItems", "Admin"))',
importActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("Import", "Admin"))',
moveActionUrl: '@Url.Action("Move", "Folder", new {area = "Orchard.MediaLibrary"})',
deleteActionUrl: '@Url.Action("Delete", "Admin", new {area = "Orchard.MediaLibrary"})',
hasFolderPath: @(viewModel.FolderPath != null ? "true" : "false"),
folderPath: '@HttpUtility.JavaScriptStringEncode(viewModel.FolderPath)',
deleteConfirmationMessage: '@HttpUtility.JavaScriptStringEncode(T("Are you sure you want to delete these media items ?").Text)',
errorMessage: '@HttpUtility.JavaScriptStringEncode(T("An unexpected error occured, please refresh the page and try again.").Text)',
antiForgeryToken: '@Html.AntiForgeryTokenValueOrchard()'
};
//]]>
</script>
@model Orchard.MediaLibrary.ViewModels.MediaManagerIndexViewModel
@{
var viewModel = Model;
Script.Require("ShapesBase");
Style.Require("MediaManagerAdmin");
Script.Require("jQuery");
Script.Require("jQueryUI_Droppable");
Script.Include("knockout-2.3.0.js");
Script.Include("history.js");
Script.Include("media-library.js");
Style.Require("FontAwesome");
Layout.Title = T("Media Library");
}
<div id="media-library" data-draft-text="@T("Draft")">
<div id="media-library-toolbar">
<a href="#" data-bind="visible: displayed(), click: importMedia" class="button" id="button-import">@T("Import")</a>
<a href="#" data-bind="visible: displayed(), attr: { href: '@HttpUtility.JavaScriptStringEncode(Url.Action("Edit", "Folder", new { area = "Orchard.MediaLibrary"}))?folderPath=' + encodeURIComponent(displayed()) }" class="button" id="button-edit-folder">@T("Edit Folder")</a>
<a href="#" data-bind="attr: { href: '@HttpUtility.JavaScriptStringEncode(Url.Action("Create", "Folder", new { area = "Orchard.MediaLibrary"}))?folderPath=' + encodeURIComponent(displayed() ? displayed() : '') }" class="button" id="button-create-folder">@T("Create Folder")</a>
@Display(Model.CustomActionsShapes)
</div>
<div id="media-library-main">
<div id="media-library-main-navigation">
<ul>
@Display(Model.CustomNavigationShapes)
<li id="media-library-main-navigation-tree">
<ul data-bind="template: { name: 'media-folder-template', foreach: mediaFolders }">
</ul>
</li>
</ul>
</div>
<div id="media-library-main-list-wrapper">
<div id="media-library-main-list" data-bind="event: { scroll: scrolled }, css: { pending: pendingRequest() }">
<ul data-bind="foreach: results">
<li data-bind="css: cssClass">
<div class="thumbnail" data-bind="html: data.thumbnail">
</div>
<div class="media-library-main-list-overlay">
<p class="title" data-bind="text: data.title"></p>
<p class="publication-status" data-bind="text: publicationStatus"></p>
</div>
</li>
</ul>
</div>
</div>
<div id="media-library-main-editor">
<div id="media-library-main-editor-focus" data-bind="with: focus">
<h1>@T("PROPERTIES")</h1>
<div class="summary" data-bind="html: summary">
</div>
</div>
<article>
<header>
<div id="media-library-main-selection" data-bind="visible: selection().length > 0">
<h1>@T("SELECTION")</h1>
<ul data-bind="foreach: selection">
<li data-bind="css: cssClass">
<div class="thumbnail selection" data-bind="html: data.thumbnail, click: $parent.focus">
</div>
</li>
</ul>
<div id="media-library-main-selection-actions">
<button id="delete-selection-button">@T("Delete")</button>
</div>
</div>
</header>
<footer>
<div id="media-library-main-selection-select">
<button class="button-select" data-bind="visible: selection().length > 0">@T("Select")</button>
<button class="button-cancel">@T("Cancel")</button>
</div>
</footer>
</article>
</div>
</div>
</div>
@using (Script.Foot()) {
<script type="text/javascript">
//<![CDATA[
var mediaLibrarySettings = {
mediaItemActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("MediaItem", "Admin"))',
mediaItemsActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("MediaItems", "Admin"))',
recentMediaItemsActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("RecentMediaItems", "Admin"))',
childFolderListingActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("ChildFolders", "Admin"))',
importActionUrl: '@HttpUtility.JavaScriptStringEncode(Url.Action("Import", "Admin"))',
moveActionUrl: '@Url.Action("Move", "Folder", new {area = "Orchard.MediaLibrary"})',
deleteActionUrl: '@Url.Action("Delete", "Admin", new {area = "Orchard.MediaLibrary"})',
hasFolderPath: @(viewModel.FolderPath != null ? "true" : "false"),
folderPath: '@HttpUtility.JavaScriptStringEncode(viewModel.FolderPath)',
deleteConfirmationMessage: '@HttpUtility.JavaScriptStringEncode(T("Are you sure you want to delete these media items ?").Text)',
errorMessage: '@HttpUtility.JavaScriptStringEncode(T("An unexpected error occured, please refresh the page and try again.").Text)',
antiForgeryToken: '@Html.AntiForgeryTokenValueOrchard()'
};
//]]>
</script>
<script type="text/html" id="media-folder-template">
<li data-bind="visible: isVisible()">
<div class="media-library-folder">
<div class="media-library-folder-title" data-bind="click: folderClicked, css: { selected: isSelected() }">
<a data-bind="disable: $root.pendingRequest" href="#" class="media-library-navigation-folder-link"><i data-bind="css: {'icon-folder-open-alt': isExpanded(), 'icon-folder-close-alt': !isExpanded()}"></i><span data-bind="text: name"></span></a>
</div>
<ul data-bind="template: { name: 'media-folder-template', foreach: childFolders }, visible: childFolders().length > 0">
</ul>
</div>
</li>
</script>
}

View File

@@ -1,16 +0,0 @@
@model Orchard.MediaLibrary.Models.FolderHierarchy
<div class="media-library-folder">
<div class="media-library-folder-title" data-bind="click: function(data, event) { selectFolder('@HttpUtility.JavaScriptStringEncode(Model.Root.MediaPath)'); }, css: { selected: displayed() == $element.getAttribute('data-media-path') }" data-media-path="@Model.Root.MediaPath" >
<a data-bind="disable: $root.pendingRequest" href="#" class="media-library-navigation-folder-link" data-mediapath="@Model.Root.MediaPath"><i class="icon-folder-close-alt"></i>@Model.Root.Name</a>
</div>
@if (Model.Children.Any()) {
<ul>
@foreach (var folder in Model.Children) {
<li>
@Display.Partial(TemplateName: "MediaManagerFolder", Model: folder)
</li>
}
</ul>
}
</div>