diff --git a/.gitignore b/.gitignore index 6b1120c3d94..53bf4e1b808 100644 --- a/.gitignore +++ b/.gitignore @@ -114,6 +114,8 @@ DNN [Pp]latform/Syndication/[Bb]in/* DNN [Pp]latform/[Cc]onnectors/*/[Bb]in/* DNN [Pp]latform/[Pp]roviders/*/[Bb]in/* +DNN [Pp]latform/Modules/ResourceManager/**/scripts/*-bundle.* + # ignore all other language resx files *.de-DE.resx *.es-ES.resx @@ -130,3 +132,5 @@ DNN [Pp]latform/[Pp]roviders/*/[Bb]in/* # Add fips back !DNN Platform/[Ww]ebsite/App_Data/FipsCompilanceAssemblies/Lucene.Net.dll + +yarn-error.log diff --git a/Build/BuildScripts/AEModule.build b/Build/BuildScripts/AEModule.build index dba95345f07..4d7bd9d5054 100644 --- a/Build/BuildScripts/AEModule.build +++ b/Build/BuildScripts/AEModule.build @@ -1,7 +1,7 @@  - - + + $(MSBuildProjectDirectory)\Package\Resources\admin\personaBar diff --git a/Build/Cake/version.cake b/Build/Cake/version.cake index 00827bd4a84..05c99883a16 100644 --- a/Build/Cake/version.cake +++ b/Build/Cake/version.cake @@ -66,6 +66,7 @@ Task("SetPackageVersions") var packages = GetFiles("./Dnn.AdminExperience/ClientSide/*.Web/package.json"); packages.Add(GetFiles("./Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json")); packages.Add(GetFiles("./Dnn.AdminExperience/ClientSide/*.Web/**/_exportables/package.json")); + packages.Add(GetFiles("./DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json")); // Set all package.json in Admin Experience to the current version and to consume the current (local) version of dnn-react-common. foreach(var file in packages){ diff --git a/DNN Platform/DotNetNuke.Web/InternalServices/FileUploadController.cs b/DNN Platform/DotNetNuke.Web/InternalServices/FileUploadController.cs index 153a82eef58..6fe9fdf083e 100644 --- a/DNN Platform/DotNetNuke.Web/InternalServices/FileUploadController.cs +++ b/DNN Platform/DotNetNuke.Web/InternalServices/FileUploadController.cs @@ -4,41 +4,38 @@ namespace DotNetNuke.Web.InternalServices { - using System; - using System.Collections.Generic; - using System.Drawing; - using System.Globalization; - using System.IO; - using System.Linq; - using System.Net; - using System.Net.Http; - using System.Net.Http.Formatting; - using System.Net.Http.Headers; - using System.Runtime.Serialization; - using System.Text.RegularExpressions; - using System.Threading; - using System.Threading.Tasks; - using System.Web; - using System.Web.Http; - using System.Web.UI.WebControls; - - using DotNetNuke.Common; - using DotNetNuke.Common.Utilities; - using DotNetNuke.Common.Utils; - using DotNetNuke.Entities.Icons; - using DotNetNuke.Entities.Portals; - using DotNetNuke.Entities.Users; - using DotNetNuke.Instrumentation; - using DotNetNuke.Security; - using DotNetNuke.Security.Permissions; - using DotNetNuke.Services.FileSystem; - using DotNetNuke.Services.Localization; - using DotNetNuke.Web.Api; - using DotNetNuke.Web.Api.Internal; - - using ContentDisposition = System.Net.Mime.ContentDisposition; - using FileInfo = DotNetNuke.Services.FileSystem.FileInfo; - +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Formatting; +using System.Net.Http.Headers; +using System.Runtime.Serialization; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using System.Web.Http; +using System.Web.UI.WebControls; +using DotNetNuke.Common; +using DotNetNuke.Common.Utilities; +using DotNetNuke.Common.Utils; +using DotNetNuke.Entities.Icons; +using DotNetNuke.Entities.Portals; +using DotNetNuke.Entities.Users; +using DotNetNuke.Instrumentation; +using DotNetNuke.Security; +using DotNetNuke.Security.Permissions; +using DotNetNuke.Services.FileSystem; +using DotNetNuke.Services.Localization; +using DotNetNuke.Web.Api; +using DotNetNuke.Web.Api.Internal; +using ContentDisposition = System.Net.Mime.ContentDisposition; +using FileInfo = DotNetNuke.Services.FileSystem.FileInfo; [DnnAuthorize] public class FileUploadController : DnnApiController { @@ -47,12 +44,6 @@ public class FileUploadController : DnnApiController private static readonly List ImageExtensions = Globals.glbImageFileTypes.Split(',').ToList(); - public static string GetUrl(int fileId) - { - var file = FileManager.Instance.GetFile(fileId, true); - return FileManager.Instance.GetUrl(file); - } - [HttpPost] public HttpResponseMessage LoadFiles(FolderItemDTO folderItem) { @@ -90,6 +81,12 @@ public HttpResponseMessage LoadFiles(FolderItemDTO folderItem) return this.Request.CreateResponse(HttpStatusCode.OK, fileItems); } + public static string GetUrl(int fileId) + { + var file = FileManager.Instance.GetFile(fileId, true); + return FileManager.Instance.GetUrl(file); + } + [HttpGet] public HttpResponseMessage LoadImage(string fileId) { @@ -210,6 +207,87 @@ public Task PostFile() return task; } + private static SavedFileDTO SaveFile( + Stream stream, + PortalSettings portalSettings, + UserInfo userInfo, + string folder, + string filter, + string fileName, + bool overwrite, + bool isHostMenu, + bool extract, + out bool alreadyExists, + out string errorMessage) + { + alreadyExists = false; + var savedFileDto = new SavedFileDTO(); + try + { + var extension = Path.GetExtension(fileName).ValueOrEmpty().Replace(".", string.Empty); + if (!string.IsNullOrEmpty(filter) && !filter.ToLowerInvariant().Contains(extension.ToLowerInvariant())) + { + errorMessage = GetLocalizedString("ExtensionNotAllowed"); + return savedFileDto; + } + + var folderManager = FolderManager.Instance; + + // Check if this is a User Folder + var effectivePortalId = isHostMenu ? Null.NullInteger : PortalController.GetEffectivePortalId(portalSettings.PortalId); + int userId; + var folderInfo = folderManager.GetFolder(effectivePortalId, folder); + if (IsUserFolder(folder, out userId)) + { + var user = UserController.GetUserById(effectivePortalId, userId); + if (user != null) + { + folderInfo = folderManager.GetUserFolder(user); + } + } + + if (!PortalSecurity.IsInRoles(userInfo, portalSettings, folderInfo.FolderPermissions.ToString("WRITE")) + && !PortalSecurity.IsInRoles(userInfo, portalSettings, folderInfo.FolderPermissions.ToString("ADD"))) + { + errorMessage = GetLocalizedString("NoPermission"); + return savedFileDto; + } + + if (!overwrite && FileManager.Instance.FileExists(folderInfo, fileName, true)) + { + errorMessage = GetLocalizedString("AlreadyExists"); + alreadyExists = true; + savedFileDto.FilePath = Path.Combine(folderInfo.PhysicalPath, fileName); + return savedFileDto; + } + + var contentType = FileContentTypeManager.Instance.GetContentType(Path.GetExtension(fileName)); + var file = FileManager.Instance.AddFile(folderInfo, fileName, stream, true, false, contentType, userInfo.UserID); + + if (extract && extension.ToLowerInvariant() == "zip") + { + FileManager.Instance.UnzipFile(file); + FileManager.Instance.DeleteFile(file); + } + + errorMessage = string.Empty; + savedFileDto.FileId = file.FileId.ToString(CultureInfo.InvariantCulture); + savedFileDto.FilePath = FileManager.Instance.GetUrl(file); + return savedFileDto; + } + catch (InvalidFileExtensionException) + { + errorMessage = GetLocalizedString("ExtensionNotAllowed"); + return savedFileDto; + } + catch (Exception ex) + { + Logger.Error(ex); + errorMessage = ex.Message; + return savedFileDto; + } + } + [HttpPost] [IFrameSupportedValidateAntiForgeryToken] [AllowAnonymous] @@ -423,87 +501,6 @@ public HttpResponseMessage UploadFromUrl(UploadByUrlDto dto) } } - private static SavedFileDTO SaveFile( - Stream stream, - PortalSettings portalSettings, - UserInfo userInfo, - string folder, - string filter, - string fileName, - bool overwrite, - bool isHostMenu, - bool extract, - out bool alreadyExists, - out string errorMessage) - { - alreadyExists = false; - var savedFileDto = new SavedFileDTO(); - try - { - var extension = Path.GetExtension(fileName).ValueOrEmpty().Replace(".", string.Empty); - if (!string.IsNullOrEmpty(filter) && !filter.ToLowerInvariant().Contains(extension.ToLowerInvariant())) - { - errorMessage = GetLocalizedString("ExtensionNotAllowed"); - return savedFileDto; - } - - var folderManager = FolderManager.Instance; - - // Check if this is a User Folder - var effectivePortalId = isHostMenu ? Null.NullInteger : PortalController.GetEffectivePortalId(portalSettings.PortalId); - int userId; - var folderInfo = folderManager.GetFolder(effectivePortalId, folder); - if (IsUserFolder(folder, out userId)) - { - var user = UserController.GetUserById(effectivePortalId, userId); - if (user != null) - { - folderInfo = folderManager.GetUserFolder(user); - } - } - - if (!PortalSecurity.IsInRoles(userInfo, portalSettings, folderInfo.FolderPermissions.ToString("WRITE")) - && !PortalSecurity.IsInRoles(userInfo, portalSettings, folderInfo.FolderPermissions.ToString("ADD"))) - { - errorMessage = GetLocalizedString("NoPermission"); - return savedFileDto; - } - - if (!overwrite && FileManager.Instance.FileExists(folderInfo, fileName, true)) - { - errorMessage = GetLocalizedString("AlreadyExists"); - alreadyExists = true; - savedFileDto.FilePath = Path.Combine(folderInfo.PhysicalPath, fileName); - return savedFileDto; - } - - var contentType = FileContentTypeManager.Instance.GetContentType(Path.GetExtension(fileName)); - var file = FileManager.Instance.AddFile(folderInfo, fileName, stream, true, false, contentType, userInfo.UserID); - - if (extract && extension.ToLowerInvariant() == "zip") - { - FileManager.Instance.UnzipFile(file); - FileManager.Instance.DeleteFile(file); - } - - errorMessage = string.Empty; - savedFileDto.FileId = file.FileId.ToString(CultureInfo.InvariantCulture); - savedFileDto.FilePath = FileManager.Instance.GetUrl(file); - return savedFileDto; - } - catch (InvalidFileExtensionException) - { - errorMessage = GetLocalizedString("ExtensionNotAllowed"); - return savedFileDto; - } - catch (Exception ex) - { - Logger.Error(ex); - errorMessage = ex.Message; - return savedFileDto; - } - } - private static string GetLocalizedString(string key) { const string resourceFile = "/App_GlobalResources/FileUpload.resx"; @@ -542,16 +539,16 @@ private static bool IsImage(string fileName) } private static FileUploadDto UploadFile( - Stream stream, - int portalId, - UserInfo userInfo, - string folder, - string filter, - string fileName, - bool overwrite, - bool isHostPortal, - bool extract, - string validationCode) + Stream stream, + int portalId, + UserInfo userInfo, + string folder, + string filter, + string fileName, + bool overwrite, + bool isHostPortal, + bool extract, + string validationCode) { var result = new FileUploadDto(); BinaryReader reader = null; @@ -569,7 +566,7 @@ private static FileUploadDto UploadFile( { validateParams.Add(portalId); } - + if (!ValidationUtils.ValidationCodeMatched(validateParams, validationCode)) { throw new InvalidOperationException("Bad Request"); @@ -618,8 +615,8 @@ private static FileUploadDto UploadFile( else { file = FileManager.Instance.AddFile(folderInfo, fileName, stream, true, false, - FileContentTypeManager.Instance.GetContentType(Path.GetExtension(fileName)), - userInfo.UserID); + FileContentTypeManager.Instance.GetContentType(Path.GetExtension(fileName)), + userInfo.UserID); if (extract && extension.ToLowerInvariant() == "zip") { var destinationFolder = FolderManager.Instance.GetFolder(file.FolderId); @@ -702,10 +699,10 @@ private static IEnumerable GetMyPortalGroup() { var groups = PortalGroupController.Instance.GetPortalGroups().ToArray(); var mygroup = (from @group in groups - select PortalGroupController.Instance.GetPortalsByGroup(@group.PortalGroupId) - into portals - where portals.Any(x => x.PortalID == PortalSettings.Current.PortalId) - select portals.ToArray()).FirstOrDefault(); + select PortalGroupController.Instance.GetPortalsByGroup(@group.PortalGroupId) + into portals + where portals.Any(x => x.PortalID == PortalSettings.Current.PortalId) + select portals.ToArray()).FirstOrDefault(); return mygroup; } @@ -720,6 +717,13 @@ private string GetFileName(WebResponse response) return new ContentDisposition(contentDisposition).FileName; } + public class FolderItemDTO + { + public int FolderId { get; set; } + public string FileFilter { get; set; } + public bool Required { get; set; } + } + private bool VerifySafeUrl(string url) { Uri uri = new Uri(url); @@ -757,6 +761,24 @@ private bool VerifySafeUrl(string url) return false; } + public class SavedFileDTO + { + public string FileId { get; set; } + public string FilePath { get; set; } + } + + public class UploadByUrlDto + { + public string Url { get; set; } + public string Folder { get; set; } + public bool Overwrite { get; set; } + public bool Unzip { get; set; } + public string Filter { get; set; } + public bool IsHostMenu { get; set; } + public int PortalId { get; set; } = -1; + public string ValidationCode { get; set; } + } + private bool IsPortalIdValid(int portalId) { if (this.UserInfo.IsSuperUser) @@ -779,41 +801,6 @@ private bool IsPortalIdValid(int portalId) return mygroup != null && mygroup.Any(p => p.PortalID == portalId); } - public class FolderItemDTO - { - public int FolderId { get; set; } - - public string FileFilter { get; set; } - - public bool Required { get; set; } - } - - public class SavedFileDTO - { - public string FileId { get; set; } - - public string FilePath { get; set; } - } - - public class UploadByUrlDto - { - public string Url { get; set; } - - public string Folder { get; set; } - - public bool Overwrite { get; set; } - - public bool Unzip { get; set; } - - public string Filter { get; set; } - - public bool IsHostMenu { get; set; } - - public int PortalId { get; set; } = -1; - - public string ValidationCode { get; set; } - } - [DataContract] public class FileUploadDto { diff --git a/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFileUploadOptions.cs b/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFileUploadOptions.cs index f619ed65e82..d4ff5103a3a 100644 --- a/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFileUploadOptions.cs +++ b/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFileUploadOptions.cs @@ -1,14 +1,13 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Web.UI.WebControls { - using System.Collections.Generic; - using System.Globalization; - using System.Runtime.Serialization; - - using DotNetNuke.Common.Utilities; - using DotNetNuke.Entities.Portals; +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.Serialization; +using DotNetNuke.Common.Utilities; +using DotNetNuke.Entities.Portals; [DataContract] public class DnnFileUploadOptions @@ -46,13 +45,21 @@ public class DnnFileUploadOptions [DataMember(Name = "height")] public int Height; - [DataMember(Name = "folderPath")] - public string FolderPath; + private Dictionary _parameters; + [DataMember(Name = "parameters")] + public Dictionary Parameters + { + get + { + return this._parameters ?? (this._parameters = new Dictionary()); + } + } private const int DefaultWidth = 780; private const int DefaultHeight = 630; - private Dictionary _parameters; + [DataMember(Name = "folderPath")] + public string FolderPath; public DnnFileUploadOptions() { @@ -91,15 +98,6 @@ public DnnFileUploadOptions() }; } - [DataMember(Name = "parameters")] - public Dictionary Parameters - { - get - { - return this._parameters ?? (this._parameters = new Dictionary()); - } - } - [DataMember(Name = "validationCode")] public string ValidationCode { @@ -112,8 +110,8 @@ public string ValidationCode parameters.Add(portalSettings.UserInfo.UserID); if (!portalSettings.UserInfo.IsSuperUser) { - parameters.Add(portalSettings.PortalId); - } + parameters.Add(portalSettings.PortalId); + } } return ValidationUtils.ComputeValidationCode(parameters); diff --git a/DNN Platform/Library/Common/Utilities/ValidationUtils.cs b/DNN Platform/Library/Common/Utilities/ValidationUtils.cs index 956d8294068..7ce68a344b3 100644 --- a/DNN Platform/Library/Common/Utilities/ValidationUtils.cs +++ b/DNN Platform/Library/Common/Utilities/ValidationUtils.cs @@ -22,7 +22,7 @@ internal static string GetDecryptionKey() return FIPSCompliant.EncryptAES(key, key, Host.GUID); } - internal static string ComputeValidationCode(IList parameters) + public static string ComputeValidationCode(IList parameters) { if (parameters != null && parameters.Any()) { diff --git a/DNN Platform/Library/Services/FileSystem/FileManager.cs b/DNN Platform/Library/Services/FileSystem/FileManager.cs index 32c65174c24..cc7ddbc7682 100644 --- a/DNN Platform/Library/Services/FileSystem/FileManager.cs +++ b/DNN Platform/Library/Services/FileSystem/FileManager.cs @@ -1,7 +1,7 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + namespace DotNetNuke.Services.FileSystem { using System; @@ -15,7 +15,6 @@ namespace DotNetNuke.Services.FileSystem using System.Text; using System.Text.RegularExpressions; using System.Web; - using DotNetNuke.Common; using DotNetNuke.Common.Internal; using DotNetNuke.Common.Lists; @@ -38,16 +37,15 @@ namespace DotNetNuke.Services.FileSystem using DotNetNuke.Services.FileSystem.Internal; using DotNetNuke.Services.Log.EventLog; using ICSharpCode.SharpZipLib.Zip; - + using Localization = DotNetNuke.Services.Localization.Localization; - + /// /// Exposes methods to manage files. /// public class FileManager : ComponentBase, IFileManager { private const int BufferSize = 4096; - private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(FileManager)); public virtual IDictionary ContentTypes @@ -55,7 +53,7 @@ public virtual IDictionary ContentTypes get { return FileContentTypeManager.Instance.ContentTypes; } } - private FileExtensionWhitelist WhiteList + public FileExtensionWhitelist WhiteList { get { @@ -66,7 +64,6 @@ private FileExtensionWhitelist WhiteList { return Host.AllowedExtensionWhitelist; } - if (!user.IsAdmin) { var settings = PortalSettings.Current; @@ -76,7 +73,6 @@ private FileExtensionWhitelist WhiteList } } } - return Host.AllowedExtensionWhitelist; } } @@ -530,6 +526,7 @@ public virtual bool FileExists(IFolderInfo folder, string fileName, bool retriev /// The Content Type for the specified extension. public virtual string GetContentType(string extension) { + return FileContentTypeManager.Instance.GetContentType(extension); } @@ -1169,6 +1166,43 @@ internal virtual void MoveVersions(IFileInfo file, IFolderInfo destinationFolder } } + private void AddFileToFolderProvider(Stream fileContent, string fileName, IFolderInfo destinationFolder, FolderProvider provider) + { + try + { + if (!fileContent.CanSeek) + { + using (var seekableStream = this.GetSeekableStream(fileContent)) + { + provider.AddFile(destinationFolder, fileName, seekableStream); + } + } + else + { + provider.AddFile(destinationFolder, fileName, fileContent); + } + } + catch (Exception ex) + { + Logger.Error(ex); + throw new FolderProviderException(Localization.GetExceptionMessage("UnderlyingSystemError", "The underlying system threw an exception."), ex); + } + } + + private void DeleteFileFromFolderProvider(IFileInfo file, FolderProvider provider) + { + try + { + // We can't delete the file until the fileContent resource has been released + provider.DeleteFile(file); + } + catch (Exception ex) + { + Logger.Error(ex); + throw new FolderProviderException(Localization.GetExceptionMessage("UnderlyingSystemError", "The underlying system threw an exception."), ex); + } + } + /// This member is reserved for internal use and is not intended to be used directly from your code. internal virtual void AutoSyncFile(IFileInfo file) { @@ -1194,6 +1228,68 @@ internal virtual void AutoSyncFile(IFileInfo file) } } + private void OnFileDeleted(IFileInfo fileInfo, int userId) + { + EventManager.Instance.OnFileDeleted(new FileDeletedEventArgs + { + FileInfo = fileInfo, + UserId = userId, + IsCascadeDeleting = false, + }); + } + + private static ImageFormat GetImageFormat(Image img) + { + if (img.RawFormat.Equals(ImageFormat.Jpeg)) + { + return ImageFormat.Jpeg; + } + + if (img.RawFormat.Equals(ImageFormat.Bmp)) + { + return ImageFormat.Bmp; + } + + if (img.RawFormat.Equals(ImageFormat.Png)) + { + return ImageFormat.Png; + } + + if (img.RawFormat.Equals(ImageFormat.Emf)) + { + return ImageFormat.Emf; + } + + if (img.RawFormat.Equals(ImageFormat.Exif)) + { + return ImageFormat.Exif; + } + + if (img.RawFormat.Equals(ImageFormat.Gif)) + { + return ImageFormat.Gif; + } + + if (img.RawFormat.Equals(ImageFormat.Icon)) + { + return ImageFormat.Icon; + } + + if (img.RawFormat.Equals(ImageFormat.MemoryBmp)) + { + return ImageFormat.Jpeg; + } + + if (img.RawFormat.Equals(ImageFormat.Tiff)) + { + return ImageFormat.Tiff; + } + else + { + return ImageFormat.Wmf; + } + } + /// This member is reserved for internal use and is not intended to be used directly from your code. /// internal virtual int ExtractFiles(IFileInfo file, IFolderInfo destinationFolder, IList invalidFiles) @@ -1276,6 +1372,49 @@ internal virtual int ExtractFiles(IFileInfo file, IFolderInfo destinationFolder, return exactFilesCount; } + private static Stream ToStream(Image image, ImageFormat formaw) + { + var stream = new MemoryStream(); + image.Save(stream, formaw); + stream.Position = 0; + return stream; + } + + private void OnFileRenamed(IFileInfo fileInfo, string oldFileName, int userId) + { + EventManager.Instance.OnFileRenamed(new FileRenamedEventArgs + { + FileInfo = fileInfo, + UserId = userId, + OldFileName = oldFileName, + }); + } + + // Match the orientation code to the correct rotation: + private static RotateFlipType OrientationToFlipType(string orientation) + { + switch (int.Parse(orientation)) + { + case 1: + return RotateFlipType.RotateNoneFlipNone; + case 2: + return RotateFlipType.RotateNoneFlipX; + case 3: + return RotateFlipType.Rotate180FlipNone; + case 4: + return RotateFlipType.Rotate180FlipX; + case 5: + return RotateFlipType.Rotate90FlipX; + case 6: + return RotateFlipType.Rotate90FlipNone; + case 7: + return RotateFlipType.Rotate270FlipX; + case 8: + return RotateFlipType.Rotate270FlipNone; + default: + return RotateFlipType.RotateNoneFlipNone; + } + } /// This member is reserved for internal use and is not intended to be used directly from your code. internal void EnsureZipFolder(string fileName, IFolderInfo destinationFolder) @@ -1321,6 +1460,16 @@ internal void EnsureZipFolder(string fileName, IFolderInfo destinationFolder) } } + private void OnFileMoved(IFileInfo fileInfo, string oldFilePath, int userId) + { + EventManager.Instance.OnFileMoved(new FileMovedEventArgs + { + FileInfo = fileInfo, + UserId = userId, + OldFilePath = oldFilePath, + }); + } + /// This member is reserved for internal use and is not intended to be used directly from your code. /// internal virtual Stream GetAutoDeleteFileStream(string filePath) @@ -1328,6 +1477,15 @@ internal virtual Stream GetAutoDeleteFileStream(string filePath) return new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read, BufferSize, FileOptions.DeleteOnClose); } + private void OnFileOverwritten(IFileInfo fileInfo, int userId) + { + EventManager.Instance.OnFileOverwritten(new FileChangedEventArgs + { + FileInfo = fileInfo, + UserId = userId, + }); + } + /// This member is reserved for internal use and is not intended to be used directly from your code. /// internal virtual int GetCurrentUserID() @@ -1335,6 +1493,15 @@ internal virtual int GetCurrentUserID() return UserController.Instance.GetCurrentUserInfo().UserID; } + private void OnFileMetadataChanged(IFileInfo fileInfo, int userId) + { + EventManager.Instance.OnFileMetadataChanged(new FileChangedEventArgs + { + FileInfo = fileInfo, + UserId = userId, + }); + } + /// This member is reserved for internal use and is not intended to be used directly from your code. /// SHA1 hash of the file. internal virtual string GetHash(Stream stream) @@ -1353,6 +1520,16 @@ internal virtual string GetHash(Stream stream) return hashText.ToString(); } + private void OnFileAdded(IFileInfo fileInfo, IFolderInfo folderInfo, int userId) + { + EventManager.Instance.OnFileAdded(new FileAddedEventArgs + { + FileInfo = fileInfo, + UserId = userId, + FolderInfo = folderInfo, + }); + } + /// /// Gets the hash of a file. /// @@ -1363,459 +1540,53 @@ internal virtual string GetHash(IFileInfo fileInfo) return FolderProvider.Instance(FolderMappingController.Instance.GetFolderMapping(fileInfo.FolderMappingID).FolderProviderType).GetHashCode(fileInfo); } - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// - internal virtual string GetHostMapPath() - { - return TestableGlobals.Instance.HostMapPath; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// - internal virtual Image GetImageFromStream(Stream stream) + /// + /// Rotate/Flip the image as per the metadata and reset the metadata. + /// + /// + private void RotateFlipImage(ref Stream content) { - return Image.FromStream(stream); - } + try + { + using (var image = this.GetImageFromStream(content)) + { + if (!image.PropertyIdList.Any(x => x == 274)) + { + return; + } - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// - internal virtual Globals.PerformanceSettings GetPerformanceSetting() - { - return Host.PerformanceSetting; - } + var orientation = image.GetPropertyItem(274); // Find rotation/flip meta property + if (orientation == null) + { + return; + } - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// - internal virtual bool IsAllowedExtension(string fileName) - { - var extension = Path.GetExtension(fileName); + var flip = OrientationToFlipType(orientation.Value[0].ToString()); + if (flip == RotateFlipType.RotateNoneFlipNone) + { + return; // No rotation or flip required + } - // regex matches a dot followed by 1 or more chars followed by a semi-colon - // regex is meant to block files like "foo.asp;.png" which can take advantage - // of a vulnerability in IIS6 which treasts such files as .asp, not .png - return !string.IsNullOrEmpty(extension) - && this.WhiteList.IsAllowedExtension(extension) - && !Globals.FileExtensionRegex.IsMatch(fileName); + image.RotateFlip(flip); + var newOrientation = new byte[2]; + newOrientation[0] = 1; // little Endian + newOrientation[1] = 0; + orientation.Value = newOrientation; + image.SetPropertyItem(orientation); + content = ToStream(image, GetImageFormat(image)); + } + } + catch (Exception ex) + { + Logger.Error(ex); + } } /// This member is reserved for internal use and is not intended to be used directly from your code. /// - internal virtual bool IsValidFilename(string fileName) + internal virtual string GetHostMapPath() { - // regex ensures the file is a valid filename and doesn't include illegal characters - return Globals.FileValidNameRegex.IsMatch(fileName); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// - internal virtual bool IsFileAutoSyncEnabled() - { - return Host.EnableFileAutoSync; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - internal virtual void WriteFileToHttpContext(IFileInfo file, ContentDisposition contentDisposition) - { - var scriptTimeOut = HttpContext.Current.Server.ScriptTimeout; - - HttpContext.Current.Server.ScriptTimeout = int.MaxValue; - var objResponse = HttpContext.Current.Response; - - objResponse.ClearContent(); - objResponse.ClearHeaders(); - - switch (contentDisposition) - { - case ContentDisposition.Attachment: - objResponse.AppendHeader("content-disposition", "attachment; filename=\"" + file.FileName + "\""); - break; - case ContentDisposition.Inline: - objResponse.AppendHeader("content-disposition", "inline; filename=\"" + file.FileName + "\""); - break; - default: - throw new ArgumentOutOfRangeException("contentDisposition"); - } - - // Do not send negative Content-Length (file.Size could be negative due to integer overflow for files > 2GB) - if (file.Size >= 0) - { - objResponse.AppendHeader("Content-Length", file.Size.ToString(CultureInfo.InvariantCulture)); - } - - objResponse.ContentType = this.GetContentType(file.Extension.Replace(".", string.Empty)); - - try - { - using (var fileContent = this.GetFileContent(file)) - { - this.WriteStream(objResponse, fileContent); - } - } - catch (Exception ex) - { - Logger.Error(ex); - - objResponse.Write("Error : " + ex.Message); - } - - objResponse.Flush(); - objResponse.End(); - - HttpContext.Current.Server.ScriptTimeout = scriptTimeOut; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - internal virtual void WriteStream(HttpResponse objResponse, Stream objStream) - { - var bytBuffer = new byte[10000]; - try - { - if (objResponse.IsClientConnected) - { - var intLength = objStream.Read(bytBuffer, 0, 10000); - - while (objResponse.IsClientConnected && intLength > 0) - { - objResponse.OutputStream.Write(bytBuffer, 0, intLength); - objResponse.Flush(); - - intLength = objStream.Read(bytBuffer, 0, 10000); - } - } - } - catch (Exception ex) - { - Logger.Error(ex); - objResponse.Write("Error : " + ex.Message); - } - finally - { - if (objStream != null) - { - objStream.Close(); - objStream.Dispose(); - } - } - } - - /// - /// Update file info to database. - /// - /// File info. - /// Whether to update the lazy load properties: Width, Height, Sha1Hash. - /// The file info. - internal virtual IFileInfo UpdateFile(IFileInfo file, bool updateLazyload) - { - // By default File Events will be fired - return this.UpdateFile(file, updateLazyload, true); - } - - /// - /// Update file info to database. - /// - /// File info. - /// Whether to update the lazy load properties: Width, Height, Sha1Hash. - /// Whether to fire File events or not. - /// The file info. - internal virtual IFileInfo UpdateFile(IFileInfo file, bool updateLazyload, bool fireEvent) - { - Requires.NotNull("file", file); - - DataProvider.Instance().UpdateFile( - file.FileId, - file.VersionGuid, - file.FileName, - file.Extension, - file.Size, - updateLazyload ? file.Width : Null.NullInteger, - updateLazyload ? file.Height : Null.NullInteger, - file.ContentType, - file.FolderId, - this.GetCurrentUserID(), - updateLazyload ? file.SHA1Hash : Null.NullString, - file.LastModificationTime, - file.Title, - file.Description, - file.StartDate, - file.EndDate, - file.EnablePublishPeriod, - file.ContentItemID); - - DataCache.RemoveCache("GetFileById" + file.FileId); - this.ClearFolderCache(file.PortalId); - var updatedFile = this.GetFile(file.FileId); - - if (fireEvent) - { - this.OnFileMetadataChanged(updatedFile ?? this.GetFile(file.FileId, true), this.GetCurrentUserID()); - } - - return updatedFile; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - internal virtual void ClearFolderCache(int portalId) - { - DataCache.ClearFolderCache(portalId); - } - - private static ImageFormat GetImageFormat(Image img) - { - if (img.RawFormat.Equals(ImageFormat.Jpeg)) - { - return ImageFormat.Jpeg; - } - - if (img.RawFormat.Equals(ImageFormat.Bmp)) - { - return ImageFormat.Bmp; - } - - if (img.RawFormat.Equals(ImageFormat.Png)) - { - return ImageFormat.Png; - } - - if (img.RawFormat.Equals(ImageFormat.Emf)) - { - return ImageFormat.Emf; - } - - if (img.RawFormat.Equals(ImageFormat.Exif)) - { - return ImageFormat.Exif; - } - - if (img.RawFormat.Equals(ImageFormat.Gif)) - { - return ImageFormat.Gif; - } - - if (img.RawFormat.Equals(ImageFormat.Icon)) - { - return ImageFormat.Icon; - } - - if (img.RawFormat.Equals(ImageFormat.MemoryBmp)) - { - return ImageFormat.Jpeg; - } - - if (img.RawFormat.Equals(ImageFormat.Tiff)) - { - return ImageFormat.Tiff; - } - else - { - return ImageFormat.Wmf; - } - } - - private static Stream ToStream(Image image, ImageFormat formaw) - { - var stream = new MemoryStream(); - image.Save(stream, formaw); - stream.Position = 0; - return stream; - } - - // Match the orientation code to the correct rotation: - private static RotateFlipType OrientationToFlipType(string orientation) - { - switch (int.Parse(orientation)) - { - case 1: - return RotateFlipType.RotateNoneFlipNone; - case 2: - return RotateFlipType.RotateNoneFlipX; - case 3: - return RotateFlipType.Rotate180FlipNone; - case 4: - return RotateFlipType.Rotate180FlipX; - case 5: - return RotateFlipType.Rotate90FlipX; - case 6: - return RotateFlipType.Rotate90FlipNone; - case 7: - return RotateFlipType.Rotate270FlipX; - case 8: - return RotateFlipType.Rotate270FlipNone; - default: - return RotateFlipType.RotateNoneFlipNone; - } - } - - private static bool ValidMetadata(IFileInfo file, out string exceptionMessage) - { - exceptionMessage = string.Empty; - - // TODO check dynamically all required fields from MetadataInfo - - // TODO check dynamically all max lengths from MetadataInfo - // TODO Use the MaxLength from MetadataInfo - if (!string.IsNullOrEmpty(file.Title) && file.Title.Length > 256) - { - exceptionMessage = Localization.GetExceptionMessage("MaxLengthExceeded", "The maximum length of the field {0} has been exceeded", DefaultMetadataNames.Title); - return false; - } - - if (file.StartDate == null || file.StartDate == Null.NullDate) - { - exceptionMessage = Localization.GetExceptionMessage("StartDateRequired", "The Start Date is required"); - return false; - } - - var savedFile = FileManager.Instance.GetFile(file.FileId); - if (file.StartDate < file.CreatedOnDate.Date && file.StartDate != savedFile.StartDate) - { - exceptionMessage = Localization.GetExceptionMessage("StartDateMustNotBeInThePast", "The Start Date must not be in the past"); - return false; - } - - if (file.EndDate != Null.NullDate && file.StartDate > file.EndDate) - { - exceptionMessage = Localization.GetExceptionMessage("InvalidPublishPeriod", "The End Date must be after the Start Date"); - return false; - } - - return true; - } - - private void AddFileToFolderProvider(Stream fileContent, string fileName, IFolderInfo destinationFolder, FolderProvider provider) - { - try - { - if (!fileContent.CanSeek) - { - using (var seekableStream = this.GetSeekableStream(fileContent)) - { - provider.AddFile(destinationFolder, fileName, seekableStream); - } - } - else - { - provider.AddFile(destinationFolder, fileName, fileContent); - } - } - catch (Exception ex) - { - Logger.Error(ex); - throw new FolderProviderException(Localization.GetExceptionMessage("UnderlyingSystemError", "The underlying system threw an exception."), ex); - } - } - - private void DeleteFileFromFolderProvider(IFileInfo file, FolderProvider provider) - { - try - { - // We can't delete the file until the fileContent resource has been released - provider.DeleteFile(file); - } - catch (Exception ex) - { - Logger.Error(ex); - throw new FolderProviderException(Localization.GetExceptionMessage("UnderlyingSystemError", "The underlying system threw an exception."), ex); - } - } - - private void OnFileDeleted(IFileInfo fileInfo, int userId) - { - EventManager.Instance.OnFileDeleted(new FileDeletedEventArgs - { - FileInfo = fileInfo, - UserId = userId, - IsCascadeDeleting = false, - }); - } - - private void OnFileRenamed(IFileInfo fileInfo, string oldFileName, int userId) - { - EventManager.Instance.OnFileRenamed(new FileRenamedEventArgs - { - FileInfo = fileInfo, - UserId = userId, - OldFileName = oldFileName, - }); - } - - private void OnFileMoved(IFileInfo fileInfo, string oldFilePath, int userId) - { - EventManager.Instance.OnFileMoved(new FileMovedEventArgs - { - FileInfo = fileInfo, - UserId = userId, - OldFilePath = oldFilePath, - }); - } - - private void OnFileOverwritten(IFileInfo fileInfo, int userId) - { - EventManager.Instance.OnFileOverwritten(new FileChangedEventArgs - { - FileInfo = fileInfo, - UserId = userId, - }); - } - - private void OnFileMetadataChanged(IFileInfo fileInfo, int userId) - { - EventManager.Instance.OnFileMetadataChanged(new FileChangedEventArgs - { - FileInfo = fileInfo, - UserId = userId, - }); - } - - private void OnFileAdded(IFileInfo fileInfo, IFolderInfo folderInfo, int userId) - { - EventManager.Instance.OnFileAdded(new FileAddedEventArgs - { - FileInfo = fileInfo, - UserId = userId, - FolderInfo = folderInfo, - }); - } - - /// - /// Rotate/Flip the image as per the metadata and reset the metadata. - /// - /// - private void RotateFlipImage(ref Stream content) - { - try - { - using (var image = this.GetImageFromStream(content)) - { - if (!image.PropertyIdList.Any(x => x == 274)) - { - return; - } - - var orientation = image.GetPropertyItem(274); // Find rotation/flip meta property - if (orientation == null) - { - return; - } - - var flip = OrientationToFlipType(orientation.Value[0].ToString()); - if (flip == RotateFlipType.RotateNoneFlipNone) - { - return; // No rotation or flip required - } - - image.RotateFlip(flip); - var newOrientation = new byte[2]; - newOrientation[0] = 1; // little Endian - newOrientation[1] = 0; - orientation.Value = newOrientation; - image.SetPropertyItem(orientation); - content = ToStream(image, GetImageFormat(image)); - } - } - catch (Exception ex) - { - Logger.Error(ex); - } + return TestableGlobals.Instance.HostMapPath; } private void CheckFileAddingRestrictions(IFolderInfo folder, string fileName, bool checkPermissions, @@ -1847,6 +1618,13 @@ private void CheckFileAddingRestrictions(IFolderInfo folder, string fileName, bo } } + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// + internal virtual Image GetImageFromStream(Stream stream) + { + return Image.FromStream(stream); + } + private void NotifyFileAddingEvents(IFolderInfo folder, int createdByUserID, bool fileExists, Workflow folderWorkflow, IFileInfo file) { // Notify file event @@ -1862,6 +1640,13 @@ private void NotifyFileAddingEvents(IFolderInfo folder, int createdByUserID, boo } } + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// + internal virtual Globals.PerformanceSettings GetPerformanceSetting() + { + return Host.PerformanceSetting; + } + private void SetContentItem(IFileInfo file) { // Create Content Item if does not exists @@ -1871,6 +1656,20 @@ private void SetContentItem(IFileInfo file) } } + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// + internal virtual bool IsAllowedExtension(string fileName) + { + var extension = Path.GetExtension(fileName); + + // regex matches a dot followed by 1 or more chars followed by a semi-colon + // regex is meant to block files like "foo.asp;.png" which can take advantage + // of a vulnerability in IIS6 which treasts such files as .asp, not .png + return !string.IsNullOrEmpty(extension) + && this.WhiteList.IsAllowedExtension(extension) + && !Globals.FileExtensionRegex.IsMatch(fileName); + } + private void SetInitialFileMetadata(ref Stream fileContent, FileInfo file, FolderProvider folderProvider) { file.Size = (int)fileContent.Length; @@ -1888,6 +1687,14 @@ private void SetInitialFileMetadata(ref Stream fileContent, FileInfo file, Folde } } + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// + internal virtual bool IsValidFilename(string fileName) + { + // regex ensures the file is a valid filename and doesn't include illegal characters + return Globals.FileValidNameRegex.IsMatch(fileName); + } + private void SetImageProperties(IFileInfo file, Stream fileContent) { try @@ -1908,6 +1715,13 @@ private void SetImageProperties(IFileInfo file, Stream fileContent) } } + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// + internal virtual bool IsFileAutoSyncEnabled() + { + return Host.EnableFileAutoSync; + } + private void CheckFileWritingRestrictions(IFolderInfo folder, string fileName, Stream fileContent, IFileInfo oldFile, int createdByUserId) { if (!PortalController.Instance.HasSpaceAvailable(folder.PortalID, fileContent.Length)) @@ -1935,6 +1749,57 @@ private void CheckFileWritingRestrictions(IFolderInfo folder, string fileName, S } } + /// This member is reserved for internal use and is not intended to be used directly from your code. + internal virtual void WriteFileToHttpContext(IFileInfo file, ContentDisposition contentDisposition) + { + var scriptTimeOut = HttpContext.Current.Server.ScriptTimeout; + + HttpContext.Current.Server.ScriptTimeout = int.MaxValue; + var objResponse = HttpContext.Current.Response; + + objResponse.ClearContent(); + objResponse.ClearHeaders(); + + switch (contentDisposition) + { + case ContentDisposition.Attachment: + objResponse.AppendHeader("content-disposition", "attachment; filename=\"" + file.FileName + "\""); + break; + case ContentDisposition.Inline: + objResponse.AppendHeader("content-disposition", "inline; filename=\"" + file.FileName + "\""); + break; + default: + throw new ArgumentOutOfRangeException("contentDisposition"); + } + + // Do not send negative Content-Length (file.Size could be negative due to integer overflow for files > 2GB) + if (file.Size >= 0) + { + objResponse.AppendHeader("Content-Length", file.Size.ToString(CultureInfo.InvariantCulture)); + } + + objResponse.ContentType = this.GetContentType(file.Extension.Replace(".", string.Empty)); + + try + { + using (var fileContent = this.GetFileContent(file)) + { + this.WriteStream(objResponse, fileContent); + } + } + catch (Exception ex) + { + Logger.Error(ex); + + objResponse.Write("Error : " + ex.Message); + } + + objResponse.Flush(); + objResponse.End(); + + HttpContext.Current.Server.ScriptTimeout = scriptTimeOut; + } + private void ManageFileAdding(int createdByUserID, Workflow folderWorkflow, bool fileExists, FileInfo file) { if (folderWorkflow == null || !fileExists) @@ -1957,22 +1822,108 @@ private void ManageFileAdding(int createdByUserID, Workflow folderWorkflow, bool } } + /// This member is reserved for internal use and is not intended to be used directly from your code. + internal virtual void WriteStream(HttpResponse objResponse, Stream objStream) + { + var bytBuffer = new byte[10000]; + try + { + if (objResponse.IsClientConnected) + { + var intLength = objStream.Read(bytBuffer, 0, 10000); + + while (objResponse.IsClientConnected && intLength > 0) + { + objResponse.OutputStream.Write(bytBuffer, 0, intLength); + objResponse.Flush(); + + intLength = objStream.Read(bytBuffer, 0, 10000); + } + } + } + catch (Exception ex) + { + Logger.Error(ex); + objResponse.Write("Error : " + ex.Message); + } + finally + { + if (objStream != null) + { + objStream.Close(); + objStream.Dispose(); + } + } + } + private void AddFile(IFileInfo file, int createdByUserID) { - file.FileId = DataProvider.Instance().AddFile( - file.PortalId, - file.UniqueId, + file.FileId = DataProvider.Instance().AddFile(file.PortalId, + file.UniqueId, + file.VersionGuid, + file.FileName, + file.Extension, + file.Size, + file.Width, + file.Height, + file.ContentType, + file.Folder, + file.FolderId, + createdByUserID, + file.SHA1Hash, + file.LastModificationTime, + file.Title, + file.Description, + file.StartDate, + file.EndDate, + file.EnablePublishPeriod, + file.ContentItemID); + } + + /// + /// Update file info to database. + /// + /// File info. + /// Whether to update the lazy load properties: Width, Height, Sha1Hash. + /// The file info. + internal virtual IFileInfo UpdateFile(IFileInfo file, bool updateLazyload) + { + // By default File Events will be fired + return this.UpdateFile(file, updateLazyload, true); + } + + private string ProcessVersioning(IFolderInfo folder, IFileInfo oldFile, IFileInfo file, int createdByUserID) + { + if (oldFile != null && FileVersionController.Instance.IsFolderVersioned(folder) && oldFile.SHA1Hash != file.SHA1Hash) + { + return FileVersionController.Instance.AddFileVersion(oldFile, createdByUserID); + } + return file.FileName; + } + + /// + /// Update file info to database. + /// + /// File info. + /// Whether to update the lazy load properties: Width, Height, Sha1Hash. + /// Whether to fire File events or not. + /// The file info. + internal virtual IFileInfo UpdateFile(IFileInfo file, bool updateLazyload, bool fireEvent) + { + Requires.NotNull("file", file); + + DataProvider.Instance().UpdateFile( + file.FileId, file.VersionGuid, file.FileName, file.Extension, file.Size, - file.Width, - file.Height, + updateLazyload ? file.Width : Null.NullInteger, + updateLazyload ? file.Height : Null.NullInteger, file.ContentType, - file.Folder, file.FolderId, - createdByUserID, - file.SHA1Hash, + this.GetCurrentUserID(), + updateLazyload ? file.SHA1Hash : Null.NullString, file.LastModificationTime, file.Title, file.Description, @@ -1980,16 +1931,17 @@ private void AddFile(IFileInfo file, int createdByUserID) file.EndDate, file.EnablePublishPeriod, file.ContentItemID); - } - private string ProcessVersioning(IFolderInfo folder, IFileInfo oldFile, IFileInfo file, int createdByUserID) - { - if (oldFile != null && FileVersionController.Instance.IsFolderVersioned(folder) && oldFile.SHA1Hash != file.SHA1Hash) + DataCache.RemoveCache("GetFileById" + file.FileId); + this.ClearFolderCache(file.PortalId); + var updatedFile = this.GetFile(file.FileId); + + if (fireEvent) { - return FileVersionController.Instance.AddFileVersion(oldFile, createdByUserID); + this.OnFileMetadataChanged(updatedFile ?? this.GetFile(file.FileId, true), this.GetCurrentUserID()); } - return file.FileName; + return updatedFile; } private bool CanUpdateWhenApproving(IFolderInfo folder, ContentItem item, int createdByUserID) @@ -2003,6 +1955,12 @@ private bool CanUpdateWhenApproving(IFolderInfo folder, ContentItem item, int cr return WorkflowSecurity.Instance.HasStateReviewerPermission(folder.PortalID, createdByUserID, item.StateID); } + /// This member is reserved for internal use and is not intended to be used directly from your code. + internal virtual void ClearFolderCache(int portalId) + { + DataCache.ClearFolderCache(portalId); + } + private bool StartWorkflow(int createdByUserID, Workflow folderWorkflow, bool fileExists, int contentItemID) { if (WorkflowEngine.Instance.IsWorkflowCompleted(contentItemID)) @@ -2010,10 +1968,45 @@ private bool StartWorkflow(int createdByUserID, Workflow folderWorkflow, bool fi WorkflowEngine.Instance.StartWorkflow(folderWorkflow.WorkflowID, contentItemID, createdByUserID); return true; } - return false; } + private static bool ValidMetadata(IFileInfo file, out string exceptionMessage) + { + exceptionMessage = string.Empty; + + // TODO check dynamically all required fields from MetadataInfo + + // TODO check dynamically all max lengths from MetadataInfo + // TODO Use the MaxLength from MetadataInfo + if (!string.IsNullOrEmpty(file.Title) && file.Title.Length > 256) + { + exceptionMessage = Localization.GetExceptionMessage("MaxLengthExceeded", "The maximum length of the field {0} has been exceeded", DefaultMetadataNames.Title); + return false; + } + + if (file.StartDate == null || file.StartDate == Null.NullDate) + { + exceptionMessage = Localization.GetExceptionMessage("StartDateRequired", "The Start Date is required"); + return false; + } + + var savedFile = FileManager.Instance.GetFile(file.FileId); + if (file.StartDate < file.CreatedOnDate.Date && file.StartDate != savedFile.StartDate) + { + exceptionMessage = Localization.GetExceptionMessage("StartDateMustNotBeInThePast", "The Start Date must not be in the past"); + return false; + } + + if (file.EndDate != Null.NullDate && file.StartDate > file.EndDate) + { + exceptionMessage = Localization.GetExceptionMessage("InvalidPublishPeriod", "The End Date must be after the Start Date"); + return false; + } + + return true; + } + private string UpdateWhileApproving(IFolderInfo folder, int createdByUserID, IFileInfo file, IFileInfo oldFile, Stream content) { var contentController = new ContentController(); diff --git a/DNN Platform/Library/Services/FileSystem/FolderManager.cs b/DNN Platform/Library/Services/FileSystem/FolderManager.cs index e64992aa500..30d3752b06b 100644 --- a/DNN Platform/Library/Services/FileSystem/FolderManager.cs +++ b/DNN Platform/Library/Services/FileSystem/FolderManager.cs @@ -1,2455 +1,2447 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Services.FileSystem -{ - using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.ComponentModel; - using System.Globalization; - using System.IO; - using System.Linq; - using System.Net.NetworkInformation; - using System.Reflection; - using System.Text.RegularExpressions; - using System.Threading; - using System.Web; - - using DotNetNuke.Common; - using DotNetNuke.Common.Utilities; - using DotNetNuke.ComponentModel; - using DotNetNuke.Data; - using DotNetNuke.Entities; - using DotNetNuke.Entities.Portals; - using DotNetNuke.Entities.Users; - using DotNetNuke.Instrumentation; - using DotNetNuke.Security.Permissions; - using DotNetNuke.Services.FileSystem.EventArgs; - using DotNetNuke.Services.FileSystem.Internal; - using DotNetNuke.Services.Log.EventLog; - - using Localization = DotNetNuke.Services.Localization.Localization; - - /// Exposes methods to manage folders. - public class FolderManager : ComponentBase, IFolderManager - { - private const string DefaultUsersFoldersPath = "Users"; - private const string DefaultMappedPathSetting = "DefaultMappedPath"; - private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(FolderManager)); - private static readonly Dictionary SyncFoldersData = new Dictionary(); - private static readonly object ThreadLocker = new object(); - - /// Gets the localization key for MyFolderName. - public virtual string MyFolderName - { - get - { - return Localization.GetString("MyFolderName"); - } - } - - /// - /// Creates a new folder using the provided folder path. - /// - /// The folder mapping to use. - /// The path of the new folder. - /// Thrown when folderPath or folderMapping are null. - /// Thrown when the underlying system throw an exception. - /// The added folder. - public virtual IFolderInfo AddFolder(FolderMappingInfo folderMapping, string folderPath) - { - return this.AddFolder(folderMapping, folderPath, folderPath); - } - - /// - /// Creates a new folder using the provided folder path and mapping. - /// - /// The folder mapping to use. - /// The path of the new folder. - /// The mapped path of the new folder. - /// Thrown when folderPath or folderMapping are null. - /// Thrown when the underlying system throw an exception. - /// The added folder. - public virtual IFolderInfo AddFolder(FolderMappingInfo folderMapping, string folderPath, string mappedPath) - { - Requires.PropertyNotNull("folderPath", folderPath); - Requires.NotNull("folderMapping", folderMapping); - - folderPath = folderPath.Trim(); - - if (this.FolderExists(folderMapping.PortalID, folderPath)) - { - throw new FolderAlreadyExistsException(Localization.GetExceptionMessage("AddFolderAlreadyExists", "The provided folder path already exists. The folder has not been added.")); - } - - if (!this.IsValidFolderPath(folderPath)) - { - throw new InvalidFolderPathException(Localization.GetExceptionMessage("AddFolderNotAllowed", "The folder path '{0}' is not allowed. The folder has not been added.", folderPath)); - } - - var parentFolder = this.GetParentFolder(folderMapping.PortalID, folderPath); - if (parentFolder != null) - { - var parentFolderMapping = FolderMappingController.Instance.GetFolderMapping( - parentFolder.PortalID, - parentFolder.FolderMappingID); - if (FolderProvider.Instance(parentFolderMapping.FolderProviderType).SupportsMappedPaths) - { - folderMapping = parentFolderMapping; - mappedPath = string.IsNullOrEmpty(parentFolder.FolderPath) ? PathUtils.Instance.FormatFolderPath(parentFolder.MappedPath + folderPath) - : PathUtils.Instance.FormatFolderPath(parentFolder.MappedPath + folderPath.Replace(parentFolder.FolderPath, string.Empty)); - } - else if (!FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMappedPaths) - { - mappedPath = folderPath; - } - else - { - // Parent foldermapping DOESN'T support mapped path - // abd current foldermapping YES support mapped path - mappedPath = PathUtils.Instance.FormatFolderPath(this.GetDefaultMappedPath(folderMapping) + mappedPath); - } - } - else if (FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMappedPaths) - { - mappedPath = PathUtils.Instance.FormatFolderPath(this.GetDefaultMappedPath(folderMapping) + mappedPath); - } - - try - { - FolderProvider.Instance(folderMapping.FolderProviderType).AddFolder(folderPath, folderMapping, mappedPath); - } - catch (Exception ex) - { - Logger.Error(ex); - - throw new FolderProviderException(Localization.GetExceptionMessage("AddFolderUnderlyingSystemError", "The underlying system threw an exception. The folder has not been added."), ex); - } - - this.CreateFolderInFileSystem(PathUtils.Instance.GetPhysicalPath(folderMapping.PortalID, folderPath)); - var folderId = this.CreateFolderInDatabase(folderMapping.PortalID, folderPath, folderMapping.FolderMappingID, mappedPath); - - var folder = this.GetFolder(folderId); - - // Notify add folder event - this.OnFolderAdded(folder, this.GetCurrentUserId()); - - return folder; - } - - /// - /// Creates a new folder in the given portal using the provided folder path. - /// The same mapping than the parent folder will be used to create this folder. So this method have to be used only to create subfolders. - /// - /// The portal identifier. - /// The path of the new folder. - /// Thrown when folderPath is null or empty. - /// The added folder. - public virtual IFolderInfo AddFolder(int portalId, string folderPath) - { - Requires.NotNullOrEmpty("folderPath", folderPath); - - folderPath = PathUtils.Instance.FormatFolderPath(folderPath); - - var parentFolderPath = folderPath.Substring(0, folderPath.Substring(0, folderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); - var parentFolder = this.GetFolder(portalId, parentFolderPath) ?? this.AddFolder(portalId, parentFolderPath); - - var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, parentFolder.FolderMappingID); - - return this.AddFolder(folderMapping, folderPath); - } - - /// - /// Deletes the specified folder. - /// - /// The folder to delete. - /// Thrown when folder is null. - /// Thrown when the underlying system throw an exception. - public virtual void DeleteFolder(IFolderInfo folder) - { - this.DeleteFolderInternal(folder, false); - } - - /// - /// Removes the database reference to a folder on disk. - /// - /// The folder to unlink. - public virtual void UnlinkFolder(IFolderInfo folder) - { - this.DeleteFolderRecursive(folder, new Collection(), true, true); - } - - /// - /// Deletes the specified folder. - /// - /// The folder identifier. - public virtual void DeleteFolder(int folderId) - { - var folder = this.GetFolder(folderId); - - this.DeleteFolder(folder); - } - - /// - /// Deletes the specified folder and all its content. - /// - /// The folder to delete. - /// A collection with all not deleted subfolders after processiong the action. - public void DeleteFolder(IFolderInfo folder, ICollection notDeletedSubfolders) - { - this.DeleteFolderRecursive(folder, notDeletedSubfolders, true, this.GetOnlyUnmap(folder)); - } - - /// - /// Checks the existence of the specified folder in the specified portal. - /// - /// The portal where to check the existence of the folder. - /// The path of folder to check the existence of. - /// A bool value indicating whether the folder exists or not in the specified portal. - public virtual bool FolderExists(int portalId, string folderPath) - { - Requires.PropertyNotNull("folderPath", folderPath); - - return this.GetFolder(portalId, folderPath) != null; - } - - /// - /// Gets the files contained in the specified folder. - /// - /// The folder from which to retrieve the files. - /// The list of files contained in the specified folder. - public virtual IEnumerable GetFiles(IFolderInfo folder) - { - return this.GetFiles(folder, false); - } - - /// - /// Gets the files contained in the specified folder. - /// - /// The folder from which to retrieve the files. - /// Whether or not to include all the subfolders. - /// The list of files contained in the specified folder. - public virtual IEnumerable GetFiles(IFolderInfo folder, bool recursive) - { - return this.GetFiles(folder, recursive, false); - } - - /// - /// Gets the files contained in the specified folder. - /// - /// The folder from which to retrieve the files. - /// Whether or not to include all the subfolders. - /// Indicates if the file is retrieved from All files or from Published files. - /// The list of files contained in the specified folder. - public virtual IEnumerable GetFiles(IFolderInfo folder, bool recursive, bool retrieveUnpublishedFiles) - { - Requires.NotNull("folder", folder); - - return CBO.Instance.FillCollection(DataProvider.Instance().GetFiles(folder.FolderID, retrieveUnpublishedFiles, recursive)); - } - - /// - /// Gets the list of Standard folders the specified user has the provided permissions. - /// - /// The user info. - /// The permissions the folders have to met. - /// The list of Standard folders the specified user has the provided permissions. - /// This method is used to support legacy behaviours and situations where we know the file/folder is in the file system. - public virtual IEnumerable GetFileSystemFolders(UserInfo user, string permissions) - { - var userFolders = new List(); - - var portalId = user.PortalID; - - var userFolder = this.GetUserFolder(user); - - var defaultFolderMaping = FolderMappingController.Instance.GetDefaultFolderMapping(portalId); - - var folders = this.GetFolders(portalId, permissions, user.UserID).Where(f => f.FolderPath != null && f.FolderMappingID == defaultFolderMaping.FolderMappingID); - - foreach (var folder in folders) - { - if (folder.FolderPath.StartsWith(DefaultUsersFoldersPath + "/", StringComparison.InvariantCultureIgnoreCase)) - { - if (folder.FolderID == userFolder.FolderID) - { - folder.DisplayPath = this.MyFolderName + "/"; - folder.DisplayName = this.MyFolderName; - } - else if (!folder.FolderPath.StartsWith(userFolder.FolderPath, StringComparison.InvariantCultureIgnoreCase)) - { - // Allow UserFolder children - continue; - } - } - - userFolders.Add(folder); - } - - return userFolders; - } - - /// - /// Gets a folder entity by providing a folder identifier. - /// - /// The identifier of the folder. - /// The folder entity or null if the folder cannot be located. - public virtual IFolderInfo GetFolder(int folderId) - { - // Try and get the folder from the portal cache - IFolderInfo folder = null; - var portalSettings = PortalController.Instance.GetCurrentSettings(); - if (portalSettings != null) - { - var folders = this.GetFolders(portalSettings.PortalId); - folder = folders.SingleOrDefault(f => f.FolderID == folderId) ?? CBO.Instance.FillObject(DataProvider.Instance().GetFolder(folderId)); - } - - return folder ?? CBO.Instance.FillObject(DataProvider.Instance().GetFolder(folderId)); - } - - /// - /// Gets a folder entity by providing a portal identifier and folder path. - /// - /// The portal where the folder exists. - /// The path of the folder. - /// The folder entity or null if the folder cannot be located. - public virtual IFolderInfo GetFolder(int portalId, string folderPath) - { - Requires.PropertyNotNull("folderPath", folderPath); - - folderPath = PathUtils.Instance.FormatFolderPath(folderPath); - - var folders = this.GetFolders(portalId); - return folders.SingleOrDefault(f => f.FolderPath == folderPath) ?? CBO.Instance.FillObject(DataProvider.Instance().GetFolder(portalId, folderPath)); - } - - /// - /// Gets a folder entity by providing its unique id. - /// - /// The unique id of the folder. - /// The folder entity or null if the folder cannot be located. - public virtual IFolderInfo GetFolder(Guid uniqueId) - { - return CBO.Instance.FillObject(DataProvider.Instance().GetFolderByUniqueID(uniqueId)); - } - - /// - /// Gets the list of subfolders for the specified folder. - /// - /// The folder to get the list of subfolders. - /// The list of subfolders for the specified folder. - /// Thrown when parentFolder is null. - public virtual IEnumerable GetFolders(IFolderInfo parentFolder) - { - return this.GetFolders(parentFolder, false); - } - - /// - /// Gets the sorted list of folders of the provided portal. - /// - /// The portal identifier. - /// True = Read from Cache, False = Read from DB. - /// The sorted list of folders of the provided portal. - public virtual IEnumerable GetFolders(int portalId, bool useCache) - { - if (!useCache) - { - this.ClearFolderCache(portalId); - } - - return this.GetFolders(portalId); - } - - /// - /// Gets the sorted list of folders of the provided portal. - /// - /// The portal identifier. - /// The sorted list of folders of the provided portal. - public virtual IEnumerable GetFolders(int portalId) - { - var folders = new List(); - - var cacheKey = string.Format(DataCache.FolderCacheKey, portalId); - CBO.Instance.GetCachedObject>(new CacheItemArgs(cacheKey, DataCache.FolderCacheTimeOut, DataCache.FolderCachePriority, portalId), this.GetFoldersSortedCallBack, false).ForEach(folders.Add); - - return folders; - } - - /// - /// Gets the sorted list of folders that match the provided permissions in the specified portal. - /// - /// The portal identifier. - /// The permissions to match. - /// The user identifier to be used to check permissions. - /// The list of folders that match the provided permissions in the specified portal. - public virtual IEnumerable GetFolders(int portalId, string permissions, int userId) - { - var folders = new List(); - - var cacheKey = string.Format(DataCache.FolderUserCacheKey, portalId, permissions, userId); - var cacheItemArgs = new CacheItemArgs(cacheKey, DataCache.FolderUserCacheTimeOut, DataCache.FolderUserCachePriority, portalId, permissions, userId); - CBO.Instance.GetCachedObject>(cacheItemArgs, this.GetFoldersByPermissionSortedCallBack, false).ForEach(folders.Add); - - return folders; - } - - /// - /// Gets the list of folders the specified user has read permissions. - /// - /// The user info. - /// The list of folders the specified user has read permissions. - public virtual IEnumerable GetFolders(UserInfo user) - { - return this.GetFolders(user, "READ"); - } - - /// - /// Gets the list of folders the specified user has the provided permissions. - /// - /// The user info. - /// The permissions the folders have to met. - /// The list of folders the specified user has the provided permissions. - public virtual IEnumerable GetFolders(UserInfo user, string permissions) - { - var userFolders = new List(); - - var portalId = user.PortalID; - - var userFolder = this.GetUserFolder(user); - - foreach (var folder in this.GetFolders(portalId, permissions, user.UserID).Where(folder => folder.FolderPath != null)) - { - if (folder.FolderPath.StartsWith(DefaultUsersFoldersPath + "/", StringComparison.InvariantCultureIgnoreCase)) - { - if (folder.FolderID == userFolder.FolderID) - { - folder.DisplayPath = Localization.GetString("MyFolderName") + "/"; - folder.DisplayName = Localization.GetString("MyFolderName"); - } - else if (!folder.FolderPath.StartsWith(userFolder.FolderPath, StringComparison.InvariantCultureIgnoreCase)) - { - // Allow UserFolder children - continue; - } - } - - userFolders.Add(folder); - } - - return userFolders; - } - - /// - /// Gets the folder that belongs to a specific user. - /// - /// The user to get the folder for. - /// The information about the the user folder, . - public virtual IFolderInfo GetUserFolder(UserInfo userInfo) - { - // always use _default portal for a super user - int portalId = userInfo.IsSuperUser ? -1 : userInfo.PortalID; - - string userFolderPath = ((PathUtils)PathUtils.Instance).GetUserFolderPathInternal(userInfo); - return this.GetFolder(portalId, userFolderPath) ?? this.AddUserFolder(userInfo); - } - - /// - /// Moves a folder to a new location. - /// - /// The folder to move. - /// Where to move the new folder. - /// The information about the moved folder, . - public virtual IFolderInfo MoveFolder(IFolderInfo folder, IFolderInfo destinationFolder) - { - Requires.NotNull("folder", folder); - Requires.NotNull("destinationFolder", destinationFolder); - - var newFolderPath = PathUtils.Instance.FormatFolderPath(destinationFolder.FolderPath + folder.FolderName + "/"); - - if (folder.FolderPath == destinationFolder.FolderPath) - { - return folder; - } - - if (this.FolderExists(folder.PortalID, newFolderPath)) - { - throw new InvalidOperationException(string.Format( - Localization.GetExceptionMessage( - "CannotMoveFolderAlreadyExists", - "The folder with name '{0}' cannot be moved. A folder with that name already exists under the folder '{1}'.", - folder.FolderName, - destinationFolder.FolderName))); - } - - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); - var destinationFolderMapping = FolderMappingController.Instance.GetFolderMapping(destinationFolder.PortalID, destinationFolder.FolderMappingID); - - if (!this.CanMoveBetweenFolderMappings(folderMapping, destinationFolderMapping)) - { - throw new InvalidOperationException(string.Format( - Localization.GetExceptionMessage( - "CannotMoveFolderBetweenFolderType", - "The folder with name '{0}' cannot be moved. Move Folder operation between this two folder types is not allowed", - folder.FolderName))); - } - - if (!this.IsMoveOperationValid(folder, destinationFolder, newFolderPath)) - { - throw new InvalidOperationException(Localization.GetExceptionMessage("MoveFolderCannotComplete", "The operation cannot be completed.")); - } - - var currentFolderPath = folder.FolderPath; - - if ((folder.FolderMappingID == destinationFolder.FolderMappingID && FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMoveFolder) || - (IsStandardFolderProviderType(folderMapping) && IsStandardFolderProviderType(destinationFolderMapping))) - { - this.MoveFolderWithinProvider(folder, destinationFolder); - } - else - { - this.MoveFolderBetweenProviders(folder, newFolderPath); - } - - // log the folder moved event. - var log = new LogInfo(); - log.AddProperty("Old Folder Path", currentFolderPath); - log.AddProperty("New Folder Path", newFolderPath); - log.AddProperty("Home Directory", folder.PortalID == Null.NullInteger ? Globals.HostPath : PortalSettings.Current.HomeDirectory); - log.LogTypeKey = EventLogController.EventLogType.FOLDER_MOVED.ToString(); - LogController.Instance.AddLog(log); - - // Files in cache are obsolete because their physical path is not correct after moving - this.DeleteFilesFromCache(folder.PortalID, newFolderPath); - var movedFolder = this.GetFolder(folder.FolderID); - - // Notify folder moved event - this.OnFolderMoved(folder, this.GetCurrentUserId(), currentFolderPath); - - return movedFolder; - } - - /// - /// Renames the specified folder by setting the new provided folder name. - /// - /// The folder to rename. - /// The new name to apply to the folder. - /// Thrown when newFolderName is null or empty. - /// Thrown when folder is null. - /// Thrown when the underlying system throw an exception. - public virtual void RenameFolder(IFolderInfo folder, string newFolderName) - { - Requires.NotNull("folder", folder); - Requires.NotNullOrEmpty("newFolderName", newFolderName); - - if (folder.FolderName.Equals(newFolderName)) - { - return; - } - - var currentFolderName = folder.FolderName; - - var newFolderPath = folder.FolderPath.Substring(0, folder.FolderPath.LastIndexOf(folder.FolderName, StringComparison.Ordinal)) + PathUtils.Instance.FormatFolderPath(newFolderName); - - if (this.FolderExists(folder.PortalID, newFolderPath)) - { - throw new FolderAlreadyExistsException(Localization.GetExceptionMessage("RenameFolderAlreadyExists", "The destination folder already exists. The folder has not been renamed.")); - } - - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); - var provider = FolderProvider.Instance(folderMapping.FolderProviderType); - - this.RenameFolderInFileSystem(folder, newFolderPath); - - // Update Provider - provider.RenameFolder(folder, newFolderName); - - // Update database - this.UpdateChildFolders(folder, newFolderPath); - - // Files in cache are obsolete because their physical path is not correct after rename - this.DeleteFilesFromCache(folder.PortalID, newFolderPath); - - // Notify folder renamed event - this.OnFolderRenamed(folder, this.GetCurrentUserId(), currentFolderName); - } - - /// - /// Search the files contained in the specified folder, for a matching pattern. - /// - /// The folder from which to retrieve the files. - /// The patter to search for. - /// Shoud the search be recursive. - /// The list of files contained in the specified folder. - public virtual IEnumerable SearchFiles(IFolderInfo folder, string pattern, bool recursive) - { - Requires.NotNull("folder", folder); - - if (!FolderPermissionController.Instance.CanViewFolder(folder)) - { - throw new FolderProviderException("No permission to view the folder"); - } - - return this.SearchFiles(folder, WildcardToRegex(pattern), recursive); - } - - /// - /// Synchronizes the entire folder tree for the specified portal. - /// - /// The portal identifier. - /// The number of folder collisions. - public virtual int Synchronize(int portalId) - { - var folderCollisions = this.Synchronize(portalId, string.Empty, true, true); - - DataCache.ClearFolderCache(portalId); - - return folderCollisions; - } - - /// - /// Syncrhonizes the specified folder, its files and its subfolders. - /// - /// The portal identifier. - /// The relative path of the folder. - /// The number of folder collisions. - public virtual int Synchronize(int portalId, string relativePath) - { - return this.Synchronize(portalId, relativePath, true, true); - } - - /// - /// Syncrhonizes the specified folder, its files and, optionally, its subfolders. - /// - /// The portal identifier. - /// The relative path of the folder. - /// Indicates if the synchronization has to be recursive. - /// Indicates if files need to be synchronized. - /// Thrown when there are folder mappings requiring network connection but there is no network available. - /// The number of folder collisions. - public virtual int Synchronize(int portalId, string relativePath, bool isRecursive, bool syncFiles) - { - Requires.PropertyNotNull("relativePath", relativePath); - - if (this.AreThereFolderMappingsRequiringNetworkConnectivity(portalId, relativePath, isRecursive) && !this.IsNetworkAvailable()) - { - throw new NoNetworkAvailableException(Localization.GetExceptionMessage("NoNetworkAvailableError", "Network connectivity is needed but there is no network available.")); - } - - int? scriptTimeOut = null; - - Monitor.Enter(ThreadLocker); - try - { - if (HttpContext.Current != null) - { - scriptTimeOut = this.GetCurrentScriptTimeout(); - - // Synchronization could be a time-consuming process. To not get a time-out, we need to modify the request time-out value - this.SetScriptTimeout(int.MaxValue); - } - - var mergedTree = this.GetMergedTree(portalId, relativePath, isRecursive); - - // Step 1: Add Folders - this.InitialiseSyncFoldersData(portalId, relativePath); - for (var i = 0; i < mergedTree.Count; i++) - { - var item = mergedTree.Values[i]; - this.ProcessMergedTreeItemInAddMode(item, portalId); - } - - this.RemoveSyncFoldersData(relativePath); - - // Step 2: Delete Files and Folders - for (var i = mergedTree.Count - 1; i >= 0; i--) - { - var item = mergedTree.Values[i]; - - if (syncFiles) - { - this.SynchronizeFiles(item, portalId); - } - - this.ProcessMergedTreeItemInDeleteMode(item, portalId); - } - } - finally - { - Monitor.Exit(ThreadLocker); - - // Restore original time-out - if (HttpContext.Current != null && scriptTimeOut != null) - { - this.SetScriptTimeout(scriptTimeOut.Value); - } - } - - return 0; - } - - /// - /// Updates metadata of the specified folder. - /// - /// The folder to update. - /// Thrown when folder is null. - /// The information about the updated folder, . - public virtual IFolderInfo UpdateFolder(IFolderInfo folder) - { - var updatedFolder = this.UpdateFolderInternal(folder, true); - - this.AddLogEntry(updatedFolder, EventLogController.EventLogType.FOLDER_UPDATED); - - this.SaveFolderPermissions(updatedFolder); - - return updatedFolder; - } - - /// - /// Adds read permissions for all users to the specified folder. - /// - /// The folder to add the permission to. - /// Used as base class for FolderPermissionInfo when there is no read permission already defined. - public virtual void AddAllUserReadPermission(IFolderInfo folder, PermissionInfo permission) - { - var roleId = int.Parse(Globals.glbRoleAllUsers); - - var folderPermission = - (from FolderPermissionInfo p in folder.FolderPermissions - where p.PermissionKey == "READ" && p.FolderID == folder.FolderID && p.RoleID == roleId && p.UserID == Null.NullInteger - select p).SingleOrDefault(); - - if (folderPermission != null) - { - folderPermission.AllowAccess = true; - } - else - { - folderPermission = new FolderPermissionInfo(permission) - { - FolderID = folder.FolderID, - UserID = Null.NullInteger, - RoleID = roleId, - AllowAccess = true, - }; - - folder.FolderPermissions.Add(folderPermission); - } - } - - /// - /// Sets folder permissions to the given folder by copying parent folder permissions. - /// - /// The folder to copy permissions to. - public virtual void CopyParentFolderPermissions(IFolderInfo folder) - { - Requires.NotNull("folder", folder); - - if (string.IsNullOrEmpty(folder.FolderPath)) - { - return; - } - - var parentFolderPath = folder.FolderPath.Substring(0, folder.FolderPath.Substring(0, folder.FolderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); - - foreach (FolderPermissionInfo objPermission in - this.GetFolderPermissionsFromSyncData(folder.PortalID, parentFolderPath)) - { - var folderPermission = new FolderPermissionInfo(objPermission) - { - FolderID = folder.FolderID, - RoleID = objPermission.RoleID, - UserID = objPermission.UserID, - AllowAccess = objPermission.AllowAccess, - }; - folder.FolderPermissions.Add(folderPermission, true); - } - - FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); - } - - /// - /// Sets specific folder permissions for the given role to the given folder. - /// - /// The folder to set permission to. - /// The id of the permission to assign. - /// The role to assign the permission to. - public virtual void SetFolderPermission(IFolderInfo folder, int permissionId, int roleId) - { - this.SetFolderPermission(folder, permissionId, roleId, Null.NullInteger); - } - - /// - /// Sets specific folder permissions for the given role/user to the given folder. - /// - /// The folder to set permission to. - /// The id of the permission to assign. - /// The role to assign the permission to. - /// The user to assign the permission to. - public virtual void SetFolderPermission(IFolderInfo folder, int permissionId, int roleId, int userId) - { - if (folder.FolderPermissions.Cast() - .Any(fpi => fpi.FolderID == folder.FolderID && fpi.PermissionID == permissionId && fpi.RoleID == roleId && fpi.UserID == userId && fpi.AllowAccess)) - { - return; - } - - var objFolderPermissionInfo = new FolderPermissionInfo - { - FolderID = folder.FolderID, - PermissionID = permissionId, - RoleID = roleId, - UserID = userId, - AllowAccess = true, - }; - - folder.FolderPermissions.Add(objFolderPermissionInfo, true); - FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); - } - - /// - /// Sets folder permissions for administrator role to the given folder. - /// - /// The folder to set permission to. - /// The administrator role id to assign the permission to. - public virtual void SetFolderPermissions(IFolderInfo folder, int administratorRoleId) - { - Requires.NotNull("folder", folder); - - foreach (PermissionInfo objPermission in PermissionController.GetPermissionsByFolder()) - { - var folderPermission = new FolderPermissionInfo(objPermission) - { - FolderID = folder.FolderID, - RoleID = administratorRoleId, - }; - - folder.FolderPermissions.Add(folderPermission, true); - } - - FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); - } - - /// - /// Moves the specified folder and its contents to a new location. - /// - /// The folder to move. - /// The new folder path. - /// The moved folder. - [EditorBrowsable(EditorBrowsableState.Never)] - [Obsolete("Deprecated in DNN 7.1. It has been replaced by FolderManager.Instance.MoveFolder(IFolderInfo folder, IFolderInfo destinationFolder) . Scheduled removal in v10.0.0.")] - public virtual IFolderInfo MoveFolder(IFolderInfo folder, string newFolderPath) - { - Requires.NotNull("folder", folder); - Requires.NotNullOrEmpty("newFolderPath", newFolderPath); - - var nameCharIndex = newFolderPath.Substring(0, newFolderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1; - var parentFolder = this.GetFolder(folder.PortalID, newFolderPath.Substring(0, nameCharIndex)); - if (parentFolder.FolderID == folder.ParentID) - { - var newFolderName = newFolderPath.Substring(nameCharIndex, newFolderPath.Length - nameCharIndex - 1); - this.RenameFolder(folder, newFolderName); - return folder; - } - - return this.MoveFolder(folder, parentFolder); - } - - /// - /// Checks if a given folder path is valid. - /// - /// The folder path. - /// A value indicating whether the folder path is valid. - internal virtual bool IsValidFolderPath(string folderPath) - { - var illegalInFolderPath = new Regex(string.Format("[{0}]", Regex.Escape(new string(Path.GetInvalidPathChars()))), RegexOptions.Compiled); - return !illegalInFolderPath.IsMatch(folderPath) && !folderPath.TrimEnd('/', '\\').EndsWith("."); - } - - /// - /// Adds a log entry. - /// - /// The folder to log about. - /// The type of the log entry. - internal virtual void AddLogEntry(IFolderInfo folder, EventLogController.EventLogType eventLogType) - { - EventLogController.Instance.AddLog(folder, PortalController.Instance.GetCurrentSettings(), this.GetCurrentUserId(), string.Empty, eventLogType); - } - - /// - /// Adds a log entry. - /// - /// The name of the property. - /// The value of the property. - /// The type of log entry. - internal virtual void AddLogEntry(string propertyName, string propertyValue, EventLogController.EventLogType eventLogType) - { - EventLogController.Instance.AddLog(propertyName, propertyValue, PortalController.Instance.GetCurrentSettings(), this.GetCurrentUserId(), eventLogType); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The new folder path. - internal void DeleteFilesFromCache(int portalId, string newFolderPath) - { - var folders = this.GetFolders(portalId).Where(f => f.FolderPath.StartsWith(newFolderPath)); - foreach (var folderInfo in folders) - { - var fileIds = this.GetFiles(folderInfo).Select(f => f.FileId); - foreach (var fileId in fileIds) - { - DataCache.RemoveCache("GetFileById" + fileId); - } - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The added folder information, . - /// the user to add a folder for. - internal virtual IFolderInfo AddUserFolder(UserInfo user) - { - // user _default portal for all super users - var portalId = user.IsSuperUser ? Null.NullInteger : user.PortalID; - - var folderMapping = FolderMappingsConfigController.Instance.GetFolderMapping(portalId, DefaultUsersFoldersPath) ?? FolderMappingController.Instance.GetDefaultFolderMapping(portalId); - - if (!this.FolderExists(portalId, DefaultUsersFoldersPath)) - { - this.AddFolder(folderMapping, DefaultUsersFoldersPath); - } - - // GetUserFolderPathElement is deprecated without a replacement, it should have been internal only and will be removed in DNN v10, hence the warning disable here -#pragma warning disable 612,618 - var rootFolder = PathUtils.Instance.GetUserFolderPathElement(user.UserID, PathUtils.UserFolderElement.Root); -#pragma warning restore 612,618 - - var folderPath = PathUtils.Instance.FormatFolderPath(string.Format(DefaultUsersFoldersPath + "/{0}", rootFolder)); - - if (!this.FolderExists(portalId, folderPath)) - { - this.AddFolder(folderMapping, folderPath); - } - - // GetUserFolderPathElement is deprecated without a replacement, it should have been internal only and will be removed in DNN v10, hence the warning disable here -#pragma warning disable 612,618 - folderPath = PathUtils.Instance.FormatFolderPath(string.Concat(folderPath, PathUtils.Instance.GetUserFolderPathElement(user.UserID, PathUtils.UserFolderElement.SubFolder))); -#pragma warning restore 612,618 - - if (!this.FolderExists(portalId, folderPath)) - { - this.AddFolder(folderMapping, folderPath); - } - - folderPath = PathUtils.Instance.FormatFolderPath(string.Concat(folderPath, user.UserID.ToString(CultureInfo.InvariantCulture))); - - if (!this.FolderExists(portalId, folderPath)) - { - this.AddFolder(folderMapping, folderPath); - - var folder = this.GetFolder(portalId, folderPath); - - foreach (PermissionInfo permission in PermissionController.GetPermissionsByFolder()) - { - if (permission.PermissionKey.Equals("READ", StringComparison.InvariantCultureIgnoreCase) || permission.PermissionKey.Equals("WRITE", StringComparison.InvariantCultureIgnoreCase) || permission.PermissionKey.Equals("BROWSE", StringComparison.InvariantCultureIgnoreCase)) - { - var folderPermission = new FolderPermissionInfo(permission) - { - FolderID = folder.FolderID, - UserID = user.UserID, - RoleID = int.Parse(Globals.glbRoleNothing), - AllowAccess = true, - }; - - folder.FolderPermissions.Add(folderPermission); - - if (permission.PermissionKey.Equals("READ", StringComparison.InvariantCultureIgnoreCase)) - { - this.AddAllUserReadPermission(folder, permission); - } - } - } - - FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); - } - - return this.GetFolder(portalId, folderPath); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// A value indicating whether there are any folder mappings that required network connectivity. - /// The site (Portal) ID. - /// The relative path. - /// A value indicating whether the check should be recursive or not. - internal virtual bool AreThereFolderMappingsRequiringNetworkConnectivity(int portalId, string relativePath, bool isRecursive) - { - var folder = this.GetFolder(portalId, relativePath); - - if (folder != null) - { - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); - var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); - - if (folderProvider.RequiresNetworkConnectivity) - { - return true; - } - } - - if (isRecursive) - { - var folderMappingsRequiringNetworkConnectivity = from fm in FolderMappingController.Instance.GetFolderMappings(portalId) - where - fm.IsEditable && - FolderProvider.Instance(fm.FolderProviderType).RequiresNetworkConnectivity - select fm; - - return folderMappingsRequiringNetworkConnectivity.Any(); - } - - return false; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - internal void ClearFolderProviderCachedLists(int portalId) - { - foreach (var folderMapping in FolderMappingController.Instance.GetFolderMappings(portalId)) - { - var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); - - if (folderMapping.MappingName != "Standard" && folderMapping.MappingName != "Secure" && folderMapping.MappingName != "Database") - { - var type = folderProvider.GetType(); - MethodInfo method = type.GetMethod("ClearCache"); - if (method != null) - { - method.Invoke(folderProvider, new object[] { folderMapping.FolderMappingID }); - } - } - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - internal virtual void ClearFolderCache(int portalId) - { - DataCache.ClearFolderCache(portalId); - } - - /// - /// Creates a folder in the database. - /// - /// The site (portal) ID. - /// The folder path to create. - /// The folder mapping id, . - /// The created folder ID. - internal virtual int CreateFolderInDatabase(int portalId, string folderPath, int folderMappingId) - { - return this.CreateFolderInDatabase(portalId, folderPath, folderMappingId, folderPath); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The folder path to create. - /// The id for the folder mapping. - /// The mapped path. - /// The created folder ID. - internal virtual int CreateFolderInDatabase(int portalId, string folderPath, int folderMappingId, string mappedPath) - { - var isProtected = PathUtils.Instance.IsDefaultProtectedPath(folderPath); - var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, folderMappingId); - var storageLocation = (int)FolderController.StorageLocationTypes.DatabaseSecure; - if (!folderMapping.IsEditable) - { - switch (folderMapping.MappingName) - { - case "Standard": - storageLocation = (int)FolderController.StorageLocationTypes.InsecureFileSystem; - break; - case "Secure": - storageLocation = (int)FolderController.StorageLocationTypes.SecureFileSystem; - break; - default: - storageLocation = (int)FolderController.StorageLocationTypes.DatabaseSecure; - break; - } - } - - var folder = new FolderInfo(true) - { - PortalID = portalId, - FolderPath = folderPath, - MappedPath = mappedPath, - StorageLocation = storageLocation, - IsProtected = isProtected, - IsCached = false, - FolderMappingID = folderMappingId, - LastUpdated = Null.NullDate, - }; - - folder.FolderID = this.AddFolderInternal(folder); - - if (portalId != Null.NullInteger) - { - // Set Folder Permissions to inherit from parent - this.CopyParentFolderPermissions(folder); - } - - return folder.FolderID; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The physical path to create the folder in. - internal virtual void CreateFolderInFileSystem(string physicalPath) - { - var di = new DirectoryInfo(physicalPath); - - if (!di.Exists) - { - di.Create(); - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The folder path. - internal virtual void DeleteFolder(int portalId, string folderPath) - { - DataProvider.Instance().DeleteFolder(portalId, PathUtils.Instance.FormatFolderPath(folderPath)); - this.AddLogEntry("FolderPath", folderPath, EventLogController.EventLogType.FOLDER_DELETED); - this.UpdateParentFolder(portalId, folderPath); - DataCache.ClearFolderCache(portalId); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder mapping affected. - /// A list of folders to delete. - internal virtual void DeleteFoldersFromExternalStorageLocations(Dictionary folderMappings, IEnumerable foldersToDelete) - { - foreach (var folderToDelete in foldersToDelete) - { - // Delete source folder from its storage location - var folderMapping = this.GetFolderMapping(folderMappings, folderToDelete.FolderMappingID); - - try - { - var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); - - // IMPORTANT: We cannot delete the folder from its storage location when it contains other subfolders - if (!folderProvider.GetSubFolders(folderToDelete.MappedPath, folderMapping).Any()) - { - folderProvider.DeleteFolder(folderToDelete); - } - } - catch (Exception ex) - { - // The folders that cannot be deleted from its storage location will be handled during the next sync - Logger.Error(ex); - } - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// A value representing the current script timeout. - internal virtual int GetCurrentScriptTimeout() - { - return HttpContext.Current.Server.ScriptTimeout; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The id of the current user. - internal virtual int GetCurrentUserId() - { - return UserController.Instance.GetCurrentUserInfo().UserID; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The relative path. - /// A value indicating whether to return folders recursively. - /// A sorted list of folders. - internal virtual SortedList GetDatabaseFolders(int portalId, string relativePath, bool isRecursive) - { - var databaseFolders = new SortedList(new IgnoreCaseStringComparer()); - - var folder = this.GetFolder(portalId, relativePath); - - if (folder != null) - { - if (!isRecursive) - { - var item = new MergedTreeItem - { - FolderID = folder.FolderID, - FolderMappingID = folder.FolderMappingID, - FolderPath = folder.FolderPath, - ExistsInDatabase = true, - MappedPath = folder.MappedPath, - }; - - databaseFolders.Add(relativePath, item); - } - else - { - databaseFolders = this.GetDatabaseFoldersRecursive(folder); - } - } - - return databaseFolders; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to get. - /// A sorted list of folders. - internal virtual SortedList GetDatabaseFoldersRecursive(IFolderInfo folder) - { - var result = new SortedList(new IgnoreCaseStringComparer()); - var stack = new Stack(); - - stack.Push(folder); - - while (stack.Count > 0) - { - var folderInfo = stack.Pop(); - - var item = new MergedTreeItem - { - FolderID = folderInfo.FolderID, - FolderMappingID = folderInfo.FolderMappingID, - FolderPath = folderInfo.FolderPath, - ExistsInDatabase = true, - MappedPath = folderInfo.MappedPath, - }; - - if (!result.ContainsKey(item.FolderPath)) - { - result.Add(item.FolderPath, item); - } - - foreach (var subfolder in this.GetFolders(folderInfo)) - { - stack.Push(subfolder); - } - } - - return result; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The relative path. - /// A value indicating whether to return the folders recursively. - /// A sorted list of folders. - internal virtual SortedList GetFileSystemFolders(int portalId, string relativePath, bool isRecursive) - { - var fileSystemFolders = new SortedList(new IgnoreCaseStringComparer()); - - var physicalPath = PathUtils.Instance.GetPhysicalPath(portalId, relativePath); - var hideFoldersEnabled = PortalController.GetPortalSettingAsBoolean("HideFoldersEnabled", portalId, true); - - if (DirectoryWrapper.Instance.Exists(physicalPath)) - { - if (((FileWrapper.Instance.GetAttributes(physicalPath) & FileAttributes.Hidden) == FileAttributes.Hidden || physicalPath.StartsWith("_")) && hideFoldersEnabled) - { - return fileSystemFolders; - } - - if (!isRecursive) - { - var item = new MergedTreeItem - { - FolderID = -1, - FolderMappingID = -1, - FolderPath = relativePath, - ExistsInFileSystem = true, - MappedPath = string.Empty, - }; - - fileSystemFolders.Add(relativePath, item); - } - else - { - fileSystemFolders = this.GetFileSystemFoldersRecursive(portalId, physicalPath); - } - } - - return fileSystemFolders; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The physical path of the folder. - /// A sorted list of folders. - internal virtual SortedList GetFileSystemFoldersRecursive(int portalId, string physicalPath) - { - var result = new SortedList(new IgnoreCaseStringComparer()); - var stack = new Stack(); - - stack.Push(physicalPath); - - var hideFoldersEnabled = PortalController.GetPortalSettingAsBoolean("HideFoldersEnabled", portalId, true); - - while (stack.Count > 0) - { - var dir = stack.Pop(); - - try - { - var item = new MergedTreeItem - { - FolderID = -1, - FolderMappingID = -1, - FolderPath = PathUtils.Instance.GetRelativePath(portalId, dir), - ExistsInFileSystem = true, - MappedPath = string.Empty, - }; - - result.Add(item.FolderPath, item); - - foreach (var dn in DirectoryWrapper.Instance.GetDirectories(dir)) - { - if (((FileWrapper.Instance.GetAttributes(dn) & FileAttributes.Hidden) == FileAttributes.Hidden || dn.StartsWith("_")) && hideFoldersEnabled) - { - continue; - } - - stack.Push(dn); - } - } - catch (Exception ex) - { - Logger.Error(ex); - } - } - - return result; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder mapping to search in. - /// The folder mapping id to return. - /// A single folder mapping, . - internal virtual FolderMappingInfo GetFolderMapping(Dictionary folderMappings, int folderMappingId) - { - if (!folderMappings.ContainsKey(folderMappingId)) - { - folderMappings.Add(folderMappingId, FolderMappingController.Instance.GetFolderMapping(folderMappingId)); - } - - return folderMappings[folderMappingId]; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder mapping to use. - /// The folder base path. - /// A sorted list of folder mappings. - internal virtual SortedList GetFolderMappingFoldersRecursive(FolderMappingInfo folderMapping, IFolderInfo folder) - { - var result = new SortedList(new IgnoreCaseStringComparer()); - var stack = new Stack(); - var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); - - var baseMappedPath = folder.MappedPath; - var baseFolderPath = folder.FolderPath; - - stack.Push(baseMappedPath); - - while (stack.Count > 0) - { - var mappedPath = stack.Pop(); - var relativePath = string.IsNullOrEmpty(mappedPath) - ? string.Empty - : string.IsNullOrEmpty(baseMappedPath) - ? mappedPath - : RegexUtils.GetCachedRegex(Regex.Escape(baseMappedPath)).Replace(mappedPath, string.Empty, 1); - - var folderPath = baseFolderPath + relativePath; - - if (folderProvider.FolderExists(mappedPath, folderMapping)) - { - var item = new MergedTreeItem - { - FolderID = -1, - FolderMappingID = folderMapping.FolderMappingID, - FolderPath = folderPath, - ExistsInFolderMapping = true, - MappedPath = mappedPath, - }; - - if (!result.ContainsKey(item.FolderPath)) - { - result.Add(item.FolderPath, item); - } - - foreach (var subfolderPath in folderProvider.GetSubFolders(mappedPath, folderMapping)) - { - if (folderMapping.SyncAllSubFolders || folderProvider.FolderExists(subfolderPath, folderMapping)) - { - stack.Push(subfolderPath); - } - } - } - } - - return result; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The cached items arguments, . - /// A list of folders. - internal virtual object GetFoldersByPermissionSortedCallBack(CacheItemArgs cacheItemArgs) - { - var portalId = (int)cacheItemArgs.ParamList[0]; - var permissions = (string)cacheItemArgs.ParamList[1]; - var userId = (int)cacheItemArgs.ParamList[2]; - return CBO.Instance.FillCollection(DataProvider.Instance().GetFoldersByPortalAndPermissions(portalId, permissions, userId)); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The cache item arguments, . - /// A list of folders. - internal virtual object GetFoldersSortedCallBack(CacheItemArgs cacheItemArgs) - { - var portalId = (int)cacheItemArgs.ParamList[0]; - return CBO.Instance.FillCollection(DataProvider.Instance().GetFoldersByPortal(portalId)); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The relative path. - /// A vavlue indicating whether the search should be recursive. - /// A sorted list of . - internal virtual SortedList GetMergedTree(int portalId, string relativePath, bool isRecursive) - { - var fileSystemFolders = this.GetFileSystemFolders(portalId, relativePath, isRecursive); - var databaseFolders = this.GetDatabaseFolders(portalId, relativePath, isRecursive); - - var mergedTree = this.MergeFolderLists(fileSystemFolders, databaseFolders); - var mappedFolders = new SortedList(); - - // Some providers cache the list of objects for performance - this.ClearFolderProviderCachedLists(portalId); - - foreach (var mergedItem in mergedTree.Values) - { - if (mergedItem.FolderMappingID == Null.NullInteger) - { - continue; - } - - var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, mergedItem.FolderMappingID); - - // Add any folders from non-core providers - if (folderMapping.MappingName != "Standard" && folderMapping.MappingName != "Secure" && folderMapping.MappingName != "Database") - { - if (!isRecursive) - { - mergedItem.ExistsInFolderMapping = true; - } - else - { - var folder = this.GetFolder(portalId, mergedItem.FolderPath); - mappedFolders = this.MergeFolderLists(mappedFolders, this.GetFolderMappingFoldersRecursive(folderMapping, folder)); - } - } - else - { - mergedItem.ExistsInFolderMapping = folderMapping.MappingName == "Database" ? mergedItem.ExistsInDatabase : mergedItem.ExistsInFileSystem; - } - } - - mergedTree = this.MergeFolderLists(mergedTree, mappedFolders); - - // Update ExistsInFolderMapping if the Parent Does Not ExistsInFolderMapping - var margedTreeItems = mergedTree.Values; - foreach (var mergedItem in margedTreeItems.Where(m => m.ExistsInFolderMapping - && margedTreeItems.Any(mt2 => !mt2.ExistsInFolderMapping && m.FolderPath.StartsWith(mt2.FolderPath)))) - { - mergedItem.ExistsInFolderMapping = false; - } - - return mergedTree; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder mapping. - /// A value indicating whether the folder mapping is editable. - internal virtual bool IsFolderMappingEditable(FolderMappingInfo folderMapping) - { - return folderMapping.IsEditable; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to move. - /// The destination folder to move the folder to. - /// The new folder path. - /// A value indicating whether the move operation would be valid. - internal virtual bool IsMoveOperationValid(IFolderInfo folderToMove, IFolderInfo destinationFolder, string newFolderPath) - { - // FolderMapping cases - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folderToMove.PortalID, folderToMove.FolderMappingID); - if (folderToMove.FolderMappingID == destinationFolder.FolderMappingID && FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMappedPaths) - { - // Root mapped folder cannot be move, when folder mappings are equal - if (folderToMove.MappedPath == string.Empty) - { - return false; - } - - // Destination folder cannot be a child mapped folder from the folder to move - if (destinationFolder.MappedPath.StartsWith(folderToMove.MappedPath)) - { - return false; - } - } - - return this.IsMoveOperationValid(folderToMove, newFolderPath); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to move. - /// The distination folder to move the folder into. - /// A value indicating if the move operation would be valid. - internal virtual bool IsMoveOperationValid(IFolderInfo folderToMove, string newFolderPath) - { - // Root folder cannot be moved - if (folderToMove.FolderPath == string.Empty) - { - return false; - } - - // newParentFolder cannot be a child of folderToMove - if (newFolderPath.StartsWith(folderToMove.FolderPath)) - { - return false; - } - - return true; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// A value indicating whether the network is available. - internal virtual bool IsNetworkAvailable() - { - return NetworkInterface.GetIsNetworkAvailable(); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The first list for the merge. - /// The second list for the merge. - /// A merged sorted list of MergedTreeItems, . - internal virtual SortedList MergeFolderLists(SortedList list1, SortedList list2) - { - foreach (var item in list2.Values) - { - if (list1.ContainsKey(item.FolderPath)) - { - var existingItem = list1[item.FolderPath]; - if (existingItem.FolderID < 0) - { - existingItem.FolderID = item.FolderID; - } - - if (existingItem.FolderMappingID < 0) - { - existingItem.FolderMappingID = item.FolderMappingID; - } - - if (string.IsNullOrEmpty(existingItem.MappedPath)) - { - existingItem.MappedPath = item.MappedPath; - } - - existingItem.ExistsInFileSystem = existingItem.ExistsInFileSystem || item.ExistsInFileSystem; - existingItem.ExistsInDatabase = existingItem.ExistsInDatabase || item.ExistsInDatabase; - existingItem.ExistsInFolderMapping = existingItem.ExistsInFolderMapping || item.ExistsInFolderMapping; - } - else - { - list1.Add(item.FolderPath, item); - } - } - - return list1; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The source directory. - /// The target directory. - internal virtual void MoveDirectory(string source, string target) - { - var stack = new Stack(); - stack.Push(new MoveFoldersInfo(source, target)); - - // ReSharper disable AssignNullToNotNullAttribute - while (stack.Count > 0) - { - var folders = stack.Pop(); - Directory.CreateDirectory(folders.Target); - foreach (var file in Directory.GetFiles(folders.Source, "*.*")) - { - var targetFile = Path.Combine(folders.Target, Path.GetFileName(file)); - if (File.Exists(targetFile)) - { - File.Delete(targetFile); - } - - File.Move(file, targetFile); - } - - foreach (var folder in Directory.GetDirectories(folders.Source)) - { - stack.Push(new MoveFoldersInfo(folder, Path.Combine(folders.Target, Path.GetFileName(folder)))); - } - } - - // ReSharper restore AssignNullToNotNullAttribute - Directory.Delete(source, true); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to move. - /// The destination folder. - internal virtual void MoveFolderWithinProvider(IFolderInfo folder, IFolderInfo destinationFolder) - { - var newFolderPath = destinationFolder.FolderPath + folder.FolderName + "/"; - this.RenameFolderInFileSystem(folder, newFolderPath); - - // Update provider - var newMappedPath = destinationFolder.MappedPath + folder.FolderName + "/"; - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); - var provider = FolderProvider.Instance(folderMapping.FolderProviderType); - provider.MoveFolder(folder.MappedPath, newMappedPath, folderMapping); - - // Update database - this.UpdateChildFolders(folder, Path.Combine(destinationFolder.FolderPath, folder.FolderName)); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to move. - /// The target folder for the move. - internal virtual void MoveFolderBetweenProviders(IFolderInfo folder, string newFolderPath) - { - this.RenameFolderInFileSystem(folder, newFolderPath); - - var folderInfos = this.GetFolders(folder.PortalID).Where(f => f.FolderPath != string.Empty && f.FolderPath.StartsWith(folder.FolderPath)).ToArray(); - var tmpFolderPath = folder.FolderPath; - - foreach (var folderInfo in folderInfos) - { - var folderPath = newFolderPath + folderInfo.FolderPath.Substring(tmpFolderPath.Length); - - var parentFolder = this.GetParentFolder(folder.PortalID, folderPath); - folderInfo.ParentID = parentFolder.FolderID; - folderInfo.FolderPath = folderPath; - this.UpdateFolderInternal(folderInfo, true); - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The source folder. - /// The destination folder. - /// The folder mappings. - /// The folders to delete. - internal virtual void OverwriteFolder(IFolderInfo sourceFolder, IFolderInfo destinationFolder, Dictionary folderMappings, SortedList foldersToDelete) - { - var fileManager = FileManager.Instance; - var files = this.GetFiles(sourceFolder, true); - - foreach (var file in files) - { - fileManager.MoveFile(file, destinationFolder); - } - - // Delete source folder in database - this.DeleteFolder(sourceFolder.PortalID, sourceFolder.FolderPath); - - var folderMapping = this.GetFolderMapping(folderMappings, sourceFolder.FolderMappingID); - - if (this.IsFolderMappingEditable(folderMapping)) - { - foldersToDelete.Add(sourceFolder.FolderPath, sourceFolder); - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The item to process. - /// The site (portal) ID. - internal virtual void ProcessMergedTreeItemInAddMode(MergedTreeItem item, int portalId) - { - try - { - if (item.ExistsInFileSystem) - { - if (!item.ExistsInDatabase) - { - var folderMappingId = this.FindFolderMappingId(item, portalId); - this.CreateFolderInDatabase(portalId, item.FolderPath, folderMappingId); - } - } - else - { - if (item.ExistsInDatabase) - { - if (item.ExistsInFolderMapping) - { - this.CreateFolderInFileSystem(PathUtils.Instance.GetPhysicalPath(portalId, item.FolderPath)); - } - } - else - { - // by exclusion it exists in the Folder Mapping - this.CreateFolderInFileSystem(PathUtils.Instance.GetPhysicalPath(portalId, item.FolderPath)); - this.CreateFolderInDatabase(portalId, item.FolderPath, item.FolderMappingID, item.MappedPath); - } - } - } - catch (Exception ex) - { - Logger.Error(string.Format("Could not create folder {0}. EXCEPTION: {1}", item.FolderPath, ex.Message), ex); - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// . - /// The site (portal) ID. - internal virtual void ProcessMergedTreeItemInDeleteMode(MergedTreeItem item, int portalId) - { - if (item.ExistsInFileSystem) - { - if (item.ExistsInDatabase) - { - if (item.FolderPath == string.Empty) - { - return; // Do not process root folder - } - - if (!item.ExistsInFolderMapping) - { - var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, item.FolderMappingID); - - if (folderMapping.IsEditable) - { - DirectoryWrapper.Instance.Delete(PathUtils.Instance.GetPhysicalPath(portalId, item.FolderPath), false); - this.DeleteFolder(portalId, item.FolderPath); - } - } - } - } - else - { - if (item.ExistsInDatabase && !item.ExistsInFolderMapping) - { - this.DeleteFolder(portalId, item.FolderPath); - } - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to cleanup. - internal virtual void RemoveOrphanedFiles(IFolderInfo folder) - { - var files = this.GetFiles(folder, false, true); - - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); - - if (folderMapping != null) - { - var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); - - foreach (var file in files) - { - try - { - if (!folderProvider.FileExists(folder, file.FileName)) - { - FileDeletionController.Instance.DeleteFileData(file); - } - } - catch (Exception ex) - { - Logger.Error(ex); - } - } - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to rename. - /// The new folder path. - internal virtual void RenameFolderInFileSystem(IFolderInfo folder, string newFolderPath) - { - var source = folder.PhysicalPath; - - var di = new DirectoryInfo(source); - if (!di.Exists) - { - return; - } - - var target = PathUtils.Instance.GetPhysicalPath(folder.PortalID, newFolderPath); - this.MoveDirectory(source, target); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to save the permissions for. - internal virtual void SaveFolderPermissions(IFolderInfo folder) - { - FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The timeout in seconds. - internal virtual void SetScriptTimeout(int timeout) - { - HttpContext.Current.Server.ScriptTimeout = timeout; - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The item to synchronize. - /// The site (portal) ID. - internal virtual void SynchronizeFiles(MergedTreeItem item, int portalId) - { - var folder = this.GetFolder(portalId, item.FolderPath); - - if (folder == null) - { - return; - } - - var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, folder.FolderMappingID); - - if (folderMapping == null) - { - return; - } - - try - { - var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); - var fileManager = FileManager.Instance; - - if (folderProvider.FolderExists(folder.MappedPath, folderMapping)) - { - var files = folderProvider.GetFiles(folder); - - files = files.Except(FileVersionController.Instance.GetFileVersionsInFolder(folder.FolderID).Select(f => f.FileName)).ToArray(); - - foreach (var fileName in files) - { - try - { - var file = fileManager.GetFile(folder, fileName, true); - - if (file == null) - { - fileManager.AddFile(folder, fileName, null, false); - } - else if (!folderProvider.IsInSync(file)) - { - fileManager.UpdateFile(file, null); - } - } - catch (InvalidFileExtensionException ex) - { - Logger.Info(ex.Message); - } - catch (Exception ex) - { - Logger.Error(ex); - } - } - } - - this.RemoveOrphanedFiles(folder); - } - catch (Exception ex) - { - Logger.Error(ex); - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The site (portal) ID. - /// The folder path to update. - internal virtual void UpdateParentFolder(int portalId, string folderPath) - { - if (!string.IsNullOrEmpty(folderPath)) - { - var parentFolderPath = folderPath.Substring(0, folderPath.Substring(0, folderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); - var objFolder = this.GetFolder(portalId, parentFolderPath); - if (objFolder != null) - { - // UpdateFolder(objFolder); - this.UpdateFolderInternal(objFolder, false); - } - } - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The folder to update. - /// The new folder path. - internal virtual void UpdateChildFolders(IFolderInfo folder, string newFolderPath) - { - var originalFolderPath = folder.FolderPath; - - var folderInfos = this.GetFolders(folder.PortalID).Where(f => f.FolderPath != string.Empty && f.FolderPath.StartsWith(originalFolderPath)).ToArray(); - - foreach (var folderInfo in folderInfos) - { - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folderInfo.FolderMappingID); - var provider = FolderProvider.Instance(folderMapping.FolderProviderType); - - var folderPath = newFolderPath + (newFolderPath.EndsWith("/") ? string.Empty : "/") + folderInfo.FolderPath.Substring(originalFolderPath.Length); - - var parentFolder = this.GetParentFolder(folder.PortalID, folderPath); - folderInfo.ParentID = parentFolder.FolderID; - folderInfo.FolderPath = folderPath; - - var parentProvider = FolderProvider.Instance(FolderMappingController.Instance.GetFolderMapping(parentFolder.PortalID, parentFolder.FolderMappingID).FolderProviderType); - if (parentProvider.SupportsMappedPaths || !provider.SupportsMappedPaths) - { - if (provider.SupportsMappedPaths) - { - var mappedPath = parentFolder.FolderPath == string.Empty ? string.Empty : folderPath.Replace(parentFolder.FolderPath, string.Empty); - folderInfo.MappedPath = PathUtils.Instance.FormatFolderPath(parentFolder.MappedPath + mappedPath); - } - else - { - folderInfo.MappedPath = folderPath; - } - } - else if (provider.SupportsMappedPaths) - { - if (originalFolderPath == folderInfo.MappedPath) - { - folderInfo.MappedPath = folderPath; - } - else if (folderInfo.MappedPath.EndsWith("/" + originalFolderPath, StringComparison.Ordinal)) - { - var newMappedPath = PathUtils.Instance.FormatFolderPath( - folderInfo.MappedPath.Substring(0, folderInfo.MappedPath.LastIndexOf("/" + originalFolderPath, StringComparison.Ordinal)) + "/" + folderPath); - folderInfo.MappedPath = newMappedPath; - } - } - - this.UpdateFolderInternal(folderInfo, false); - } - - this.ClearFolderCache(folder.PortalID); - } - - /// This member is reserved for internal use and is not intended to be used directly from your code. - /// The source folder mapping. - /// The destination folder mapping. - /// A value indicating whether a folder mapping can be moved to another one. - internal virtual bool CanMoveBetweenFolderMappings(FolderMappingInfo sourceFolderMapping, FolderMappingInfo destinationFolderMapping) - { - // If Folder Mappings are exactly the same - if (sourceFolderMapping.FolderMappingID == destinationFolderMapping.FolderMappingID) - { - return true; - } - - return IsStandardFolderProviderType(sourceFolderMapping) && IsStandardFolderProviderType(destinationFolderMapping); - } - - private static Regex WildcardToRegex(string pattern) - { - if (!pattern.Contains("*") && !pattern.Contains("?")) - { - pattern = "^" + pattern + ".*$"; - } - else - { - pattern = "^" + Regex.Escape(pattern).Replace(@"\*", ".*").Replace(@"\?", ".") + "$"; - } - - return RegexUtils.GetCachedRegex(pattern, RegexOptions.IgnoreCase); - } - - private static bool IsStandardFolderProviderType(FolderMappingInfo folderMappingInfo) - { - var compatibleTypes = new[] { "StandardFolderProvider", "SecureFolderProvider", "DatabaseFolderProvider" }; - return compatibleTypes.Contains(folderMappingInfo.FolderProviderType); - } - - private int AddFolderInternal(IFolderInfo folder) - { - // Check this is not a duplicate - var tmpfolder = this.GetFolder(folder.PortalID, folder.FolderPath); - - if (tmpfolder != null && folder.FolderID == Null.NullInteger) - { - folder.FolderID = tmpfolder.FolderID; - } - - if (folder.FolderID == Null.NullInteger) - { - var isVersioned = folder.IsVersioned; - var workflowId = folder.WorkflowID; - - // Inherit some configuration from its Parent Folder - var parentFolder = this.GetParentFolder(folder.PortalID, folder.FolderPath); - var parentId = Null.NullInteger; - if (parentFolder != null) - { - isVersioned = parentFolder.IsVersioned; - workflowId = parentFolder.WorkflowID; - parentId = parentFolder.FolderID; - } - - folder.FolderPath = PathUtils.Instance.FormatFolderPath(folder.FolderPath); - folder.FolderID = DataProvider.Instance().AddFolder( - folder.PortalID, - folder.UniqueId, - folder.VersionGuid, - folder.FolderPath, - folder.MappedPath, - folder.StorageLocation, - folder.IsProtected, - folder.IsCached, - folder.LastUpdated, - this.GetCurrentUserId(), - folder.FolderMappingID, - isVersioned, - workflowId, - parentId); - - // Refetch folder for logging - folder = this.GetFolder(folder.PortalID, folder.FolderPath); - - this.AddLogEntry(folder, EventLogController.EventLogType.FOLDER_CREATED); - - if (parentFolder != null) - { - this.UpdateFolderInternal(parentFolder, false); - } - else - { - this.UpdateParentFolder(folder.PortalID, folder.FolderPath); - } - } - else - { - var parentFolder = this.GetParentFolder(folder.PortalID, folder.FolderPath); - if (parentFolder != null) - { - // Ensure that Parent Id is repaired - folder.ParentID = parentFolder.FolderID; - } - - this.UpdateFolderInternal(folder, false); - } - - // Invalidate Cache - this.ClearFolderCache(folder.PortalID); - - return folder.FolderID; - } - - private bool GetOnlyUnmap(IFolderInfo folder) - { - if (folder == null || folder.ParentID == Null.NullInteger) - { - return true; - } - - return FolderProvider.Instance(FolderMappingController.Instance.GetFolderMapping(folder.FolderMappingID).FolderProviderType).SupportsMappedPaths && - this.GetFolder(folder.ParentID).FolderMappingID != folder.FolderMappingID; - } - - private void UnmapFolderInternal(IFolderInfo folder, bool isCascadeDeleting) - { - Requires.NotNull("folder", folder); - - if (DirectoryWrapper.Instance.Exists(folder.PhysicalPath)) - { - DirectoryWrapper.Instance.Delete(folder.PhysicalPath, true); - } - - this.DeleteFolder(folder.PortalID, folder.FolderPath); - - // Notify folder deleted event - this.OnFolderDeleted(folder, this.GetCurrentUserId(), isCascadeDeleting); - } - - private void DeleteFolderInternal(IFolderInfo folder, bool isCascadeDeleting) - { - Requires.NotNull("folder", folder); - - var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); - - try - { - FolderProvider.Instance(folderMapping.FolderProviderType).DeleteFolder(folder); - } - catch (Exception ex) - { - Logger.Error(ex); - - throw new FolderProviderException( - Localization.GetExceptionMessage( - "DeleteFolderUnderlyingSystemError", - "The underlying system threw an exception. The folder has not been deleted."), - ex); - } - - if (DirectoryWrapper.Instance.Exists(folder.PhysicalPath)) - { - DirectoryWrapper.Instance.Delete(folder.PhysicalPath, true); - } - - this.DeleteFolder(folder.PortalID, folder.FolderPath); - - // Notify folder deleted event - this.OnFolderDeleted(folder, this.GetCurrentUserId(), isCascadeDeleting); - } - - private IFolderInfo GetParentFolder(int portalId, string folderPath) - { - if (!string.IsNullOrEmpty(folderPath)) - { - var parentFolderPath = folderPath.Substring(0, folderPath.Substring(0, folderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); - return this.GetFolder(portalId, parentFolderPath); - } - - return null; - } - - private IEnumerable SearchFiles(IFolderInfo folder, Regex regex, bool recursive) - { - var fileCollection = - CBO.Instance.FillCollection(DataProvider.Instance().GetFiles(folder.FolderID, false, false)); - - var files = (from f in fileCollection where regex.IsMatch(f.FileName) select f).Cast().ToList(); - - if (recursive) - { - foreach (var subFolder in this.GetFolders(folder)) - { - if (FolderPermissionController.Instance.CanViewFolder(subFolder)) - { - files.AddRange(this.SearchFiles(subFolder, regex, true)); - } - } - } - - return files; - } - - private IFolderInfo UpdateFolderInternal(IFolderInfo folder, bool clearCache) - { - Requires.NotNull("folder", folder); - - DataProvider.Instance().UpdateFolder( - folder.PortalID, - folder.VersionGuid, - folder.FolderID, - PathUtils.Instance.FormatFolderPath(folder.FolderPath), - folder.StorageLocation, - folder.MappedPath, - folder.IsProtected, - folder.IsCached, - folder.LastUpdated, - this.GetCurrentUserId(), - folder.FolderMappingID, - folder.IsVersioned, - folder.WorkflowID, - folder.ParentID); - - if (clearCache) - { - this.ClearFolderCache(folder.PortalID); - } - - return folder; - } - - private int FindFolderMappingId(MergedTreeItem item, int portalId) - { - if (item.ExistsInFolderMapping) - { - return item.FolderMappingID; - } - - if (item.FolderPath.IndexOf('/') != item.FolderPath.LastIndexOf('/')) - { - var parentPath = item.FolderPath.Substring(0, item.FolderPath.TrimEnd('/').LastIndexOf('/') + 1); - var folder = this.GetFolder(portalId, parentPath); - if (folder != null) - { - return folder.FolderMappingID; - } - } - - return FolderMappingController.Instance.GetDefaultFolderMapping(portalId).FolderMappingID; - } - - private bool DeleteFolderRecursive(IFolderInfo folder, ICollection notDeletedSubfolders, bool isRecursiveDeletionFolder, bool unmap) - { - Requires.NotNull("folder", folder); - - if (UserSecurityController.Instance.HasFolderPermission(folder, "DELETE")) - { - var subfolders = this.GetFolders(folder); - - var allSubFoldersHasBeenDeleted = true; - - foreach (var subfolder in subfolders) - { - if (!this.DeleteFolderRecursive(subfolder, notDeletedSubfolders, false, unmap || this.GetOnlyUnmap(subfolder))) - { - allSubFoldersHasBeenDeleted = false; - } - } - - var files = this.GetFiles(folder, false, true); - foreach (var file in files) - { - if (unmap) - { - FileDeletionController.Instance.UnlinkFile(file); - } - else - { - FileDeletionController.Instance.DeleteFile(file); - } - - this.OnFileDeleted(file, this.GetCurrentUserId(), true); - } - - if (allSubFoldersHasBeenDeleted) - { - if (unmap) - { - this.UnmapFolderInternal(folder, !isRecursiveDeletionFolder); - } - else - { - this.DeleteFolderInternal(folder, !isRecursiveDeletionFolder); - } - - return true; - } - } - - notDeletedSubfolders.Add(folder); - return false; - } - - private string GetDefaultMappedPath(FolderMappingInfo folderMapping) - { - var defaultMappedPath = folderMapping.FolderMappingSettings[DefaultMappedPathSetting]; - if (defaultMappedPath == null) - { - return string.Empty; - } - - return defaultMappedPath.ToString(); - } - - private IEnumerable GetFolders(IFolderInfo parentFolder, bool allSubFolders) - { - Requires.NotNull("parentFolder", parentFolder); - - if (allSubFolders) - { - var subFolders = - this.GetFolders(parentFolder.PortalID) - .Where( - f => - f.FolderPath.StartsWith( - parentFolder.FolderPath, - StringComparison.InvariantCultureIgnoreCase)); - - return subFolders.Where(f => f.FolderID != parentFolder.FolderID); - } - - return this.GetFolders(parentFolder.PortalID).Where(f => f.ParentID == parentFolder.FolderID); - } - - private void OnFolderMoved(IFolderInfo folderInfo, int userId, string oldFolderPath) - { - EventManager.Instance.OnFolderMoved(new FolderMovedEventArgs - { - FolderInfo = folderInfo, - UserId = userId, - OldFolderPath = oldFolderPath, - }); - } - - private void OnFolderRenamed(IFolderInfo folderInfo, int userId, string oldFolderName) - { - EventManager.Instance.OnFolderRenamed(new FolderRenamedEventArgs - { - FolderInfo = folderInfo, - UserId = userId, - OldFolderName = oldFolderName, - }); - } - - private void OnFolderDeleted(IFolderInfo folderInfo, int userId, bool isCascadeDeleting) - { - EventManager.Instance.OnFolderDeleted(new FolderDeletedEventArgs - { - FolderInfo = folderInfo, - UserId = userId, - IsCascadeDeletng = isCascadeDeleting, - }); - } - - private void OnFolderAdded(IFolderInfo folderInfo, int userId) - { - EventManager.Instance.OnFolderAdded(new FolderChangedEventArgs - { - FolderInfo = folderInfo, - UserId = userId, - }); - } - - private void OnFileDeleted(IFileInfo fileInfo, int userId, bool isCascadeDeleting) - { - EventManager.Instance.OnFileDeleted(new FileDeletedEventArgs - { - FileInfo = fileInfo, - UserId = userId, - IsCascadeDeleting = isCascadeDeleting, - }); - } - - private FolderPermissionCollection GetFolderPermissionsFromSyncData(int portalId, string relativePath) - { - var threadId = Thread.CurrentThread.ManagedThreadId; - FolderPermissionCollection permissions = null; - if (SyncFoldersData.ContainsKey(threadId)) - { - if (SyncFoldersData[threadId].FolderPath == relativePath && SyncFoldersData[threadId].PortalId == portalId) - { - return SyncFoldersData[threadId].Permissions; - } - - permissions = FolderPermissionController.GetFolderPermissionsCollectionByFolder(portalId, relativePath); - SyncFoldersData[threadId] = new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }; - return permissions; - } - - permissions = FolderPermissionController.GetFolderPermissionsCollectionByFolder(portalId, relativePath); - SyncFoldersData.Add(threadId, new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }); - - return permissions; - } - - private void InitialiseSyncFoldersData(int portalId, string relativePath) - { - var threadId = Thread.CurrentThread.ManagedThreadId; - var permissions = FolderPermissionController.GetFolderPermissionsCollectionByFolder(portalId, relativePath); - if (SyncFoldersData.ContainsKey(threadId)) - { - if (SyncFoldersData[threadId].FolderPath == relativePath && SyncFoldersData[threadId].PortalId == portalId) - { - SyncFoldersData[threadId].Permissions = permissions; - } - else - { - SyncFoldersData[threadId] = new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }; - } - } - else - { - SyncFoldersData.Add(threadId, new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }); - } - } - - private void RemoveSyncFoldersData(string relativePath) - { - var threadId = Thread.CurrentThread.ManagedThreadId; - if (SyncFoldersData.ContainsKey(threadId)) - { - SyncFoldersData.Remove(threadId); - } - } - - /// - /// This class and its members are reserved for internal use and are not intended to be used in your code. - /// - internal class MergedTreeItem - { - /// - /// Gets or sets a value indicating whether the item exists in the file system. - /// - public bool ExistsInFileSystem { get; set; } - - /// - /// Gets or sets a value indicating whether the item exists in the database. - /// - public bool ExistsInDatabase { get; set; } - - /// - /// Gets or sets a value indicating whether the item exists in the folder mappings. - /// - public bool ExistsInFolderMapping { get; set; } - - /// - /// Gets or sets the folder id. - /// - public int FolderID { get; set; } - - /// - /// Gets or sets the folder path. - /// - public int FolderMappingID { get; set; } - - /// - /// Gets or sets the folder path. - /// - public string FolderPath { get; set; } - - /// - /// Gets or sets the mapped path. - /// - public string MappedPath { get; set; } - } - - /// - /// This class and its members are reserved for internal use and are not intended to be used in your code. - /// - internal class IgnoreCaseStringComparer : IComparer - { - /// - public int Compare(string x, string y) - { - return string.Compare(x.ToLowerInvariant(), y.ToLowerInvariant(), StringComparison.Ordinal); - } - } - - /// - /// This class and its members are reserved for internal use and are not intended to be used in your code. - /// - internal class MoveFoldersInfo - { - /// - /// Initializes a new instance of the class. - /// - /// The source folder. - /// The destination folder. - public MoveFoldersInfo(string source, string target) - { - this.Source = source; - this.Target = target; - } - - /// - /// Gets the Source folder. - - /// - public string Source { get; private set; } - - /// - /// Gets the target folder. - /// - public string Target { get; private set; } - } - } -} +namespace DotNetNuke.Services.FileSystem +{ + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System.ComponentModel; + using System.Globalization; + using System.IO; + using System.Linq; + using System.Net.NetworkInformation; + using System.Reflection; + using System.Text.RegularExpressions; + using System.Threading; + using System.Web; + + using DotNetNuke.Common; + using DotNetNuke.Common.Utilities; + using DotNetNuke.ComponentModel; + using DotNetNuke.Data; + using DotNetNuke.Entities; + using DotNetNuke.Entities.Portals; + using DotNetNuke.Entities.Users; + using DotNetNuke.Instrumentation; + using DotNetNuke.Security.Permissions; + using DotNetNuke.Services.FileSystem.EventArgs; + using DotNetNuke.Services.FileSystem.Internal; + using DotNetNuke.Services.Log.EventLog; + + using Localization = DotNetNuke.Services.Localization.Localization; + + /// Exposes methods to manage folders. + public class FolderManager : ComponentBase, IFolderManager + { + private const string DefaultUsersFoldersPath = "Users"; + private const string DefaultMappedPathSetting = "DefaultMappedPath"; + private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(FolderManager)); + private static readonly Dictionary SyncFoldersData = new Dictionary(); + private static readonly object ThreadLocker = new object(); + + /// Gets the localization key for MyFolderName. + public virtual string MyFolderName + { + get + { + return Localization.GetString("MyFolderName"); + } + } + + /// + /// Creates a new folder using the provided folder path. + /// + /// The folder mapping to use. + /// The path of the new folder. + /// Thrown when folderPath or folderMapping are null. + /// Thrown when the underlying system throw an exception. + /// The added folder. + public virtual IFolderInfo AddFolder(FolderMappingInfo folderMapping, string folderPath) + { + return this.AddFolder(folderMapping, folderPath, folderPath); + } + + /// + /// Creates a new folder using the provided folder path and mapping. + /// + /// The folder mapping to use. + /// The path of the new folder. + /// The mapped path of the new folder. + /// Thrown when folderPath or folderMapping are null. + /// Thrown when the underlying system throw an exception. + /// The added folder. + public virtual IFolderInfo AddFolder(FolderMappingInfo folderMapping, string folderPath, string mappedPath) + { + Requires.PropertyNotNull("folderPath", folderPath); + Requires.NotNull("folderMapping", folderMapping); + + folderPath = folderPath.Trim(); + + if (this.FolderExists(folderMapping.PortalID, folderPath)) + { + throw new FolderAlreadyExistsException(Localization.GetExceptionMessage("AddFolderAlreadyExists", "The provided folder path already exists. The folder has not been added.")); + } + + if (!this.IsValidFolderPath(folderPath)) + { + throw new InvalidFolderPathException(Localization.GetExceptionMessage("AddFolderNotAllowed", "The folder path '{0}' is not allowed. The folder has not been added.", folderPath)); + } + + var parentFolder = this.GetParentFolder(folderMapping.PortalID, folderPath); + if (parentFolder != null) + { + var parentFolderMapping = FolderMappingController.Instance.GetFolderMapping( + parentFolder.PortalID, + parentFolder.FolderMappingID); + if (FolderProvider.Instance(parentFolderMapping.FolderProviderType).SupportsMappedPaths) + { + folderMapping = parentFolderMapping; + mappedPath = string.IsNullOrEmpty(parentFolder.FolderPath) ? PathUtils.Instance.FormatFolderPath(parentFolder.MappedPath + folderPath) + : PathUtils.Instance.FormatFolderPath(parentFolder.MappedPath + folderPath.Replace(parentFolder.FolderPath, string.Empty)); + } + else if (!FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMappedPaths) + { + mappedPath = folderPath; + } + else + { + // Parent foldermapping DOESN'T support mapped path + // abd current foldermapping YES support mapped path + mappedPath = PathUtils.Instance.FormatFolderPath(this.GetDefaultMappedPath(folderMapping) + mappedPath); + } + } + else if (FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMappedPaths) + { + mappedPath = PathUtils.Instance.FormatFolderPath(this.GetDefaultMappedPath(folderMapping) + mappedPath); + } + + try + { + FolderProvider.Instance(folderMapping.FolderProviderType).AddFolder(folderPath, folderMapping, mappedPath); + } + catch (Exception ex) + { + Logger.Error(ex); + + throw new FolderProviderException(Localization.GetExceptionMessage("AddFolderUnderlyingSystemError", "The underlying system threw an exception. The folder has not been added."), ex); + } + + this.CreateFolderInFileSystem(PathUtils.Instance.GetPhysicalPath(folderMapping.PortalID, folderPath)); + var folderId = this.CreateFolderInDatabase(folderMapping.PortalID, folderPath, folderMapping.FolderMappingID, mappedPath); + + var folder = this.GetFolder(folderId); + + // Notify add folder event + this.OnFolderAdded(folder, this.GetCurrentUserId()); + + return folder; + } + + /// + /// Creates a new folder in the given portal using the provided folder path. + /// The same mapping than the parent folder will be used to create this folder. So this method have to be used only to create subfolders. + /// + /// The portal identifier. + /// The path of the new folder. + /// Thrown when folderPath is null or empty. + /// The added folder. + public virtual IFolderInfo AddFolder(int portalId, string folderPath) + { + Requires.NotNullOrEmpty("folderPath", folderPath); + + folderPath = PathUtils.Instance.FormatFolderPath(folderPath); + + var parentFolderPath = folderPath.Substring(0, folderPath.Substring(0, folderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); + var parentFolder = this.GetFolder(portalId, parentFolderPath) ?? this.AddFolder(portalId, parentFolderPath); + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, parentFolder.FolderMappingID); + + return this.AddFolder(folderMapping, folderPath); + } + + /// + /// Deletes the specified folder. + /// + /// The folder to delete. + /// Thrown when folder is null. + /// Thrown when the underlying system throw an exception. + public virtual void DeleteFolder(IFolderInfo folder) + { + this.DeleteFolderInternal(folder, false); + } + + /// + /// Removes the database reference to a folder on disk. + /// + /// The folder to unlink. + public virtual void UnlinkFolder(IFolderInfo folder) + { + this.DeleteFolderRecursive(folder, new Collection(), true, true); + } + + /// + /// Deletes the specified folder. + /// + /// The folder identifier. + public virtual void DeleteFolder(int folderId) + { + var folder = this.GetFolder(folderId); + + this.DeleteFolder(folder); + } + + /// + /// Deletes the specified folder and all its content. + /// + /// The folder to delete. + /// A collection with all not deleted subfolders after processiong the action. + public void DeleteFolder(IFolderInfo folder, ICollection notDeletedSubfolders) + { + this.DeleteFolderRecursive(folder, notDeletedSubfolders, true, this.GetOnlyUnmap(folder)); + } + + /// + /// Checks the existence of the specified folder in the specified portal. + /// + /// The portal where to check the existence of the folder. + /// The path of folder to check the existence of. + /// A bool value indicating whether the folder exists or not in the specified portal. + public virtual bool FolderExists(int portalId, string folderPath) + { + Requires.PropertyNotNull("folderPath", folderPath); + + return this.GetFolder(portalId, folderPath) != null; + } + + /// + /// Gets the files contained in the specified folder. + /// + /// The folder from which to retrieve the files. + /// The list of files contained in the specified folder. + public virtual IEnumerable GetFiles(IFolderInfo folder) + { + return this.GetFiles(folder, false); + } + + /// + /// Gets the files contained in the specified folder. + /// + /// The folder from which to retrieve the files. + /// Whether or not to include all the subfolders. + /// The list of files contained in the specified folder. + public virtual IEnumerable GetFiles(IFolderInfo folder, bool recursive) + { + return this.GetFiles(folder, recursive, false); + } + + /// + /// Gets the files contained in the specified folder. + /// + /// The folder from which to retrieve the files. + /// Whether or not to include all the subfolders. + /// Indicates if the file is retrieved from All files or from Published files. + /// The list of files contained in the specified folder. + public virtual IEnumerable GetFiles(IFolderInfo folder, bool recursive, bool retrieveUnpublishedFiles) + { + Requires.NotNull("folder", folder); + + return CBO.Instance.FillCollection(DataProvider.Instance().GetFiles(folder.FolderID, retrieveUnpublishedFiles, recursive)); + } + + /// + /// Gets the list of Standard folders the specified user has the provided permissions. + /// + /// The user info. + /// The permissions the folders have to met. + /// The list of Standard folders the specified user has the provided permissions. + /// This method is used to support legacy behaviours and situations where we know the file/folder is in the file system. + public virtual IEnumerable GetFileSystemFolders(UserInfo user, string permissions) + { + var userFolders = new List(); + + var portalId = user.PortalID; + + var userFolder = this.GetUserFolder(user); + + var defaultFolderMaping = FolderMappingController.Instance.GetDefaultFolderMapping(portalId); + + var folders = this.GetFolders(portalId, permissions, user.UserID).Where(f => f.FolderPath != null && f.FolderMappingID == defaultFolderMaping.FolderMappingID); + + foreach (var folder in folders) + { + if (folder.FolderPath.StartsWith(DefaultUsersFoldersPath + "/", StringComparison.InvariantCultureIgnoreCase)) + { + if (folder.FolderID == userFolder.FolderID) + { + folder.DisplayPath = this.MyFolderName + "/"; + folder.DisplayName = this.MyFolderName; + } + else if (!folder.FolderPath.StartsWith(userFolder.FolderPath, StringComparison.InvariantCultureIgnoreCase)) + { + // Allow UserFolder children + continue; + } + } + + userFolders.Add(folder); + } + + return userFolders; + } + + /// + /// Gets a folder entity by providing a folder identifier. + /// + /// The identifier of the folder. + /// The folder entity or null if the folder cannot be located. + public virtual IFolderInfo GetFolder(int folderId) + { + // Try and get the folder from the portal cache + IFolderInfo folder = null; + var portalSettings = PortalController.Instance.GetCurrentSettings(); + if (portalSettings != null) + { + var folders = this.GetFolders(portalSettings.PortalId); + folder = folders.SingleOrDefault(f => f.FolderID == folderId) ?? CBO.Instance.FillObject(DataProvider.Instance().GetFolder(folderId)); + } + + return folder ?? CBO.Instance.FillObject(DataProvider.Instance().GetFolder(folderId)); + } + + /// + /// Gets a folder entity by providing a portal identifier and folder path. + /// + /// The portal where the folder exists. + /// The path of the folder. + /// The folder entity or null if the folder cannot be located. + public virtual IFolderInfo GetFolder(int portalId, string folderPath) + { + Requires.PropertyNotNull("folderPath", folderPath); + + folderPath = PathUtils.Instance.FormatFolderPath(folderPath); + + var folders = this.GetFolders(portalId); + return folders.SingleOrDefault(f => f.FolderPath == folderPath) ?? CBO.Instance.FillObject(DataProvider.Instance().GetFolder(portalId, folderPath)); + } + + /// + /// Gets a folder entity by providing its unique id. + /// + /// The unique id of the folder. + /// The folder entity or null if the folder cannot be located. + public virtual IFolderInfo GetFolder(Guid uniqueId) + { + return CBO.Instance.FillObject(DataProvider.Instance().GetFolderByUniqueID(uniqueId)); + } + + /// + /// Gets the list of subfolders for the specified folder. + /// + /// The folder to get the list of subfolders. + /// The list of subfolders for the specified folder. + /// Thrown when parentFolder is null. + public virtual IEnumerable GetFolders(IFolderInfo parentFolder) + { + return this.GetFolders(parentFolder, false); + } + + /// + /// Gets the sorted list of folders of the provided portal. + /// + /// The portal identifier. + /// True = Read from Cache, False = Read from DB. + /// The sorted list of folders of the provided portal. + public virtual IEnumerable GetFolders(int portalId, bool useCache) + { + if (!useCache) + { + this.ClearFolderCache(portalId); + } + + return this.GetFolders(portalId); + } + + /// + /// Gets the sorted list of folders of the provided portal. + /// + /// The portal identifier. + /// The sorted list of folders of the provided portal. + public virtual IEnumerable GetFolders(int portalId) + { + var folders = new List(); + + var cacheKey = string.Format(DataCache.FolderCacheKey, portalId); + CBO.Instance.GetCachedObject>(new CacheItemArgs(cacheKey, DataCache.FolderCacheTimeOut, DataCache.FolderCachePriority, portalId), this.GetFoldersSortedCallBack, false).ForEach(folders.Add); + + return folders; + } + + /// + /// Gets the sorted list of folders that match the provided permissions in the specified portal. + /// + /// The portal identifier. + /// The permissions to match. + /// The user identifier to be used to check permissions. + /// The list of folders that match the provided permissions in the specified portal. + public virtual IEnumerable GetFolders(int portalId, string permissions, int userId) + { + var folders = new List(); + + var cacheKey = string.Format(DataCache.FolderUserCacheKey, portalId, permissions, userId); + var cacheItemArgs = new CacheItemArgs(cacheKey, DataCache.FolderUserCacheTimeOut, DataCache.FolderUserCachePriority, portalId, permissions, userId); + CBO.Instance.GetCachedObject>(cacheItemArgs, this.GetFoldersByPermissionSortedCallBack, false).ForEach(folders.Add); + + return folders; + } + + /// + /// Gets the list of folders the specified user has read permissions. + /// + /// The user info. + /// The list of folders the specified user has read permissions. + public virtual IEnumerable GetFolders(UserInfo user) + { + return this.GetFolders(user, "READ"); + } + + /// + /// Gets the list of folders the specified user has the provided permissions. + /// + /// The user info. + /// The permissions the folders have to met. + /// The list of folders the specified user has the provided permissions. + public virtual IEnumerable GetFolders(UserInfo user, string permissions) + { + var userFolders = new List(); + + var portalId = user.PortalID; + + var userFolder = this.GetUserFolder(user); + + foreach (var folder in this.GetFolders(portalId, permissions, user.UserID).Where(folder => folder.FolderPath != null)) + { + if (folder.FolderPath.StartsWith(DefaultUsersFoldersPath + "/", StringComparison.InvariantCultureIgnoreCase)) + { + if (folder.FolderID == userFolder.FolderID) + { + folder.DisplayPath = Localization.GetString("MyFolderName") + "/"; + folder.DisplayName = Localization.GetString("MyFolderName"); + } + else if (!folder.FolderPath.StartsWith(userFolder.FolderPath, StringComparison.InvariantCultureIgnoreCase)) + { + // Allow UserFolder children + continue; + } + } + + userFolders.Add(folder); + } + + return userFolders; + } + + /// + /// Gets the folder that belongs to a specific user. + /// + /// The user to get the folder for. + /// The information about the the user folder, . + public virtual IFolderInfo GetUserFolder(UserInfo userInfo) + { + // always use _default portal for a super user + int portalId = userInfo.IsSuperUser ? -1 : userInfo.PortalID; + + string userFolderPath = ((PathUtils)PathUtils.Instance).GetUserFolderPathInternal(userInfo); + return this.GetFolder(portalId, userFolderPath) ?? this.AddUserFolder(userInfo); + } + + /// + /// Moves a folder to a new location. + /// + /// The folder to move. + /// Where to move the new folder. + /// The information about the moved folder, . + public virtual IFolderInfo MoveFolder(IFolderInfo folder, IFolderInfo destinationFolder) + { + Requires.NotNull("folder", folder); + Requires.NotNull("destinationFolder", destinationFolder); + + var newFolderPath = PathUtils.Instance.FormatFolderPath(destinationFolder.FolderPath + folder.FolderName + "/"); + + if (folder.FolderPath == destinationFolder.FolderPath) + { + return folder; + } + + if (this.FolderExists(folder.PortalID, newFolderPath)) + { + throw new InvalidOperationException(string.Format( + Localization.GetExceptionMessage( + "CannotMoveFolderAlreadyExists", + "The folder with name '{0}' cannot be moved. A folder with that name already exists under the folder '{1}'.", + folder.FolderName, + destinationFolder.FolderName))); + } + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); + var destinationFolderMapping = FolderMappingController.Instance.GetFolderMapping(destinationFolder.PortalID, destinationFolder.FolderMappingID); + + if (!this.CanMoveBetweenFolderMappings(folderMapping, destinationFolderMapping)) + { + throw new InvalidOperationException(string.Format( + Localization.GetExceptionMessage( + "CannotMoveFolderBetweenFolderType", + "The folder with name '{0}' cannot be moved. Move Folder operation between this two folder types is not allowed", + folder.FolderName))); + } + + if (!this.IsMoveOperationValid(folder, destinationFolder, newFolderPath)) + { + throw new InvalidOperationException(Localization.GetExceptionMessage("MoveFolderCannotComplete", "The operation cannot be completed.")); + } + + var currentFolderPath = folder.FolderPath; + + if ((folder.FolderMappingID == destinationFolder.FolderMappingID && FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMoveFolder) || + (IsStandardFolderProviderType(folderMapping) && IsStandardFolderProviderType(destinationFolderMapping))) + { + this.MoveFolderWithinProvider(folder, destinationFolder); + } + else + { + this.MoveFolderBetweenProviders(folder, newFolderPath); + } + + // log the folder moved event. + var log = new LogInfo(); + log.AddProperty("Old Folder Path", currentFolderPath); + log.AddProperty("New Folder Path", newFolderPath); + log.AddProperty("Home Directory", folder.PortalID == Null.NullInteger ? Globals.HostPath : PortalSettings.Current.HomeDirectory); + log.LogTypeKey = EventLogController.EventLogType.FOLDER_MOVED.ToString(); + LogController.Instance.AddLog(log); + + // Files in cache are obsolete because their physical path is not correct after moving + this.DeleteFilesFromCache(folder.PortalID, newFolderPath); + var movedFolder = this.GetFolder(folder.FolderID); + + // Notify folder moved event + this.OnFolderMoved(folder, this.GetCurrentUserId(), currentFolderPath); + + return movedFolder; + } + + /// + /// Renames the specified folder by setting the new provided folder name. + /// + /// The folder to rename. + /// The new name to apply to the folder. + /// Thrown when newFolderName is null or empty. + /// Thrown when folder is null. + /// Thrown when the underlying system throw an exception. + public virtual void RenameFolder(IFolderInfo folder, string newFolderName) + { + Requires.NotNull("folder", folder); + Requires.NotNullOrEmpty("newFolderName", newFolderName); + + if (folder.FolderName.Equals(newFolderName)) + { + return; + } + + var currentFolderName = folder.FolderName; + + var newFolderPath = folder.FolderPath.Substring(0, folder.FolderPath.LastIndexOf(folder.FolderName, StringComparison.Ordinal)) + PathUtils.Instance.FormatFolderPath(newFolderName); + + if (this.FolderExists(folder.PortalID, newFolderPath)) + { + throw new FolderAlreadyExistsException(Localization.GetExceptionMessage("RenameFolderAlreadyExists", "The destination folder already exists. The folder has not been renamed.")); + } + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); + var provider = FolderProvider.Instance(folderMapping.FolderProviderType); + + this.RenameFolderInFileSystem(folder, newFolderPath); + + // Update Provider + provider.RenameFolder(folder, newFolderName); + + // Update database + this.UpdateChildFolders(folder, newFolderPath); + + // Files in cache are obsolete because their physical path is not correct after rename + this.DeleteFilesFromCache(folder.PortalID, newFolderPath); + + // Notify folder renamed event + this.OnFolderRenamed(folder, this.GetCurrentUserId(), currentFolderName); + } + + /// + /// Search the files contained in the specified folder, for a matching pattern. + /// + /// The folder from which to retrieve the files. + /// The patter to search for. + /// Shoud the search be recursive. + /// The list of files contained in the specified folder. + public virtual IEnumerable SearchFiles(IFolderInfo folder, string pattern, bool recursive) + { + Requires.NotNull("folder", folder); + + if (!FolderPermissionController.Instance.CanViewFolder(folder)) + { + throw new FolderProviderException("No permission to view the folder"); + } + + return this.SearchFiles(folder, WildcardToRegex(pattern), recursive); + } + + /// + /// Synchronizes the entire folder tree for the specified portal. + /// + /// The portal identifier. + /// The number of folder collisions. + public virtual int Synchronize(int portalId) + { + var folderCollisions = this.Synchronize(portalId, string.Empty, true, true); + + DataCache.ClearFolderCache(portalId); + + return folderCollisions; + } + + /// + /// Syncrhonizes the specified folder, its files and its subfolders. + /// + /// The portal identifier. + /// The relative path of the folder. + /// The number of folder collisions. + public virtual int Synchronize(int portalId, string relativePath) + { + return this.Synchronize(portalId, relativePath, true, true); + } + + /// + /// Syncrhonizes the specified folder, its files and, optionally, its subfolders. + /// + /// The portal identifier. + /// The relative path of the folder. + /// Indicates if the synchronization has to be recursive. + /// Indicates if files need to be synchronized. + /// Thrown when there are folder mappings requiring network connection but there is no network available. + /// The number of folder collisions. + public virtual int Synchronize(int portalId, string relativePath, bool isRecursive, bool syncFiles) + { + Requires.PropertyNotNull("relativePath", relativePath); + + if (this.AreThereFolderMappingsRequiringNetworkConnectivity(portalId, relativePath, isRecursive) && !this.IsNetworkAvailable()) + { + throw new NoNetworkAvailableException(Localization.GetExceptionMessage("NoNetworkAvailableError", "Network connectivity is needed but there is no network available.")); + } + + int? scriptTimeOut = null; + + Monitor.Enter(ThreadLocker); + try + { + if (HttpContext.Current != null) + { + scriptTimeOut = this.GetCurrentScriptTimeout(); + + // Synchronization could be a time-consuming process. To not get a time-out, we need to modify the request time-out value + this.SetScriptTimeout(int.MaxValue); + } + + var mergedTree = this.GetMergedTree(portalId, relativePath, isRecursive); + + // Step 1: Add Folders + this.InitialiseSyncFoldersData(portalId, relativePath); + for (var i = 0; i < mergedTree.Count; i++) + { + var item = mergedTree.Values[i]; + this.ProcessMergedTreeItemInAddMode(item, portalId); + } + + this.RemoveSyncFoldersData(relativePath); + + // Step 2: Delete Files and Folders + for (var i = mergedTree.Count - 1; i >= 0; i--) + { + var item = mergedTree.Values[i]; + + if (syncFiles) + { + this.SynchronizeFiles(item, portalId); + } + + this.ProcessMergedTreeItemInDeleteMode(item, portalId); + } + } + finally + { + Monitor.Exit(ThreadLocker); + + // Restore original time-out + if (HttpContext.Current != null && scriptTimeOut != null) + { + this.SetScriptTimeout(scriptTimeOut.Value); + } + } + + return 0; + } + + /// + /// Updates metadata of the specified folder. + /// + /// The folder to update. + /// Thrown when folder is null. + /// The information about the updated folder, . + public virtual IFolderInfo UpdateFolder(IFolderInfo folder) + { + var updatedFolder = this.UpdateFolderInternal(folder, true); + + this.AddLogEntry(updatedFolder, EventLogController.EventLogType.FOLDER_UPDATED); + + this.SaveFolderPermissions(updatedFolder); + + return updatedFolder; + } + + /// + /// Adds read permissions for all users to the specified folder. + /// + /// The folder to add the permission to. + /// Used as base class for FolderPermissionInfo when there is no read permission already defined. + public virtual void AddAllUserReadPermission(IFolderInfo folder, PermissionInfo permission) + { + var roleId = int.Parse(Globals.glbRoleAllUsers); + + var folderPermission = + (from FolderPermissionInfo p in folder.FolderPermissions + where p.PermissionKey == "READ" && p.FolderID == folder.FolderID && p.RoleID == roleId && p.UserID == Null.NullInteger + select p).SingleOrDefault(); + + if (folderPermission != null) + { + folderPermission.AllowAccess = true; + } + else + { + folderPermission = new FolderPermissionInfo(permission) + { + FolderID = folder.FolderID, + UserID = Null.NullInteger, + RoleID = roleId, + AllowAccess = true, + }; + + folder.FolderPermissions.Add(folderPermission); + } + } + + /// + /// Sets folder permissions to the given folder by copying parent folder permissions. + /// + /// The folder to copy permissions to. + public virtual void CopyParentFolderPermissions(IFolderInfo folder) + { + Requires.NotNull("folder", folder); + + if (string.IsNullOrEmpty(folder.FolderPath)) + { + return; + } + + var parentFolderPath = folder.FolderPath.Substring(0, folder.FolderPath.Substring(0, folder.FolderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); + + foreach (FolderPermissionInfo objPermission in + this.GetFolderPermissionsFromSyncData(folder.PortalID, parentFolderPath)) + { + var folderPermission = new FolderPermissionInfo(objPermission) + { + FolderID = folder.FolderID, + RoleID = objPermission.RoleID, + UserID = objPermission.UserID, + AllowAccess = objPermission.AllowAccess, + }; + folder.FolderPermissions.Add(folderPermission, true); + } + + FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); + } + + /// + /// Sets specific folder permissions for the given role to the given folder. + /// + /// The folder to set permission to. + /// The id of the permission to assign. + /// The role to assign the permission to. + public virtual void SetFolderPermission(IFolderInfo folder, int permissionId, int roleId) + { + this.SetFolderPermission(folder, permissionId, roleId, Null.NullInteger); + } + + /// + /// Sets specific folder permissions for the given role/user to the given folder. + /// + /// The folder to set permission to. + /// The id of the permission to assign. + /// The role to assign the permission to. + /// The user to assign the permission to. + public virtual void SetFolderPermission(IFolderInfo folder, int permissionId, int roleId, int userId) + { + if (folder.FolderPermissions.Cast() + .Any(fpi => fpi.FolderID == folder.FolderID && fpi.PermissionID == permissionId && fpi.RoleID == roleId && fpi.UserID == userId && fpi.AllowAccess)) + { + return; + } + + var objFolderPermissionInfo = new FolderPermissionInfo + { + FolderID = folder.FolderID, + PermissionID = permissionId, + RoleID = roleId, + UserID = userId, + AllowAccess = true, + }; + + folder.FolderPermissions.Add(objFolderPermissionInfo, true); + FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); + } + + /// + /// Sets folder permissions for administrator role to the given folder. + /// + /// The folder to set permission to. + /// The administrator role id to assign the permission to. + public virtual void SetFolderPermissions(IFolderInfo folder, int administratorRoleId) + { + Requires.NotNull("folder", folder); + + foreach (PermissionInfo objPermission in PermissionController.GetPermissionsByFolder()) + { + var folderPermission = new FolderPermissionInfo(objPermission) + { + FolderID = folder.FolderID, + RoleID = administratorRoleId, + }; + + folder.FolderPermissions.Add(folderPermission, true); + } + + FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); + } + + /// + /// Moves the specified folder and its contents to a new location. + /// + /// The folder to move. + /// The new folder path. + /// The moved folder. + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("Deprecated in DNN 7.1. It has been replaced by FolderManager.Instance.MoveFolder(IFolderInfo folder, IFolderInfo destinationFolder) . Scheduled removal in v10.0.0.")] + public virtual IFolderInfo MoveFolder(IFolderInfo folder, string newFolderPath) + { + Requires.NotNull("folder", folder); + Requires.NotNullOrEmpty("newFolderPath", newFolderPath); + + var nameCharIndex = newFolderPath.Substring(0, newFolderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1; + var parentFolder = this.GetFolder(folder.PortalID, newFolderPath.Substring(0, nameCharIndex)); + if (parentFolder.FolderID == folder.ParentID) + { + var newFolderName = newFolderPath.Substring(nameCharIndex, newFolderPath.Length - nameCharIndex - 1); + this.RenameFolder(folder, newFolderName); + return folder; + } + + return this.MoveFolder(folder, parentFolder); + } + + /// + /// Checks if a given folder path is valid. + /// + /// The folder path. + /// A value indicating whether the folder path is valid. + internal virtual bool IsValidFolderPath(string folderPath) + { + var illegalInFolderPath = new Regex(string.Format("[{0}]", Regex.Escape(new string(Path.GetInvalidPathChars()))), RegexOptions.Compiled); + return !illegalInFolderPath.IsMatch(folderPath) && !folderPath.TrimEnd('/', '\\').EndsWith("."); + } + + /// + /// Adds a log entry. + /// + /// The folder to log about. + /// The type of the log entry. + internal virtual void AddLogEntry(IFolderInfo folder, EventLogController.EventLogType eventLogType) + { + EventLogController.Instance.AddLog(folder, PortalController.Instance.GetCurrentSettings(), this.GetCurrentUserId(), string.Empty, eventLogType); + } + + /// + /// Adds a log entry. + /// + /// The name of the property. + /// The value of the property. + /// The type of log entry. + internal virtual void AddLogEntry(string propertyName, string propertyValue, EventLogController.EventLogType eventLogType) + { + EventLogController.Instance.AddLog(propertyName, propertyValue, PortalController.Instance.GetCurrentSettings(), this.GetCurrentUserId(), eventLogType); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The new folder path. + internal void DeleteFilesFromCache(int portalId, string newFolderPath) + { + var folders = this.GetFolders(portalId).Where(f => f.FolderPath.StartsWith(newFolderPath)); + foreach (var folderInfo in folders) + { + var fileIds = this.GetFiles(folderInfo).Select(f => f.FileId); + foreach (var fileId in fileIds) + { + DataCache.RemoveCache("GetFileById" + fileId); + } + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The added folder information, . + /// the user to add a folder for. + internal virtual IFolderInfo AddUserFolder(UserInfo user) + { + // user _default portal for all super users + var portalId = user.IsSuperUser ? Null.NullInteger : user.PortalID; + + var folderMapping = FolderMappingsConfigController.Instance.GetFolderMapping(portalId, DefaultUsersFoldersPath) ?? FolderMappingController.Instance.GetDefaultFolderMapping(portalId); + + if (!this.FolderExists(portalId, DefaultUsersFoldersPath)) + { + this.AddFolder(folderMapping, DefaultUsersFoldersPath); + } + + // GetUserFolderPathElement is deprecated without a replacement, it should have been internal only and will be removed in DNN v10, hence the warning disable here +#pragma warning disable 612,618 + var rootFolder = PathUtils.Instance.GetUserFolderPathElement(user.UserID, PathUtils.UserFolderElement.Root); +#pragma warning restore 612,618 + + var folderPath = PathUtils.Instance.FormatFolderPath(string.Format(DefaultUsersFoldersPath + "/{0}", rootFolder)); + + if (!this.FolderExists(portalId, folderPath)) + { + this.AddFolder(folderMapping, folderPath); + } + + // GetUserFolderPathElement is deprecated without a replacement, it should have been internal only and will be removed in DNN v10, hence the warning disable here +#pragma warning disable 612,618 + folderPath = PathUtils.Instance.FormatFolderPath(string.Concat(folderPath, PathUtils.Instance.GetUserFolderPathElement(user.UserID, PathUtils.UserFolderElement.SubFolder))); +#pragma warning restore 612,618 + + if (!this.FolderExists(portalId, folderPath)) + { + this.AddFolder(folderMapping, folderPath); + } + + folderPath = PathUtils.Instance.FormatFolderPath(string.Concat(folderPath, user.UserID.ToString(CultureInfo.InvariantCulture))); + + if (!this.FolderExists(portalId, folderPath)) + { + this.AddFolder(folderMapping, folderPath); + + var folder = this.GetFolder(portalId, folderPath); + + foreach (PermissionInfo permission in PermissionController.GetPermissionsByFolder()) + { + if (permission.PermissionKey.Equals("READ", StringComparison.InvariantCultureIgnoreCase) || permission.PermissionKey.Equals("WRITE", StringComparison.InvariantCultureIgnoreCase) || permission.PermissionKey.Equals("BROWSE", StringComparison.InvariantCultureIgnoreCase)) + { + var folderPermission = new FolderPermissionInfo(permission) + { + FolderID = folder.FolderID, + UserID = user.UserID, + RoleID = int.Parse(Globals.glbRoleNothing), + AllowAccess = true, + }; + + folder.FolderPermissions.Add(folderPermission); + + if (permission.PermissionKey.Equals("READ", StringComparison.InvariantCultureIgnoreCase)) + { + this.AddAllUserReadPermission(folder, permission); + } + } + } + + FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); + } + + return this.GetFolder(portalId, folderPath); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// A value indicating whether there are any folder mappings that required network connectivity. + /// The site (Portal) ID. + /// The relative path. + /// A value indicating whether the check should be recursive or not. + internal virtual bool AreThereFolderMappingsRequiringNetworkConnectivity(int portalId, string relativePath, bool isRecursive) + { + var folder = this.GetFolder(portalId, relativePath); + + if (folder != null) + { + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); + var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); + + if (folderProvider.RequiresNetworkConnectivity) + { + return true; + } + } + + if (isRecursive) + { + var folderMappingsRequiringNetworkConnectivity = from fm in FolderMappingController.Instance.GetFolderMappings(portalId) + where + fm.IsEditable && + FolderProvider.Instance(fm.FolderProviderType).RequiresNetworkConnectivity + select fm; + + return folderMappingsRequiringNetworkConnectivity.Any(); + } + + return false; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + internal void ClearFolderProviderCachedLists(int portalId) + { + foreach (var folderMapping in FolderMappingController.Instance.GetFolderMappings(portalId)) + { + var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); + + if (folderMapping.MappingName != "Standard" && folderMapping.MappingName != "Secure" && folderMapping.MappingName != "Database") + { + var type = folderProvider.GetType(); + MethodInfo method = type.GetMethod("ClearCache"); + if (method != null) + { + method.Invoke(folderProvider, new object[] { folderMapping.FolderMappingID }); + } + } + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + internal virtual void ClearFolderCache(int portalId) + { + DataCache.ClearFolderCache(portalId); + } + + /// + /// Creates a folder in the database. + /// + /// The site (portal) ID. + /// The folder path to create. + /// The folder mapping id, . + /// The created folder ID. + internal virtual int CreateFolderInDatabase(int portalId, string folderPath, int folderMappingId) + { + return this.CreateFolderInDatabase(portalId, folderPath, folderMappingId, folderPath); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The folder path to create. + /// The id for the folder mapping. + /// The mapped path. + /// The created folder ID. + internal virtual int CreateFolderInDatabase(int portalId, string folderPath, int folderMappingId, string mappedPath) + { + var isProtected = PathUtils.Instance.IsDefaultProtectedPath(folderPath); + var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, folderMappingId); + var storageLocation = (int)FolderController.StorageLocationTypes.DatabaseSecure; + if (!folderMapping.IsEditable) + { + switch (folderMapping.MappingName) + { + case "Standard": + storageLocation = (int)FolderController.StorageLocationTypes.InsecureFileSystem; + break; + case "Secure": + storageLocation = (int)FolderController.StorageLocationTypes.SecureFileSystem; + break; + default: + storageLocation = (int)FolderController.StorageLocationTypes.DatabaseSecure; + break; + } + } + + var folder = new FolderInfo(true) + { + PortalID = portalId, + FolderPath = folderPath, + MappedPath = mappedPath, + StorageLocation = storageLocation, + IsProtected = isProtected, + IsCached = false, + FolderMappingID = folderMappingId, + LastUpdated = Null.NullDate, + }; + + folder.FolderID = this.AddFolderInternal(folder); + + if (portalId != Null.NullInteger) + { + // Set Folder Permissions to inherit from parent + this.CopyParentFolderPermissions(folder); + } + + return folder.FolderID; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The physical path to create the folder in. + internal virtual void CreateFolderInFileSystem(string physicalPath) + { + var di = new DirectoryInfo(physicalPath); + + if (!di.Exists) + { + di.Create(); + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The folder path. + internal virtual void DeleteFolder(int portalId, string folderPath) + { + DataProvider.Instance().DeleteFolder(portalId, PathUtils.Instance.FormatFolderPath(folderPath)); + this.AddLogEntry("FolderPath", folderPath, EventLogController.EventLogType.FOLDER_DELETED); + this.UpdateParentFolder(portalId, folderPath); + DataCache.ClearFolderCache(portalId); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder mapping affected. + /// A list of folders to delete. + internal virtual void DeleteFoldersFromExternalStorageLocations(Dictionary folderMappings, IEnumerable foldersToDelete) + { + foreach (var folderToDelete in foldersToDelete) + { + // Delete source folder from its storage location + var folderMapping = this.GetFolderMapping(folderMappings, folderToDelete.FolderMappingID); + + try + { + var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); + + // IMPORTANT: We cannot delete the folder from its storage location when it contains other subfolders + if (!folderProvider.GetSubFolders(folderToDelete.MappedPath, folderMapping).Any()) + { + folderProvider.DeleteFolder(folderToDelete); + } + } + catch (Exception ex) + { + // The folders that cannot be deleted from its storage location will be handled during the next sync + Logger.Error(ex); + } + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// A value representing the current script timeout. + internal virtual int GetCurrentScriptTimeout() + { + return HttpContext.Current.Server.ScriptTimeout; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The id of the current user. + internal virtual int GetCurrentUserId() + { + return UserController.Instance.GetCurrentUserInfo().UserID; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The relative path. + /// A value indicating whether to return folders recursively. + /// A sorted list of folders. + internal virtual SortedList GetDatabaseFolders(int portalId, string relativePath, bool isRecursive) + { + var databaseFolders = new SortedList(new IgnoreCaseStringComparer()); + + var folder = this.GetFolder(portalId, relativePath); + + if (folder != null) + { + if (!isRecursive) + { + var item = new MergedTreeItem + { + FolderID = folder.FolderID, + FolderMappingID = folder.FolderMappingID, + FolderPath = folder.FolderPath, + ExistsInDatabase = true, + MappedPath = folder.MappedPath, + }; + + databaseFolders.Add(relativePath, item); + } + else + { + databaseFolders = this.GetDatabaseFoldersRecursive(folder); + } + } + + return databaseFolders; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to get. + /// A sorted list of folders. + internal virtual SortedList GetDatabaseFoldersRecursive(IFolderInfo folder) + { + var result = new SortedList(new IgnoreCaseStringComparer()); + var stack = new Stack(); + + stack.Push(folder); + + while (stack.Count > 0) + { + var folderInfo = stack.Pop(); + + var item = new MergedTreeItem + { + FolderID = folderInfo.FolderID, + FolderMappingID = folderInfo.FolderMappingID, + FolderPath = folderInfo.FolderPath, + ExistsInDatabase = true, + MappedPath = folderInfo.MappedPath, + }; + + if (!result.ContainsKey(item.FolderPath)) + { + result.Add(item.FolderPath, item); + } + + foreach (var subfolder in this.GetFolders(folderInfo)) + { + stack.Push(subfolder); + } + } + + return result; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The relative path. + /// A value indicating whether to return the folders recursively. + /// A sorted list of folders. + internal virtual SortedList GetFileSystemFolders(int portalId, string relativePath, bool isRecursive) + { + var fileSystemFolders = new SortedList(new IgnoreCaseStringComparer()); + + var physicalPath = PathUtils.Instance.GetPhysicalPath(portalId, relativePath); + var hideFoldersEnabled = PortalController.GetPortalSettingAsBoolean("HideFoldersEnabled", portalId, true); + + if (DirectoryWrapper.Instance.Exists(physicalPath)) + { + if (((FileWrapper.Instance.GetAttributes(physicalPath) & FileAttributes.Hidden) == FileAttributes.Hidden || physicalPath.StartsWith("_")) && hideFoldersEnabled) + { + return fileSystemFolders; + } + + if (!isRecursive) + { + var item = new MergedTreeItem + { + FolderID = -1, + FolderMappingID = -1, + FolderPath = relativePath, + ExistsInFileSystem = true, + MappedPath = string.Empty, + }; + + fileSystemFolders.Add(relativePath, item); + } + else + { + fileSystemFolders = this.GetFileSystemFoldersRecursive(portalId, physicalPath); + } + } + + return fileSystemFolders; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The physical path of the folder. + /// A sorted list of folders. + internal virtual SortedList GetFileSystemFoldersRecursive(int portalId, string physicalPath) + { + var result = new SortedList(new IgnoreCaseStringComparer()); + var stack = new Stack(); + + stack.Push(physicalPath); + + var hideFoldersEnabled = PortalController.GetPortalSettingAsBoolean("HideFoldersEnabled", portalId, true); + + while (stack.Count > 0) + { + var dir = stack.Pop(); + + try + { + var item = new MergedTreeItem + { + FolderID = -1, + FolderMappingID = -1, + FolderPath = PathUtils.Instance.GetRelativePath(portalId, dir), + ExistsInFileSystem = true, + MappedPath = string.Empty, + }; + + result.Add(item.FolderPath, item); + + foreach (var dn in DirectoryWrapper.Instance.GetDirectories(dir)) + { + if (((FileWrapper.Instance.GetAttributes(dn) & FileAttributes.Hidden) == FileAttributes.Hidden || dn.StartsWith("_")) && hideFoldersEnabled) + { + continue; + } + + stack.Push(dn); + } + } + catch (Exception ex) + { + Logger.Error(ex); + } + } + + return result; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder mapping to search in. + /// The folder mapping id to return. + /// A single folder mapping, . + internal virtual FolderMappingInfo GetFolderMapping(Dictionary folderMappings, int folderMappingId) + { + if (!folderMappings.ContainsKey(folderMappingId)) + { + folderMappings.Add(folderMappingId, FolderMappingController.Instance.GetFolderMapping(folderMappingId)); + } + + return folderMappings[folderMappingId]; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder mapping to use. + /// The folder base path. + /// A sorted list of folder mappings. + internal virtual SortedList GetFolderMappingFoldersRecursive(FolderMappingInfo folderMapping, IFolderInfo folder) + { + var result = new SortedList(new IgnoreCaseStringComparer()); + var stack = new Stack(); + var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); + + var baseMappedPath = folder.MappedPath; + var baseFolderPath = folder.FolderPath; + + stack.Push(baseMappedPath); + + while (stack.Count > 0) + { + var mappedPath = stack.Pop(); + var relativePath = string.IsNullOrEmpty(mappedPath) + ? string.Empty + : string.IsNullOrEmpty(baseMappedPath) + ? mappedPath + : RegexUtils.GetCachedRegex(Regex.Escape(baseMappedPath)).Replace(mappedPath, string.Empty, 1); + + var folderPath = baseFolderPath + relativePath; + + if (folderProvider.FolderExists(mappedPath, folderMapping)) + { + var item = new MergedTreeItem + { + FolderID = -1, + FolderMappingID = folderMapping.FolderMappingID, + FolderPath = folderPath, + ExistsInFolderMapping = true, + MappedPath = mappedPath, + }; + + if (!result.ContainsKey(item.FolderPath)) + { + result.Add(item.FolderPath, item); + } + + foreach (var subfolderPath in folderProvider.GetSubFolders(mappedPath, folderMapping)) + { + if (folderMapping.SyncAllSubFolders || folderProvider.FolderExists(subfolderPath, folderMapping)) + { + stack.Push(subfolderPath); + } + } + } + } + + return result; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The cached items arguments, . + /// A list of folders. + internal virtual object GetFoldersByPermissionSortedCallBack(CacheItemArgs cacheItemArgs) + { + var portalId = (int)cacheItemArgs.ParamList[0]; + var permissions = (string)cacheItemArgs.ParamList[1]; + var userId = (int)cacheItemArgs.ParamList[2]; + return CBO.Instance.FillCollection(DataProvider.Instance().GetFoldersByPortalAndPermissions(portalId, permissions, userId)); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The cache item arguments, . + /// A list of folders. + internal virtual object GetFoldersSortedCallBack(CacheItemArgs cacheItemArgs) + { + var portalId = (int)cacheItemArgs.ParamList[0]; + return CBO.Instance.FillCollection(DataProvider.Instance().GetFoldersByPortal(portalId)); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The relative path. + /// A vavlue indicating whether the search should be recursive. + /// A sorted list of . + internal virtual SortedList GetMergedTree(int portalId, string relativePath, bool isRecursive) + { + var fileSystemFolders = this.GetFileSystemFolders(portalId, relativePath, isRecursive); + var databaseFolders = this.GetDatabaseFolders(portalId, relativePath, isRecursive); + + var mergedTree = this.MergeFolderLists(fileSystemFolders, databaseFolders); + var mappedFolders = new SortedList(); + + // Some providers cache the list of objects for performance + this.ClearFolderProviderCachedLists(portalId); + + foreach (var mergedItem in mergedTree.Values) + { + if (mergedItem.FolderMappingID == Null.NullInteger) + { + continue; + } + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, mergedItem.FolderMappingID); + + // Add any folders from non-core providers + if (folderMapping.MappingName != "Standard" && folderMapping.MappingName != "Secure" && folderMapping.MappingName != "Database") + { + if (!isRecursive) + { + mergedItem.ExistsInFolderMapping = true; + } + else + { + var folder = this.GetFolder(portalId, mergedItem.FolderPath); + mappedFolders = this.MergeFolderLists(mappedFolders, this.GetFolderMappingFoldersRecursive(folderMapping, folder)); + } + } + else + { + mergedItem.ExistsInFolderMapping = folderMapping.MappingName == "Database" ? mergedItem.ExistsInDatabase : mergedItem.ExistsInFileSystem; + } + } + + mergedTree = this.MergeFolderLists(mergedTree, mappedFolders); + + // Update ExistsInFolderMapping if the Parent Does Not ExistsInFolderMapping + var margedTreeItems = mergedTree.Values; + foreach (var mergedItem in margedTreeItems.Where(m => m.ExistsInFolderMapping + && margedTreeItems.Any(mt2 => !mt2.ExistsInFolderMapping && m.FolderPath.StartsWith(mt2.FolderPath)))) + { + mergedItem.ExistsInFolderMapping = false; + } + + return mergedTree; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder mapping. + /// A value indicating whether the folder mapping is editable. + internal virtual bool IsFolderMappingEditable(FolderMappingInfo folderMapping) + { + return folderMapping.IsEditable; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to move. + /// The destination folder to move the folder to. + /// The new folder path. + /// A value indicating whether the move operation would be valid. + internal virtual bool IsMoveOperationValid(IFolderInfo folderToMove, IFolderInfo destinationFolder, string newFolderPath) + { + // FolderMapping cases + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folderToMove.PortalID, folderToMove.FolderMappingID); + if (folderToMove.FolderMappingID == destinationFolder.FolderMappingID && FolderProvider.Instance(folderMapping.FolderProviderType).SupportsMappedPaths) + { + // Root mapped folder cannot be move, when folder mappings are equal + if (folderToMove.MappedPath == string.Empty) + { + return false; + } + + // Destination folder cannot be a child mapped folder from the folder to move + if (destinationFolder.MappedPath.StartsWith(folderToMove.MappedPath)) + { + return false; + } + } + + return this.IsMoveOperationValid(folderToMove, newFolderPath); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to move. + /// The distination folder to move the folder into. + /// A value indicating if the move operation would be valid. + internal virtual bool IsMoveOperationValid(IFolderInfo folderToMove, string newFolderPath) + { + // Root folder cannot be moved + if (folderToMove.FolderPath == string.Empty) + { + return false; + } + + // newParentFolder cannot be a child of folderToMove + if (newFolderPath.StartsWith(folderToMove.FolderPath)) + { + return false; + } + + return true; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// A value indicating whether the network is available. + internal virtual bool IsNetworkAvailable() + { + return NetworkInterface.GetIsNetworkAvailable(); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The first list for the merge. + /// The second list for the merge. + /// A merged sorted list of MergedTreeItems, . + internal virtual SortedList MergeFolderLists(SortedList list1, SortedList list2) + { + foreach (var item in list2.Values) + { + if (list1.ContainsKey(item.FolderPath)) + { + var existingItem = list1[item.FolderPath]; + if (existingItem.FolderID < 0) + { + existingItem.FolderID = item.FolderID; + } + + if (existingItem.FolderMappingID < 0) + { + existingItem.FolderMappingID = item.FolderMappingID; + } + + if (string.IsNullOrEmpty(existingItem.MappedPath)) + { + existingItem.MappedPath = item.MappedPath; + } + + existingItem.ExistsInFileSystem = existingItem.ExistsInFileSystem || item.ExistsInFileSystem; + existingItem.ExistsInDatabase = existingItem.ExistsInDatabase || item.ExistsInDatabase; + existingItem.ExistsInFolderMapping = existingItem.ExistsInFolderMapping || item.ExistsInFolderMapping; + } + else + { + list1.Add(item.FolderPath, item); + } + } + + return list1; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The source directory. + /// The target directory. + internal virtual void MoveDirectory(string source, string target) + { + var stack = new Stack(); + stack.Push(new MoveFoldersInfo(source, target)); + + // ReSharper disable AssignNullToNotNullAttribute + while (stack.Count > 0) + { + var folders = stack.Pop(); + Directory.CreateDirectory(folders.Target); + foreach (var file in Directory.GetFiles(folders.Source, "*.*")) + { + var targetFile = Path.Combine(folders.Target, Path.GetFileName(file)); + if (File.Exists(targetFile)) + { + File.Delete(targetFile); + } + + File.Move(file, targetFile); + } + + foreach (var folder in Directory.GetDirectories(folders.Source)) + { + stack.Push(new MoveFoldersInfo(folder, Path.Combine(folders.Target, Path.GetFileName(folder)))); + } + } + + // ReSharper restore AssignNullToNotNullAttribute + Directory.Delete(source, true); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to move. + /// The destination folder. + internal virtual void MoveFolderWithinProvider(IFolderInfo folder, IFolderInfo destinationFolder) + { + var newFolderPath = destinationFolder.FolderPath + folder.FolderName + "/"; + this.RenameFolderInFileSystem(folder, newFolderPath); + + // Update provider + var newMappedPath = destinationFolder.MappedPath + folder.FolderName + "/"; + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); + var provider = FolderProvider.Instance(folderMapping.FolderProviderType); + provider.MoveFolder(folder.MappedPath, newMappedPath, folderMapping); + + // Update database + this.UpdateChildFolders(folder, Path.Combine(destinationFolder.FolderPath, folder.FolderName)); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to move. + /// The target folder for the move. + internal virtual void MoveFolderBetweenProviders(IFolderInfo folder, string newFolderPath) + { + this.RenameFolderInFileSystem(folder, newFolderPath); + + var folderInfos = this.GetFolders(folder.PortalID).Where(f => f.FolderPath != string.Empty && f.FolderPath.StartsWith(folder.FolderPath)).ToArray(); + var tmpFolderPath = folder.FolderPath; + + foreach (var folderInfo in folderInfos) + { + var folderPath = newFolderPath + folderInfo.FolderPath.Substring(tmpFolderPath.Length); + + var parentFolder = this.GetParentFolder(folder.PortalID, folderPath); + folderInfo.ParentID = parentFolder.FolderID; + folderInfo.FolderPath = folderPath; + this.UpdateFolderInternal(folderInfo, true); + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The source folder. + /// The destination folder. + /// The folder mappings. + /// The folders to delete. + internal virtual void OverwriteFolder(IFolderInfo sourceFolder, IFolderInfo destinationFolder, Dictionary folderMappings, SortedList foldersToDelete) + { + var fileManager = FileManager.Instance; + var files = this.GetFiles(sourceFolder, true); + + foreach (var file in files) + { + fileManager.MoveFile(file, destinationFolder); + } + + // Delete source folder in database + this.DeleteFolder(sourceFolder.PortalID, sourceFolder.FolderPath); + + var folderMapping = this.GetFolderMapping(folderMappings, sourceFolder.FolderMappingID); + + if (this.IsFolderMappingEditable(folderMapping)) + { + foldersToDelete.Add(sourceFolder.FolderPath, sourceFolder); + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The item to process. + /// The site (portal) ID. + internal virtual void ProcessMergedTreeItemInAddMode(MergedTreeItem item, int portalId) + { + try + { + if (item.ExistsInFileSystem) + { + if (!item.ExistsInDatabase) + { + var folderMappingId = this.FindFolderMappingId(item, portalId); + this.CreateFolderInDatabase(portalId, item.FolderPath, folderMappingId); + } + } + else + { + if (item.ExistsInDatabase) + { + if (item.ExistsInFolderMapping) + { + this.CreateFolderInFileSystem(PathUtils.Instance.GetPhysicalPath(portalId, item.FolderPath)); + } + } + else + { + // by exclusion it exists in the Folder Mapping + this.CreateFolderInFileSystem(PathUtils.Instance.GetPhysicalPath(portalId, item.FolderPath)); + this.CreateFolderInDatabase(portalId, item.FolderPath, item.FolderMappingID, item.MappedPath); + } + } + } + catch (Exception ex) + { + Logger.Error(string.Format("Could not create folder {0}. EXCEPTION: {1}", item.FolderPath, ex.Message), ex); + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// . + /// The site (portal) ID. + internal virtual void ProcessMergedTreeItemInDeleteMode(MergedTreeItem item, int portalId) + { + if (item.ExistsInFileSystem) + { + if (item.ExistsInDatabase) + { + if (item.FolderPath == string.Empty) + { + return; // Do not process root folder + } + + if (!item.ExistsInFolderMapping) + { + var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, item.FolderMappingID); + + if (folderMapping.IsEditable) + { + DirectoryWrapper.Instance.Delete(PathUtils.Instance.GetPhysicalPath(portalId, item.FolderPath), false); + this.DeleteFolder(portalId, item.FolderPath); + } + } + } + } + else + { + if (item.ExistsInDatabase && !item.ExistsInFolderMapping) + { + this.DeleteFolder(portalId, item.FolderPath); + } + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to cleanup. + internal virtual void RemoveOrphanedFiles(IFolderInfo folder) + { + var files = this.GetFiles(folder, false, true); + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); + + if (folderMapping != null) + { + var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); + + foreach (var file in files) + { + try + { + if (!folderProvider.FileExists(folder, file.FileName)) + { + FileDeletionController.Instance.DeleteFileData(file); + } + } + catch (Exception ex) + { + Logger.Error(ex); + } + } + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to rename. + /// The new folder path. + internal virtual void RenameFolderInFileSystem(IFolderInfo folder, string newFolderPath) + { + var source = folder.PhysicalPath; + + var di = new DirectoryInfo(source); + if (!di.Exists) + { + return; + } + + var target = PathUtils.Instance.GetPhysicalPath(folder.PortalID, newFolderPath); + this.MoveDirectory(source, target); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to save the permissions for. + internal virtual void SaveFolderPermissions(IFolderInfo folder) + { + FolderPermissionController.SaveFolderPermissions((FolderInfo)folder); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The timeout in seconds. + internal virtual void SetScriptTimeout(int timeout) + { + HttpContext.Current.Server.ScriptTimeout = timeout; + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The item to synchronize. + /// The site (portal) ID. + internal virtual void SynchronizeFiles(MergedTreeItem item, int portalId) + { + var folder = this.GetFolder(portalId, item.FolderPath); + + if (folder == null) + { + return; + } + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, folder.FolderMappingID); + + if (folderMapping == null) + { + return; + } + + try + { + var folderProvider = FolderProvider.Instance(folderMapping.FolderProviderType); + var fileManager = FileManager.Instance; + + if (folderProvider.FolderExists(folder.MappedPath, folderMapping)) + { + var files = folderProvider.GetFiles(folder); + + files = files.Except(FileVersionController.Instance.GetFileVersionsInFolder(folder.FolderID).Select(f => f.FileName)).ToArray(); + + foreach (var fileName in files) + { + try + { + var file = fileManager.GetFile(folder, fileName, true); + + if (file == null) + { + fileManager.AddFile(folder, fileName, null, false); + } + else if (!folderProvider.IsInSync(file)) + { + fileManager.UpdateFile(file, null); + } + } + catch (InvalidFileExtensionException ex) + { + Logger.Info(ex.Message); + } + catch (Exception ex) + { + Logger.Error(ex); + } + } + } + + this.RemoveOrphanedFiles(folder); + } + catch (Exception ex) + { + Logger.Error(ex); + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The site (portal) ID. + /// The folder path to update. + internal virtual void UpdateParentFolder(int portalId, string folderPath) + { + if (!string.IsNullOrEmpty(folderPath)) + { + var parentFolderPath = folderPath.Substring(0, folderPath.Substring(0, folderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); + var objFolder = this.GetFolder(portalId, parentFolderPath); + if (objFolder != null) + { + // UpdateFolder(objFolder); + this.UpdateFolderInternal(objFolder, false); + } + } + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The folder to update. + /// The new folder path. + internal virtual void UpdateChildFolders(IFolderInfo folder, string newFolderPath) + { + var originalFolderPath = folder.FolderPath; + + var folderInfos = this.GetFolders(folder.PortalID).Where(f => f.FolderPath != string.Empty && f.FolderPath.StartsWith(originalFolderPath)).ToArray(); + + foreach (var folderInfo in folderInfos) + { + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folderInfo.FolderMappingID); + var provider = FolderProvider.Instance(folderMapping.FolderProviderType); + + var folderPath = newFolderPath + (newFolderPath.EndsWith("/") ? string.Empty : "/") + folderInfo.FolderPath.Substring(originalFolderPath.Length); + + var parentFolder = this.GetParentFolder(folder.PortalID, folderPath); + folderInfo.ParentID = parentFolder.FolderID; + folderInfo.FolderPath = folderPath; + + var parentProvider = FolderProvider.Instance(FolderMappingController.Instance.GetFolderMapping(parentFolder.PortalID, parentFolder.FolderMappingID).FolderProviderType); + if (parentProvider.SupportsMappedPaths || !provider.SupportsMappedPaths) + { + if (provider.SupportsMappedPaths) + { + var mappedPath = parentFolder.FolderPath == string.Empty ? string.Empty : folderPath.Replace(parentFolder.FolderPath, string.Empty); + folderInfo.MappedPath = PathUtils.Instance.FormatFolderPath(parentFolder.MappedPath + mappedPath); + } + else + { + folderInfo.MappedPath = folderPath; + } + } + else if (provider.SupportsMappedPaths) + { + if (originalFolderPath == folderInfo.MappedPath) + { + folderInfo.MappedPath = folderPath; + } + else if (folderInfo.MappedPath.EndsWith("/" + originalFolderPath, StringComparison.Ordinal)) + { + var newMappedPath = PathUtils.Instance.FormatFolderPath( + folderInfo.MappedPath.Substring(0, folderInfo.MappedPath.LastIndexOf("/" + originalFolderPath, StringComparison.Ordinal)) + "/" + folderPath); + folderInfo.MappedPath = newMappedPath; + } + } + + this.UpdateFolderInternal(folderInfo, false); + } + + this.ClearFolderCache(folder.PortalID); + } + + /// This member is reserved for internal use and is not intended to be used directly from your code. + /// The source folder mapping. + /// The destination folder mapping. + /// A value indicating whether a folder mapping can be moved to another one. + internal virtual bool CanMoveBetweenFolderMappings(FolderMappingInfo sourceFolderMapping, FolderMappingInfo destinationFolderMapping) + { + // If Folder Mappings are exactly the same + if (sourceFolderMapping.FolderMappingID == destinationFolderMapping.FolderMappingID) + { + return true; + } + + return IsStandardFolderProviderType(sourceFolderMapping) && IsStandardFolderProviderType(destinationFolderMapping); + } + + private static Regex WildcardToRegex(string pattern) + { + pattern = Regex.Escape(pattern).Replace(@"\*", ".*").Replace(@"\?", "."); + return RegexUtils.GetCachedRegex(pattern, RegexOptions.IgnoreCase); + } + + private static bool IsStandardFolderProviderType(FolderMappingInfo folderMappingInfo) + { + var compatibleTypes = new[] { "StandardFolderProvider", "SecureFolderProvider", "DatabaseFolderProvider" }; + return compatibleTypes.Contains(folderMappingInfo.FolderProviderType); + } + + private int AddFolderInternal(IFolderInfo folder) + { + // Check this is not a duplicate + var tmpfolder = this.GetFolder(folder.PortalID, folder.FolderPath); + + if (tmpfolder != null && folder.FolderID == Null.NullInteger) + { + folder.FolderID = tmpfolder.FolderID; + } + + if (folder.FolderID == Null.NullInteger) + { + var isVersioned = folder.IsVersioned; + var workflowId = folder.WorkflowID; + + // Inherit some configuration from its Parent Folder + var parentFolder = this.GetParentFolder(folder.PortalID, folder.FolderPath); + var parentId = Null.NullInteger; + if (parentFolder != null) + { + isVersioned = parentFolder.IsVersioned; + workflowId = parentFolder.WorkflowID; + parentId = parentFolder.FolderID; + } + + folder.FolderPath = PathUtils.Instance.FormatFolderPath(folder.FolderPath); + folder.FolderID = DataProvider.Instance().AddFolder( + folder.PortalID, + folder.UniqueId, + folder.VersionGuid, + folder.FolderPath, + folder.MappedPath, + folder.StorageLocation, + folder.IsProtected, + folder.IsCached, + folder.LastUpdated, + this.GetCurrentUserId(), + folder.FolderMappingID, + isVersioned, + workflowId, + parentId); + + // Refetch folder for logging + folder = this.GetFolder(folder.PortalID, folder.FolderPath); + + this.AddLogEntry(folder, EventLogController.EventLogType.FOLDER_CREATED); + + if (parentFolder != null) + { + this.UpdateFolderInternal(parentFolder, false); + } + else + { + this.UpdateParentFolder(folder.PortalID, folder.FolderPath); + } + } + else + { + var parentFolder = this.GetParentFolder(folder.PortalID, folder.FolderPath); + if (parentFolder != null) + { + // Ensure that Parent Id is repaired + folder.ParentID = parentFolder.FolderID; + } + + this.UpdateFolderInternal(folder, false); + } + + // Invalidate Cache + this.ClearFolderCache(folder.PortalID); + + return folder.FolderID; + } + + private bool GetOnlyUnmap(IFolderInfo folder) + { + if (folder == null || folder.ParentID == Null.NullInteger) + { + return true; + } + + return FolderProvider.Instance(FolderMappingController.Instance.GetFolderMapping(folder.FolderMappingID).FolderProviderType).SupportsMappedPaths && + this.GetFolder(folder.ParentID).FolderMappingID != folder.FolderMappingID; + } + + private void UnmapFolderInternal(IFolderInfo folder, bool isCascadeDeleting) + { + Requires.NotNull("folder", folder); + + if (DirectoryWrapper.Instance.Exists(folder.PhysicalPath)) + { + DirectoryWrapper.Instance.Delete(folder.PhysicalPath, true); + } + + this.DeleteFolder(folder.PortalID, folder.FolderPath); + + // Notify folder deleted event + this.OnFolderDeleted(folder, this.GetCurrentUserId(), isCascadeDeleting); + } + + private void DeleteFolderInternal(IFolderInfo folder, bool isCascadeDeleting) + { + Requires.NotNull("folder", folder); + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(folder.PortalID, folder.FolderMappingID); + + try + { + FolderProvider.Instance(folderMapping.FolderProviderType).DeleteFolder(folder); + } + catch (Exception ex) + { + Logger.Error(ex); + + throw new FolderProviderException( + Localization.GetExceptionMessage( + "DeleteFolderUnderlyingSystemError", + "The underlying system threw an exception. The folder has not been deleted."), + ex); + } + + if (DirectoryWrapper.Instance.Exists(folder.PhysicalPath)) + { + DirectoryWrapper.Instance.Delete(folder.PhysicalPath, true); + } + + this.DeleteFolder(folder.PortalID, folder.FolderPath); + + // Notify folder deleted event + this.OnFolderDeleted(folder, this.GetCurrentUserId(), isCascadeDeleting); + } + + private IFolderInfo GetParentFolder(int portalId, string folderPath) + { + if (!string.IsNullOrEmpty(folderPath)) + { + var parentFolderPath = folderPath.Substring(0, folderPath.Substring(0, folderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); + return this.GetFolder(portalId, parentFolderPath); + } + + return null; + } + + private IEnumerable SearchFiles(IFolderInfo folder, Regex regex, bool recursive) + { + var fileCollection = + CBO.Instance.FillCollection(DataProvider.Instance().GetFiles(folder.FolderID, false, false)); + + var files = (from f in fileCollection where regex.IsMatch(f.FileName) select f).Cast().ToList(); + + if (recursive) + { + foreach (var subFolder in this.GetFolders(folder)) + { + if (FolderPermissionController.Instance.CanViewFolder(subFolder)) + { + files.AddRange(this.SearchFiles(subFolder, regex, true)); + } + } + } + + return files; + } + + private IFolderInfo UpdateFolderInternal(IFolderInfo folder, bool clearCache) + { + Requires.NotNull("folder", folder); + + DataProvider.Instance().UpdateFolder( + folder.PortalID, + folder.VersionGuid, + folder.FolderID, + PathUtils.Instance.FormatFolderPath(folder.FolderPath), + folder.StorageLocation, + folder.MappedPath, + folder.IsProtected, + folder.IsCached, + folder.LastUpdated, + this.GetCurrentUserId(), + folder.FolderMappingID, + folder.IsVersioned, + folder.WorkflowID, + folder.ParentID); + + if (clearCache) + { + this.ClearFolderCache(folder.PortalID); + } + + return folder; + } + + private int FindFolderMappingId(MergedTreeItem item, int portalId) + { + if (item.ExistsInFolderMapping) + { + return item.FolderMappingID; + } + + if (item.FolderPath.IndexOf('/') != item.FolderPath.LastIndexOf('/')) + { + var parentPath = item.FolderPath.Substring(0, item.FolderPath.TrimEnd('/').LastIndexOf('/') + 1); + var folder = this.GetFolder(portalId, parentPath); + if (folder != null) + { + return folder.FolderMappingID; + } + } + + return FolderMappingController.Instance.GetDefaultFolderMapping(portalId).FolderMappingID; + } + + private bool DeleteFolderRecursive(IFolderInfo folder, ICollection notDeletedSubfolders, bool isRecursiveDeletionFolder, bool unmap) + { + Requires.NotNull("folder", folder); + + if (UserSecurityController.Instance.HasFolderPermission(folder, "DELETE")) + { + var subfolders = this.GetFolders(folder); + + var allSubFoldersHasBeenDeleted = true; + + foreach (var subfolder in subfolders) + { + if (!this.DeleteFolderRecursive(subfolder, notDeletedSubfolders, false, unmap || this.GetOnlyUnmap(subfolder))) + { + allSubFoldersHasBeenDeleted = false; + } + } + + var files = this.GetFiles(folder, false, true); + foreach (var file in files) + { + if (unmap) + { + FileDeletionController.Instance.UnlinkFile(file); + } + else + { + FileDeletionController.Instance.DeleteFile(file); + } + + this.OnFileDeleted(file, this.GetCurrentUserId(), true); + } + + if (allSubFoldersHasBeenDeleted) + { + if (unmap) + { + this.UnmapFolderInternal(folder, !isRecursiveDeletionFolder); + } + else + { + this.DeleteFolderInternal(folder, !isRecursiveDeletionFolder); + } + + return true; + } + } + + notDeletedSubfolders.Add(folder); + return false; + } + + private string GetDefaultMappedPath(FolderMappingInfo folderMapping) + { + var defaultMappedPath = folderMapping.FolderMappingSettings[DefaultMappedPathSetting]; + if (defaultMappedPath == null) + { + return string.Empty; + } + + return defaultMappedPath.ToString(); + } + + private IEnumerable GetFolders(IFolderInfo parentFolder, bool allSubFolders) + { + Requires.NotNull("parentFolder", parentFolder); + + if (allSubFolders) + { + var subFolders = + this.GetFolders(parentFolder.PortalID) + .Where( + f => + f.FolderPath.StartsWith( + parentFolder.FolderPath, + StringComparison.InvariantCultureIgnoreCase)); + + return subFolders.Where(f => f.FolderID != parentFolder.FolderID); + } + + return this.GetFolders(parentFolder.PortalID).Where(f => f.ParentID == parentFolder.FolderID); + } + + private void OnFolderMoved(IFolderInfo folderInfo, int userId, string oldFolderPath) + { + EventManager.Instance.OnFolderMoved(new FolderMovedEventArgs + { + FolderInfo = folderInfo, + UserId = userId, + OldFolderPath = oldFolderPath, + }); + } + + private void OnFolderRenamed(IFolderInfo folderInfo, int userId, string oldFolderName) + { + EventManager.Instance.OnFolderRenamed(new FolderRenamedEventArgs + { + FolderInfo = folderInfo, + UserId = userId, + OldFolderName = oldFolderName, + }); + } + + private void OnFolderDeleted(IFolderInfo folderInfo, int userId, bool isCascadeDeleting) + { + EventManager.Instance.OnFolderDeleted(new FolderDeletedEventArgs + { + FolderInfo = folderInfo, + UserId = userId, + IsCascadeDeletng = isCascadeDeleting, + }); + } + + private void OnFolderAdded(IFolderInfo folderInfo, int userId) + { + EventManager.Instance.OnFolderAdded(new FolderChangedEventArgs + { + FolderInfo = folderInfo, + UserId = userId, + }); + } + + private void OnFileDeleted(IFileInfo fileInfo, int userId, bool isCascadeDeleting) + { + EventManager.Instance.OnFileDeleted(new FileDeletedEventArgs + { + FileInfo = fileInfo, + UserId = userId, + IsCascadeDeleting = isCascadeDeleting, + }); + } + + private FolderPermissionCollection GetFolderPermissionsFromSyncData(int portalId, string relativePath) + { + var threadId = Thread.CurrentThread.ManagedThreadId; + FolderPermissionCollection permissions = null; + if (SyncFoldersData.ContainsKey(threadId)) + { + if (SyncFoldersData[threadId].FolderPath == relativePath && SyncFoldersData[threadId].PortalId == portalId) + { + return SyncFoldersData[threadId].Permissions; + } + + permissions = FolderPermissionController.GetFolderPermissionsCollectionByFolder(portalId, relativePath); + SyncFoldersData[threadId] = new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }; + return permissions; + } + + permissions = FolderPermissionController.GetFolderPermissionsCollectionByFolder(portalId, relativePath); + SyncFoldersData.Add(threadId, new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }); + + return permissions; + } + + private void InitialiseSyncFoldersData(int portalId, string relativePath) + { + var threadId = Thread.CurrentThread.ManagedThreadId; + var permissions = FolderPermissionController.GetFolderPermissionsCollectionByFolder(portalId, relativePath); + if (SyncFoldersData.ContainsKey(threadId)) + { + if (SyncFoldersData[threadId].FolderPath == relativePath && SyncFoldersData[threadId].PortalId == portalId) + { + SyncFoldersData[threadId].Permissions = permissions; + } + else + { + SyncFoldersData[threadId] = new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }; + } + } + else + { + SyncFoldersData.Add(threadId, new SyncFolderData { PortalId = portalId, FolderPath = relativePath, Permissions = permissions }); + } + } + + private void RemoveSyncFoldersData(string relativePath) + { + var threadId = Thread.CurrentThread.ManagedThreadId; + if (SyncFoldersData.ContainsKey(threadId)) + { + SyncFoldersData.Remove(threadId); + } + } + + /// + /// This class and its members are reserved for internal use and are not intended to be used in your code. + /// + internal class MergedTreeItem + { + /// + /// Gets or sets a value indicating whether the item exists in the file system. + /// + public bool ExistsInFileSystem { get; set; } + + /// + /// Gets or sets a value indicating whether the item exists in the database. + /// + public bool ExistsInDatabase { get; set; } + + /// + /// Gets or sets a value indicating whether the item exists in the folder mappings. + /// + public bool ExistsInFolderMapping { get; set; } + + /// + /// Gets or sets the folder id. + /// + public int FolderID { get; set; } + + /// + /// Gets or sets the folder path. + /// + public int FolderMappingID { get; set; } + + /// + /// Gets or sets the folder path. + /// + public string FolderPath { get; set; } + + /// + /// Gets or sets the mapped path. + /// + public string MappedPath { get; set; } + } + + /// + /// This class and its members are reserved for internal use and are not intended to be used in your code. + /// + internal class IgnoreCaseStringComparer : IComparer + { + /// + public int Compare(string x, string y) + { + return string.Compare(x.ToLowerInvariant(), y.ToLowerInvariant(), StringComparison.Ordinal); + } + } + + /// + /// This class and its members are reserved for internal use and are not intended to be used in your code. + /// + internal class MoveFoldersInfo + { + /// + /// Initializes a new instance of the class. + /// + /// The source folder. + /// The destination folder. + public MoveFoldersInfo(string source, string target) + { + this.Source = source; + this.Target = target; + } + + /// + /// Gets the Source folder. + + /// + public string Source { get; private set; } + + /// + /// Gets the target folder. + /// + public string Target { get; private set; } + } + } +} diff --git a/DNN Platform/Library/Services/FileSystem/IFileManager.cs b/DNN Platform/Library/Services/FileSystem/IFileManager.cs index 9cea7ceb7f3..6b19ad1401d 100644 --- a/DNN Platform/Library/Services/FileSystem/IFileManager.cs +++ b/DNN Platform/Library/Services/FileSystem/IFileManager.cs @@ -1,13 +1,16 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + + namespace DotNetNuke.Services.FileSystem { using System; using System.Collections.Generic; using System.IO; - + + using DotNetNuke.Common.Utilities; + /// /// Do not implement. This interface is meant for reference and unit test purposes only. /// There is no guarantee that this interface will not change. @@ -19,7 +22,6 @@ public interface IFileManager /// [Obsolete("Deprecated in DNN 7.4.2. It has been replaced by FileContentTypeManager.Instance.ContentTypes. Scheduled removal in v10.0.0.")] IDictionary ContentTypes { get; } - /// /// Adds a file to the specified folder. /// @@ -120,7 +122,7 @@ public interface IFileManager /// /// The file extension. /// The Content Type for the specified extension. - [Obsolete("Deprecated in DNN 7.4.2. It has been replaced by FileContentTypeManager.Instance.GetContentType(string extension). Scheduled removal in v10.0.0.")] + [Obsolete("Deprecated in DNN 7.4.2. It has been replaced by FileContentTypeManager.Instance.GetContentType(string extension). Scheduled removal in v10.0.0.")] string GetContentType(string extension); /// @@ -275,5 +277,10 @@ public interface IFileManager /// The file to download. /// Indicates how to display the document once downloaded. void WriteFileToResponse(IFileInfo file, ContentDisposition contentDisposition); + + /// + /// Current user's file upload extension whitelist + /// + FileExtensionWhitelist WhiteList { get; } } } diff --git a/DNN Platform/Modules/DigitalAssets/EditFolderMapping.ascx.cs b/DNN Platform/Modules/DigitalAssets/EditFolderMapping.ascx.cs index 784bc99a88e..b6803a22ff0 100644 --- a/DNN Platform/Modules/DigitalAssets/EditFolderMapping.ascx.cs +++ b/DNN Platform/Modules/DigitalAssets/EditFolderMapping.ascx.cs @@ -64,7 +64,7 @@ protected override void OnInit(EventArgs e) } this.UpdateButton.Text = (this.FolderMappingID == Null.NullInteger) ? Localization.GetString("Add") : Localization.GetString("Update", this.LocalResourceFile); - this.CancelHyperLink.NavigateUrl = this.EditUrl("FolderMappings"); + this.CancelHyperLink.NavigateUrl = this._navigationManager.NavigateURL(this.TabId); var controlTitle = Localization.GetString("ControlTitle", this.LocalResourceFile); var controlTitlePrefix = (this.FolderMappingID == Null.NullInteger) ? Localization.GetString("New") : Localization.GetString("Edit"); @@ -194,7 +194,7 @@ private void cmdUpdate_Click(object sender, EventArgs e) if (!this.Response.IsRequestBeingRedirected) { - this.Response.Redirect(this._navigationManager.NavigateURL(this.TabId, "FolderMappings", "mid=" + this.ModuleId, "popUp=true")); + this.Response.Redirect(this._navigationManager.NavigateURL(this.TabId)); } } catch (Exception exc) diff --git a/DNN Platform/Modules/ResourceManager/App_LocalResources/EditFolderMapping.ascx.resx b/DNN Platform/Modules/ResourceManager/App_LocalResources/EditFolderMapping.ascx.resx new file mode 100644 index 00000000000..481d1b99f2d --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/App_LocalResources/EditFolderMapping.ascx.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} Folder Type + + + Edit Folder Mapping + + + Use this dialog to define a new folder type. + + + A mapping with the same name already exists. The changes have not been saved. + + + Folder Provider Settings + + + General Settings + + + Select the folder provider to use. + + + Folder Provider + + + Enter the name of this folder mapping. + + + Name + + + Indicates required fields. + + + - Select a Folder Provider - + + + After updating the folder type, a synchronization will be performed on the folders using this type. This may take some time, depending on the number of folders that match the criteria. + + + Update + + + Folder provider is required. + + + Name is required. + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/App_LocalResources/ResourceManager.resx b/DNN Platform/Modules/ResourceManager/App_LocalResources/ResourceManager.resx new file mode 100644 index 00000000000..1c35ffd4857 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/App_LocalResources/ResourceManager.resx @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Asset + + + Add Folder + + + Use the tools above to add an asset or create a folder + + + This Folder is Empty + + + Cancel + + + Close + + + Database + + + Confirm delete + + + Are you sure to delete the file? + + + Confirm delete + + + Are you sure to delete the folder? + + + The file you want to upload already exists in this folder. + + + File Uploaded. + + + File upload stopped + + + Enter folder name + + + The folder name is required + + + Folder Parent + + + The folder type is required + + + Name + + + Save + + + Secure + + + Standard + + + Type + + + The user does not have permission to delete folder. + + + The user does not have permission to download this file. + + + Drag and Drop a File or Select an Option + + + Your Search Produced No Results + + + Search Files + + + Search + + + Url copied to clipboard + + + Created + + + Description + + + Last Modified + + + Size + + + Title + + + URL + + + Name is required + + + User has no permission to read file properties. + + + An error has ocurred. + + + Item saved. + + + Folder Type + + + Created on Date + + + Item Name + + + Last Modified on Date + + + is too big. The maximun file size allowed is + + + The user does not have permission to delete file. + + + User has no permission to manage file properties. + + + The user does not have permission to manage this folder. + + + No Folder Selected + + + Search Folder + + + Disabled for anonymous users. + + + The user does not have permission to add new folders. + + + The Group Icon file can't be deleted. + + + is not of a type that is allowed to be uploaded + + + Refresh + + + Sync This Folder + + + Sync This Folder & Subfolders + + + Manage Folder Types + + + Add Folder Type + + + Folder Provider + + + Folder Type Definitions + + + Edit Folder Type + + + Remove Folder Type + + + Are you sure you want to remove this folder type? + + + Remove Folder Type + + + Move Item + + + New Location + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/App_LocalResources/Settings.ascx.resx b/DNN Platform/Modules/ResourceManager/App_LocalResources/Settings.ascx.resx new file mode 100644 index 00000000000..57914d1af5a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/App_LocalResources/Settings.ascx.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ResourceManager Settings + + + Select the root folder for the module + + + Home Folder + + + The mode the module should operate in, normal, group or user (group mode associates the module instance with the group's folder, user mode associates the module instance with the user's folder) + + + Mode + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/App_LocalResources/View.ascx.resx b/DNN Platform/Modules/ResourceManager/App_LocalResources/View.ascx.resx new file mode 100644 index 00000000000..46a930fc784 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/App_LocalResources/View.ascx.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Edit Module + + + The module is in group mode, but the page isn't + + + The module is in user mode, but the user is not signed in + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/Components/Common/Utils.cs b/DNN Platform/Modules/ResourceManager/Components/Common/Utils.cs new file mode 100644 index 00000000000..ecdac57e050 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/Common/Utils.cs @@ -0,0 +1,62 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components.Common +{ + using System; + using System.ComponentModel; + + using DotNetNuke.Services.FileSystem; + + /// + /// General utilities for the Resource Manager. + /// + public class Utils + { + /// + /// Obtains a human friendly description from an enum value using the + /// attribute to get a proper name. + /// + /// The enum value to lookup. + /// The specified description attribute name or the value of the enum as a string. + public static string GetEnumDescription(Enum enumValue) + { + var fi = enumValue.GetType().GetField(enumValue.ToString()); + var descriptionAttributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); + + if (descriptionAttributes.Length > 0) + { + return descriptionAttributes[0].Description; + } + + return enumValue.ToString(); + } + + /// + /// Gets the id of the group folder. + /// + /// The id of the folder. + /// An integer representing the root folder id for the group. + public static int GetFolderGroupId(int folderId) + { + var folder = FolderManager.Instance.GetFolder(folderId); + var folderPath = folder.DisplayPath; + + if (!folderPath.StartsWith(Constants.GroupFolderPathStart)) + { + return -1; + } + + var prefixLength = Constants.GroupFolderPathStart.Length; + var folderGroupIdString = folderPath.Substring(prefixLength - 1); + folderGroupIdString = folderGroupIdString.Substring(0, folderGroupIdString.IndexOf("/")); + + if (!int.TryParse(folderGroupIdString, out var folderGroupId)) + { + return -1; + } + + return folderGroupId; + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/Constants.cs b/DNN Platform/Modules/ResourceManager/Components/Constants.cs new file mode 100644 index 00000000000..2135247c8d9 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/Constants.cs @@ -0,0 +1,145 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System; + using System.ComponentModel; + + using Dnn.Modules.ResourceManager.Components.Models; + using Dnn.Modules.ResourceManager.Helpers; + + /// + /// Defines common constants for the resource manager. + /// + internal class Constants + { + /// + /// The relative path to the shared resource file for this module. + /// + public const string ViewResourceFileName = "~/DesktopModules/ResourceManager/App_LocalResources/ResourceManager.resx"; + + /// + /// The module path. + /// + public const string ModulePath = "DesktopModules/ResourceManager/"; + + /// + /// The cache key for the resource manager localization. + /// + public const string ResourceManagerResxDataCacheKey = "ResourceManagerResxResources:{0}:{1}"; + + /// + /// The cache key for the modified date of the resource files. + /// + public const string ResourceManagerResxModifiedDateCacheKey = "ResourceManagerResxModifiedDate:{0}"; + + /// + /// A string indicating the user has no permission to browser a folder. + /// + public const string UserHasNoPermissionToBrowseFolderDefaultMessage = "The user has no permission to browse this folder"; + + /// + /// The path the the groups folder. + /// + public const string GroupFolderPathStart = "Groups/"; + + /// + /// A key indicating the group icon can't be deleted. + /// + public const string GroupIconCantBeDeletedKey = "GroupIconCantBeDeleted.Error"; + + /// + /// A key indicating the user has no permission to download. + /// + public const string UserHasNoPermissionToDownloadKey = "UserHasNoPermissionToDownload.Error"; + + /// + /// A key indicating the user has no permission to add folders. + /// + public const string UserHasNoPermissionToAddFoldersKey = "UserHasNoPermissionToAddFolders.Error"; + + /// + /// The name of the setting for the resource manager home folder. + /// + public const string HomeFolderSettingName = "RM_HomeFolder"; + + /// + /// The resource manager module setting name. + /// + public const string ModeSettingName = "RM_Mode"; + + /// + /// How many items to show per page. + /// + public const int ItemsPerPage = 20; + + /// + /// The width of the items. + /// + public const int ItemWidth = 176; + + /// + /// The default module mode, . + /// + public const int DefaultMode = 0; + + /// + /// The default field to sort files by. + /// + public const string DefaultSortingField = "ItemName"; + + /// + /// A timespan that represents 5 minutes. + /// + public static readonly TimeSpan FiveMinutes = TimeSpan.FromMinutes(5); + + /// + /// Contains the localization info for the resource manager. + /// + public static readonly Localization ResourceManagerLocalization = new Localization + { + ResxDataCacheKey = ResourceManagerResxDataCacheKey, + ResxModifiedDateCacheKey = ResourceManagerResxModifiedDateCacheKey, + }; + + /// + /// The possible sorting fields for files. + /// + public static readonly dynamic[] SortingFields = + { + new { value = "LastModifiedOnDate", label = LocalizationHelper.GetString("LastModifiedOnDate") }, + new { value = "CreatedOnDate", label = LocalizationHelper.GetString("CreatedOnDate") }, + new { value = "ItemName", label= LocalizationHelper.GetString("ItemName") }, + }; + + /// + /// The localization cache key. + /// + internal const string LocalizationDataCacheKey = "LocalizationLocTable:{0}:{1}"; + + /// + /// Enumerates the possible module modes. + /// + public enum ModuleModes + { + /// + /// Normal mode is when the module is used to manage site or host files. + /// + [Description("Normal")] + Normal = 0, + + /// + /// User mode is for when a module is used for a specific user to manage his files. + /// + [Description("User")] + User = 1, + + /// + /// Group mode is for when the module is used by a social group. + /// + [Description("Group")] + Group = 2, + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/GroupManager.cs b/DNN Platform/Modules/ResourceManager/Components/GroupManager.cs new file mode 100644 index 00000000000..e433a556f53 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/GroupManager.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System; + + using DotNetNuke.Common; + using DotNetNuke.Framework; + using DotNetNuke.Services.FileSystem; + + /// + /// Manages groups. + /// + public class GroupManager : ServiceLocator, IGroupManager + { + /// + public IFolderInfo FindOrCreateGroupFolder(int portalId, int groupId) + { + Requires.NotNegative("portalId", portalId); + Requires.NotNegative("groupId", groupId); + + return this.GetGroupFolder(portalId, groupId) ?? FolderManager.Instance.AddFolder(portalId, "Groups/" + groupId); + } + + /// + public IFolderInfo GetGroupFolder(int portalId, int groupId) + { + Requires.NotNegative("portalId", portalId); + Requires.NotNegative("groupId", groupId); + + return FolderManager.Instance.GetFolder(portalId, "Groups/" + groupId); + } + + /// + protected override Func GetFactory() + { + return () => new GroupManager(); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/IGroupManager.cs b/DNN Platform/Modules/ResourceManager/Components/IGroupManager.cs new file mode 100644 index 00000000000..df29593c21c --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/IGroupManager.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using DotNetNuke.Services.FileSystem; + + /// + /// Manager class for Groups logic on Resource Manager. + /// + public interface IGroupManager + { + /// + /// Find or create the folder of the group. + /// + /// Id of the portal. + /// Id of the group. + /// The Group folder. If the group has no folder currently, then a new one will be created and returned, .. + IFolderInfo FindOrCreateGroupFolder(int portalId, int groupId); + + /// + /// Get the folder of the group. + /// + /// Id of the portal. + /// Id of the group. + /// The group folder, if it exist, or null if doesn't, . + IFolderInfo GetGroupFolder(int portalId, int groupId); + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/IItemsManager.cs b/DNN Platform/Modules/ResourceManager/Components/IItemsManager.cs new file mode 100644 index 00000000000..02fa4716150 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/IItemsManager.cs @@ -0,0 +1,97 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System.IO; + + using Dnn.Modules.ResourceManager.Services.Dto; + + using DotNetNuke.Services.Assets; + using DotNetNuke.Services.FileSystem; + + /// + /// Manager for the items of Resource Manager. + /// + public interface IItemsManager + { + /// + /// Get the items contained on the folder. + /// + /// Container folder id. + /// Index of the first item to be returned. + /// Max number of items to return. + /// Sorting option. + /// Current mode of module instance. + /// A with the items in the folder. + ContentPage GetFolderContent(int folderId, int startIndex, int numItems, string sorting, int moduleMode); + + /// + /// Get the content of a file. + /// + /// Id of the file. + /// Name of the file. + /// Type of the file. + /// Stream of the file content. + Stream GetFileContent(int fileId, out string fileName, out string contentType); + + /// + /// Create a new folder on Parent Folder. + /// + /// Name of the new folder. + /// Id of the parent folder. + /// Id of folder mapping. + /// Mapped name. + /// Current mode of the module instance. + /// Folder info object of the new created folder. + IFolderInfo CreateNewFolder(string folderName, int parentFolderId, int folderMappingId, string mappedName, int moduleMode); + + /// + /// Update the asset details of a file. + /// + /// File. + /// New asset details of the file. + void SaveFileDetails(IFileInfo file, FileDetailsRequest fileDetails); + + /// + /// Update the asset details of a folder. + /// + /// Folder. + /// New asset details of the folder. + void SaveFolderDetails(IFolderInfo folder, FolderDetailsRequest folderDetails); + + /// + /// Deletes a file. + /// + /// id of the file to delete. + /// Current mode of the module instance. + /// Id of the group (for group mode). + void DeleteFile(int fileId, int moduleMode, int groupId); + + /// + /// Deletes a folder. + /// + /// Folder to delete Id. + /// Unlink allowed status. + /// Current mode of the module instance. + void DeleteFolder(int folderId, bool unlinkAllowedStatus, int moduleMode); + + /// + /// Moves a file into a folder. + /// + /// The id of the file to move. + /// The id of the folder to move the file into. + /// Current mode of the module instance. + /// Id of the group (gor group mode). + void MoveFile(int sourceFileId, int destinationFolderId, int moduleMode, int groupId); + + /// + /// Moves a folder into another folder. + /// + /// The id of the folder to move. + /// The id of the folder into which to move the source folder. + /// Current mode of the module instance. + /// Id of the group (for group mode). + void MoveFolder(int sourceFolderId, int destinationFolderId, int moduleMode, int groupId); + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/ILocalizationController.cs b/DNN Platform/Modules/ResourceManager/Components/ILocalizationController.cs new file mode 100644 index 00000000000..36b2ae885a7 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/ILocalizationController.cs @@ -0,0 +1,56 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.Modules.ResourceManager.Components +{ + using System.Collections.Generic; + + using Dnn.Modules.ResourceManager.Components.Models; + + /// + /// Provides localization services. + /// + public interface ILocalizationController + { + /// + /// Gets the culture name. + /// + string CultureName { get; } + + /// + /// Gets a timestamp for a given resource file. + /// + /// The resource file for which to get the timestamp. + /// The localizatio information. + /// A long representing the resource file timestamp. + long GetResxTimeStamp(string resourceFile, Localization localization); + + /// + /// Gets a localized dictionary from a resource file. + /// + /// The resource file from which to generate a dictionary. + /// The culture to get. + /// The localization information. + /// + /// A where the key is a string representing + /// the localization key and the value is a string containing the localized text. + /// + Dictionary GetLocalizedDictionary(string resourceFile, string culture, Localization localization); + + /// + /// Returns a dictionary of localized keys for a resource file for a given culture. + /// + /// + /// The relative file path of the main resource file,e.g. + /// ~/DesktopModules/SocialLibrary/App_LocalResources/CmxResources.resx . + /// + /// The culture for which this dictionay is requested. + /// This API does not fallback to any other DNN resource files. + /// + /// A where the key is a string representing + /// the localization key and the value is a string containing the localized text. + /// + Dictionary GetLocalizedDictionary(string resourceFile, string culture); + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/IPermissionsManager.cs b/DNN Platform/Modules/ResourceManager/Components/IPermissionsManager.cs new file mode 100644 index 00000000000..4d4fbc33258 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/IPermissionsManager.cs @@ -0,0 +1,58 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + /// + /// Manager for permission logic of Resource Manager. + /// + public interface IPermissionsManager + { + /// + /// Checks if the current user is allowed to view the content of a folder. + /// + /// Id of the folder. + /// Current mode of the module instance. + /// A value indicating whether the user is allowed to view the content of the folder. + bool HasFolderContentPermission(int folderId, int moduleMode); + + /// + /// Checks if the current user is allowed to read the files in a folder. + /// + /// Id of the folder. + /// A value indicating whether the user is allowed to view the content of the folder. + bool HasGetFileContentPermission(int folderId); + + /// + /// Checks if the current user is allowed to add files to a folder. + /// + /// Current mode of the module instance. + /// Id of the folder. + /// A value indicating whether the user is allowed to add files to the folder. + bool HasAddFilesPermission(int moduleMode, int folderId); + + /// + /// Checks if the current user is allowed to add folders to a folder. + /// + /// Current mode of the module instance. + /// Id of the folder. + /// A value indicating whether the user is allowed to add folders to the folder. + bool HasAddFoldersPermission(int moduleMode, int folderId); + + /// + /// Cehcks if the current user is allowed to delete items from a folder. + /// + /// Current mode of the module instace. + /// Id of the folder. + /// A value indicating whether the user is allowed to delete items from the folder. + bool HasDeletePermission(int moduleMode, int folderId); + + /// + /// Checks if the current user is allowed to manage the items in a folder. + /// + /// Current mode of the module instance. + /// Id of the folder. + /// A value indicating whether the user is allowed to manage the items in the folder. + bool HasManagePermission(int moduleMode, int folderId); + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/ISearchController.cs b/DNN Platform/Modules/ResourceManager/Components/ISearchController.cs new file mode 100644 index 00000000000..909433a65fc --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/ISearchController.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System.Collections.Generic; + + using DotNetNuke.Services.FileSystem; + + /// + /// Provides search functionality for the resource manager. + /// + public interface ISearchController + { + /// + /// Performs the Advanced File Search. + /// + /// The id of the Module. + /// Folder that defines the context of the search. + /// A value indicating whether to include subfolders in search. + /// Search query. + /// The page index to get. + /// The size of each page. + /// A string that defines the sort. + /// Module Mode. + /// Returns the total count (out parameter). + /// Result set of the file search page. + IList SearchFolderContent(int moduleId, IFolderInfo folder, bool recursive, string search, int pageIndex, int pageSize, string sorting, int moduleMode, out int totalCount); + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/IThumbnailsManager.cs b/DNN Platform/Modules/ResourceManager/Components/IThumbnailsManager.cs new file mode 100644 index 00000000000..13c28908489 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/IThumbnailsManager.cs @@ -0,0 +1,85 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System.Drawing; + + using Dnn.Modules.ResourceManager.Components.Models; + + using DotNetNuke.Services.FileSystem; + + /// + /// Manager for Thumbnails on Resource Manager. + /// + public interface IThumbnailsManager + { + /// + /// Checks if a file has an available thumbnail. + /// + /// Name of the file. + /// A value indicating wheter the file is available to get a thumbnail. + bool ThumbnailAvailable(string fileName); + + /// + /// Gets the url of the thumbnail of a file. + /// + /// Id of the module. + /// Id of the file. + /// Width of the thumbnail to generate. + /// Height of the thumbnail to generate. + /// A string containing the url of the requested thumbnail. + string ThumbnailUrl(int moduleId, int fileId, int width, int height); + + /// + /// Gets the url of the thumbnail of a file. + /// + /// Id of the module. + /// Id of the file. + /// Width of the thumbnail to generate. + /// Height of the thumbnail to generate. + /// A timestamp string to append to the url for cachebusting. + /// A string containing the url of the requested thumbnail. + string ThumbnailUrl(int moduleId, int fileId, int width, int height, string timestamp); + + /// + /// Gets the url of the thumbnail of a file. + /// + /// Id of the module. + /// Id of the file. + /// Width of the thumbnail to generate. + /// Height of the thumbnail to generate. + /// The version number of the file. + /// A string containing the url of the requested thumbnail. + string ThumbnailUrl(int moduleId, int fileId, int width, int height, int version); + + /// + /// Get the thumbnail from an image. + /// + /// Url of the image. + /// Width of the thumbnail to generate. + /// Height of the thumbnail to generate. + /// The thumbnail of the image, . + ThumbnailContent GetThumbnailContentFromImageUrl(string imageUrl, int width, int height); + + /// + /// Get the thumbnail from an image. + /// + /// The original image from which to get a thumbnail. + /// Width of the thumbnail to generate. + /// Height of the thumbnail to generate. + /// If true, will crop the thumbnail image. + /// The thumbnail of the image, . + ThumbnailContent GetThumbnailContentFromImage(Image image, int width, int height, bool crop = false); + + /// + /// Get the thumbnail from a file. + /// + /// The file from which to get a thumbnail. + /// Width of the thumbnail to generate. + /// Height of the thumbnail to generate. + /// If true, will crop the thumbnail image. + /// The thumbnail of the file, . + ThumbnailContent GetThumbnailContent(IFileInfo item, int width, int height, bool crop = false); + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/ItemsManager.cs b/DNN Platform/Modules/ResourceManager/Components/ItemsManager.cs new file mode 100644 index 00000000000..495703a4ef2 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/ItemsManager.cs @@ -0,0 +1,254 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System; + using System.Collections.Generic; + using System.IO; + + using Dnn.Modules.ResourceManager.Components.Common; + using Dnn.Modules.ResourceManager.Exceptions; + using Dnn.Modules.ResourceManager.Helpers; + using Dnn.Modules.ResourceManager.Services.Dto; + + using DotNetNuke.Entities; + using DotNetNuke.Entities.Content; + using DotNetNuke.Entities.Portals; + using DotNetNuke.Entities.Users; + using DotNetNuke.Framework; + using DotNetNuke.Security.Roles; + using DotNetNuke.Services.Assets; + using DotNetNuke.Services.FileSystem; + using DotNetNuke.Services.FileSystem.EventArgs; + using DotNetNuke.Services.Localization; + + /// + /// Provides services to manage items. + /// + public class ItemsManager : ServiceLocator, IItemsManager + { + private const int MaxDescriptionLength = 500; + private readonly IRoleController roleController; + private readonly IFileManager fileManager; + private readonly IAssetManager assetManager; + private readonly IPermissionsManager permissionsManager; + + /// + /// Initializes a new instance of the class. + /// + public ItemsManager() + { + this.roleController = RoleController.Instance; + this.fileManager = FileManager.Instance; + this.assetManager = AssetManager.Instance; + this.permissionsManager = PermissionsManager.Instance; + } + + /// + public ContentPage GetFolderContent(int folderId, int startIndex, int numItems, string sorting, int moduleMode) + { + var noPermissionMessage = Localization.GetExceptionMessage( + "UserHasNoPermissionToBrowseFolder", + Constants.UserHasNoPermissionToBrowseFolderDefaultMessage); + + if (!this.permissionsManager.HasFolderContentPermission(folderId, moduleMode)) + { + throw new FolderPermissionNotMetException(noPermissionMessage); + } + + try + { + return AssetManager.Instance.GetFolderContent(folderId, startIndex, numItems, sorting + " ASC"); + } + catch (AssetManagerException) + { + throw new FolderPermissionNotMetException(noPermissionMessage); + } + } + + /// + public Stream GetFileContent(int fileId, out string fileName, out string contentType) + { + var file = this.fileManager.GetFile(fileId, true); + + if (!this.permissionsManager.HasGetFileContentPermission(file.FolderId)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString(Constants.UserHasNoPermissionToDownloadKey)); + } + + var content = this.fileManager.GetFileContent(file); + fileName = file.FileName; + contentType = file.ContentType; + + EventManager.Instance.OnFileDownloaded(new FileDownloadedEventArgs + { + FileInfo = file, + UserId = UserController.Instance.GetCurrentUserInfo().UserID, + }); + return content; + } + + /// + public IFolderInfo CreateNewFolder(string folderName, int parentFolderId, int folderMappingId, string mappedName, int moduleMode) + { + if (!this.permissionsManager.HasAddFoldersPermission(moduleMode, parentFolderId)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString(Constants.UserHasNoPermissionToAddFoldersKey)); + } + + return AssetManager.Instance.CreateFolder(folderName, parentFolderId, folderMappingId, mappedName); + } + + /// + public void SaveFileDetails(IFileInfo file, FileDetailsRequest fileDetails) + { + var propertyChanged = false; + + this.assetManager.RenameFile(file.FileId, fileDetails.FileName); + if (file.Title != fileDetails.Title) + { + file.Title = fileDetails.Title; + propertyChanged = true; + } + + if (file.Description != fileDetails.Description) + { + file.Description = fileDetails.Description; + if (!string.IsNullOrEmpty(file.Description) && file.Description.Length > MaxDescriptionLength) + { + file.Description = file.Description.Substring(0, MaxDescriptionLength); + } + + propertyChanged = true; + } + + if (propertyChanged) + { + FileManager.Instance.UpdateFile(file); + } + } + + /// + public void SaveFolderDetails(IFolderInfo folder, FolderDetailsRequest folderDetails) + { + this.assetManager.RenameFolder(folderDetails.FolderId, folderDetails.FolderName); + folder.FolderPermissions.Clear(); + folder.FolderPermissions.AddRange(folderDetails.Permissions.RolePermissions.ToPermissionInfos(folderDetails.FolderId)); + folder.FolderPermissions.AddRange(folderDetails.Permissions.UserPermissions.ToPermissionInfos(folderDetails.FolderId)); + FolderManager.Instance.UpdateFolder(folder); + } + + /// + public void DeleteFile(int fileId, int moduleMode, int groupId) + { + var file = FileManager.Instance.GetFile(fileId); + if (file == null) + { + return; + } + + if (moduleMode == (int)Constants.ModuleModes.Group && this.IsGroupIcon(file)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString(Constants.GroupIconCantBeDeletedKey)); + } + + if (!this.permissionsManager.HasDeletePermission(moduleMode, file.FolderId)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString("UserHasNoPermissionToDeleteFile.Error")); + } + + AssetManager.Instance.DeleteFile(fileId); + } + + /// + public void DeleteFolder(int folderId, bool unlinkAllowedStatus, int moduleMode) + { + var folder = FolderManager.Instance.GetFolder(folderId); + if (folder == null) + { + return; + } + + if (!this.permissionsManager.HasDeletePermission(moduleMode, folderId)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString("UserHasNoPermissionToDeleteFolder.Error")); + } + + var nonDeletedSubfolders = new List(); + AssetManager.Instance.DeleteFolder(folderId, unlinkAllowedStatus, nonDeletedSubfolders); + } + + /// + public void MoveFile(int sourceFileId, int destinationFolderId, int moduleMode, int groupId) + { + var file = FileManager.Instance.GetFile(sourceFileId); + var destinationFolder = FolderManager.Instance.GetFolder(destinationFolderId); + + if (file == null || destinationFolder == null) + { + return; + } + + if (!this.permissionsManager.HasDeletePermission(moduleMode, file.FolderId)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString("UserHasNoPermissionToDeleteFolder.Error")); + } + + if (!this.permissionsManager.HasAddFilesPermission(moduleMode, destinationFolderId)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString("UserHasNoPermissionToManageFolder.Error")); + } + + FileManager.Instance.MoveFile(file, destinationFolder); + } + + /// + public void MoveFolder(int sourceFolderId, int destinationFolderId, int moduleMode, int groupId) + { + var sourceFolder = FolderManager.Instance.GetFolder(sourceFolderId); + var sourceFolderParent = FolderManager.Instance.GetFolder(sourceFolder.ParentID); + var destinationFolder = FolderManager.Instance.GetFolder(destinationFolderId); + + if (sourceFolder == null || destinationFolder == null || sourceFolderParent == null) + { + return; + } + + if ( + !this.permissionsManager.HasDeletePermission(moduleMode, sourceFolderId) || + !this.permissionsManager.HasDeletePermission(moduleMode, sourceFolderParent.FolderID)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString("UserHasNoPermissionToDeleteFolder.Error")); + } + + if ( + !this.permissionsManager.HasAddFilesPermission(moduleMode, destinationFolderId) || + !this.permissionsManager.HasAddFoldersPermission(moduleMode, destinationFolderId)) + { + throw new FolderPermissionNotMetException(LocalizationHelper.GetString("UserHasNoPermissionToManageFolder.Error")); + } + + FolderManager.Instance.MoveFolder(sourceFolder, destinationFolder); + } + + /// + protected override Func GetFactory() + { + return () => new ItemsManager(); + } + + private bool IsGroupIcon(IFileInfo file) + { + var groupId = Utils.GetFolderGroupId(file.FolderId); + if (groupId < 0) + { + return false; + } + + var portalId = PortalSettings.Current.PortalId; + var role = this.roleController.GetRoleById(portalId, groupId); + return role?.IconFile?.Substring(7) == file.FileId.ToString(); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/LocalizationController.cs b/DNN Platform/Modules/ResourceManager/Components/LocalizationController.cs new file mode 100644 index 00000000000..0e9c251fe50 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/LocalizationController.cs @@ -0,0 +1,256 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Threading; + using System.Web.Caching; + using System.Xml; + + using Dnn.Modules.ResourceManager.Components.Models; + + using DotNetNuke.Common; + using DotNetNuke.Common.Utilities; + using DotNetNuke.Framework; + using DotNetNuke.Services.Cache; + + /// + /// Provides localization services. + /// + public class LocalizationController : ServiceLocator, ILocalizationController + { + /// + public string CultureName => Instance.CultureName; + + /// + public Dictionary GetLocalizedDictionary(string resourceFile, string culture) => + Instance.GetLocalizedDictionary(resourceFile, culture); + + /// + public Dictionary GetLocalizedDictionary(string resourceFile, string culture, Localization localization) => + Instance.GetLocalizedDictionary(resourceFile, culture, localization); + + /// + public long GetResxTimeStamp(string resourceFile, Localization localization) + => Instance.GetResxTimeStamp(resourceFile, localization); + + /// + protected override Func GetFactory() + { + return () => new LocalizationControllerImplementation(); + } + + /// + /// The localization controller implementation. + /// + private class LocalizationControllerImplementation : ILocalizationController + { + private static readonly TimeSpan FiveMinutes = TimeSpan.FromMinutes(5); + private static readonly TimeSpan OneHour = TimeSpan.FromHours(1); + + /// + public string CultureName + { + get { return Thread.CurrentThread.CurrentUICulture.Name; } + } + + /// + public long GetResxTimeStamp(string resourceFile, Localization localization) + { + return this.GetLastModifiedTime(resourceFile, this.CultureName, localization).Ticks; + } + + /// + public Dictionary GetLocalizedDictionary(string resourceFile, string culture, Localization localization) + { + Requires.NotNullOrEmpty("resourceFile", resourceFile); + Requires.NotNullOrEmpty("culture", culture); + + var cacheKey = string.Format(localization.ResxDataCacheKey, culture, resourceFile); + var localizedDict = DataCache.GetCache(cacheKey) as Dictionary; + if (localizedDict != null) + { + return localizedDict; + } + + var dictionary = new Dictionary(); + + foreach ( + var kvp in + GetLocalizationValues(resourceFile, culture).Where(kvp => !dictionary.ContainsKey(kvp.Key))) + { + dictionary[kvp.Key] = kvp.Value; + } + + DataCache.SetCache( + cacheKey, + dictionary, + default(DNNCacheDependency), + Cache.NoAbsoluteExpiration, + FiveMinutes, + CacheItemPriority.Normal, + null); + + return dictionary; + } + + /// + public Dictionary GetLocalizedDictionary(string resourceFile, string culture) + { + Requires.NotNullOrEmpty("resourceFile", resourceFile); + Requires.NotNullOrEmpty("culture", culture); + + var cacheKey = string.Format(Constants.LocalizationDataCacheKey, culture, resourceFile); + var localizedDict = DataCache.GetCache(cacheKey) as Dictionary; + if (localizedDict != null) + { + return localizedDict; + } + + var dictionary = new Dictionary(); + foreach ( + var kvp in + GetLocalizationValues(resourceFile, culture).Where(kvp => !dictionary.ContainsKey(kvp.Key))) + { + dictionary[kvp.Key] = kvp.Value; + } + + DataCache.SetCache( + cacheKey, + dictionary, + default(DNNCacheDependency), + Cache.NoAbsoluteExpiration, + Constants.FiveMinutes, + CacheItemPriority.Normal, + null); + + return dictionary; + } + + private static string GetNameAttribute(XmlNode node) + { + if (node.Attributes != null) + { + var attribute = node.Attributes.GetNamedItem("name"); + if (attribute != null) + { + return attribute.Value; + } + } + + return null; + } + + private static void AssertHeaderValue(IEnumerable headers, string key, string value) + { + var header = + headers.FirstOrDefault( + x => GetNameAttribute(x).Equals(key, StringComparison.InvariantCultureIgnoreCase)); + if (header != null) + { + if (!header.InnerText.Equals(value, StringComparison.InvariantCultureIgnoreCase)) + { + throw new ApplicationException(string.Format("Resource header '{0}' != '{1}'", key, value)); + } + } + else + { + throw new ApplicationException(string.Format("Resource header '{0}' is missing", key)); + } + } + + private static IEnumerable> GetLocalizationValues(string fullPath, string culture) + { + using ( + var stream = new FileStream( + System.Web.HttpContext.Current.Server.MapPath(fullPath), + FileMode.Open, + FileAccess.Read)) + { + var document = new XmlDocument { XmlResolver = null }; + document.Load(stream); + + var headers = document.SelectNodes(@"/root/resheader").Cast().ToArray(); + AssertHeaderValue(headers, "resmimetype", "text/microsoft-resx"); + + foreach (var xmlNode in document.SelectNodes("/root/data").Cast()) + { + var name = GetNameAttribute(xmlNode); + + const string textPostFix = ".Text"; + if (name.EndsWith(textPostFix)) + { + name = name.Substring(0, name.Length - textPostFix.Length); + } + + if (string.IsNullOrEmpty(name)) + { + continue; + } + + var key = name; + if (key.Contains(".")) + { + key = name + textPostFix; + } + + var value = DotNetNuke.Services.Localization.Localization.GetString(key, fullPath, culture); + + yield return new KeyValuePair(name, value); + } + } + } + + private DateTime GetLastModifiedTime(string resourceFile, string culture, Localization localization) + { + Requires.NotNullOrEmpty("culture", culture); + + var cacheKey = string.Format(localization.ResxModifiedDateCacheKey, culture); + var cachedData = DataCache.GetCache(cacheKey); + if (cachedData is DateTime) + { + return (DateTime)DataCache.GetCache(cacheKey); + } + + var lastModifiedDate = this.GetLastModifiedTimeInternal(resourceFile, culture); + + DataCache.SetCache( + cacheKey, + lastModifiedDate, + default(DNNCacheDependency), + Cache.NoAbsoluteExpiration, + OneHour, + CacheItemPriority.Normal, + null); + + return lastModifiedDate; + } + + private DateTime GetLastModifiedTimeInternal(string resourceFile, string culture) + { + var cultureSpecificFile = System.Web.HttpContext.Current.Server.MapPath( + resourceFile.Replace(".resx", string.Empty) + "." + culture + ".resx"); + var lastModifiedDate = DateTime.MinValue; + + if (File.Exists(cultureSpecificFile)) + { + lastModifiedDate = File.GetLastWriteTime(cultureSpecificFile); + } + else + { + var cultureNeutralFile = System.Web.HttpContext.Current.Server.MapPath(resourceFile); + if (File.Exists(cultureNeutralFile)) + { + lastModifiedDate = File.GetLastWriteTime(cultureNeutralFile); + } + } + + return lastModifiedDate; + } + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/Models/Localization.cs b/DNN Platform/Modules/ResourceManager/Components/Models/Localization.cs new file mode 100644 index 00000000000..c94002c433e --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/Models/Localization.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components.Models +{ + /// + /// Represents a localization caching information. + /// + public class Localization + { + /// + /// Gets or sets the resource file localization cache key. + /// + public string ResxDataCacheKey { get; set; } + + /// + /// Gets or sets the modified date cache key. + /// + public string ResxModifiedDateCacheKey { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/Models/ThumbnailContent.cs b/DNN Platform/Modules/ResourceManager/Components/Models/ThumbnailContent.cs new file mode 100644 index 00000000000..d2d7be1d417 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/Models/ThumbnailContent.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components.Models +{ + using System.Net.Http; + + /// + /// Represents the content of a thumbnail. + /// + public class ThumbnailContent + { + /// + /// Gets or sets the thumbnail content as a byte array. + /// + public ByteArrayContent Content { get; set; } + + /// + /// Gets or sets the content type of the thumbnail. + /// + public string ContentType { get; set; } + + /// + /// Gets or sets the thumbnail height. + /// + public int Height { get; set; } + + /// + /// Gets or sets the thumbnail name. + /// + public string ThumbnailName { get; set; } + + /// + /// Gets or sets the thumbnail width. + /// + public int Width { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs new file mode 100644 index 00000000000..805a45e126b --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs @@ -0,0 +1,241 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.Modules.ResourceManager.Components +{ + using System.Collections; + using System.Collections.Generic; + using System.Linq; + + using Dnn.Modules.ResourceManager.Services.Dto; + + using DotNetNuke.Common; + using DotNetNuke.Common.Utilities; + using DotNetNuke.Entities.Portals; + using DotNetNuke.Security.Permissions; + using DotNetNuke.Security.Roles; + + /// + /// Helper methods for permissions. + /// + public static class PermissionHelper + { + /// + /// Adds user permissions to the dto. + /// + /// data transfer object to extend. + /// Permission to add. + public static void AddUserPermission(this Permissions dto, PermissionInfoBase permissionInfo) + { + var userPermission = dto.UserPermissions.FirstOrDefault(p => p.UserId == permissionInfo.UserID); + if (userPermission == null) + { + userPermission = new UserPermission + { + UserId = permissionInfo.UserID, + DisplayName = permissionInfo.DisplayName, + }; + dto.UserPermissions.Add(userPermission); + } + + if (userPermission.Permissions.All(p => p.PermissionId != permissionInfo.PermissionID)) + { + userPermission.Permissions.Add(new Permission + { + PermissionId = permissionInfo.PermissionID, + PermissionName = permissionInfo.PermissionName, + AllowAccess = permissionInfo.AllowAccess, + }); + } + } + + /// + /// Adds role permissions to the dto. + /// + /// dto to extend. + /// Permission to add. + public static void AddRolePermission(this Permissions dto, PermissionInfoBase permissionInfo) + { + var rolePermission = dto.RolePermissions.FirstOrDefault(p => p.RoleId == permissionInfo.RoleID); + if (rolePermission == null) + { + rolePermission = new RolePermission + { + RoleId = permissionInfo.RoleID, + RoleName = permissionInfo.RoleName, + }; + dto.RolePermissions.Add(rolePermission); + } + + if (rolePermission.Permissions.All(p => p.PermissionId != permissionInfo.PermissionID)) + { + rolePermission.Permissions.Add(new Permission + { + PermissionId = permissionInfo.PermissionID, + PermissionName = permissionInfo.PermissionName, + AllowAccess = permissionInfo.AllowAccess, + }); + } + } + + /// + /// Ensures the dto has the default roles. + /// + /// dto to extend. + public static void EnsureDefaultRoles(this Permissions dto) + { + // Administrators Role always has implicit permissions, then it should be always in + dto.EnsureRole(RoleController.Instance.GetRoleById(PortalSettings.Current.PortalId, PortalSettings.Current.AdministratorRoleId), true, true); + + // Show also default roles + dto.EnsureRole(RoleController.Instance.GetRoleById(PortalSettings.Current.PortalId, PortalSettings.Current.RegisteredRoleId), false, true); + dto.EnsureRole(new RoleInfo { RoleID = int.Parse(Globals.glbRoleAllUsers), RoleName = Globals.glbRoleAllUsersName }, false, true); + } + + /// + /// Ensures the dto has the given role. + /// + /// data transfer object to extend. + /// The role to ensure is include, . + public static void EnsureRole(this Permissions dto, RoleInfo role) + { + dto.EnsureRole(role, false); + } + + /// + /// Ensures the dto has the given role. + /// + /// The dto to extend. + /// The role ensure is included. + /// A value indicating whether that role is locked. + public static void EnsureRole(this Permissions dto, RoleInfo role, bool locked) + { + dto.EnsureRole(role, locked, false); + } + + /// + /// Ensures the dto has a specific role. + /// + /// The dto to extend. + /// The role to ensure is included. + /// A value indicating whether the role is locked. + /// A value indicating whether the role is a default role. + public static void EnsureRole(this Permissions dto, RoleInfo role, bool locked, bool isDefault) + { + if (dto.RolePermissions.All(r => r.RoleId != role.RoleID)) + { + dto.RolePermissions.Add(new RolePermission + { + RoleId = role.RoleID, + RoleName = role.RoleName, + Locked = locked, + IsDefault = isDefault, + }); + } + } + + /// + /// Check if the permission is for full control. + /// + /// The to check. + /// A value indicating whether this permission is for full control. + public static bool IsFullControl(PermissionInfo permissionInfo) + { + return (permissionInfo.PermissionKey == "EDIT") && PermissionProvider.Instance().SupportsFullControl(); + } + + /// + /// Checks if the permission is for view. + /// + /// The to check. + /// A value indicating whether the permission is for view. + public static bool IsViewPermission(PermissionInfo permissionInfo) + { + return permissionInfo.PermissionKey == "VIEW"; + } + + /// + /// Gets roles for the portal. + /// + /// The id of the portal. + /// An objected containing the roles. + public static object GetRoles(int portalId) + { + var data = new { Groups = new List(), Roles = new List() }; + + // retreive role groups info + data.Groups.Add(new { GroupId = -2, Name = "AllRoles" }); + data.Groups.Add(new { GroupId = -1, Name = "GlobalRoles", Selected = true }); + + foreach (RoleGroupInfo group in RoleController.GetRoleGroups(portalId)) + { + data.Groups.Add(new { GroupId = group.RoleGroupID, Name = group.RoleGroupName }); + } + + // retreive roles info + data.Roles.Add(new { RoleID = int.Parse(Globals.glbRoleUnauthUser), GroupId = -1, RoleName = Globals.glbRoleUnauthUserName }); + data.Roles.Add(new { RoleID = int.Parse(Globals.glbRoleAllUsers), GroupId = -1, RoleName = Globals.glbRoleAllUsersName }); + foreach (RoleInfo role in RoleController.Instance.GetRoles(portalId).OrderBy(r => r.RoleName)) + { + data.Roles.Add(new { GroupId = role.RoleGroupID, RoleId = role.RoleID, Name = role.RoleName }); + } + + return data; + } + + /// + /// Converts roles permissions into permission info collection. + /// + /// The list of to convert. + /// The folder id. + /// An ArrayList of . + public static ArrayList ToPermissionInfos(this IList permissions, int folderId) + { + var newPermissions = new ArrayList(); + foreach (var permission in permissions) + { + foreach (var p in permission.Permissions) + { + newPermissions.Add(new FolderPermissionInfo() + { + AllowAccess = p.AllowAccess, + FolderID = folderId, + PermissionID = p.PermissionId, + RoleID = permission.RoleId, + UserID = Null.NullInteger, + }); + } + } + + return newPermissions; + } + + /// + /// Converts a list of into a collection of . + /// + /// The list of to extend. + /// The id of the folder. + /// An ArrayList of . + public static ArrayList ToPermissionInfos(this IList permissions, int folderId) + { + var newPermissions = new ArrayList(); + foreach (var permission in permissions) + { + foreach (var p in permission.Permissions) + { + newPermissions.Add(new FolderPermissionInfo() + { + AllowAccess = p.AllowAccess, + FolderID = folderId, + PermissionID = p.PermissionId, + RoleID = Null.NullInteger, + UserID = permission.UserId, + }); + } + } + + return newPermissions; + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/PermissionsManager.cs b/DNN Platform/Modules/ResourceManager/Components/PermissionsManager.cs new file mode 100644 index 00000000000..3bfc50cdf6d --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/PermissionsManager.cs @@ -0,0 +1,211 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System; + + using Dnn.Modules.ResourceManager.Components.Common; + + using DotNetNuke.Entities.Portals; + using DotNetNuke.Entities.Users; + using DotNetNuke.Framework; + using DotNetNuke.Security.Permissions; + using DotNetNuke.Security.Roles; + using DotNetNuke.Services.FileSystem; + + /// + /// Provides permissions checks. + /// + public class PermissionsManager : ServiceLocator, IPermissionsManager + { + private readonly IFolderManager folderManager; + private readonly IRoleController roleController; + private readonly IUserController userController; + + /// + /// Initializes a new instance of the class. + /// + public PermissionsManager() + { + this.folderManager = FolderManager.Instance; + this.roleController = RoleController.Instance; + this.userController = UserController.Instance; + } + + /// + public bool HasFolderContentPermission(int folderId, int moduleMode) + { + return this.HasGroupFolderPublicOrMemberPermission(folderId); + } + + /// + public bool HasGetFileContentPermission(int folderId) + { + if (!this.HasGroupFolderPublicOrMemberPermission(folderId)) + { + return false; + } + + var folder = this.folderManager.GetFolder(folderId); + return HasPermission(folder, "READ"); + } + + /// + public bool HasAddFilesPermission(int moduleMode, int folderId) + { + if (!this.HasGroupFolderMemberPermission(folderId)) + { + return false; + } + + if (moduleMode == (int)Constants.ModuleModes.User && !this.IsUserFolder(folderId)) + { + return false; + } + + var folder = this.folderManager.GetFolder(folderId); + return folder != null && HasPermission(folder, "ADD"); + } + + /// + public bool HasAddFoldersPermission(int moduleMode, int folderId) + { + if (!this.HasGroupFolderOwnerPermission(folderId)) + { + return false; + } + + if (moduleMode == (int)Constants.ModuleModes.User) + { + return false; + } + + var folder = this.folderManager.GetFolder(folderId); + return folder != null && HasPermission(folder, "ADD"); + } + + /// + public bool HasDeletePermission(int moduleMode, int folderId) + { + if (!this.HasGroupFolderOwnerPermission(folderId)) + { + return false; + } + + if (moduleMode == (int)Constants.ModuleModes.User && !this.IsUserFolder(folderId)) + { + return false; + } + + var folder = this.folderManager.GetFolder(folderId); + return FolderPermissionController.CanDeleteFolder((FolderInfo)folder); + } + + /// + public bool HasManagePermission(int moduleMode, int folderId) + { + if (!this.HasGroupFolderOwnerPermission(folderId)) + { + return false; + } + + if (moduleMode == (int)Constants.ModuleModes.User && !this.IsUserFolder(folderId)) + { + return false; + } + + var folder = this.folderManager.GetFolder(folderId); + return FolderPermissionController.CanManageFolder((FolderInfo)folder); + } + + /// + /// Checks if the current user has permission on a group folder. + /// + /// The id of the folder. + /// A value indicating whether the user has permission on the group folder. + public bool HasGroupFolderMemberPermission(int folderId) + { + var groupId = Utils.GetFolderGroupId(folderId); + if (groupId < 0) + { + return true; + } + + return this.UserIsGroupMember(groupId); + } + + /// + protected override Func GetFactory() + { + return () => new PermissionsManager(); + } + + /// + /// Check if a user has a specific permission key on a folder. + /// + /// The id of the folder to check. + /// The permission key. + /// A value indicating whether the user has the permission key for the folder. + private static bool HasPermission(IFolderInfo folder, string permissionKey) + { + var hasPermission = PortalSettings.Current.UserInfo.IsSuperUser; + + if (!hasPermission && folder != null) + { + hasPermission = FolderPermissionController.HasFolderPermission(folder.FolderPermissions, permissionKey); + } + + return hasPermission; + } + + private bool HasGroupFolderPublicOrMemberPermission(int folderId) + { + var groupId = Utils.GetFolderGroupId(folderId); + if (groupId < 0) + { + return true; + } + + var portalId = PortalSettings.Current.PortalId; + var folderGroup = this.roleController.GetRoleById(portalId, groupId); + + return folderGroup.IsPublic || this.UserIsGroupMember(groupId); + } + + private bool HasGroupFolderOwnerPermission(int folderId) + { + var groupId = Utils.GetFolderGroupId(folderId); + if (groupId < 0) + { + return true; + } + + return this.UserIsGroupOwner(groupId); + } + + private bool UserIsGroupMember(int groupId) + { + return this.GetUserRoleInfo(groupId) != null; + } + + private bool UserIsGroupOwner(int groupId) + { + var userRole = this.GetUserRoleInfo(groupId); + return userRole != null && userRole.IsOwner; + } + + private bool IsUserFolder(int folderId) + { + var user = this.userController.GetCurrentUserInfo(); + return this.folderManager.GetUserFolder(user).FolderID == folderId; + } + + private UserRoleInfo GetUserRoleInfo(int groupId) + { + var userId = this.userController.GetCurrentUserInfo().UserID; + var portalId = PortalSettings.Current.PortalId; + return this.roleController.GetUserRole(portalId, userId, groupId); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/SearchController.cs b/DNN Platform/Modules/ResourceManager/Components/SearchController.cs new file mode 100644 index 00000000000..c0403d8e3b4 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/SearchController.cs @@ -0,0 +1,83 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System; + using System.Collections.Generic; + using System.Linq; + + using Dnn.Modules.ResourceManager.Exceptions; + + using DotNetNuke.ComponentModel; + using DotNetNuke.Services.Assets; + using DotNetNuke.Services.FileSystem; + using DotNetNuke.Services.Localization; + + /// + /// Provides search functionality. + /// + public class SearchController : ComponentBase, ISearchController + { + private readonly IPermissionsManager permissionsManager; + + /// + /// Initializes a new instance of the class. + /// + public SearchController() + { + this.permissionsManager = PermissionsManager.Instance; + } + + /// + public IList SearchFolderContent(int moduleId, IFolderInfo folder, bool recursive, string search, int pageIndex, int pageSize, string sorting, int moduleMode, out int totalCount) + { + var noPermissionMessage = Localization.GetExceptionMessage( + "UserHasNoPermissionToBrowseFolder", + Constants.UserHasNoPermissionToBrowseFolderDefaultMessage); + + if (!this.permissionsManager.HasFolderContentPermission(folder.FolderID, moduleMode)) + { + throw new FolderPermissionNotMetException(noPermissionMessage); + } + + search = (search ?? string.Empty).Trim(); + + var files = FolderManager.Instance.SearchFiles(folder, search, recursive); + var sortProperties = SortProperties.Parse(sorting); + var sortedFiles = SortFiles(files, sortProperties).ToList(); + totalCount = sortedFiles.Count; + + return sortedFiles.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); + } + + private static IEnumerable SortFiles(IEnumerable files, SortProperties sortProperties) + { + switch (sortProperties.Column) + { + case "ItemName": + return OrderBy(files, f => f.FileName, sortProperties.Ascending); + case "LastModifiedOnDate": + return OrderBy(files, f => f.LastModifiedOnDate, sortProperties.Ascending); + case "Size": + return OrderBy(files, f => f.Size, sortProperties.Ascending); + case "ParentFolder": + return OrderBy(files, f => f.FolderId, new FolderPathComparer(), sortProperties.Ascending); + case "CreatedOnDate": + return OrderBy(files, f => f.CreatedOnDate, sortProperties.Ascending); + default: + return files; + } + } + + private static IOrderedEnumerable OrderBy(IEnumerable source, Func keySelector, bool ascending) + { + return ascending ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector); + } + + private static IOrderedEnumerable OrderBy(IEnumerable source, Func keySelector, IComparer comparer, bool ascending) + { + return ascending ? source.OrderBy(keySelector, comparer) : source.OrderByDescending(keySelector, comparer); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/SettingsManager.cs b/DNN Platform/Modules/ResourceManager/Components/SettingsManager.cs new file mode 100644 index 00000000000..bde7438b08b --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/SettingsManager.cs @@ -0,0 +1,112 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System.Collections; + + using Dnn.Modules.ResourceManager.Exceptions; + + using DotNetNuke.Entities.Modules; + using DotNetNuke.Entities.Portals; + using DotNetNuke.Entities.Users; + using DotNetNuke.Services.FileSystem; + + using static Dnn.Modules.ResourceManager.Components.Constants; + + /// + /// Manages module settings. + /// + public class SettingsManager + { + private readonly Hashtable moduleSettingsDictionary; + private readonly int groupId; + + /// + /// Initializes a new instance of the class. + /// + /// The id of the module. + /// The id of the group. + public SettingsManager(int moduleId, int groupId) + { + this.groupId = groupId; + var moduleController = new ModuleController(); + var module = moduleController.GetModule(moduleId); + + this.moduleSettingsDictionary = module.ModuleSettings; + this.LoadSettings(); + } + + /// + /// Gets or sets the id of the home folder. + /// + public int HomeFolderId { get; set; } + + /// + /// Gets or sets the module mode, . + /// + public int Mode { get; set; } + + private void LoadSettings() + { + this.Mode = this.GetSettingIntValueOrDefault(ModeSettingName, DefaultMode); + this.ValidateMode(this.Mode); + this.HomeFolderId = this.GetHomeFolderId(this.Mode); + } + + private int GetSettingIntValueOrDefault(string settingName, int defaultValue = -1) + { + var settingValue = this.moduleSettingsDictionary.ContainsKey(settingName) ? this.moduleSettingsDictionary[settingName].ToString() : null; + + return string.IsNullOrEmpty(settingValue) ? defaultValue : int.Parse(settingValue); + } + + private void ValidateMode(int moduleMode) + { + switch (moduleMode) + { + case (int)ModuleModes.Group: + if (this.groupId <= 0) + { + throw new ModeValidationException("GroupModeError"); + } + + break; + + case (int)ModuleModes.User: + var user = UserController.Instance.GetCurrentUserInfo(); + if (user.UserID < 0) + { + throw new ModeValidationException("UserModeError"); + } + + break; + } + } + + private int GetHomeFolderId(int moduleMode) + { + var portalId = PortalSettings.Current.PortalId; + var folderId = 0; + + switch (moduleMode) + { + case (int)ModuleModes.Group: + folderId = GroupManager.Instance.FindOrCreateGroupFolder(portalId, this.groupId).FolderID; + break; + + case (int)ModuleModes.User: + var user = UserController.Instance.GetCurrentUserInfo(); + folderId = FolderManager.Instance.GetUserFolder(user).FolderID; + break; + + case (int)ModuleModes.Normal: + var defaultHomeFolderId = FolderManager.Instance.GetFolder(portalId, string.Empty).FolderID; + folderId = this.GetSettingIntValueOrDefault(HomeFolderSettingName, defaultHomeFolderId); + break; + } + + return folderId; + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Components/ThumbnailsManager.cs b/DNN Platform/Modules/ResourceManager/Components/ThumbnailsManager.cs new file mode 100644 index 00000000000..5d7ece60a86 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Components/ThumbnailsManager.cs @@ -0,0 +1,220 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Components +{ + using System; + using System.Drawing; + using System.Drawing.Imaging; + using System.IO; + using System.Net.Http; + + using Dnn.Modules.ResourceManager.Components.Models; + + using DotNetNuke.Entities.Tabs; + using DotNetNuke.Framework; + using DotNetNuke.Services.FileSystem; + + /// + /// Provides services related to thumbnails. + /// + public class ThumbnailsManager : ServiceLocator, IThumbnailsManager + { + private const int DefaultMaxWidth = 320; + private const int DefaultMaxHeight = 240; + private readonly IFileManager fileManager; + + /// + /// Initializes a new instance of the class. + /// + public ThumbnailsManager() + { + this.fileManager = FileManager.Instance; + } + + /// + /// Enumerates the possible thumbnail file name extensions. + /// + private enum ThumbnailExtensions + { + /// + /// A JPEG thumbnail. + /// + JPEG, + + /// + /// A JPG thumbnail. + /// + JPG, + + /// + /// A PNG thumbnail. + /// + PNG, + + /// + /// A GIF thumbnail. + /// + GIF, + } + + /// + /// Gets the default content mime type. + /// + public string DefaultContentType => "image/png"; + + /// + /// Gets the default file name extension. + /// + public string DefaultThumbnailExtension => "png"; + + /// + public bool ThumbnailAvailable(string fileName) + { + var ext = Path.GetExtension(fileName).ToUpperInvariant(); + ext = ext.StartsWith(".") ? ext.Substring(1) : ext; + return Enum.TryParse(ext, out ThumbnailExtensions _); + } + + /// + public string ThumbnailUrl(int moduleId, int fileId, int width, int height) + { + return this.ThumbnailUrl(moduleId, fileId, width, height, this.GetNewTimeStamp()); + } + + /// + public string ThumbnailUrl(int moduleId, int fileId, int width, int height, string timestamp) + { + var tabId = TabController.CurrentPage.TabID; + + return + $"{ServicesFramework.GetServiceFrameworkRoot()}API/ResourceManager/Items/ThumbnailDownLoad?fileId={fileId}&width={width}&height={height}×tamp={timestamp}&moduleId={moduleId}&tabId={tabId}"; + } + + /// + public string ThumbnailUrl(int moduleId, int fileId, int width, int height, int version) + { + var result = this.ThumbnailUrl(moduleId, fileId, width, height, this.GetNewTimeStamp()); + return result + "&version=" + version; + } + + /// + public ThumbnailContent GetThumbnailContentFromImageUrl(string imageUrl, int width, int height) + { + Image image = new Bitmap(imageUrl); + var result = this.GetThumbnailContentFromImage(image, width, height); + var indexOfSlash = imageUrl.LastIndexOf('/'); + var thumbnailName = (indexOfSlash != -1) ? imageUrl.Substring(indexOfSlash + 1) + "." + this.DefaultThumbnailExtension : imageUrl + "." + this.DefaultThumbnailExtension; + result.ThumbnailName = thumbnailName; + return result; + } + + /// + public ThumbnailContent GetThumbnailContentFromImage(Image image, int width, int height, bool crop = false) + { + int thumbnailWidth; + int thumbnailHeight; + + if (crop) + { + this.GetCroppedThumbnailSize(image, width, height, out thumbnailWidth, out thumbnailHeight); + } + else + { + this.GetThumbnailSize(image, width, height, out thumbnailWidth, out thumbnailHeight); + } + + // create the actual thumbnail image + var thumbnailImage = new Bitmap(image, new Size(thumbnailWidth, thumbnailHeight)); + + using (var memoryStream = new MemoryStream()) + { + // All thumbnails images will be png + thumbnailImage.Save(memoryStream, ImageFormat.Png); + + return new ThumbnailContent + { + Content = new ByteArrayContent(memoryStream.ToArray()), + Width = thumbnailWidth, + Height = thumbnailHeight, + ContentType = this.DefaultContentType, + }; + } + } + + /// + public ThumbnailContent GetThumbnailContent(IFileInfo item, int width, int height, bool crop = false) + { + using (var content = this.fileManager.GetFileContent(item)) + { + Image image = new Bitmap(content); + var result = this.GetThumbnailContentFromImage(image, width, height, crop); + result.ThumbnailName = item.FileName + "." + this.DefaultThumbnailExtension; + return result; + } + } + + /// + protected override Func GetFactory() + { + return () => new ThumbnailsManager(); + } + + private int GetMinSizeValue(int thumbnailMaxSize, int imageMaxSize, int imageMinSize) + { + if (thumbnailMaxSize == imageMaxSize) + { + return imageMinSize; + } + + return (int)Math.Round(imageMinSize * (double)thumbnailMaxSize / imageMaxSize); + } + + private int GetMaxSizeValue(int size, int imageSize, int defaultMaxValue) + { + if (size >= imageSize) + { + return imageSize; + } + + var minimum = Math.Min(size, defaultMaxValue); + return (minimum <= 0) ? defaultMaxValue : minimum; + } + + private void GetThumbnailSize(Image image, int width, int height, out int thumbnailWidth, out int thumbnailHeight) + { + if (image.Width >= image.Height) + { + thumbnailWidth = this.GetMaxSizeValue(width, image.Width, DefaultMaxWidth); + thumbnailHeight = this.GetMinSizeValue(thumbnailWidth, image.Width, image.Height); + } + else + { + thumbnailHeight = this.GetMaxSizeValue(height, image.Height, DefaultMaxHeight); + thumbnailWidth = this.GetMinSizeValue(thumbnailHeight, image.Height, image.Width); + } + } + + private void GetCroppedThumbnailSize(Image image, int width, int height, out int thumbnailWidth, out int thumbnailHeight) + { + var aspect = (double)image.Width / image.Height; + var thumbnailAspect = (double)width / height; + + if (aspect > thumbnailAspect) + { + thumbnailHeight = Math.Min(image.Height, height); + thumbnailWidth = (int)Math.Round(image.Width * (double)thumbnailHeight / image.Height); + } + else + { + thumbnailWidth = Math.Min(image.Width, width); + thumbnailHeight = (int)Math.Round(image.Height * (double)thumbnailWidth / image.Width); + } + } + + private string GetNewTimeStamp() + { + return DateTime.Now.ToString("yyyyMMddHHmmssfff"); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Data/00.00.01.SqlDataProvider b/DNN Platform/Modules/ResourceManager/Data/00.00.01.SqlDataProvider new file mode 100644 index 00000000000..ae725de4243 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Data/00.00.01.SqlDataProvider @@ -0,0 +1,17 @@ +/************************************************************/ +/***** SqlDataProvider *****/ +/***** *****/ +/***** *****/ +/***** Note: To manually execute this script you must *****/ +/***** perform a search and replace operation *****/ +/***** for {databaseOwner} and {objectQualifier} *****/ +/***** *****/ +/************************************************************/ + + + +/************************************************************/ +/***** SqlDataProvider *****/ +/************************************************************/ + +/****************************** STORED PROCEDURE CREATION SCRIPT *******************************/ \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/Data/Uninstall.SqlDataProvider b/DNN Platform/Modules/ResourceManager/Data/Uninstall.SqlDataProvider new file mode 100644 index 00000000000..7428e347a1d --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Data/Uninstall.SqlDataProvider @@ -0,0 +1,15 @@ +/************************************************************/ +/***** SqlDataProvider *****/ +/***** *****/ +/***** *****/ +/***** Note: To manually execute this script you must *****/ +/***** perform a search and replace operation *****/ +/***** for {databaseOwner} and {objectQualifier} *****/ +/***** *****/ +/************************************************************/ + + + +/************************************************************/ +/***** SqlDataProvider *****/ +/************************************************************/ diff --git a/DNN Platform/Modules/ResourceManager/Dnn.Modules.ResourceManager.csproj b/DNN Platform/Modules/ResourceManager/Dnn.Modules.ResourceManager.csproj new file mode 100644 index 00000000000..7c9154c86f2 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Dnn.Modules.ResourceManager.csproj @@ -0,0 +1,289 @@ + + + + + Debug + AnyCPU + + + 2.0 + {7D61A32C-0F21-453F-A981-BD8E5A3A5304} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Dnn.Modules.ResourceManager + Dnn.Modules.ResourceManager + v4.7.2 + false + + + + + + + + true + full + true + true + bin\ + bin\Dnn.Modules.ResourceManager.xml + 1591 + AllRules.ruleset + 7 + true + 4 + + + pdbonly + false + true + true + bin\ + bin\Dnn.Modules.ResourceManager.xml + 1591 + AllRules.ruleset + 7 + true + 4 + + + + False + ..\..\..\Packages\Microsoft.Extensions.DependencyInjection.2.1.1\lib\net461\Microsoft.Extensions.DependencyInjection.dll + + + False + ..\..\..\Packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + + ..\..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + + + + + + False + ..\..\..\Packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll + + + + + False + ..\..\..\Packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll + + + + + + + + + + + + + + + + + + + SolutionInfo.cs + + + + + + + + + + + + + + + + + + + + + + + EditFolderMapping.ascx + ASPXCodeBehind + + + EditFolderMapping.ascx + + + + + + + + + + + + + + + + + + + + + + + + + Settings.ascx + ASPXCodeBehind + + + Settings.ascx + + + View.ascx + ASPXCodeBehind + + + View.ascx + + + stylecop.json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + Designer + + + + + {6928A9B1-F88A-4581-A132-D3EB38669BB0} + DotNetNuke.Abstractions + + + {3cd5f6b8-8360-4862-80b6-f402892db7dd} + DotNetNuke.Instrumentation + + + {c4823821-cfb3-4394-851f-e39d0974efbd} + DotNetNuke.ModulePipeline + + + {03e3afa5-ddc9-48fb-a839-ad4282ce237e} + DotNetNuke.Web.Client + + + {4912f062-f8a8-4f9d-8f8e-244ebee1acbd} + DotNetNuke.WebUtility + + + {ee1329fe-fd88-4e1a-968c-345e394ef080} + DotNetNuke.Web + + + {6b29aded-7b56-4484-bea5-c0e09079535b} + DotNetNuke.Library + + + + + + + + + + + + + + + + web.config + + + web.config + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + True + + + + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx b/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx new file mode 100644 index 00000000000..ba91443f133 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx @@ -0,0 +1,40 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="EditFolderMapping.ascx.cs" Inherits="Dnn.Modules.ResourceManager.EditFolderMapping" %> +<%@ Register TagPrefix="dnn" TagName="Label" Src="~/controls/LabelControl.ascx" %> +<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.UI.WebControls" Assembly="DotNetNuke" %> +<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Web.UI.WebControls" Assembly="DotNetNuke.Web" %> +
+
+ +
+
+
+

<%=LocalizeString("RequiredFields")%>

+
+
+

<%=LocalizeString("GeneralSettings")%>

+
+
+ + + +
+
+ + + +
+
+

<%=LocalizeString("FolderProviderSettings")%>

+
+ +
+
+
+
+
    +
  • + +
  • +
  • +
+
\ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx.cs b/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx.cs new file mode 100644 index 00000000000..aa665226d6f --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx.cs @@ -0,0 +1,289 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.Modules.ResourceManager +{ + using System; + using System.Linq; + using System.Web.UI.WebControls; + + using DotNetNuke.Abstractions; + using DotNetNuke.Common; + using DotNetNuke.Common.Utilities; + using DotNetNuke.Entities.Modules; + using DotNetNuke.Services.FileSystem; + using DotNetNuke.Services.FileSystem.Internal; + using DotNetNuke.Services.Localization; + using DotNetNuke.UI.Skins.Controls; + + using Microsoft.Extensions.DependencyInjection; + + /// + /// Provides editing capabilities for a folder mapping. + /// + public partial class EditFolderMapping : PortalModuleBase + { + private readonly INavigationManager navigationManager; + private readonly IFolderMappingController folderMappingController = FolderMappingController.Instance; + private int folderMappingID = Null.NullInteger; + + /// + /// Initializes a new instance of the class. + /// + public EditFolderMapping() + { + this.navigationManager = this.DependencyProvider.GetRequiredService(); + } + + /// + /// Gets the portalId for the folder. + /// + public int FolderPortalID + { + get + { + return this.IsHostMenu ? Null.NullInteger : this.PortalId; + } + } + + /// + /// Gets the id of the folder mapping. + /// + public int FolderMappingID + { + get + { + if (this.folderMappingID == Null.NullInteger) + { + if (!string.IsNullOrEmpty(this.Request.QueryString["ItemID"])) + { + int.TryParse(this.Request.QueryString["ItemID"], out this.folderMappingID); + } + } + + return this.folderMappingID; + } + } + + /// + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!this.UserInfo.IsSuperUser && !this.UserInfo.IsInRole(this.PortalSettings.AdministratorRoleName)) + { + this.Response.Redirect(Globals.AccessDeniedURL(), true); + } + + this.UpdateButton.Text = (this.FolderMappingID == Null.NullInteger) ? Localization.GetString("Add") : Localization.GetString("Update", this.LocalResourceFile); + this.CancelHyperLink.NavigateUrl = this.navigationManager.NavigateURL(); + + var controlTitle = Localization.GetString("ControlTitle", this.LocalResourceFile); + var controlTitlePrefix = (this.FolderMappingID == Null.NullInteger) ? Localization.GetString("New") : Localization.GetString("Edit"); + + this.SyncWarningPlaceHolder.Visible = this.FolderMappingID != Null.NullInteger; + + this.ModuleConfiguration.ModuleControl.ControlTitle = string.Format(controlTitle, controlTitlePrefix); + } + + /// + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + this.UpdateButton.Click += this.CmdUpdate_Click; + + try + { + this.BindFolderMappingSettings(); + + if (!this.IsPostBack) + { + this.BindFolderProviders(); + + if (this.FolderMappingID != Null.NullInteger) + { + this.BindFolderMapping(); + + if (this.ProviderSettingsPlaceHolder.Controls.Count > 0 && this.ProviderSettingsPlaceHolder.Controls[0] is FolderMappingSettingsControlBase) + { + var folderMapping = this.folderMappingController.GetFolderMapping(this.FolderMappingID); + var settingsControl = (FolderMappingSettingsControlBase)this.ProviderSettingsPlaceHolder.Controls[0]; + settingsControl.LoadSettings(folderMapping.FolderMappingSettings); + } + } + } + } + catch (Exception exc) + { + DotNetNuke.Services.Exceptions.Exceptions.ProcessModuleLoadException(this, exc); + } + } + + /// + /// Handles the folder providers selection change. + /// + /// The sender of the event. + /// The event arguments. + protected void CboFolderProviders_SelectedIndexChanged(object sender, EventArgs e) + { + this.BindFolderMappingSettings(); + } + + private void CmdUpdate_Click(object sender, EventArgs e) + { + this.Page.Validate("vgEditFolderMapping"); + + if (!this.Page.IsValid) + { + return; + } + + try + { + var folderMapping = new FolderMappingInfo(); + + if (this.FolderMappingID != Null.NullInteger) + { + folderMapping = this.folderMappingController.GetFolderMapping(this.FolderMappingID) ?? new FolderMappingInfo(); + } + + folderMapping.FolderMappingID = this.FolderMappingID; + folderMapping.MappingName = this.NameTextbox.Text; + folderMapping.FolderProviderType = this.FolderProvidersComboBox.SelectedValue; + folderMapping.PortalID = this.FolderPortalID; + + var originalSettings = folderMapping.FolderMappingSettings; + + try + { + var folderMappingID = this.FolderMappingID; + + if (folderMappingID == Null.NullInteger) + { + folderMappingID = this.folderMappingController.AddFolderMapping(folderMapping); + } + else + { + this.folderMappingController.UpdateFolderMapping(folderMapping); + } + + if (this.ProviderSettingsPlaceHolder.Controls.Count > 0 && this.ProviderSettingsPlaceHolder.Controls[0] is FolderMappingSettingsControlBase) + { + var settingsControl = (FolderMappingSettingsControlBase)this.ProviderSettingsPlaceHolder.Controls[0]; + + try + { + settingsControl.UpdateSettings(folderMappingID); + } + catch + { + if (this.FolderMappingID == Null.NullInteger) + { + this.folderMappingController.DeleteFolderMapping(this.FolderPortalID, folderMappingID); + } + + return; + } + } + + if (this.FolderMappingID != Null.NullInteger) + { + // Check if some setting has changed + var updatedSettings = this.folderMappingController.GetFolderMappingSettings(this.FolderMappingID); + + if (originalSettings.Keys.Cast().Any(key => updatedSettings.ContainsKey(key) && !originalSettings[key].ToString().Equals(updatedSettings[key].ToString()))) + { + // Re-synchronize folders using the existing mapping. It's important to synchronize them in descending order + var folders = FolderManager.Instance.GetFolders(this.FolderPortalID).Where(f => f.FolderMappingID == this.FolderMappingID).OrderByDescending(f => f.FolderPath); + + foreach (var folder in folders) + { + FolderManager.Instance.Synchronize(this.FolderPortalID, folder.FolderPath, false, true); + } + } + } + } + catch + { + DotNetNuke.UI.Skins.Skin.AddModuleMessage(this, Localization.GetString("DuplicateMappingName", this.LocalResourceFile), ModuleMessage.ModuleMessageType.RedError); + return; + } + + if (!this.Response.IsRequestBeingRedirected) + { + this.Response.Redirect(this.navigationManager.NavigateURL()); + } + } + catch (Exception exc) + { + DotNetNuke.Services.Exceptions.Exceptions.ProcessModuleLoadException(this, exc); + } + } + + private void BindFolderProviders() + { + var defaultProviders = DefaultFolderProviders.GetDefaultProviders(); + + foreach (var provider in FolderProvider.GetProviderList().Keys.Where(provider => !defaultProviders.Contains(provider)).OrderBy(provider => provider)) + { + this.FolderProvidersComboBox.Items.Add(new ListItem(provider, provider)); + } + + this.FolderProvidersComboBox.Items.Insert(0, new ListItem(string.Empty, string.Empty)); + } + + private void BindFolderMapping() + { + var folderMapping = this.folderMappingController.GetFolderMapping(this.FolderMappingID); + + this.NameTextbox.Text = folderMapping.MappingName; + + this.FolderProvidersComboBox.SelectedValue = folderMapping.FolderProviderType; + this.FolderProvidersComboBox.Enabled = false; + } + + private void BindFolderMappingSettings() + { + string folderProviderType; + + if (this.FolderMappingID != Null.NullInteger) + { + var folderMapping = this.folderMappingController.GetFolderMapping(this.FolderMappingID); + folderProviderType = folderMapping.FolderProviderType; + } + else + { + folderProviderType = this.FolderProvidersComboBox.SelectedValue; + } + + if (string.IsNullOrEmpty(folderProviderType)) + { + return; + } + + var settingsControlVirtualPath = FolderProvider.Instance(folderProviderType).GetSettingsControlVirtualPath(); + if (string.IsNullOrEmpty(settingsControlVirtualPath)) + { + return; + } + + var settingsControl = this.LoadControl(settingsControlVirtualPath); + if (settingsControl == null || !(settingsControl is FolderMappingSettingsControlBase)) + { + return; + } + + // This is important to allow settings control to be localizable + var baseType = settingsControl.GetType().BaseType; + if (baseType != null) + { + settingsControl.ID = baseType.Name; + } + + this.ProviderSettingsPlaceHolder.Controls.Clear(); + this.ProviderSettingsPlaceHolder.Controls.Add(settingsControl); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx.designer.cs b/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx.designer.cs new file mode 100644 index 00000000000..55ac100cac8 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/EditFolderMapping.ascx.designer.cs @@ -0,0 +1,125 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Dnn.Modules.ResourceManager +{ + + + public partial class EditFolderMapping + { + + /// + /// DescriptionLabel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label DescriptionLabel; + + /// + /// SyncWarningPlaceHolder control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder SyncWarningPlaceHolder; + + /// + /// SyncLabel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label SyncLabel; + + /// + /// NameLabel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.UserControl NameLabel; + + /// + /// NameTextbox control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox NameTextbox; + + /// + /// NameValidator control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator NameValidator; + + /// + /// FolderProviderLabel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.UserControl FolderProviderLabel; + + /// + /// FolderProvidersComboBox control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList FolderProvidersComboBox; + + /// + /// FolderProviderValidator control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.RequiredFieldValidator FolderProviderValidator; + + /// + /// ProviderSettingsPlaceHolder control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ProviderSettingsPlaceHolder; + + /// + /// UpdateButton control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.LinkButton UpdateButton; + + /// + /// CancelHyperLink control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink CancelHyperLink; + } +} diff --git a/DNN Platform/Modules/ResourceManager/Exceptions/FolderPermissionNotMetException.cs b/DNN Platform/Modules/ResourceManager/Exceptions/FolderPermissionNotMetException.cs new file mode 100644 index 00000000000..3c28e0934fa --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Exceptions/FolderPermissionNotMetException.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Exceptions +{ + using System; + + /// + /// Exception thrown when a folder permission is not met. + /// + public class FolderPermissionNotMetException : Exception + { + /// + /// Initializes a new instance of the class. + /// + /// The exception message. + public FolderPermissionNotMetException(string message) + : base(message) + { + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Exceptions/ModeValidationException.cs b/DNN Platform/Modules/ResourceManager/Exceptions/ModeValidationException.cs new file mode 100644 index 00000000000..412ee5091c7 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Exceptions/ModeValidationException.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Exceptions +{ + using System; + + /// + /// Thrown when the resource manager is not in the expected mode for the requested operation. + /// + public class ModeValidationException : Exception + { + /// + /// Initializes a new instance of the class. + /// + /// The exception message. + public ModeValidationException(string message) + : base(message) + { + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Exceptions/NotFoundException.cs b/DNN Platform/Modules/ResourceManager/Exceptions/NotFoundException.cs new file mode 100644 index 00000000000..e0c5fe7b8d0 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Exceptions/NotFoundException.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Exceptions +{ + using System; + + /// + /// Thrown when a resource is not found. + /// + public class NotFoundException : Exception + { + /// + /// Initializes a new instance of the class. + /// + /// The exception message. + public NotFoundException(string message) + : base(message) + { + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Helpers/LocalizationHelper.cs b/DNN Platform/Modules/ResourceManager/Helpers/LocalizationHelper.cs new file mode 100644 index 00000000000..05c29fecff2 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Helpers/LocalizationHelper.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Helpers +{ + using Dnn.Modules.ResourceManager.Components; + + using DotNetNuke.Services.Localization; + + /// + /// Localization helper methods. + /// + internal class LocalizationHelper + { + private const string ResourceFile = "~/" + Constants.ModulePath + "/App_LocalResources/ResourceManager.resx"; + + /// + /// Gets a localized resource string from the resource manager resource file. + /// + /// The localization key to get. + /// A string containing the localized text. + public static string GetString(string key) + { + return Localization.GetString(key, ResourceFile); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Images/arrow_forward.svg b/DNN Platform/Modules/ResourceManager/Images/arrow_forward.svg new file mode 100644 index 00000000000..08f2937accd --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/arrow_forward.svg @@ -0,0 +1,87 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/Images/checkmark.svg b/DNN Platform/Modules/ResourceManager/Images/checkmark.svg new file mode 100644 index 00000000000..45217ce3abc --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/checkmark.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/clipboard.svg b/DNN Platform/Modules/ResourceManager/Images/clipboard.svg new file mode 100644 index 00000000000..1cd8cbd8b1a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/clipboard.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/copy.svg b/DNN Platform/Modules/ResourceManager/Images/copy.svg new file mode 100644 index 00000000000..684346cc34e --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/copy.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/delete.svg b/DNN Platform/Modules/ResourceManager/Images/delete.svg new file mode 100644 index 00000000000..d2a6d844b94 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/delete.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/dnnanim.gif b/DNN Platform/Modules/ResourceManager/Images/dnnanim.gif new file mode 100644 index 00000000000..5e62d01af9e Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/dnnanim.gif differ diff --git a/DNN Platform/Modules/ResourceManager/Images/download.svg b/DNN Platform/Modules/ResourceManager/Images/download.svg new file mode 100644 index 00000000000..63cfe8d10dd --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/download.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/edit.svg b/DNN Platform/Modules/ResourceManager/Images/edit.svg new file mode 100644 index 00000000000..5d9613aa742 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/edit.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/eye.svg b/DNN Platform/Modules/ResourceManager/Images/eye.svg new file mode 100644 index 00000000000..db1cca5c077 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/eye.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/folder-empty-state-asset-manager.png b/DNN Platform/Modules/ResourceManager/Images/folder-empty-state-asset-manager.png new file mode 100644 index 00000000000..8842be86004 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/folder-empty-state-asset-manager.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/folder-hover.png b/DNN Platform/Modules/ResourceManager/Images/folder-hover.png new file mode 100644 index 00000000000..cb7a52468f2 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/folder-hover.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/folder.png b/DNN Platform/Modules/ResourceManager/Images/folder.png new file mode 100644 index 00000000000..8480d0d9cb9 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/folder.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/icon-add-folder.png b/DNN Platform/Modules/ResourceManager/Images/icon-add-folder.png new file mode 100644 index 00000000000..77ff00ca2e9 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/icon-add-folder.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-azure-folder.png b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-azure-folder.png new file mode 100644 index 00000000000..bb623f5b979 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-azure-folder.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-database-folder.png b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-database-folder.png new file mode 100644 index 00000000000..cd409e1a308 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-database-folder.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-secure-folder.png b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-secure-folder.png new file mode 100644 index 00000000000..1d0c0e7a85d Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-secure-folder.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-standard-folder.png b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-standard-folder.png new file mode 100644 index 00000000000..45a92f639d4 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/icon-asset-manager-standard-folder.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/link.svg b/DNN Platform/Modules/ResourceManager/Images/link.svg new file mode 100644 index 00000000000..8f4c4bb44ec --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/link.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/loader_failed.svg b/DNN Platform/Modules/ResourceManager/Images/loader_failed.svg new file mode 100644 index 00000000000..624038bbdd2 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/loader_failed.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/loading.gif b/DNN Platform/Modules/ResourceManager/Images/loading.gif new file mode 100644 index 00000000000..92e4f0e4f7e Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/loading.gif differ diff --git a/DNN Platform/Modules/ResourceManager/Images/move.svg b/DNN Platform/Modules/ResourceManager/Images/move.svg new file mode 100644 index 00000000000..a04a154c13c --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/move.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/preview.svg b/DNN Platform/Modules/ResourceManager/Images/preview.svg new file mode 100644 index 00000000000..11e20414e0e --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/preview.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/redeploy.svg b/DNN Platform/Modules/ResourceManager/Images/redeploy.svg new file mode 100644 index 00000000000..c82dd4f06e9 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/redeploy.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/restore.svg b/DNN Platform/Modules/ResourceManager/Images/restore.svg new file mode 100644 index 00000000000..f8f638b9171 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/restore.svg @@ -0,0 +1,42 @@ + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/search-glass-no-results.png b/DNN Platform/Modules/ResourceManager/Images/search-glass-no-results.png new file mode 100644 index 00000000000..3f1d9d1278f Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/search-glass-no-results.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/search.png b/DNN Platform/Modules/ResourceManager/Images/search.png new file mode 100644 index 00000000000..0d9e9ffcd0f Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/search.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/search.svg b/DNN Platform/Modules/ResourceManager/Images/search.svg new file mode 100644 index 00000000000..77896b06399 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/search.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/transparencyBG.jpg b/DNN Platform/Modules/ResourceManager/Images/transparencyBG.jpg new file mode 100644 index 00000000000..5916d569bb9 Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/transparencyBG.jpg differ diff --git a/DNN Platform/Modules/ResourceManager/Images/trash.svg b/DNN Platform/Modules/ResourceManager/Images/trash.svg new file mode 100644 index 00000000000..be3b81a188d --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/trash.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/tree-sprite.png b/DNN Platform/Modules/ResourceManager/Images/tree-sprite.png new file mode 100644 index 00000000000..0885cdd5c8a Binary files /dev/null and b/DNN Platform/Modules/ResourceManager/Images/tree-sprite.png differ diff --git a/DNN Platform/Modules/ResourceManager/Images/unpublished.svg b/DNN Platform/Modules/ResourceManager/Images/unpublished.svg new file mode 100644 index 00000000000..13ac314fec4 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/unpublished.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/upload.svg b/DNN Platform/Modules/ResourceManager/Images/upload.svg new file mode 100644 index 00000000000..6b153274fda --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/upload.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Images/x.svg b/DNN Platform/Modules/ResourceManager/Images/x.svg new file mode 100644 index 00000000000..27db8d4cdf4 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Images/x.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/License.txt b/DNN Platform/Modules/ResourceManager/License.txt new file mode 100644 index 00000000000..82b0ac4187f --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/License.txt @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors +All Rights Reserved + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/DNN Platform/Modules/ResourceManager/Module.build b/DNN Platform/Modules/ResourceManager/Module.build new file mode 100644 index 00000000000..63a3fa59ac6 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Module.build @@ -0,0 +1,23 @@ + + + + $(MSBuildProjectDirectory)\..\..\.. + $(MSBuildProjectDirectory)\ResourceManager.Web + + + + resources + ResourceManager + DNNCE_ResourceManager + $(WebsitePath)\DesktopModules\ResourceManager + $(WebsiteInstallPath)\Module + + + + + + + + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/Properties/AssemblyInfo.cs b/DNN Platform/Modules/ResourceManager/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..4279d9dd576 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Properties/AssemblyInfo.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Dnn.Modules.ResourceManager")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5ef01dd5-84a1-49f3-9232-067440288455")] diff --git a/DNN Platform/Modules/ResourceManager/ReleaseNotes.txt b/DNN Platform/Modules/ResourceManager/ReleaseNotes.txt new file mode 100644 index 00000000000..c328c3ddc6c --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ReleaseNotes.txt @@ -0,0 +1 @@ +

Please see https://www.github.com/dnnsoftware for the complete release history.

\ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.babelrc b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.babelrc new file mode 100644 index 00000000000..59a01ef24ee --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.babelrc @@ -0,0 +1,18 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/preset-react" + ], + "plugins": [ + "transform-object-assign", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-proposal-class-properties" + ], + "env": { + "production": { + "plugins": [ + "transform-react-remove-prop-types" + ] + } + } +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.eslintignore b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.eslintignore new file mode 100644 index 00000000000..ca83d8f7145 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.eslintignore @@ -0,0 +1,2 @@ +./node_modules/**/* +**/dnn-react-common.min.js \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.eslintrc.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.eslintrc.js new file mode 100644 index 00000000000..de205a18d94 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/.eslintrc.js @@ -0,0 +1,43 @@ +module.exports = { + "plugins": [ + "react" + ], + "env": { + "browser": true, + "commonjs": true + }, + "extends": ["eslint:recommended", "plugin:react/recommended"], + "parser": "babel-eslint", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 2018, + "sourceType": "module" + }, + "settings": { + "react":{ + "version": "16" + } + }, + "globals": { + "__": false, + "Promise": false, + "VERSION": false + }, + "rules": { + "semi": "error", + "no-var": "error", + "quotes": ["warn", "double" ], + "indent": ["warn", 4, {"SwitchCase": 1}], + "no-unused-vars": "warn", + "no-console": "warn", + "keyword-spacing": "warn", + "eqeqeq": "warn", + "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }], + "space-before-blocks": "warn", + "no-multiple-empty-lines": "warn", + "react/jsx-equals-spacing": ["warn", "never"], + "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}] + } +}; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/addAssetPanelActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/addAssetPanelActionsTypes.js new file mode 100644 index 00000000000..1a21d251e45 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/addAssetPanelActionsTypes.js @@ -0,0 +1,12 @@ +const addAssetPanelActionsTypes = { + SHOW_ADD_ASSET_PANEL: "SHOW_ADD_ASSET_PANEL", + HIDE_ADD_ASSET_PANEL: "HIDE_ADD_ASSET_PANEL", + UPDATE_PROGRESS: "UPDATE_PROGRESS", + RESET_PANEL: "RESET_PANEL", + ASSET_ADDED: "ASSET_ADDED", + ASSET_ADDED_ERROR: "ASSET_ADDED_ERROR", + FILE_ALREADY_EXIST: "FILE_ALREADY_EXIST", + STOP_UPLOAD: "STOP_UPLOAD" +}; + +export default addAssetPanelActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/addFolderPanelActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/addFolderPanelActionsTypes.js new file mode 100644 index 00000000000..d5b87983b90 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/addFolderPanelActionsTypes.js @@ -0,0 +1,13 @@ +const addFolderPanelActionsTypes = { + SHOW_ADD_FOLDER_PANEL: "SHOW_ADD_FOLDER_PANEL", + HIDE_ADD_FOLDER_PANEL: "HIDE_ADD_FOLDER_PANEL", + FOLDER_MAPPINGS_LOADED: "FOLDER_MAPPINGS_LOADED", + LOAD_FOLDER_MAPPINGS_ERROR: "LOAD_FOLDER_MAPPINGS_ERROR", + CHANGE_NAME: "CHANGE_NAME", + CHANGE_FOLDER_TYPE: "CHANGE_FOLDER_TYPE", + FOLDER_CREATED: "FOLDER_CREATED", + ADD_FOLDER_ERROR: "ADD_FOLDER_ERROR", + SET_VALIDATION_ERRORS: "SET_VALIDATION_ERRORS" +}; + +export default addFolderPanelActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/dialogModalActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/dialogModalActionsTypes.js new file mode 100644 index 00000000000..b509d6dfb98 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/dialogModalActionsTypes.js @@ -0,0 +1,6 @@ +const dialogModalActionsTypes = { + OPEN_DIALOG_MODAL: "OPEN_DIALOG_MODAL", + CLOSE_DIALOG_MODAL: "CLOSE_DIALOG_MODAL" +}; + +export default dialogModalActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/folderPanelActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/folderPanelActionsTypes.js new file mode 100644 index 00000000000..8d932a7f6e8 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/folderPanelActionsTypes.js @@ -0,0 +1,19 @@ +const folderPanelActionsTypes = { + SET_LOADING: "SET_LOADING", + CONTENT_LOADED: "CONTENT_LOADED", + MORE_CONTENT_LOADED: "MORE_CONTENT_LOADED", + LOAD_CONTENT_ERROR: "LOAD_CONTENT_ERROR", + FILE_DOWNLOADED: "FILE_DOWNLOADED", + FOLDER_DELETED: "FOLDER_DELETED", + DELETE_FOLDER_ERROR: "DELETE_FOLDER_ERROR", + CLOSE_TOP_PANELS: "CLOSE_TOP_PANELS", + FILE_DELETED: "FILE_DELETED", + DELETE_FILE_ERROR: "DELETE_FILE_ERROR", + CHANGE_SEARCH: "CHANGE_SEARCH", + FILES_SEARCHED: "FILES_SEARCHED", + SEARCH_FILES_ERROR: "SEARCH_FILES_ERROR", + URL_COPIED_TO_CLIPBOARD: "URL_COPIED_TO_CLIPBOARD", + CHANGE_SORTING: "CHANGE_SORTING" +}; + +export default folderPanelActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/globalActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/globalActionsTypes.js new file mode 100644 index 00000000000..dd8f4eada35 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/globalActionsTypes.js @@ -0,0 +1,5 @@ +const globalActionsTypes = { + MODULE_PARAMETERS_LOADED: "MODULE_PARAMETERS_LOADED" +}; + +export default globalActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/infiniteScrollActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/infiniteScrollActionsTypes.js new file mode 100644 index 00000000000..9de0b6c683b --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/infiniteScrollActionsTypes.js @@ -0,0 +1,5 @@ +const infiniteScrollActionsTypes = { + SET_MAX_SCROLL_TOP: "SET_MAX_SCROLL_TOP" +}; + +export default infiniteScrollActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/itemDetailsActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/itemDetailsActionsTypes.js new file mode 100644 index 00000000000..d1cd5d9e8f2 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/itemDetailsActionsTypes.js @@ -0,0 +1,18 @@ +const itemDetailsActionsTypes = { + EDIT_ITEM: "EDIT_ITEM", + EDIT_ITEM_ERROR: "EDIT_ITEM_ERROR", + CANCEL_EDIT_ITEM: "CANCEL_EDIT_ITEM", + CHANGE_NAME: "CHANGE_NAME", + CHANGE_TITLE: "CHANGE_TITLE", + CHANGE_DESCRIPTION: "CHANGE_DESCRIPTION", + CHANGE_PERMISSIONS: "CHANGE_PERMISSIONS", + SET_VALIDATION_ERRORS: "SET_VALIDATION_ERRORS", + ITEM_SAVED: "ITEM_SAVED", + SAVE_ITEM_ERROR: "SAVE_ITEM_ERROR", + MOVE_ITEM: "MOVE_ITEM", + MOVE_ITEM_ERROR: "MOVE_ITEM_ERROR", + CANCEL_MOVE_ITEM: "CANCEL_MOVE_ITEM", + ITEM_MOVED: "ITEM_MOVED", +}; + +export default itemDetailsActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/manageFolderTypesPanelActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/manageFolderTypesPanelActionsTypes.js new file mode 100644 index 00000000000..4df0637de47 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/manageFolderTypesPanelActionsTypes.js @@ -0,0 +1,7 @@ +const manageFolderTypesPanelActionsTypes = { + SHOW_MANAGE_FOLDER_TYPES_PANEL: "SHOW_MANAGE_FOLDER_TYPES_PANEL", + HIDE_MANAGE_FOLDER_TYPES_PANEL: "HIDE_MANAGE_FOLDER_TYPES_PANEL", + ADD_FOLDER_TYPE_URL_LOADED: "ADD_FOLDER_TYPE_URL_LOADED", +} + +export default manageFolderTypesPanelActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/messageModalActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/messageModalActionsTypes.js new file mode 100644 index 00000000000..f2a9b23adae --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/messageModalActionsTypes.js @@ -0,0 +1,5 @@ +const messageModalActionsTypes = { + CLOSE_MESSAGE_MODAL: "CLOSE_MESSAGE_MODAL" +}; + +export default messageModalActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/topBarActionsTypes.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/topBarActionsTypes.js new file mode 100644 index 00000000000..e4e21064484 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/action types/topBarActionsTypes.js @@ -0,0 +1,5 @@ +const topBarActionsTypes = { + CHANGE_SEARCH_FIELD: "CHANGE_SEARCH_FIELD" +}; + +export default topBarActionsTypes; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/addAssetPanelActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/addAssetPanelActions.js new file mode 100644 index 00000000000..6d709ee13ac --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/addAssetPanelActions.js @@ -0,0 +1,133 @@ +import actionTypes from "../action types/addAssetPanelActionsTypes"; +import folderPanelActionTypes from "../action types/folderPanelActionsTypes"; +import ItemsService from "../services/itemsService"; +import LocalizeService from "../services/localizeService"; + +let files = {}; + +function fileUploadedHandler(dispatch, file, overwrite, response) { + const {alreadyExists, fileName, message} = response; + + if (alreadyExists) { + files[fileName] = file; + + return dispatch ({ + type: actionTypes.FILE_ALREADY_EXIST, + data: response + }); + } + + if (!fileName || message) { + return dispatch (fileUploadError(file.name, message)); + } + + files[fileName] = undefined; + + dispatch ({ + type: actionTypes.ASSET_ADDED, + data: response + }); +} + +function fileUploadError(fileName, message) { + return { + type: actionTypes.ASSET_ADDED_ERROR, + data: { + fileName, + message + } + }; +} + +const addAssetPanelActions = { + showPanel() { + return (dispatch) => { + dispatch ({ + type: folderPanelActionTypes.CLOSE_TOP_PANELS + }); + + dispatch ({ + type: actionTypes.SHOW_ADD_ASSET_PANEL + }); + }; + }, + hidePanel() { + return (dispatch) => { + dispatch ({ + type: actionTypes.HIDE_ADD_ASSET_PANEL + }); + + dispatch ({ + type: actionTypes.RESET_PANEL + }); + }; + }, + overwriteFile(fileName, folderPath, folderPanelState, trackProgress) { + let file = files[fileName]; + return this.uploadFiles([file], folderPath, folderPanelState, trackProgress, true); + }, + uploadFiles(files, folderPath, folderPanelState, trackProgress, overwrite=false) { + const { numItems, sorting } = folderPanelState; + const folderId = folderPanelState.folder ? folderPanelState.folder.folderId : folderPanelState.homeFolderId; + + return dispatch => { + const uploadFilePromises = []; + + files.forEach ( + file => uploadFilePromises.push(ItemsService.uploadFile(file, folderPath, overwrite, trackProgress.bind(null, file.name)) + .then( + response => fileUploadedHandler(dispatch, file, overwrite, response), + reason => dispatch (fileUploadError(file.name, reason.message)) + )) + ); + + Promise.all(uploadFilePromises).then( + () => ItemsService.getContent(folderId, 0, numItems, sorting) + ) + .then( + getContentResponse => dispatch ({ + type: folderPanelActionTypes.CONTENT_LOADED, + data: getContentResponse + }) + ); + }; + }, + trackProgress(fileName, progress) { + return dispatch => + dispatch ({ + type: actionTypes.UPDATE_PROGRESS, + data: { + fileName, + percent: progress.percent + } + }); + }, + stopUpload(fileName) { + files[fileName] = undefined; + + return dispatch => dispatch ({ + type: actionTypes.STOP_UPLOAD, + data: fileName + }); + }, + fileSizeError(fileName, maxSize) { + const fileTooBigMessage = LocalizeService.getString("FileSizeErrorMessage"); + return dispatch => + dispatch(fileUploadError(fileName, fileName + fileTooBigMessage + maxSize)); + }, + invalidExtensionError(fileName) { + const invalidExtensionMessage = LocalizeService.getString("InvalidExtensionMessage"); + return dispatch => + dispatch(fileUploadError(fileName, fileName + invalidExtensionMessage)); + } +/*, + startUpload() { + return dispatch => + dispatch ({ + type: actionTypes.RESET_PANEL + }); + }, + */ +}; + +export default addAssetPanelActions; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/addFolderPanelActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/addFolderPanelActions.js new file mode 100644 index 00000000000..0d4a035b766 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/addFolderPanelActions.js @@ -0,0 +1,101 @@ +import actionTypes from "../action types/addFolderPanelActionsTypes"; +import folderPanelActionTypes from "../action types/folderPanelActionsTypes"; +import ItemsService from "../services/itemsService"; + +const addFolderPanelActions = { + showPanel() { + return (dispatch) => { + dispatch ({ + type: folderPanelActionTypes.CLOSE_TOP_PANELS + }); + + dispatch ({ + type: actionTypes.SHOW_ADD_FOLDER_PANEL + }); + }; + }, + hidePanel() { + return (dispatch) => { + dispatch ({ + type: actionTypes.HIDE_ADD_FOLDER_PANEL + }); + }; + }, + loadFolderMappings() { + return (dispatch) => { + ItemsService.loadFolderMappings().then((response) => { + dispatch({ + type: actionTypes.FOLDER_MAPPINGS_LOADED, + data: response + }); + }).catch(() => { + dispatch({ + type: actionTypes.LOAD_FOLDER_MAPPINGS_ERROR + }); + }); + }; + }, + changeName(event) + { + return { + type: actionTypes.CHANGE_NAME, + data: event.target.value + }; + }, + changeFolderType(folderType) + { + return { + type: actionTypes.CHANGE_FOLDER_TYPE, + data: folderType + }; + }, + addFolder(data) { + const {formData, folderPanelState} = data; + const { numItems, sorting } = folderPanelState; + const folderId = folderPanelState.folder ? folderPanelState.folder.folderId : folderPanelState.homeFolderId; + + let newFolderData = { + folderName: formData.name, + FolderMappingId: formData.folderType, + ParentFolderId: folderId + }; + + return (dispatch) => { + ItemsService.addFolder(newFolderData) + .then( + addFolderResponse => + ItemsService.getContent(folderId, 0, numItems, sorting) + .then( + getContentResponse => { + dispatch({ + type: folderPanelActionTypes.CONTENT_LOADED, + data: getContentResponse + }); + + dispatch({ + type: actionTypes.FOLDER_CREATED, + data: addFolderResponse + }); + } + ), + reason => dispatch({ + type: actionTypes.ADD_FOLDER_ERROR, + data: reason.data ? reason.data.message : null + }) + ) + .catch( + dispatch({ + type: actionTypes.ADD_FOLDER_ERROR + }) + ); + }; + }, + setValidationErrors(validationErrors) { + return { + type: actionTypes.SET_VALIDATION_ERRORS, + data: validationErrors + }; + } +}; + +export default addFolderPanelActions; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/dialogModalActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/dialogModalActions.js new file mode 100644 index 00000000000..ae3440334d4 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/dialogModalActions.js @@ -0,0 +1,19 @@ +import actionTypes from "../action types/dialogModalActionsTypes"; + +const dialogModalActions = { + open(dialogHeader, dialogMessage, yesFunction, noFunction) { + return { + type: actionTypes.OPEN_DIALOG_MODAL, + data: { + dialogHeader, dialogMessage, yesFunction, noFunction + } + }; + }, + close() { + return { + type: actionTypes.CLOSE_DIALOG_MODAL + }; + } +}; + +export default dialogModalActions; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/folderPanelActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/folderPanelActions.js new file mode 100644 index 00000000000..fac5345c72a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/folderPanelActions.js @@ -0,0 +1,191 @@ +import ItemsService from "../services/itemsService"; +import actionTypes from "../action types/folderPanelActionsTypes"; +import copyToClipboard from "copy-to-clipboard"; + +function loadingWrap(actionFunction) { + return (dispatch) => { + dispatch({ + type: actionTypes.SET_LOADING, + data: true + }); + + actionFunction() + .then(() => + dispatch({ + type: actionTypes.SET_LOADING, + data: false + }) + ); + }; +} + +function getContent(folderPanelState, changeToFolderId=null) { + const { numItems, sorting, currentFolderId, loadedItems } = folderPanelState; + const folderId = changeToFolderId || currentFolderId; + const startIndex = changeToFolderId ? 0 : loadedItems; + + return dispatch => + ItemsService.getContent(folderId, startIndex, numItems, sorting) + .then( + response => dispatch({ + type: startIndex ? actionTypes.MORE_CONTENT_LOADED : actionTypes.CONTENT_LOADED, + data: response + }), + reason => dispatch({ + type: actionTypes.LOAD_CONTENT_ERROR, + data: reason.data ? reason.data.message : null + }) + ); +} + +function syncContent(folderPanelState, recursive) { + const { numItems, sorting, currentFolderId } = folderPanelState; + + return dispatch => + ItemsService.syncContent(currentFolderId, numItems, sorting, recursive) + .then( + response => dispatch({ + type: actionTypes.CONTENT_LOADED, + data: response + }), + reason => dispatch({ + type: actionTypes.LOAD_CONTENT_ERROR, + data: reason.data ? reason.data.message : null + }) + ); +} + +const folderPanelActions = { + syncContent(folderPanelState, changeToFolderId=null) { + return (dispatch) => { + let syncContentLogic = () => dispatch(syncContent(folderPanelState, changeToFolderId)); + dispatch(loadingWrap(syncContentLogic)); + + let currentHistoryFolderId = history.state ? history.state.folderId : null; + + if (changeToFolderId && currentHistoryFolderId !== changeToFolderId && changeToFolderId !== folderPanelState.homeFolderId) { + history.pushState({folderId: changeToFolderId}, null, "?folderId=" + changeToFolderId); + } + else if (changeToFolderId && currentHistoryFolderId !== changeToFolderId) { + let url = window.location.toString(); + if (url.indexOf("?") > 0) { + let clean_url = url.substring(0, url.indexOf("?")); + history.pushState({folderId: changeToFolderId}, null, clean_url); + } + } + }; + }, + loadContent(folderPanelState, changeToFolderId=null) { + return (dispatch) => { + let getContentLogic = () => dispatch(getContent(folderPanelState, changeToFolderId)); + dispatch(loadingWrap(getContentLogic)); + + let currentHistoryFolderId = history.state ? history.state.folderId : null; + + if (changeToFolderId && currentHistoryFolderId !== changeToFolderId && changeToFolderId !== folderPanelState.homeFolderId) { + history.pushState({folderId: changeToFolderId}, null, "?folderId=" + changeToFolderId); + } + else if (changeToFolderId && currentHistoryFolderId !== changeToFolderId) { + let url = window.location.toString(); + if (url.indexOf("?") > 0) { + let clean_url = url.substring(0, url.indexOf("?")); + history.pushState({folderId: changeToFolderId}, null, clean_url); + } + } + }; + }, + deleteFolder(folderToRemoveId, folderPanelState) { + const { currentFolderId } = folderPanelState; + + return (dispatch) => { + let deleteFolder = () => + ItemsService.deleteFolder(folderToRemoveId) + .then( + () => dispatch(getContent(folderPanelState, currentFolderId)), + + reason => dispatch({ + type: actionTypes.DELETE_FOLDER_ERROR, + data: reason.data ? reason.data.message : null + }) + ); + + dispatch(loadingWrap(deleteFolder)); + }; + }, + deleteFile(fileToRemoveId, folderPanelState) { + const { currentFolderId } = folderPanelState; + + return (dispatch) => { + let deleteFile = () => + ItemsService.deleteFile(fileToRemoveId) + .then( + () => dispatch(getContent(folderPanelState, currentFolderId)), + + reason => dispatch({ + type: actionTypes.DELETE_FILE_ERROR, + data: reason.data ? reason.data.message : null + }) + ); + + dispatch(loadingWrap(deleteFile)); + }; + }, + downloadFile(fileId) { + return (dispatch) => { + let downloadUrl = ItemsService.getDownloadUrl(fileId); + window.open(downloadUrl, "_blank"); + dispatch ({ + type: actionTypes.FILE_DOWNLOADED + }); + }; + }, + copyFileUrlToClipboard(item) { + if (!item.path) { + return; + } + + let fullUrl = ItemsService.getItemFullUrl(item.path); + copyToClipboard(fullUrl); + + return { + type: actionTypes.URL_COPIED_TO_CLIPBOARD, + data: fullUrl + }; + }, + changeSearchingValue(searchText) { + return { + type: actionTypes.CHANGE_SEARCH, + data: searchText + }; + }, + searchFiles(folderPanelState, search, searchMore=false) { + const { numItems, sorting, currentFolderId, loadedItems } = folderPanelState; + const folderId = currentFolderId; + const startIndex = searchMore ? Math.ceil(loadedItems/numItems) + 1 : 1; + + return (dispatch) => { + let getContent = () => + ItemsService.searchFiles(folderId, search, startIndex, numItems, sorting, "") + .then( + response => dispatch({ + type: searchMore ? actionTypes.MORE_CONTENT_LOADED : actionTypes.FILES_SEARCHED, + data: response + }), + reason => dispatch({ + type: actionTypes.SEARCH_FILES_ERROR, + data: reason + }) + ); + + dispatch(loadingWrap(getContent)); + }; + }, + changeSorting(sorting) { + return { + type: actionTypes.CHANGE_SORTING, + data: sorting + }; + } +}; + +export default folderPanelActions; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/globalActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/globalActions.js new file mode 100644 index 00000000000..d87e6afddbc --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/globalActions.js @@ -0,0 +1,13 @@ + +import actionTypes from "../action types/globalActionsTypes"; + +const globalActions = { + loadInitialParameters(initialConfig) { + return { + type: actionTypes.MODULE_PARAMETERS_LOADED, + data: initialConfig + }; + } +}; + +export default globalActions; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/infiniteScrollActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/infiniteScrollActions.js new file mode 100644 index 00000000000..95aa4e97ede --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/infiniteScrollActions.js @@ -0,0 +1,12 @@ +import actionTypes from "../action types/infiniteScrollActionsTypes"; + +const infiniteScrollActions = { + setMaxScrollTop(maxScrollTop) { + return { + type: actionTypes.SET_MAX_SCROLL_TOP, + data: maxScrollTop + }; + } +}; + +export default infiniteScrollActions; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/itemDetailsActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/itemDetailsActions.js new file mode 100644 index 00000000000..607d5976b1b --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/itemDetailsActions.js @@ -0,0 +1,136 @@ +import actionTypes from "../action types/itemDetailsActionsTypes"; +import itemsService from "../services/itemsService"; +import localizeService from "../services/localizeService"; + +const itemDetailsActions = { + editItem(item) { + const itemData = {isFolder: item.isFolder, iconUrl: item.iconUrl, thumbnailAvailable: item.thumbnailAvailable, thumbnailUrl: item.thumbnailUrl}; + let getItemDetails = () => item.isFolder + ? itemsService.getFolderDetails(item.itemId) + : itemsService.getFileDetails(item.itemId); + return dispatch => { + getItemDetails() + .then( + response => dispatch({ + type: actionTypes.EDIT_ITEM, + data: {...response, ...itemData} + }), + reason => dispatch({ + type: actionTypes.EDIT_ITEM_ERROR, + data: reason.data && reason.data.message ? reason.data.message : localizeService.getString("GenericErrorMessage") + }) + ); + }; + }, + cancelEditItem() { + return { + type: actionTypes.CANCEL_EDIT_ITEM + }; + }, + moveItem(item) { + const itemData = {isFolder: item.isFolder, iconUrl: item.iconUrl, thumbnailAvailable: item.thumbnailAvailable, thumbnailUrl: item.thumbnailUrl}; + let getItemDetails = () => item.isFolder + ? itemsService.getFolderDetails(item.itemId) + : itemsService.getFileDetails(item.itemId); + return dispatch => { + getItemDetails() + .then( + response => dispatch({ + type: actionTypes.MOVE_ITEM, + data: {...response, ...itemData} + }), + reason => dispatch({ + type: actionTypes.SAVE_ITEM_ERROR, + data: reason.data && reason.data.message ? reason.data.message : localizeService.getString("GenericErrorMessage") + }) + ); + }; + }, + moveFolder(sourceFolderId, destinationFolderId) { + return dispatch => { + itemsService.moveFolder(sourceFolderId, destinationFolderId) + .then( + () => { + dispatch({ + type: actionTypes.ITEM_MOVED, + }); + }, + reason => { + reason.data && reason.data.message ? reason.data.message : localizeService.getString("GenericErrorMessage") + } + ) + }; + }, + moveFile(sourceFileId, destinationFolderId) { + return dispatch => { + itemsService.moveFile(sourceFileId, destinationFolderId) + .then( + () => dispatch({ + type: actionTypes.ITEM_MOVED + }), + reason => { + reason.data && reason.data.message ? reason.data.message : localizeService.getString("GenericErrorMessage") + } + ) + } + }, + cancelMoveItem() { + return { + type: actionTypes.CANCEL_MOVE_ITEM + }; + }, + changeName(event) { + return { + type: actionTypes.CHANGE_NAME, + data: event.target.value + }; + }, + changeTitle(event) { + return { + type: actionTypes.CHANGE_TITLE, + data: event.target.value + }; + }, + changeDescription(event) { + return { + type: actionTypes.CHANGE_DESCRIPTION, + data: event.target.value + }; + }, + changePermissions(permissions) { + return { + type: actionTypes.CHANGE_PERMISSIONS, + data: permissions + }; + }, + setValidationErrors(validationErrors) { + return { + type: actionTypes.SET_VALIDATION_ERRORS, + data: validationErrors + }; + }, + saveItem(item) { + let saveFunction = () => item.isFolder + ? itemsService.saveFolderDetails(item) + : itemsService.saveFileDetails(item); + return dispatch => { + saveFunction() + .then( + () => dispatch({ + type: actionTypes.ITEM_SAVED, + data: { + isFolder: item.isFolder, + itemId: item.isFolder ? item.folderId : item.fileId, + itemName: item.isFolder ? item.folderName : item.fileName + } + }), + reason => dispatch({ + type: actionTypes.SAVE_ITEM_ERROR, + data: reason.data && reason.data.message ? reason.data.message : localizeService.getString("GenericErrorMessage") + }) + ); + }; + } +}; + +export default itemDetailsActions; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/manageFolderTypesPanelActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/manageFolderTypesPanelActions.js new file mode 100644 index 00000000000..1d246da77eb --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/manageFolderTypesPanelActions.js @@ -0,0 +1,48 @@ +import actionTypes from "../action types/manageFolderTypesPanelActionsTypes"; +import folderPanelActionTypes from "../action types/folderPanelActionsTypes"; +import addFolderPanelActions from "../actions/addFolderPanelActions"; +import ItemsService from "../services/itemsService"; + +const manageFolderTypesPanelActions = { + showPanel() { + return dispatch => { + dispatch ({ + type: folderPanelActionTypes.CLOSE_TOP_PANELS + }); + + dispatch ({ + type: actionTypes.SHOW_MANAGE_FOLDER_TYPES_PANEL + }); + } + }, + hidePanel() { + return dispatch => { + dispatch ({ + type: actionTypes.HIDE_MANAGE_FOLDER_TYPES_PANEL + }); + }; + }, + removeFolderType(folderMappingId) { + return (dispatch) => { + ItemsService.removeFolderType(folderMappingId) + .then( + () => { + dispatch(addFolderPanelActions.loadFolderMappings()); + } + ); + } + }, + getAddFolderTypeUrl() { + return dispatch => { + ItemsService.getAddFolderTypeUrl() + .then(data => { + dispatch({ + type: actionTypes.ADD_FOLDER_TYPE_URL_LOADED, + data + }); + }); + } + } +}; + +export default manageFolderTypesPanelActions; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/messageModalActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/messageModalActions.js new file mode 100644 index 00000000000..9bb61abe72c --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/messageModalActions.js @@ -0,0 +1,11 @@ +import actionTypes from "../action types/messageModalActionsTypes"; + +const messageModalActions = { + close() { + return { + type: actionTypes.CLOSE_MESSAGE_MODAL + }; + } +}; + +export default messageModalActions; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/topBarActions.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/topBarActions.js new file mode 100644 index 00000000000..f01d568652e --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/actions/topBarActions.js @@ -0,0 +1,12 @@ +import actionTypes from "../action types/topBarActionsTypes"; + +const topBarActions = { + changeSearchField(text) { + return { + type: actionTypes.CHANGE_SEARCH_FIELD, + data: text + }; + } +}; + +export default topBarActions; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/App.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/App.jsx new file mode 100644 index 00000000000..1805cfc13fe --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/App.jsx @@ -0,0 +1,10 @@ +import React from "react"; +import ModuleLayout from "../containers/ModuleLayout"; + +export default class App extends React.Component { + render() { + return ( + + ); + } +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/AssetsHeader.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/AssetsHeader.jsx new file mode 100644 index 00000000000..d42673b99b0 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/AssetsHeader.jsx @@ -0,0 +1,12 @@ +import React from "react"; +import ButtonsContainer from "../containers/ButtonsContainer"; +import BreadcrumbsContainer from "../containers/BreadcrumbsContainer"; + +const AssetsHeader = () => ( +
+ + +
+); + +export default AssetsHeader; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Breadcrumb.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Breadcrumb.jsx new file mode 100644 index 00000000000..e24694b9d09 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Breadcrumb.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import PropTypes from "prop-types"; + +const Breadcrumb = ({name, onClick}) => ( +
+ { name } +
+); + +Breadcrumb.propTypes = { + name: PropTypes.string.isRequired, + onClick: PropTypes.func +}; + +export default Breadcrumb; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileDetails.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileDetails.jsx new file mode 100644 index 00000000000..70a4099f801 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileDetails.jsx @@ -0,0 +1,63 @@ +import React from "react"; +import PropTypes from "prop-types"; +import itemService from "../services/itemsService"; +import localizeService from "../services/localizeService"; + +const FileDetails = ({file, handlers, validationErrors}) => ( +
+
+
+
+ {localizeService.getString("Created")}: + {file.createdOnDate} +
+
+
+ {localizeService.getString("Size")}: + {file.size} +
+
+
+ {localizeService.getString("LastModified")}: + {file.lastModifiedOnDate} +
+
+
+ {localizeService.getString("URL")}: + {itemService.getItemFullUrl(file.url)} +
+
+
+
+
+ + + +
+
+ + +
+
+ + +
+
+
+ + +
+
+); + +FileDetails.propTypes = { + file: PropTypes.object.isRequired, + handlers: PropTypes.object.isRequired, + validationErrors: PropTypes.object.isRequired +}; + +export default FileDetails; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileProgress.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileProgress.jsx new file mode 100644 index 00000000000..2d048760d42 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileProgress.jsx @@ -0,0 +1,34 @@ +import React from "react"; +import PropTypes from "prop-types"; +import OverwriteContainer from "../containers/ProgressBarOverwriteContainer"; + +const FileProgress = ({fileName, progress, imgSrc, fileUrl, uploading, error, stopped, message, alreadyExists}) => ( +
+ + + + +
+ {fileName} + {alreadyExists && } + {message && {message}} +
+
+
+
+
+); + +FileProgress.propTypes = { + fileName: PropTypes.string, + progress: PropTypes.number, + imgSrc: PropTypes.string, + fileUrl: PropTypes.string, + uploading: PropTypes.bool, + error: PropTypes.bool, + stopped: PropTypes.bool, + message: PropTypes.string, + alreadyExists: PropTypes.bool +}; + +export default FileProgress; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileUpload.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileUpload.jsx new file mode 100644 index 00000000000..46567143ae1 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FileUpload.jsx @@ -0,0 +1,17 @@ +import React from "react"; +import DropZone from "../containers/DropZoneContainer"; +import Progress from "../containers/ProgressContainer"; +import localizeService from "../services/localizeService.js"; + +const FileUpload = () => ( +
+ + + {localizeService.getString("FileUploadPanelMessage")} + + + +
+); + +export default FileUpload; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderDetails.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderDetails.jsx new file mode 100644 index 00000000000..a0993db1157 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderDetails.jsx @@ -0,0 +1,62 @@ +import React from "react"; +import PropTypes from "prop-types"; +import localizeService from "../services/localizeService"; +import itemsService from "../services/itemsService"; +import Permissions from "./Permissions"; + +const FolderDetails = ({folder, handlers, validationErrors}) => ( +
+
+
+
+ {localizeService.getString("Created")}: + {folder.createdOnDate} +
+
+
+ {localizeService.getString("LastModified")}: + {folder.lastModifiedOnDate} +
+
+
+ {localizeService.getString("FolderType")}: + {folder.type} +
+
+
+ {localizeService.getString("URL")}: + {itemsService.getFolderUrl(folder.folderId)} +
+
+
+
+ handlers.changePermissions(permissions)} + > +
+
+
+
+ + + +
+
+ + +
+
+); + +FolderDetails.propTypes = { + folder: PropTypes.object.isRequired, + handlers: PropTypes.object.isRequired, + validationErrors: PropTypes.object.isRequired +}; + +export default FolderDetails; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/FolderPicker.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/FolderPicker.jsx new file mode 100644 index 00000000000..fcbffbbaad5 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/FolderPicker.jsx @@ -0,0 +1,125 @@ +import React from "react"; +import PropTypes from "prop-types"; +import FolderSelector from "./FolderSelector"; +import internalService from "../../services/internalService"; + +function findKey(thisObject, id) { + /* eslint-disable spellcheck/spell-checker */ + let p, tRet; + for (p in thisObject) { + if (p === "data") { + if (thisObject[p].key === id) { + return thisObject; + } + } else if (thisObject[p] instanceof Object) { + if (thisObject.hasOwnProperty(p)) { + tRet = findKey(thisObject[p], id); + if (tRet) { return tRet; } + } + } + } + return false; + /* eslint-enable spellcheck/spell-checker */ +} + +export default class FolderPicker extends React.Component { + + constructor(props) { + super(props); + + this.state = { + folders: null + }; + } + + componentDidMount() { + this.getFolders(); + } + + componentWillUnmount() { + this.unmounted = true; + } + + getFolders(searchText) { + let folderPromise = searchText ? internalService.searchFolders(searchText) : internalService.getFolders(); + folderPromise.then( + this.setFolders.bind(this) + ); + } + + getChildrenFolders(parentId) { + internalService.getFolderDescendant(parentId) + .then( + this.addChildFolders.bind(this, parentId) + ); + } + + setFolders(result) { + if (this.unmounted) { + return; + } + + const { props } = this; + let homeFolderId = props.homeFolderId; + + let source = result.Tree; + let filtered = this.findNode(source, (n) => {return n !== null && n.data.key === homeFolderId.toString();}); + source.children.splice(0, source.children.length, filtered); + + this.setState({ folders: result.Tree }); + } + + findNode(node, condition) { + if (condition(node)) { + return node; + } + + for (let i = 0; i < node.children.length; i++) { + let found = this.findNode(node.children[i], condition); + if (found !== null) { + return found; + } + } + + return null; + } + + addChildFolders(parentId, result) { + const folders = this.state.folders; + const parent = findKey(folders, parentId); + const children = result.Items.map((item) => { + return { data: item, children: [] }; + }); + parent.children = children; + this.setState({ folders }); + } + + render() { + const {changeFolder} = this.props; + + return ( + + ); + } +} + +/** + * propTypes + * @property {object} selectedFolder selected folder. Should be null or have a key and value properties + * @property {object} onSelectFolder called when change folder. Pass as parameter a selectedFolder object + * @property {object} onRetrieveFolderError callback for error when retrieve data + */ + +FolderPicker.propTypes = { + selectedFolder: PropTypes.object, + changeFolder: PropTypes.func, + onRetrieveFolderError: PropTypes.func, + noFolderSelectedValue: PropTypes.string.isRequired, + searchFolderPlaceHolder: PropTypes.string.isRequired, + homeFolderId: PropTypes.number +}; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/FolderSelector.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/FolderSelector.jsx new file mode 100644 index 00000000000..c1dc99e97a5 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/FolderSelector.jsx @@ -0,0 +1,125 @@ +import React, { Component } from "react"; +import { PropTypes } from "prop-types"; +import Folders from "./Folders"; +import { Scrollbars } from "react-custom-scrollbars"; +import "./style.less"; + +const searchIconImage = require("!raw-loader!./img/search.svg").default; + +export default class FolderSelector extends Component { + + constructor() { + super(); + this.state = { + showFolderPicker: false, + searchFolderText: "" + }; + this.timeOut = null; + this.handleClick = this.handleClick.bind(this); + this.folderSelector = React.createRef(); + } + + componentDidMount() { + document.addEventListener("click", this.handleClick, false); + this._isMounted = true; + } + + componentWillUnmount() { + document.removeEventListener("click", this.handleClick, false); + this._isMounted = false; + } + + handleClick(e) { + if (!this._isMounted) { return; } + const node = this.folderSelector; + if (node && node.contains(e.target) || e.target.className === "clear-button") { + return; + } + this.hide(); + } + + hide() { + this.setState({ showFolderPicker: false}); + } + + onFolderChange(folder) { + this.hide(); + this.props.onFolderChange(folder); + } + + onChangeSearchFolderText(e) { + const searchFolderText = e.target.value ? e.target.value : ""; + this.setState({ searchFolderText }); + clearTimeout(this.timeOut); + this.timeOut = setTimeout(() => {this.props.searchFolder(searchFolderText.toLowerCase());}, 500); + } + + clearSearch(e) { + e.preventDefault(); + this.setState({ searchFolderText: "" }); + this.props.searchFolder(); + } + + onFoldersClick() { + const {showFolderPicker} = this.state; + this.setState({ showFolderPicker: !showFolderPicker }); + } + + getSearchIcon() { + /* eslint-disable react/no-danger */ + return (
); + /* eslint-enable react/no-danger */ + } + + render() { + const {selectedFolder, folders, onParentExpands, noFolderSelectedValue, searchFolderPlaceHolder} = this.props; + const selectedFolderText = selectedFolder ? selectedFolder.value : "<" + noFolderSelectedValue + ">"; + const searchIcon = this.getSearchIcon(); + + return ( +
this.folderSelector = fs} className="dnn-folder-selector"> +
+ {selectedFolderText} +
+
+
+
+ + {this.state.searchFolderText && +
×
+ } + {searchIcon} +
+
+ + + +
+
+
+
+ ); + } +} + + +FolderSelector.propTypes = { + folders: PropTypes.object, + onFolderChange: PropTypes.func.isRequired, + onParentExpands: PropTypes.func.isRequired, + selectedFolder: PropTypes.object, + searchFolder: PropTypes.func.isRequired, + noFolderSelectedValue: PropTypes.string.isRequired, + searchFolderPlaceHolder: PropTypes.string.isRequired +}; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/Folders.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/Folders.jsx new file mode 100644 index 00000000000..4cc00d55afa --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/Folders.jsx @@ -0,0 +1,103 @@ +import React, { Component } from "react"; +import { PropTypes } from "prop-types"; +import "./style.less"; + +const folderIcon = require("!raw-loader!./img/folder.svg").default; + +export default class Folders extends Component { + + constructor() { + super(); + this.state = { + openFolders: [] + }; + } + + componentWillReceiveProps(props) { + if (!props.folders || !props.folders.children || !props.folders.children[0] || + !props.folders.children[0].data || !props.folders.children[0].data.key) { + return; + } + const rootKey = props.folders.children[0].data.key; + const {openFolders} = this.state; + openFolders.push(rootKey); + this.setState({ openFolders }); + } + + + toggleFolder(key) { + let {openFolders} = this.state; + if (openFolders.some(id => id === key)) { + openFolders = openFolders.filter(id => id !== key); + } else { + openFolders.push(key); + } + this.setState({ openFolders }); + } + + onParentClick(item) { + if (!item.data.hasChildren) { + return; + } + this.toggleFolder(item.data.key); + if (item.children && item.children.length) { + return; + } + this.props.onParentExpands(item.data.key); + } + + onFolderNameClick(folder) { + this.props.onFolderChange(folder.data); + } + + getFolderIcon() { + /* eslint-disable react/no-danger */ + return (
); + /* eslint-enable react/no-danger */ + } + + getFolders(folder) { + if (!folder) { + return false; + } + + const folderIcon = this.getFolderIcon(); + const children = folder.children.map((child) => { + const isOpen = this.state.openFolders.some(id => child !== null && id === child.data.key); + const className = isOpen ? "open" : ""; + return child !== null &&
  • + {child.data.hasChildren && +
    +
    + } +
    + {folderIcon} +
    {child.data.value}
    +
    + {child.data.hasChildren && + this.getFolders(child) + } +
  • ; + }); + + return
      {children}
    ; + } + + render() { + const folders = this.getFolders(this.props.folders); + + return ( +
    + {folders} +
    + ); + } +} + +Folders.propTypes = { + folders: PropTypes.object, + onFolderChange: PropTypes.func.isRequired, + onParentExpands: PropTypes.func.isRequired +}; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/img/folder.svg b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/img/folder.svg new file mode 100644 index 00000000000..cf83478037a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/img/folder.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/img/search.svg b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/img/search.svg new file mode 100644 index 00000000000..9622314b685 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/img/search.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/style.less b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/style.less new file mode 100644 index 00000000000..a2af1f28a27 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/FolderSelector/style.less @@ -0,0 +1,296 @@ +.prefixes(@property, @value) { + -webkit-@{property}: @value; + -khtml-@{property}: @value; + -moz-@{property}: @value; + -ms-@{property}: @value; + @{property}: @value; +} + +@import "~@dnnsoftware/dnn-react-common/styles/index"; +@transition: .2s; + +.dnn-folder-selector { + width: 100%; + float: left; + height: 30px; + border: 1px solid @mountainMist; + position: relative; + border: none; + + &:after { + content: ""; + position: absolute; + right: 20px; + top: 12px; + width: 0; + height: 0; + pointer-events: none; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 4px solid @rollingStone; + } + + .selected-item { + float: left; + width: 100%; + height: 100%; + padding: 7px; + box-sizing: border-box; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-right: 20px; + } + + span > strong { + cursor: pointer; + &:hover { + text-decoration: underline; + } + } + + .folder-selector-container { + position: absolute; + top: ~"calc(100% + 1px)"; + left: -1px; + width: 100%; + border: 1px solid @alto; + background: white; + z-index: 1; + transition: @transition; + overflow: hidden; + max-height: 0px; + box-shadow: none; + opacity: 0; + &.show { + max-height: 600px; + opacity: 1; + } + .inner-box { + box-sizing: border-box; + padding: 20px; + float: left; + width: 100%; + height: 100%; + .search { + float: left; + width: 100%; + border: 1px solid @alto; + position: relative; + .clear-button { + position: absolute; + right: 32px; + top: 50%; + height: 26px; + margin-top: -13px; + font-size: 26px; + line-height: 26px; + opacity: .5; + cursor: pointer; + &:hover { + opacity: 1; + } + } + .search-icon { + position: absolute; + right: 0px; + top: 50%; + transform: translate(0, -50%); + height: 24px; + color: @rollingStone; + } + input[type="text"] { + float: left; + border: none; + width: ~"calc(100% - 40px)"; + box-sizing: border-box; + outline: none !important; + padding: 0px !important; + box-shadow: none; + border: none !important; + margin-top: 3px; + margin-left: 5px; + } + } + .items { + float: left; + width: 100%; + border: 1px solid @alto; + height: 200px; + margin-top: 14px; + &, * { + .prefixes(user-select, none); + } + + .scrollArea { + height: 100% !important; + max-height: none !important; + + & > div:first-child{ + box-sizing: content-box; + padding-bottom: 17px; + height: 100%; + } + + .dnn-folders-component{ + div.has-children{ + top: 9px; + } + } + } + } + } + } +} + +.dnn-folders-component { + padding-top: 6px; + ul { + padding-left: 20px; + box-sizing: border-box; + li { + list-style: none; + position: relative; + float: left; + width: 100%; + margin-top: 0px; + & > div { + padding-top: 0px; + cursor: pointer; + float: left; + width: 100%; + padding-top: 4px; + &:hover { + color: @curiousBlue; + } + } + & > ul { + height: 0px; + overflow: hidden; + float: left; + width: 100%; + } + &.open { + & > ul { + height: auto; + } + & > .has-children { + transform: rotate(90Deg); + } + } + .icon { + width: 14px; + float: left; + margin-right: 5px; + height: 13px; + cursor: pointer; + } + .item-name { + cursor: pointer; + float: left; + width: ~"calc(100% - 30px)"; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + &.none-specified { + font-weight: bold; + } + } + .has-children { + position: absolute; + left: -15px; + top: 1px; + width: 10px; + height: 10px; + cursor: pointer; + transition: .18s; + &:after { + content: ""; + position: absolute; + left: 4px; + top: 1px; + width: 0; + height: 0; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid @rollingStone; + } + } + } + } + + padding-top: 6px; + ul { + padding-left: 20px; + box-sizing: border-box; + li { + list-style: none; + position: relative; + float: left; + width: 100%; + margin-top: 0px; + & > div { + padding-top: 0px; + cursor: pointer; + float: left; + width: 100%; + padding-top: 4px; + &:hover { + color: @curiousBlue; + } + } + & > ul { + height: 0px; + overflow: hidden; + float: left; + width: 100%; + } + &.open { + & > ul { + height: auto; + } + & > .has-children { + transform: rotate(90Deg); + } + } + .icon { + width: 14px; + float: left; + margin-right: 5px; + height: 13px; + cursor: pointer; + } + .item-name { + cursor: pointer; + float: left; + width: ~"calc(100% - 30px)"; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + &.none-specified { + font-weight: bold; + } + } + .has-children { + position: absolute; + left: -15px; + top: 1px; + width: 10px; + height: 10px; + cursor: pointer; + transition: .18s; + &:after { + content: ""; + position: absolute; + left: 4px; + top: 1px; + width: 0; + height: 0; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid @rollingStone; + } + } + } + } +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Item.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Item.jsx new file mode 100644 index 00000000000..1bf4faab8b5 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Item.jsx @@ -0,0 +1,46 @@ +import React from "react"; +import PropTypes from "prop-types"; + +function truncateString(content, length) { + if (typeof length === "undefined") { + length = 13; + } + + return content.length <= length ? content : content.substr(0, length) + "..."; +} + +const Item = ({item, iconUrl, handlers, isHighlighted, isDetailed}) => ( +
    +
    +
    +
    +

    { truncateString(item.itemName) }

    +
    +
    +
    +
    +
    +
    + +
    + { handlers.onEdit ?
    : "" } + { handlers.onCopyToClipboard ?
    : "" } + { handlers.onDownload ?
    : "" } + { handlers.onMove ?
    : ""} + { handlers.onDelete ?
    : "" } +
    +
    + {isDetailed &&
    } +
    +); + +Item.propTypes = { + item: PropTypes.object.isRequired, + iconUrl: PropTypes.string.isRequired, + handlers: PropTypes.object.isRequired, + isHighlighted: PropTypes.bool, + isDetailed: PropTypes.bool +}; + +export default Item; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Permissions.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Permissions.jsx new file mode 100644 index 00000000000..1d34801acb9 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/components/Permissions.jsx @@ -0,0 +1,57 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import { PermissionGrid } from "@dnnsoftware/dnn-react-common"; +import DnnSf from "../globals/dnnSf"; + +class Permissions extends React.Component { + constructor(props) { + super(props); + + this.state = { + permissions: JSON.parse( + JSON.stringify(props.folderBeingEdited.permissions) + ), + }; + } + + onPermissionsChanged(permissions) { + const { state } = this; + + let newPermissions = Object.assign({}, state.permissions, permissions); + this.props.updateFolderBeingEdited(newPermissions); + this.setState({ permissions: newPermissions }); + } + + render() { + const { state } = this; + const dnnSf = new DnnSf(); + const grid = ( + {}} + permissions={state.permissions} + service={dnnSf} + onPermissionsChanged={this.onPermissionsChanged.bind(this)} + /> + ); + return
    {grid}
    ; + } +} + +Permissions.propTypes = { + updateFolderBeingEdited: PropTypes.func, + folderBeingEdited: PropTypes.object, +}; + +function mapStateToProps() { + return {}; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({}, dispatch), + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(Permissions); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AddAssetPanelContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AddAssetPanelContainer.jsx new file mode 100644 index 00000000000..8de7b06f21e --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AddAssetPanelContainer.jsx @@ -0,0 +1,49 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import FileUpload from "../components/FileUpload"; +import localizeService from "../services/localizeService"; +import addAssetPanelActions from "../actions/addAssetPanelActions"; + +class AddAssetPanelContainer extends React.Component { + render() { + const { expanded, hasPermission, hidePanel } = this.props; + + return hasPermission ? ( + + ) : null; + } +} + +AddAssetPanelContainer.propTypes = { + expanded: PropTypes.bool, + hasPermission: PropTypes.bool, + hidePanel: PropTypes.func +}; + +function mapStateToProps(state) { + const addAssetPanelState = state.addAssetPanel; + const folderPanelState = state.folderPanel; + + return { + expanded: addAssetPanelState.expanded, + hasPermission: folderPanelState.hasAddFilesPermission + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + hidePanel: addAssetPanelActions.hidePanel + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(AddAssetPanelContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AddFolderPanelContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AddFolderPanelContainer.jsx new file mode 100644 index 00000000000..83f1bcc04e3 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AddFolderPanelContainer.jsx @@ -0,0 +1,173 @@ +import React from "react"; +import { PropTypes } from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import localizeService from "../services/localizeService"; +import addFolderPanelActions from "../actions/addFolderPanelActions"; +import DropDown from "../../../../../../Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown"; + +class AddFolderPanelContainer extends React.Component { + constructor(props) { + super(props); + this.props.loadFolderMappings(); + this.nameInput = React.createRef(); + this.container = React.createRef(); + } + + componentDidUpdate(previousProps) { + if (!previousProps.expanded && this.props.expanded) { + this.nameInput.focus(); + + // Workaround so the dropdown shows properly with more than 3 folder providers + setTimeout(() => { + this.container.style = "overflow: visible;"; + }, 1000); + } + if (previousProps.expanded && !this.props.expanded) { + this.container.style = "overflow: hidden;"; + } + } + + getParentFolderName() { + const {currentFolderId, currentFolderName, homeFolderId} = this.props.folderPanelState; + + if (currentFolderId === homeFolderId) { + return "HOME"; + } + + return currentFolderName; + } + + render() { + const { expanded, hasPermission, hidePanel, folderTypes, formData, validationErrors, folderPanelState, + changeName, changeFolderType, addFolder, setValidationErrors } = this.props; + + let localizedFolderTypes = folderTypes ? folderTypes.map(obj => + { + let label = localizeService.getString(obj.MappingName); + return { label, value: obj.FolderMappingID }; + }) : undefined; + + let nameValidationError = validationErrors ? validationErrors.name : ""; + let typeValidationError = validationErrors ? validationErrors.type : ""; + + function onSelectChange(option) { + changeFolderType.call(this, option.value); + } + + function formSubmit() { + if (!validateForm()) { + return; + } + + let data = { + formData, + folderPanelState + }; + + addFolder(data); + } + + function validateForm() { + let result = true; + let validationErrors = {}; + + if (!formData.name) { + validationErrors.name = localizeService.getString("FolderNameRequiredMessage"); + result = false; + } + + if (!formData.folderType) { + validationErrors.type = localizeService.getString("FolderTypeRequiredMessage"); + result = false; + } + + setValidationErrors(validationErrors); + + return result; + } + + return hasPermission ? ( +
    this.container = e} className={"top-panel add-folder" + (expanded ? " rm-expanded" : "")} > +
    +
    + + { "/" + this.getParentFolderName() } +
    +
    + + { this.nameInput = input; }} /> + + +
    + { + folderPanelState.folder.folderPath === "" && +
    + + + +
    + } +
    + + + + + +
    +
    + ) : null; + } +} + +AddFolderPanelContainer.propTypes = { + expanded: PropTypes.bool, + hasPermission: PropTypes.bool, + hidePanel: PropTypes.func, + loadFolderMappings: PropTypes.func, + folderTypes: PropTypes.array, + validationErrors: PropTypes.object, + formData: PropTypes.object, + folderPanelState: PropTypes.object, + changeName: PropTypes.func, + changeFolderType: PropTypes.func, + addFolder: PropTypes.func, + setValidationErrors: PropTypes.func +}; + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + const addFolderPanelState = state.addFolderPanel; + + return { + expanded: addFolderPanelState.expanded, + hasPermission: folderPanelState.hasAddFoldersPermission, + folderTypes: addFolderPanelState.folderMappings, + formData: addFolderPanelState.formData || {}, + validationErrors: addFolderPanelState.validationErrors, + folderPanelState + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + hidePanel: addFolderPanelActions.hidePanel, + loadFolderMappings: addFolderPanelActions.loadFolderMappings, + changeName: addFolderPanelActions.changeName, + changeFolderType: addFolderPanelActions.changeFolderType, + addFolder: addFolderPanelActions.addFolder, + setValidationErrors: addFolderPanelActions.setValidationErrors + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(AddFolderPanelContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AssetsPanelContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AssetsPanelContainer.jsx new file mode 100644 index 00000000000..ee1ea7707ed --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/AssetsPanelContainer.jsx @@ -0,0 +1,224 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { connect } from "react-redux"; +import { bindActionCreators } from "redux"; +import AssetsHeader from "../components/AssetsHeader"; +import folderPanelActions from "../actions/folderPanelActions"; +import ManageFolderTypesContainer from "../containers/ManageFolderTypesPanelContainer"; +import AddFolderPanelContainer from "../containers/AddFolderPanelContainer"; +import AddAssetPanelContainer from "../containers/AddAssetPanelContainer"; +import TopBarContainer from "./TopBarContainer"; +import Item from "../containers/ItemContainer"; +import ItemDetailsContainer from "../containers/ItemDetailsContainer"; +import ItemMoveContainer from "../containers/ItemMoveContainer"; +import localizeService from "../services/localizeService.js"; +import ReactCSSTransitionGroup from "react-transition-group/CSSTransitionGroup"; + +class AssetsPanelContainer extends React.Component { + constructor(props) { + super(props); + this.mainContainer = React.createRef(); + } + componentWillMount() { + window.addEventListener("scroll", this.handleScroll.bind(this)); + } + + getDetailsPosition(i) { + const itemWidth = this.props.itemWidth; + const container = this.mainContainer; + const containerWidth = container.clientWidth; + const itemsPerRow = Math.floor(containerWidth / itemWidth); + let position = Math.floor(i / itemsPerRow) * itemsPerRow + itemsPerRow - 1; + + return position; + } + + getDetailsPanel(showPanel, i) { + return ( + + {showPanel && } + + ); + } + + getMovePanel(showPanel, i) { + return ( + + {showPanel && } + + ); + } + + handleScroll() { + const { folderPanelState, loadContent, searchFiles } = this.props; + const { totalCount, loadedItems, search, loading } = folderPanelState; + + const bodyHeight = document.body.offsetHeight; + const windowHeight = window.innerHeight; + const totalScrolled = window.pageYOffset; + const scrollMax = bodyHeight - windowHeight; + + if (loadedItems < totalCount && totalScrolled + 100 > scrollMax) { + if (!loading) { + this.setState({ + loadingFlag: true, + }); + + if (search) { + searchFiles(folderPanelState, search, true); + } else { + loadContent(folderPanelState); + } + } + } + } + + render() { + const { + items, + itemEditing, + itemMoving, + search, + itemContainerDisabled, + loading, + } = this.props; + let propsPosition = -1; + + let result = []; + for (let i = 0; i < items.length; i++) { + const item = items[i]; + const { itemId, itemName, isFolder } = item; + result.push(); + + if ( itemEditing && + ( + (isFolder && itemEditing.folderId === itemId) || + (!isFolder && itemEditing.fileId === itemId) + ) + ) { + propsPosition = this.getDetailsPosition(i); + } + + if ( itemMoving && + ( + (isFolder && itemMoving.folderId === itemId) || + (!isFolder && itemMoving.fileId === itemId) + ) + ) { + propsPosition = this.getDetailsPosition(i); + } + + let showPanel = + i === propsPosition || + (propsPosition >= items.length && i === items.length - 1); + if (itemEditing){ + result.push(this.getDetailsPanel(showPanel, i)); + } + + if (itemMoving) { + result.push(this.getMovePanel(showPanel, i)); + } + } + + return ( +
    e.stopPropagation()}> + +
    + +
    (this.mainContainer = c)} + className={"main-container" + (loading ? " loading" : "")} + > + + + +
    + {result} +
    + + {localizeService.getString("AssetsPanelNoSearchResults")} + +
    +
    + + {localizeService.getString("AssetsPanelEmpty_Title")} + + + {localizeService.getString("AssetsPanelEmpty_Subtitle")} + +
    +
    +
    +
    +
    + ); + } +} + +AssetsPanelContainer.propTypes = { + folderPanelState: PropTypes.object, + items: PropTypes.array, + search: PropTypes.string, + itemContainerDisabled: PropTypes.bool, + loading: PropTypes.bool, + itemEditing: PropTypes.object, + itemMoving: PropTypes.object, + itemWidth: PropTypes.number, + loadContent: PropTypes.func, + searchFiles: PropTypes.func, +}; + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators( + { + loadContent: folderPanelActions.loadContent, + searchFiles: folderPanelActions.searchFiles, + }, + dispatch + ), + }; +} + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + const addFolderPanelState = state.addFolderPanel; + const addAssetPanelState = state.addAssetPanel; + const itemDetailsState = state.itemDetails; + + return { + folderPanelState, + items: folderPanelState.items || [], + search: folderPanelState.search, + itemContainerDisabled: + addFolderPanelState.expanded || addAssetPanelState.expanded, + loading: folderPanelState.loading, + itemEditing: itemDetailsState.itemEditing, + itemMoving: itemDetailsState.itemMoving, + itemWidth: folderPanelState.itemWidth, + }; +} + +export default connect( + mapStateToProps, + mapDispatchToProps +)(AssetsPanelContainer); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/BreadcrumbsContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/BreadcrumbsContainer.jsx new file mode 100644 index 00000000000..8c6a6db0ec9 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/BreadcrumbsContainer.jsx @@ -0,0 +1,65 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import Breadcrumb from "../components/Breadcrumb"; +import folderPanelActions from "../actions/folderPanelActions"; +import localizeService from "../services/localizeService"; + +class BreadcrumbsContainer extends React.Component { + render() { + const { breadcrumbs, loadContent, folderPanelState } = this.props; + const search = folderPanelState.search; + + let result = []; + let folderId; + + if (breadcrumbs[0]) { + folderId = breadcrumbs[0].folderId; + } + result.push(); + for (let i = 1; i"); + result.push(); + } + + if (search) { + result.push(">"); + result.push(); + } + + return ( +
    + { result } +
    + ); + } +} + +BreadcrumbsContainer.propTypes = { + breadcrumbs: PropTypes.array, + loadContent: PropTypes.func, + folderPanelState: PropTypes.object +}; + +function mapStateToProps(state) { + const breadcrumbsState = state.breadcrumbs; + const folderPanelState = state.folderPanel; + + return { + breadcrumbs: breadcrumbsState.breadcrumbs || [], + folderPanelState + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + loadContent: folderPanelActions.loadContent + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(BreadcrumbsContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ButtonsContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ButtonsContainer.jsx new file mode 100644 index 00000000000..80258fb3244 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ButtonsContainer.jsx @@ -0,0 +1,55 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import localizeService from "../services/localizeService.js"; +import manageFolderTypesPanelActions from "../actions/manageFolderTypesPanelActions"; +import addFolderPanelActions from "../actions/addFolderPanelActions"; +import addAssetPanelActions from "../actions/addAssetPanelActions"; + +class ButtonsContainer extends React.Component { + render() { + const { hasManageFolderTypesPermission, hasAddFilesPermission, hasAddFoldersPermission, showAddFolderPanel, showAddAssetPanel, showManageFolderTypesPanel } = this.props; + + return ( +
    +
    + { hasManageFolderTypesPermission ? { localizeService.getString("ManageFolderTypes") } : null } + { hasAddFoldersPermission ? { localizeService.getString("AddFolder") } : null } + { hasAddFilesPermission ? { localizeService.getString("AddAsset") } : null } +
    +
    + ); + } +} + +ButtonsContainer.propTypes = { + showManageFolderTypesPanel: PropTypes.func, + showAddFolderPanel: PropTypes.func, + showAddAssetPanel: PropTypes.func, + hasManageFolderTypesPermission: PropTypes.bool, + hasAddFilesPermission: PropTypes.bool, + hasAddFoldersPermission: PropTypes.bool +}; + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + showManageFolderTypesPanel: manageFolderTypesPanelActions.showPanel, + showAddFolderPanel: addFolderPanelActions.showPanel, + showAddAssetPanel: addAssetPanelActions.showPanel + }, dispatch) + }; +} + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + const moduleState = state.module; + return { + hasManageFolderTypesPermission: moduleState.isAdmin, + hasAddFilesPermission: folderPanelState.hasAddFilesPermission, + hasAddFoldersPermission: folderPanelState.hasAddFoldersPermission + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(ButtonsContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DevTools.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DevTools.js new file mode 100644 index 00000000000..89ffa86bf64 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DevTools.js @@ -0,0 +1,11 @@ +import React from "react"; +import { createDevTools } from "redux-devtools"; +import LogMonitor from "redux-devtools-log-monitor"; +import DockMonitor from "redux-devtools-dock-monitor"; + +export default createDevTools( + + + +); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DialogModalContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DialogModalContainer.jsx new file mode 100644 index 00000000000..0dfb455f9b6 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DialogModalContainer.jsx @@ -0,0 +1,76 @@ +import React from "react"; +import { PropTypes } from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import dialogModalActions from "../actions/dialogModalActions"; +import Modal from "../../../../../../Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal"; +import Label from "../../../../../../Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Label"; + +class DialogModalContainer extends React.Component { + render() { + const modalStyles = { + overlay: { + zIndex: "99999", + backgroundColor: "rgba(0,0,0,0.6)" + }, + content: { + borderRadius: "7px", + "background": "white", + WebkitBoxShadow: "0 0 25px 0 rgba(0, 0, 0, 0.75)", + boxShadow: "0 0 25px 0 rgba(0, 0, 0, 0.75)", + textAlign: "center", + "width": "300px", + height: "178px", + margin: "auto", + padding: 0, + border: "none", + boxSizing: "border-box" + } + }; + + const { dialogHeader, dialogMessage, close, yesFunction, noFunction } = this.props; + + function yesHandler() { + close(); + yesFunction(); + } + + return ( + + + ); + } +} + +DialogModalContainer.propTypes = { + dialogHeader: PropTypes.string, + dialogMessage: PropTypes.string, + close: PropTypes.func.isRequired, + yesFunction: PropTypes.func, + noFunction: PropTypes.func +}; + +function mapStateToProps(state) { + const dialogModalState = state.dialogModal; + return { + dialogHeader: dialogModalState.dialogHeader, + dialogMessage: dialogModalState.dialogMessage, + yesFunction: dialogModalState.yesFunction, + noFunction: dialogModalState.noFunction + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + close: dialogModalActions.close + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(DialogModalContainer); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DropZoneContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DropZoneContainer.jsx new file mode 100644 index 00000000000..043151329c6 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/DropZoneContainer.jsx @@ -0,0 +1,126 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import DropZone from "react-dropzone"; +import addAssetPanelActions from "../actions/addAssetPanelActions"; +import api from "../globals/api"; + +class DropZoneContainer extends React.Component { + validateFile(file) { + const { + maxUploadSize, + maxFileUploadSizeHumanReadable, + fileSizeError, + invalidExtensionError, + } = this.props; + + if (file.size > maxUploadSize) { + fileSizeError(file.name, maxFileUploadSizeHumanReadable); + return false; + } + + const validExtensions = api + .getWhitelistObject() + .extensionWhitelist.split(","); + const ext = file.name.substr(file.name.lastIndexOf(".") + 1); + let valid = false; + for (let i = 0; i < validExtensions.length; i++) { + const extension = validExtensions[i]; + if (extension !== ext) continue; + valid = true; + break; + } + + if (!valid) { + invalidExtensionError(file.name); + return false; + } + + return true; + } + + uploadFilesHandler(acceptedFiles) { + const { + showPanel, + folderPanelState, + trackProgress, + uploadFiles, + } = this.props; + showPanel(); + const validFiles = acceptedFiles.filter(this.validateFile.bind(this)); + uploadFiles( + validFiles, + this.getFolderPath(), + folderPanelState, + trackProgress + ); + } + + getFolderPath() { + const { folder } = this.props.folderPanelState; + return folder ? folder.folderPath : ""; + } + + render() { + const { hasPermission, style, activeStyle, className } = this.props; + return hasPermission ? ( + + {() => this.props.children} + + ) : ( +
    {this.props.children}
    + ); + } +} + +DropZoneContainer.propTypes = { + children: PropTypes.node, + disableClick: PropTypes.bool, + className: PropTypes.string, + style: PropTypes.any, + activeStyle: PropTypes.any, + folderPanelState: PropTypes.object, + hasPermission: PropTypes.bool, + showPanel: PropTypes.func, + uploadFiles: PropTypes.func, + trackProgress: PropTypes.func, + maxUploadSize: PropTypes.number, + maxFileUploadSizeHumanReadable: PropTypes.string, + fileSizeError: PropTypes.func, + invalidExtensionError: PropTypes.func, +}; + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + const moduleState = state.module; + + return { + folderPanelState, + maxUploadSize: moduleState.maxUploadSize, + maxFileUploadSizeHumanReadable: moduleState.maxFileUploadSizeHumanReadable, + hasPermission: folderPanelState.hasAddFilesPermission, + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators( + { + showPanel: addAssetPanelActions.showPanel, + uploadFiles: addAssetPanelActions.uploadFiles, + trackProgress: addAssetPanelActions.trackProgress, + fileSizeError: addAssetPanelActions.fileSizeError, + invalidExtensionError: addAssetPanelActions.invalidExtensionError, + }, + dispatch + ), + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(DropZoneContainer); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemContainer.jsx new file mode 100644 index 00000000000..23b4c8a97de --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemContainer.jsx @@ -0,0 +1,176 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import folderPanelActions from "../actions/folderPanelActions"; +import itemDetailsActions from "../actions/itemDetailsActions"; +import dialogModalActions from "../actions/dialogModalActions"; +import Item from "../components/Item"; +import itemsService from "../services/itemsService"; +import localizeService from "../services/localizeService"; + +class ItemContainer extends React.Component { + render() { + const { item, itemEditing, loadContent, editItem, moveItem, downloadFile, deleteFolder, + deleteFile, copyFileUrlToClipboard, openDialog, closeDialog, + folderPanelState, uploadedFiles, newFolderId } = this.props; + const isFolder = item.isFolder; + const { hasDeletePermission, hasManagePermission } = folderPanelState; + + function isHighlighted() { + if (isFolder && newFolderId === item.itemId) { + return true; + } + + if (!isFolder) { + for (let i = 0; i < uploadedFiles.length; i++) { + if (uploadedFiles[i].fileId === item.itemId) { + return true; + } + } + } + + return false; + } + + function getIconUrl() { + return itemsService.getIconUrl(item); + } + + function onClickFolder() { + if (!isFolder) { + return; + } + + loadContent(folderPanelState, item.itemId); + } + + function onEditItem(item, event) { + event.stopPropagation(); + editItem(item); + } + + function onDeleteFolder(event) { + event.stopPropagation(); + if (!isFolder) { + return; + } + + const dialogHeader = localizeService.getString("DeleteFolderDialogHeader"); + const dialogMessage = localizeService.getString("DeleteFolderDialogMessage"); + const yesFunction = deleteFolder.bind(this, item.itemId, folderPanelState); + const noFunction = closeDialog; + + openDialog(dialogHeader, dialogMessage, yesFunction, noFunction); + } + + function onMoveFolder(item, event) { + event.stopPropagation(); + if (!isFolder) { + return; + } + + moveItem(item); + } + + function onMoveFile(item, event) { + event.stopPropagation(); + if(isFolder) { + return; + } + + moveItem(item); + } + + function onDeleteFile(event) { + event.stopPropagation(); + if (isFolder) { + return; + } + + const dialogHeader = localizeService.getString("DeleteFileDialogHeader"); + const dialogMessage = localizeService.getString("DeleteFileDialogMessage"); + const yesFunction = deleteFile.bind(this, item.itemId, folderPanelState); + const noFunction = closeDialog; + + openDialog(dialogHeader, dialogMessage, yesFunction, noFunction); + } + + function isDetailed() { + if (!itemEditing) { + return false; + } + + const {isFolder, fileId, folderId} = itemEditing; + + if ((isFolder && folderId === item.itemId) || + (!isFolder && fileId === item.itemId)) { + return true; + } + + return false; + } + + const handlers = { + onClick: isFolder ? onClickFolder : null, + onEdit: hasManagePermission ? onEditItem.bind(this, item) : null, + onCopyToClipboard: isFolder ? null : copyFileUrlToClipboard.bind(this, item), + onDownload: isFolder ? null : downloadFile.bind(this, item.itemId), + onMove: (hasManagePermission && hasDeletePermission) ? isFolder ? onMoveFolder.bind(this, item) : onMoveFile.bind(this, item) : null, + onDelete: hasDeletePermission ? isFolder ? onDeleteFolder : onDeleteFile : null + }; + + return ( + + ); + } +} + +ItemContainer.propTypes = { + item: PropTypes.object, + loadContent: PropTypes.func, + editItem: PropTypes.func, + moveItem: PropTypes.func, + downloadFile: PropTypes.func, + deleteFolder: PropTypes.func, + deleteFile: PropTypes.func, + copyFileUrlToClipboard: PropTypes.func, + openDialog: PropTypes.func, + closeDialog: PropTypes.func, + folderPanelState: PropTypes.object, + uploadedFiles: PropTypes.array, + newFolderId: PropTypes.number, + itemEditing: PropTypes.object +}; + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + const addAssetPanelState = state.addAssetPanel; + const addFolderPanelState = state.addFolderPanel; + const itemDetailsState = state.itemDetails; + + return { + folderPanelState, + uploadedFiles: addAssetPanelState.uploadedFiles, + newFolderId: addFolderPanelState.newFolderId, + itemEditing: itemDetailsState.itemEditing + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + loadContent: folderPanelActions.loadContent, + editItem: itemDetailsActions.editItem, + moveItem: itemDetailsActions.moveItem, + downloadFile: folderPanelActions.downloadFile, + deleteFolder: folderPanelActions.deleteFolder, + deleteFile: folderPanelActions.deleteFile, + copyFileUrlToClipboard: folderPanelActions.copyFileUrlToClipboard, + openDialog: dialogModalActions.open, + closeDialog: dialogModalActions.close + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(ItemContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemDetailsContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemDetailsContainer.jsx new file mode 100644 index 00000000000..6afa215c5c0 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemDetailsContainer.jsx @@ -0,0 +1,95 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import itemDetailsActions from "../actions/itemDetailsActions"; +import FolderDetails from "../components/FolderDetails"; +import FileDetails from "../components/FileDetails"; +import itemService from "../services/itemsService"; +import localizeService from "../services/localizeService"; + +class ItemDetailsContainer extends React.Component { + constructor(props) { + super(props); + } + + validateForm() { + const {itemEditing, setValidationErrors} = this.props; + let result = true; + let validationErrors = {}; + + if ((!itemEditing.isFolder && !itemEditing.fileName) || (itemEditing.isFolder && !itemEditing.folderName)) { + validationErrors.fileName = localizeService.getString("ItemNameRequiredMessage"); + result = false; + } + + setValidationErrors(validationErrors); + return result; + } + formSubmit() { + if (!this.validateForm()) { + return; + } + + const {itemEditing, saveItem} = this.props; + saveItem(itemEditing); + } + render() { + const {itemEditing, cancelEditItem, + changeName, changeTitle, changeDescription, changePermissions} = this.props; + const onSave = this.formSubmit.bind(this); + const handlers = {changeName, changeTitle, changeDescription, changePermissions, cancelEditItem, onSave}; + let fileName, folderName, title, description; + fileName = folderName = title = description = ""; + let item = {fileName, folderName, title, description}; + const isFolder = itemEditing ? itemEditing.isFolder : false; + const validationErrors = this.props.validationErrors || {}; + + if (itemEditing) { + let iconStyle = {backgroundImage: "url('" + itemService.getIconUrl(itemEditing) + "')"}; + item = {...itemEditing, iconStyle}; + } + + return ( + isFolder ? + : + + ); + } +} + +ItemDetailsContainer.propTypes = { + itemEditing: PropTypes.object, + cancelEditItem: PropTypes.func, + changeName: PropTypes.func, + changeTitle: PropTypes.func, + changeDescription: PropTypes.func, + changePermissions: PropTypes.func, + saveItem: PropTypes.func, + setValidationErrors: PropTypes.func, + validationErrors: PropTypes.object +}; + +function mapStateToProps(state) { + const itemDetailsState = state.itemDetails; + return { + itemEditing: itemDetailsState.itemEditing, + validationErrors: itemDetailsState.validationErrors + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + cancelEditItem: itemDetailsActions.cancelEditItem, + changeName: itemDetailsActions.changeName, + changeTitle: itemDetailsActions.changeTitle, + changeDescription: itemDetailsActions.changeDescription, + changePermissions: itemDetailsActions.changePermissions, + saveItem: itemDetailsActions.saveItem, + setValidationErrors: itemDetailsActions.setValidationErrors + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(ItemDetailsContainer); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemMoveContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemMoveContainer.jsx new file mode 100644 index 00000000000..fd452473a01 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ItemMoveContainer.jsx @@ -0,0 +1,107 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import itemDetailsActions from "../actions/itemDetailsActions"; +import localizeService from "../services/localizeService"; +import FolderPicker from "../components/FolderSelector/FolderPicker" +import folderPanelActions from "../actions/folderPanelActions"; + +class ItemMoveContainer extends React.Component { + constructor(props) { + super(props); + this.state = { + selectedFolderId: this.props.folderPanelState.currentFolderId, + selectedFolderName: this.props.folderPanelState.currentFolderName, + }; + } + + handleFolderChange(e){ + this.setState({ + ...this.state, + selectedFolderId: e.key, + selectedFolderName: e.value, + }); + } + + handleItemMove(){ + if (this.state.selectedFolderId === this.props.folderPanelState.currentFolderId){ + this.props.cancelMoveItem(); + return; + } + + if (this.props.itemMoving.isFolder){ + this.props.moveFolder(this.props.itemMoving.folderId, this.state.selectedFolderId); + } + else { + this.props.moveFile(this.props.itemMoving.fileId, this.state.selectedFolderId); + } + } + + componentWillUnmount(){ + this.props.loadContent(this.props.folderPanelState, this.state.selectedFolderId); + } + + render() { + const { cancelMoveItem, homeFolderId } = this.props; + return ( +
    +

    {localizeService.getString("MoveItem")}

    + +
    + + this.handleFolderChange(e)} + homeFolderId={homeFolderId} + noFolderSelectedValue={localizeService.getString("NoFolderSelected")} + searchFolderPlaceHolder={localizeService.getString("SearchFolder")} + /> +
    + +
    + + +
    +
    + ); + } +} + +ItemMoveContainer.propTypes = { + itemMoving: PropTypes.object, + cancelMoveItem: PropTypes.func, + moveItem: PropTypes.func, + moveFolder: PropTypes.func, + moveFile: PropTypes.func, + loadContent: PropTypes.func, + folderPanelState: PropTypes.object, + homeFolderId: PropTypes.number, +}; + +function mapStateToProps(state) { + const itemDetailsState = state.itemDetails; + return { + folderPanelState: state.folderPanel, + itemMoving: itemDetailsState.itemMoving, + homeFolderId: state.module.homeFolderId, + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + cancelMoveItem: itemDetailsActions.cancelMoveItem, + moveItem: itemDetailsActions.moveItem, + moveFolder: itemDetailsActions.moveFolder, + moveFile: itemDetailsActions.moveFile, + loadContent: folderPanelActions.loadContent, + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(ItemMoveContainer); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ManageFolderTypesPanelContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ManageFolderTypesPanelContainer.jsx new file mode 100644 index 00000000000..4c69a4f981a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ManageFolderTypesPanelContainer.jsx @@ -0,0 +1,143 @@ +import React from "react"; +import { PropTypes } from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import localizeService from "../services/localizeService"; +import manageFolderTypesPanelActions from "../actions/manageFolderTypesPanelActions"; +import { SvgIcons } from "@dnnsoftware/dnn-react-common"; +import addFolderPanelActions from "../actions/addFolderPanelActions"; +import dialogModalActions from "../actions/dialogModalActions"; + +class ManageFolderTypesPanelContainer extends React.Component { + constructor(props) { + super(props); + this.props.loadFolderMappings(); + if (props.isAdmin){ + this.props.getAddFolderTypeUrl(); + } + } + + handleConfirmRemoveFolderType(e, folderTypeMappingId) { + e.preventDefault(); + let dialogHeader = localizeService.getString("RemoveFolderTypeDialogHeader"); + let dialogBody = localizeService.getString("RemoveFolderTypeDialogBody"); + this.props.openDialog(dialogHeader, dialogBody, () => this.handleRemoveFolderType(folderTypeMappingId), this.props.closeDialog); + } + + handleRemoveFolderType(folderTypeMappingId) { + this.props.removeFolderType(folderTypeMappingId); + this.props.loadFolderMappings(); + } + + render() { + const { + expanded, + hidePanel, + folderTypes, + isAdmin, + addFolderTypeUrl, + } = this.props; + + return isAdmin && expanded ? ( +
    +

    {localizeService.getString("FolderTypeDefinitions")}

    + + + + + + + + + + + {folderTypes && folderTypes.map(folderType => { + return ( + + + + + + + ); + })} + +
     {localizeService.getString("Name")}{localizeService.getString("FolderProvider")} 
    + {!folderType.IsDefault && + + } + {folderType.MappingName}{folderType.FolderProviderType} + {!folderType.IsDefault && +
    + + + + + +
    +
    + ) : null; + } +} + +ManageFolderTypesPanelContainer.propTypes = { + expanded: PropTypes.bool, + hidePanel: PropTypes.func, + folderTypes: PropTypes.array, + isAdmin: PropTypes.bool, + loadFolderMappings: PropTypes.func, + removeFolderType: PropTypes.func, + openDialog: PropTypes.func, + closeDialog: PropTypes.func, + getAddFolderTypeUrl: PropTypes.func, + addFolderTypeUrl: PropTypes.string, +}; + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + const manageFolderTypesPanelState = state.manageFolderTypesPanel; + const addFolderPanelState = state.addFolderPanel; + const module = state.module; + + return { + expanded: manageFolderTypesPanelState.expanded, + isAdmin: module.isAdmin, + folderTypes: addFolderPanelState.folderMappings, + addFolderTypeUrl: manageFolderTypesPanelState.addFolderTypeUrl, + folderPanelState + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + hidePanel: manageFolderTypesPanelActions.hidePanel, + loadFolderMappings: addFolderPanelActions.loadFolderMappings, + removeFolderType: manageFolderTypesPanelActions.removeFolderType, + openDialog: dialogModalActions.open, + closeDialog: dialogModalActions.close, + getAddFolderTypeUrl: manageFolderTypesPanelActions.getAddFolderTypeUrl, + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(ManageFolderTypesPanelContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/MessageModalContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/MessageModalContainer.jsx new file mode 100644 index 00000000000..55c5052ba9e --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/MessageModalContainer.jsx @@ -0,0 +1,78 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import messageModalActions from "../actions/messageModalActions"; +import Modal from "../../../../../../Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal"; + + +class MessageModalContainer extends React.Component { + render() { + const modalStyles = { + overlay: { + zIndex: "99999", + "background": "none" + }, + content: { + borderRadius: "3px", + color: "white", + textAlign: "center", + background: "#002e47", + opacity: ".9", + WebkitBoxShadow: "0 0 25px 0 rgba(0, 0, 0, 0.75)", + width: "10%", + minWidth: "250px", + minHeight: "80px", + maxHeight: "120px", + margin: "auto", + padding: 0, + border: "none", + boxSizing: "border-box" + } + }; + + const { infoMessage, errorMessage, close } = this.props; + const messageToShow = infoMessage || errorMessage; + + function setTimeOutToClose() { + setTimeout(function () { + close(); + }, 3000); + } + + if (messageToShow) + { + setTimeOutToClose(); + } + + return ( + +

    {messageToShow}

    +
    + ); + } +} + +MessageModalContainer.propTypes = { + infoMessage: PropTypes.string, + errorMessage: PropTypes.string, + close: PropTypes.func.isRequired +}; + +function mapStateToProps(state) { + const messageModalState = state.messageModal; + return { + infoMessage: messageModalState.infoMessage, + errorMessage: messageModalState.errorMessage + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + close: messageModalActions.close + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(MessageModalContainer); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ModuleLayout.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ModuleLayout.jsx new file mode 100644 index 00000000000..6ee59723c19 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ModuleLayout.jsx @@ -0,0 +1,62 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import folderPanelActions from "../actions/folderPanelActions"; +import AssetsPanelContainer from "./AssetsPanelContainer"; +import DialogModalContainer from "./DialogModalContainer"; +import MessageModalContainer from "./MessageModalContainer"; +import DropZone from "../containers/DropZoneContainer"; + +class ModuleLayout extends React.Component { + componentDidMount() { + const { folderPanelState, loadContent } = this.props; + this.props.loadContent(folderPanelState); + + window.addEventListener("popstate", + event => { + const state = event.state; + if (state && state.folderId) { + loadContent(folderPanelState, state.folderId); + } + else { + loadContent(folderPanelState, folderPanelState.homeFolderId); + } + } + ); + } + + render() { + return ( +
    + + + + + +
    + ); + } +} + +ModuleLayout.propTypes = { + loadContent: PropTypes.func, + folderPanelState: PropTypes.object +}; + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + return { + folderPanelState + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + loadContent: folderPanelActions.loadContent + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(ModuleLayout); diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ProgressBarOverwriteContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ProgressBarOverwriteContainer.jsx new file mode 100644 index 00000000000..c0f766954b7 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ProgressBarOverwriteContainer.jsx @@ -0,0 +1,71 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import addAssetPanelActions from "../actions/addAssetPanelActions"; +import localizeService from "../services/localizeService.js"; + +class ProgressBarOverwriteContainer extends React.Component { + render() { + const {fileName, folderPanelState, overwriteFile, stopUpload, trackProgress, breadcrumbs} = this.props; + + function getFolderPath() { + let path = ""; + for (let i = 1; i < breadcrumbs.length; i++) { + path += breadcrumbs[i].folderName + "/"; + } + + return path; + } + + function overwriteClickHandler() { + overwriteFile(fileName, getFolderPath(), folderPanelState, trackProgress, true); + } + + function abortClickHandler() { + stopUpload(fileName); + } + + return ( + + + {localizeService.getString("Replace")} + {localizeService.getString("Keep")} + + ); + } +} + +ProgressBarOverwriteContainer.propTypes = { + fileName: PropTypes.string, + breadcrumbs: PropTypes.array, + file: PropTypes.object, + folderPanelState: PropTypes.object, + overwriteFile: PropTypes.func, + stopUpload: PropTypes.func, + trackProgress: PropTypes.func, + progress: PropTypes.object +}; + +function mapStateToProps(state) { + const folderPanelState = state.folderPanel; + const breadcrumbsState = state.breadcrumbs; + + return { + folderPanelState, + breadcrumbs: breadcrumbsState.breadcrumbs + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + overwriteFile: addAssetPanelActions.overwriteFile.bind(addAssetPanelActions), + stopUpload: addAssetPanelActions.stopUpload, + trackProgress: addAssetPanelActions.trackProgress + }, dispatch) + }; +} + + +export default connect(mapStateToProps, mapDispatchToProps)(ProgressBarOverwriteContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ProgressContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ProgressContainer.jsx new file mode 100644 index 00000000000..765ec90c4a1 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/ProgressContainer.jsx @@ -0,0 +1,93 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { connect } from "react-redux"; +import FileProgress from "../components/FileProgress"; +import localizeService from "../services/localizeService"; + +function isImage(url) { + if (!url) { + return false; + } + + const imageExtensions = ["JPG", "JPE", "BMP", "GIF", "PNG", "JPEG", "ICO"]; + let urlNoParameters = url.split("?")[0]; + let ext = urlNoParameters.split(".").reverse()[0].toUpperCase(); + for (let i = 0; i < imageExtensions.length; i++) { + if (imageExtensions[i] === ext) return true; + } + return false; +} + +class ProgressContainer extends React.Component { + isUploading(fileProgress) { + const {completed, alreadyExists, stopped, error} = fileProgress; + return !completed && !alreadyExists && !stopped && !error; + } + getImageUrl(fileProgress) { + const uploading = this.isUploading(fileProgress); + + if (uploading) { + return ""; + } + + if (isImage(fileProgress.path)) { + return fileProgress.path; + } + + return fileProgress.fileIconUrl; + } + + getMessage(fileProgress) { + const {error, stopped, completed} = fileProgress; + + if (error) { + return fileProgress.error; + } + + if (stopped) { + return localizeService.getString("FileUploadStoppedMessage"); + } + + if (completed) { + return localizeService.getString("FileUploadedMessage"); + } + + return null; + } + + render() { + const { progress } = this.props; + let output = []; + for (let fileName in progress) { + const fileProgress = progress[fileName]; + const {error, stopped, path, alreadyExists} = fileProgress; + const uploading = this.isUploading(fileProgress); + const imageUrl = this.getImageUrl(fileProgress); + const message = this.getMessage(fileProgress); + + output.push(); + } + + return ( +
    + { output } +
    + ); + } +} + +ProgressContainer.propTypes = { + progress: PropTypes.object, + uploaded: PropTypes.object +}; + +function mapStateToProps(state) { + const addAssetPanelState = state.addAssetPanel; + + return { + progress: addAssetPanelState.progress, + uploaded: addAssetPanelState.uploaded + }; +} + +export default connect(mapStateToProps)(ProgressContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/TopBarContainer.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/TopBarContainer.jsx new file mode 100644 index 00000000000..5dd5dce8d68 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/containers/TopBarContainer.jsx @@ -0,0 +1,166 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import folderPanelActions from "../actions/folderPanelActions"; +import topBarActions from "../actions/topBarActions"; +import localizeService from "../services/localizeService"; +import DropDown from "../../../../../../Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown"; +import FolderPicker from "../components/FolderSelector/FolderPicker"; +import debounce from "lodash/debounce"; + +const refreshSyncIcon = require("!raw-loader!../../../Images/redeploy.svg").default; + +class TopBarContainer extends React.Component { + componentWillMount() { + this.debouncedSearch = debounce(this.searchHandler.bind(this, true), 500); + } + + onChangeFolder(folder) { + const {folderPanelState, loadContent} = this.props; + const folderId = parseInt(folder.key); + loadContent(folderPanelState, folderId); + } + + searchHandler(checkLength) { + const {folderPanelState, changeSearchingValue, searchFiles, loadContent} = this.props; + const {currentFolderId} = folderPanelState; + const oldSearch = folderPanelState.search; + let search = this.props.search; + + search = checkLength && search.length < 3 ? "" : search; + + if (!oldSearch && !search) { + return; + } + + changeSearchingValue(search); + if (!search) { + loadContent(folderPanelState, currentFolderId); + } + else { + searchFiles(folderPanelState, search); + } + } + + onSearchChanged(event) { + this.props.changeSearchField(event.target.value); + this.debouncedSearch(); + } + + onSortingChange(option) { + const {changeSorting, loadContent, folderPanelState} = this.props; + const {currentFolderId} = folderPanelState; + const newFolderPanelState = { ...folderPanelState, sorting: option.value }; + + changeSorting(option.value); + loadContent(newFolderPanelState, currentFolderId); + } + + onRefreshSyncChange(folderPanelState, currentFolderId, option) { + switch (option.value) { + case "Refresh": + this.props.loadContent(folderPanelState, currentFolderId); + break; + + case "SyncThisFolder": + this.props.syncContent(folderPanelState, false); + break; + + case "SyncThisFolderAndSubfolders": + this.props.syncContent(folderPanelState, true); + break; + + default: + break; + } + } + + render() { + const {folderPanelState, search, userLogged, homeFolderId} = this.props; + const {currentFolderId, currentFolderName, sortOptions, sorting} = folderPanelState; + + return ( +
    +
    + {userLogged ? +
    + this.onRefreshSyncChange(folderPanelState, currentFolderId, option)} + withBorder={false} + fixedHeight={200} + label="" + prependWith={} + withIcon={false} /> + +
    + : {localizeService.getString("DisabledForAnonymousUsersMessage")} + } +
    +
    + +
    +
    + + + +
    +
    + ); + } +} + +TopBarContainer.propTypes = { + folderPanelState: PropTypes.object, + loadContent: PropTypes.func, + syncContent: PropTypes.func, + changeSearchingValue: PropTypes.func, + searchFiles: PropTypes.func, + changeSorting: PropTypes.func, + changeSearchField: PropTypes.func, + search: PropTypes.string, + userLogged: PropTypes.bool, + homeFolderId: PropTypes.number +}; + +function mapStateToProps(state) { + const moduleState = state.module; + const folderPanelState = state.folderPanel; + const topBarState = state.topBar; + + return { + folderPanelState, + search: topBarState.search || "", + userLogged: moduleState.userLogged, + homeFolderId: moduleState.homeFolderId + }; +} + +function mapDispatchToProps(dispatch) { + return { + ...bindActionCreators({ + loadContent: folderPanelActions.loadContent, + syncContent: folderPanelActions.syncContent, + searchFiles: folderPanelActions.searchFiles, + changeSearchingValue: folderPanelActions.changeSearchingValue, + changeSorting: folderPanelActions.changeSorting, + changeSearchField: topBarActions.changeSearchField + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(TopBarContainer); \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/api.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/api.js new file mode 100644 index 00000000000..29d53933aa6 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/api.js @@ -0,0 +1,263 @@ +let tabId = -1; +let moduleId = -1; +let groupId = -1; +let moduleName = ""; +let extensionWhitelist = ""; +let validationCode = ""; + +const ANTIFORGERY_TOKEN_KEY = "__RequestVerificationToken"; + +function getAntiForgeryToken() { + let inputNodes = document.getElementsByTagName("input"); + inputNodes = Array.prototype.slice.call(inputNodes); + const antiforgeryTokenNodes = inputNodes.filter(function (inputNode) { + return inputNode.getAttribute("name") === ANTIFORGERY_TOKEN_KEY; + }); + + if (antiforgeryTokenNodes.length > 0) { + return antiforgeryTokenNodes[0].value; + } + + return ""; +} + +/** function to perform raw http request */ +function httpRequest(url, options) { + const headersObject = { + "ModuleId": moduleId, + "TabId": tabId, + "GroupId": groupId + }; + + if (options.headers) { + Object.assign(headersObject, options.headers); + } + + const antiforgeryToken = getAntiForgeryToken(); + if (antiforgeryToken) { + headersObject.RequestVerificationToken = antiforgeryToken; + } + + const headers = new Headers(headersObject); + options = Object.assign(options, { + credentials: "same-origin", + headers: headers + }); + + + return fetch(url, options).then(handleHttpResponse); +} + +function SAHttpRequest(url, options) { + // eslint-disable-next-line + const request = require("superagent"); + const { method, body, progressTracker } = options; + + const headersObject = { + "ModuleId": moduleId, + "TabId": tabId, + "GroupId": groupId + }; + + if (options.headers) { + Object.assign(headersObject, options.headers); + } + + const antiforgeryToken = getAntiForgeryToken(); + if (antiforgeryToken) { + headersObject.RequestVerificationToken = antiforgeryToken; + } + + return request(method, url).set(headersObject).send(body).on("progress", progressTracker) + .then(response => JSON.parse(response.text), handleSAHttpRequestFailure); +} + +function handleSAHttpRequestFailure(response) { + const error = new Error(response.status + " - An expected error has been received from the server."); + error.code = response.status; + throw error; +} + +/** function to handle http response */ +function handleHttpResponse(response) { + if (response.status >= 200 && response.status < 300) { + return response.json(); + } + + return response.json() + .then(function processErrorJson(json) { + const error = new Error(); + error.code = response.status; + error.data = json; + throw error; + } + , () => { + const error = new Error(response.status + " - An expected error has been received from the server."); + error.code = response.status; + throw error; + }); +} + +/** function to serialize query string object */ +function serializeQueryStringParameters(obj) { + let s = []; + for (let p in obj) { + if (obj.hasOwnProperty(p)) { + s.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); + } + } + return s.join("&"); +} + +/** + * @module api + */ +const api = { + /** initialize the api module. This call must be done before use any other method of the module + * @param {object} options - moduleId, tabId and moduleName are required + * */ + init(options) { + if (!options) { + throw new Error("The init method requires an options parameter with tabId, moduleId and moduleName"); + } + + if (typeof(options.moduleId) !== "number" || options.moduleId <= 0 ) { + throw new Error("The moduleId must be a number greater than 0."); + } + + if (typeof(options.moduleName) !== "string" || !options.moduleName ) { + throw new Error("The moduleName must be a string and it can't be empty. "); + } + + if (typeof(options.tabId) !== "number" || options.tabId <= 0 ) { + throw new Error("The tabId must be a number greater than 0"); + } + + moduleId = options.moduleId; + moduleName = options.moduleName; + tabId = options.tabId; + groupId = options.groupId; + extensionWhitelist = options.extensionWhitelist; + validationCode = options.validationCode; + }, + + getAntiForgeryToken() { + return getAntiForgeryToken(); + }, + + getServiceRoot(ignoreCurrentModuleApi) { + // eslint-disable-next-line no-undef + let serviceRoot = dnn.getVar("sf_siteRoot", "/"); + serviceRoot += "DesktopModules/"; + if (!ignoreCurrentModuleApi) { + serviceRoot += moduleName + "/API/"; + } + return serviceRoot; + }, + + getModuleRoot() { + // eslint-disable-next-line no-undef + let moduleRoot = dnn.getVar("sf_siteRoot", "/"); + moduleRoot += "DesktopModules/" + moduleName; + + return moduleRoot; + }, + + /** this function performs a get http request + * @param {string} url + * @param {object} query string object + * */ + get(url, queryString = null) { + + if (queryString) { + url += (url.indexOf("?") > 0 ? "&" : "?") + serializeQueryStringParameters(queryString); + } + + return httpRequest(url, { + method: "GET" + }); + }, + /** this function performs a post http request + * @param {string} url + * @param {object} body + * */ + post(url, body, headers) { + let data = null; + if (headers && headers["Content-Type"] === "multipart/form-data") { + let formData = new FormData(); + for (const name in body) { + formData.append(name, body[name]); + } + data = formData; + + delete headers["Content-Type"]; + } + + return httpRequest(url, { + method: "POST", + body: data || JSON.stringify(body), + headers: headers + }); + }, + /** Posta a primitive value (integer, string, etc.) + * @param {string} url + * @param {any} value + */ + postPrimitive(url, value) { + var urlencoded = new URLSearchParams(); + urlencoded.append("", value.toString()); + return httpRequest(url, { + method: "POST", + body: urlencoded, + headers: [{"Content-Type": "application/x-www-form-urlencoded"}], + }); + }, + /** this function performs a post http request + * @param {string} url + * @param {object} body + * */ + postFile(url, formData, progressTracker) { + return SAHttpRequest(url, { + method: "POST", + body: formData, + progressTracker + }); + + }, + /** this function performs a put http request + * @param {string} url + * @param {object} body + * */ + put(url, body) { + return httpRequest(url, { + method: "PUT", + body: JSON.stringify(body) + }); + }, + /** this function performs a delete http request + * @param {string} url + * @param {object} body + * */ + delete(url, body) { + return httpRequest(url, { + method: "DELETE", + body: JSON.stringify(body) + }); + }, + getHeadersObject() { + const headersObject = { + moduleId, + tabId, + groupId + }; + return headersObject; + }, + getWhitelistObject() { + const whitelistObject = { + extensionWhitelist, + validationCode + }; + return whitelistObject; + } +}; +export default api; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/dnnSf.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/dnnSf.js new file mode 100644 index 00000000000..5ef8f918664 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/dnnSf.js @@ -0,0 +1,101 @@ +export default class DnnSf { + moduleRoot = ""; + controller = ""; + siteRoot = ""; + tabId = -1; + antiForgeryToken = ""; + + constructor() { + this.siteRoot = window.top.dnn.getVar("sf_siteRoot", "/"); + this.tabId = parseInt(window.top.dnn.getVar("sf_tabId", "-1")); + this.antiForgeryToken = window.top.document.querySelector("input[name=__RequestVerificationToken]").value; + } + + get = (method, params, success, failure, loading, beforeSend) => { + return this.call("GET", method, params, success, failure, loading, beforeSend, false, false); + } + + call = (httpMethod, method, params, success, failure, loading, beforeSend, sync, silence, postFile) => { + let url = this.getServiceRoot() + this.controller + "/" + method; + this.moduleRoot = "personaBar"; + this.controller = ""; + + return this.rawCall(httpMethod, url, params, success, failure, loading, beforeSend, sync, silence, postFile); + } + + getServiceRoot = () => { + return this.siteRoot + "API/" + this.moduleRoot + "/"; + } + + rawCall = (httpMethod, url, params, success, failure, loading, beforeSend, sync, silence, postFile) => { + let beforeCallback; + if (typeof beforeSend === "function") { + beforeCallback = (xhr) => { + this.setHeaders(xhr); + return beforeSend(xhr); + }; + } + else { + beforeCallback = this.setHeaders; + } + + let options = { + url: url, + beforeSend: beforeCallback, + type: httpMethod, + async: sync === false, + success: function (d) { + if (typeof loading === "function") { + loading(false); + } + + if (typeof success === "function") { + success(d || {}); + } + }, + error: function (xhr, status, err) { + if (typeof loading === "function") { + loading(false); + } + + if (typeof failure === "function") { + if (xhr) { + failure(xhr, err); + } + else { + failure(null, "Unknown error"); + } + } + } + }; + + if (httpMethod === "GET") { + options.data = params; + } else if (postFile) { + options.processData = false; + options.contentType = false; + options.data = params; + } + else { + options.contentType = "application/json; charset=UTF-8"; + options.data = JSON.stringify(params); + options.dataType = "json"; + } + + if (typeof loading === "function") { + loading(true); + } + + return window.$.ajax(options); + } + + setHeaders = (xhr) => { + if (this.tabId) { + xhr.setRequestHeader("TabId", this.tabId); + } + + if (this.antiForgeryToken.length > 0) { + xhr.setRequestHeader("RequestVerificaitonToken", this.antiForgeryToken); + } + } +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/resourceManager.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/resourceManager.js new file mode 100644 index 00000000000..97f7d10ca08 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/globals/resourceManager.js @@ -0,0 +1,35 @@ +import api from "./api"; +import globalActions from "../actions/globalActions"; +import localizeService from "../services/localizeService.js"; + +const resourceManager = { + init(options) { + api.init(options); + localizeService.init(options.resx); + require("../less/styles.less"); + + resourceManager.dispatch(globalActions.loadInitialParameters(options)); + const container = document.getElementById(options.containerId); + + this.render(container); + }, + + dispatch() { + throw new Error("dispatch method needs to be overwritten from the Redux store"); + }, + + render() { + throw new Error("render method needs to be overwritten from the Redux store"); + } + +}; + +if (typeof window.dnn === "undefined" || window.dnn === null) { + window.dnn = {}; +} +if (typeof window.dnn.ResourceManager === "undefined") { + window.dnn.ResourceManager = {}; +} +window.dnn.ResourceManager.instance = resourceManager; + +export default resourceManager; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/Assets.less b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/Assets.less new file mode 100644 index 00000000000..25d1e9df41a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/Assets.less @@ -0,0 +1,1099 @@ +#Assets-panel { + @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { + div#folder-picker div.selected-item { + margin-left: -20px; + } + } + #assets-header.socialpanelheader { + padding-bottom: 0; + padding: 0; + min-height: 103px; + max-height: 103px; + -webkit-box-sizing: border-box !important; + -moz-box-sizing: border-box !important; + box-sizing: border-box !important; + box-shadow: 0 1px 2px -1px rgba(0,0,0,.2); + position: relative; + } + #assets-header.socialpanelheader > h3 { + float: left; + margin: 14px 0 0 0; + } + #assets-header.socialpanelheader:after { + border: 0; + } + #assets-header.socialpanelheader > div.right-container > div { + float: right; + &:first-child { + margin-left: 12px; + } + } + #assets-header.socialpanelheader a.add-folder { + background-image: url('/DesktopModules/ResourceManager/Images/icon-add-folder.png'); + background-repeat: no-repeat; + background-position: center; + display: inline-block; + height: 32px; + padding: 0; + width: 32px; + } + #assets-header.socialpanelheader a.add-folder:hover { + background-color: #d9ecfa; + } + #assets-header.socialpanelheader .right-container { + position: absolute; + right: 0; + top: 50%; + transform: translate(0, -50%); + } + .rm-button.primary { + display: inline-block; + background-color: #1E88C3; + border: none; + border-radius: 3px; + padding: 0 16px; + height: 42px; + line-height: 42px; + text-align: center; + color: #FFFFFF; + box-sizing: border-box; + vertical-align: top; + min-width: 106px; + cursor: pointer; + } + .rm-button.secondary { + display: inline-block; + border: 1px solid #1E88C3; + border-radius: 3px; + padding: 0 16px; + height: 42px; + line-height: 42px; + text-align: center; + color: #1E88C3; + vertical-align: top; + box-sizing: border-box; + cursor: pointer; + min-width: 106px; + margin-right: 10px; + } + .rm-button.primary.normal, .rm-button.secondary.normal { + height: 35px; + line-height: 35px; + min-width: 92px; + } + #assets-header.socialpanelheader a { + cursor: pointer; + } + #assets-header.socialpanelheader div.folder-picker-container { + display: inline-block; + vertical-align: top; + } + .assets-body { + margin-top: 0; + position: relative; + } + .assets-body .header-container { + padding: 10px 0px; + height: 51px; + border-bottom: 1px solid #C8C8C8; + box-sizing: border-box; + } + .assets-body .header-container .assets-input { + margin-left: 5px; + box-shadow: none; + } + /*Reduce input placeholder font size*/ + .assets-body .header-container .assets-input::-webkit-input-placeholder { + font-size: 12px; + } + .assets-body .header-container .assets-input:-moz-placeholder { + font-size: 12px; + } + .assets-body .header-container .assets-input::-moz-placeholder { + font-size: 12px; + } + .assets-body .header-container input.assets-input:-ms-input-placeholder { + font-size: 12px; + min-width: 123px; + min-height: 16px; + } + .assets-body .header-container .assets-input, input, select, textarea { + border: 1px solid #ddd; + padding: 8px 16px; + border-radius: 3px; + background-color: #fff; + } + .assets-body .header-container input[type='search'].assets-input { + -webkit-appearance: none; + font-weight: bold; + padding-right: 29px; + margin: 0; + width: ~"calc(100% - 24px)"; + border: none; + background: none; + outline: none; + } + .assets-body .header-container .dnnDropDownList .selected-item { + border: 1px solid #ddd; + box-shadow: none; + background: #fff; + } + .assets-body .header-container .assets-input[type=search]::-webkit-search-cancel-button { + display: none; + } + .assets-body .header-container .assets-input[type=search]::-ms-clear { + display: none; + width: 0; + height: 0; + } + .assets-body .header-container a.search-button { + background-image: url('/DesktopModules/ResourceManager/Images/search.svg'); + background-repeat: no-repeat; + background-position: center; + display: inline-block; + width: 22px; + height: 20px; + right: 15px; + position: absolute; + top: 8px; + cursor: pointer; + } + + .assets-body .header-container a.sync-button { + background-image: url(/DesktopModules/ResourceManager/Images/redeploy.svg); + background-repeat: no-repeat; + background-position: center; + display: inline-block; + width: 22px; + height: 20px; + top: 7px; + position: absolute; + right: 0px; + cursor: pointer; + } + + .assets-body .header-container { + color: #46292b; + + .folder-picker-container, .sort-container { + height: 31px; + border-right: 1px solid #C8C8C8; + } + .folder-picker-container { + span { + display: block; + margin-top: 7px; + } + + .dnn-folder-selector { + border: none; + .selected-item { + padding: 7px 15px; + } + } + } + .sort-container { + .dnn-dropdown { + width: 100%; + background: none; + } + } + .refresh-sync-container { + display: flex; + justify-content: right; + .dnn-dropdown { + width: 33%; + background: none; + } + } + } + .assets-body .dnnDropDownList.rm-folder { + width: 100%; + vertical-align: top; + } + .assets-body .dnnDropDownList.rm-folder * { + box-sizing: border-box; + } + .assets-body .dnnDropDownList.rm-folder .selected-item { + border: none; + box-shadow: none; + background: none; + } + .assets-body .dnnDropDownList.rm-folder .selected-item a { + font-weight: bold; + padding: 7px 0; + border-left: none; + background: none; + position: relative; + color: #4B4E4F; + height: 32px; + } + .assets-body .dnnDropDownList.rm-folder .selected-item a:after { + content: ""; + display: block; + width: 0; + height: 0; + position: absolute; + right: 0; + top: 14px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 4px solid #4B4E4F; + } + .assets-body .dnnDropDownList.rm-folder .selected-item a.opened { + color: #1E88C3; + background: none; + } + .assets-body .dnnDropDownList.rm-folder .selected-item a.opened:after { + border-top-color: #1E88C3; + } + .assets-body .dt-container { + width: 267px; + background: #fff; + border: 1px solid #C8C8C8; + border-radius: 3px; + box-shadow: 0 0 20px 0 gba(0, 0, 0, .2); + top: 42px; + height: 330px; + .dt-header { + margin: 20px 20px 13px 20px; + background: none; + border: none; + box-shadow: none; + padding: 0; + } + .dt-header .sort-button { + display: none; + } + .dt-header .search-container { + margin: 0; + position: relative; + .search-input-container { + border: 1px solid #C8C8C8; + border-radius: 0; + padding: 0 32px 0 0; + input { + background-color: transparent; + border-radius: 0; + border: none; + } + } + .clear-button { + right: 32px; + border: none; + } + .search-button { + position: absolute; + right: 1px; + top: 1px; + width: 32px; + height: 32px; + background-image: url(/DesktopModules/ResourceManager/Images/search.png); + background-repeat: no-repeat; + background-position: center; + } + } + .dt-content { + margin: 65px 20px 0 20px; + border: 1px solid #C8C8C8; + height: 224px; + width: auto; + position: relative; + overflow: hidden; + } + ul.tv-nodes { + &.tv-root { + margin: 4px 4px 0 -10px; + } + li.tv-node { + list-style: none; + padding: 0 0 0 16px; + } + a.text { + background: url(/DesktopModules/ResourceManager/Images/folder.png) no-repeat 2px 0px; + border: 1px solid transparent; + color: #6F7273; + padding: 0 8px 0 24px; + text-decoration: none; + &.selected { + font-weight: bold; + } + } + a.text:hover { + text-decoration: none; + background-image: url(/DesktopModules/ResourceManager/Images/folder-hover.png); + color: #1E88C3; + border: 1px solid transparent; + } + a.icon { + text-decoration: none; + display: inline-block; + padding: 0; + height: 16px; + width: 16px; + border: 1px solid transparent; + outline: none; + vertical-align: middle; + cursor: pointer; + &.rm-expanded { + background: url(/DesktopModules/ResourceManager/Images/tree-sprite.png) no-repeat 0 -18px; + } + &.collapsed { + background: url(/DesktopModules/ResourceManager/Images/tree-sprite.png) no-repeat 0 -2px; + } + } + } + .dt-footer { + background: none; + margin: 10px 20px 20px 20px; + border: none; + } + .dt-footer .result { + margin: 10px 0 0 0; + } + .dt-footer .resizer { + display: none; + } + } + .select-destination-folder { + width: 500px; + margin: 30px auto 30px auto; + .dt-container { + width: 100%; + box-shadow: none; + border: none; + .dt-content { + margin-top: 20px; + } + } + } + .assets-body .header-container { + .search-box-container, .sort-container { + position: relative; + display: block; + float: left; + } + .folder-picker-container { + width: 40%; + } + .sort-container { + width: 20%; + } + .search-box-container { + width: 40%; + } + .rm-folder-picker-refresh-sync-container { + display: flex; + .rm-refresh-sync-dropdown { + border-right: 1px solid #C8C8C8; + .collapsible-label { + height: 30px; + span { + margin: 0; + } + svg { + fill: #777; + width: 22px; + height: auto; + } + } + } + } + } + .breadcrumbs-container { + position: absolute; + width: 100%; + font-size: 0; + line-height: 0; + text-transform: uppercase; + font-weight: bold; + left: 0; + bottom: 0; + + > div { + height: 20px; + line-height: 20px; + background: 0; + color: #1e88c3; + font-weight: bold; + text-transform: uppercase; + cursor: pointer; + + &:first-child:not(:last-child) { + padding-right: 16px; + position: relative; + display: inline-block; + } + + &:first-child:last-child { + width: 150px; + margin-left: 0; + } + + &:not(:first-child):not(:last-child) { + padding-right: 10px; + position: relative; + margin-left: 25px; + box-sizing: border-box; + } + + &:not(:last-child)::after { + content: ''; + position: absolute; + right: -15px; + top: 0; + width: 20px; + height: 32px; + background-image: url(/DesktopModules/ResourceManager/Images/arrow_forward.svg); + background-repeat: no-repeat; + background-position: center; + } + + &:last-child { + color: #1e88c3; + font-family: proxima_nova,Arial; + text-decoration: none; + font-size: 14px; + padding-right: 10px; + position: relative; + margin-left: 25px; + cursor: default; + } + } + + div { + display: inline-block; + height: 32px; + line-height: 32px; + font-family: proxima_nova,Arial; + text-decoration: none; + font-size: 14px; + max-width: 20%; + color: #4b4e4f; + + > span { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + } + div.rm-field { + position: relative; + display: inline-block; + margin: 32px 0 0 0; + min-width: 325px; + vertical-align: top; + } + div.rm-field.long { + margin-right: 340px; + } + div.rm-field.right { + min-width: 325px; + } + div.rm-field.hide { + visibility: hidden; + margin: 32px 0 0 0; + } + div.versioning { + margin: 20px 20px 0 0; + } + div.versioning > input { + vertical-align: middle; + margin-right: 5px; + } + div.rm-field > label { + display: block; + margin-bottom: 5px; + } + div.rm-field > input[type="text"], div.rm-field > select, div.rm-field > textarea { + width: 100%; + box-sizing: border-box; + min-height: 34px; + border: 1px solid #7F7F7F; + border-radius: 0; + } + div.rm-field > textarea#description { + min-height: 135px; + } + div.file-upload-panel { + margin: 1px 1px 30px 1px; + + .dnn-file-upload { + width: 100%; + box-sizing: border-box; + float:none; + margin:auto; + + span { + float: none; + } + } + } + .container-main .toolbar-main { + height: 70px; + width: 860px; + background-color: #e6e6e6; + } + .container-main .filter-results { + height: 50px; + width: 860px; + padding-bottom: 0px; + } + .page-title { + font-family: Arial, Helvetica, sans-serif; + font-size: 24px; + } + div.main-container { + margin-top: 16px; + position: relative; + overflow: auto; + } + div.item-container { + width: 100%; + overflow-y: auto; + overflow-x: visible; + } + div.item-container.empty { + .rm_infinite-scroll-container { + display: none; + } + } + div.item-container.empty:not(.loading) { + background-image: url(/DesktopModules/ResourceManager/Images/folder-empty-state-asset-manager.png); + background-repeat: no-repeat; + background-position: center 120px; + min-height: 465px; + } + div.item-container.empty.rm_search:not(.loading) { + background-image: url(/DesktopModules/ResourceManager/Images/search-glass-no-results.png); + } + div.item-container > div.empty-label { + display: none; + color: #aaa; + max-width: 250px; + text-align: center; + top: 240px; + position: relative; + margin-left: auto; + margin-right: auto; + } + div.item-container.empty:not(.rm_search):not(.loading) > div.empty-label.rm-folder { + display: block; + } + div.item-container.empty.rm_search:not(.loading) > div.empty-label.rm_search { + display: block; + top: 180px; + } + div.item-container > div.empty-label > span.empty-title { + font-size: 22px; + font-weight: bold; + display: block; + margin: 10px 0; + } + div.item-container > div.empty-label > span.empty-subtitle { + font-size: 15px; + } + div.item-container.drop-target { + border: 10px #0087c6 dashed; + padding: 0 0 5px 5px; + overflow: hidden; + } + .item-container .rm-card { + position: relative; + height: 212px; + width: 100%; + padding: 20px; + bottom: 0px; + font-family: "Proxima Nova-light", HelveticaNeue-Light, Arial-light, Helvetica, sans-serif; + -webkit-box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.30); + -moz-box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.30); + box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.30); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background-color: #79bdd8; + color: #FFF; + font-size: 17px; + margin: 15px 0 5px 0; + float: left; + overflow: hidden; + transition: 0.2s; + box-sizing: border-box; + + &.rm-folder { + cursor: pointer; + } + } + div.item-container:not(.disabled) .rm-card:hover, div.item-container:not(.disabled) .rm-card.selected { + background-color: rgba(48, 137, 198, 1); + transition: 0.2s; + } + .item.highlight { + -webkit-animation: card-highlight 1.5s 1; + -moz-animation: card-highlight 1.5s 1; + animation: card-highlight 1.5s 1; + } + @-webkit-keyframes card-highlight { + 0% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + 25% { + box-shadow: 0 0 5px 8px rgba(125, 226, 166, 1); + } + 50% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + 75% { + box-shadow: 0 0 5px 8px rgba(125, 226, 166, 1); + } + 100% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + } + @-moz-keyframes card-highlight { + 0% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + 25% { + box-shadow: 0 0 5px 8px rgba(125, 226, 166, 1); + } + 50% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + 75% { + box-shadow: 0 0 5px 8px rgba(125, 226, 166, 1); + } + 100% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + } + @keyframes card-highlight { + 0% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + 25% { + box-shadow: 0 0 5px 8px rgba(125, 226, 166, 1); + } + 50% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + 75% { + box-shadow: 0 0 5px 8px rgba(125, 226, 166, 1); + } + 100% { + box-shadow: 0 0 0 0 rgba(0, 220, 0, 0); + } + } + .rm-card-container { + float: left; + width: 22%; + margin-right: 4%; + } + .rm-card-container:nth-of-type(4n){ + margin-right: 0; + } + .item.rm-card { + float: none; + } + .item.rm-card .card-icons { + height: 58px; + width: 53px; + position: absolute; + left: 0px; + top: 0px; + } + .item.rm-card .text-card { + position: absolute; + bottom: 22px; + width: 149px; + overflow: hidden; + word-wrap: break-word; + height: 30px; + line-height: 15px; + + p { + margin: 0; + } + } + .item.rm-card .text-card:before { + content: ""; + float: left; + width: 5px; + height: 30px; + } + .item.rm-card .text-card > *:first-child { + float: right; + width: 100%; + margin-left: -5px; + } + .item.rm-card .text-card:after { + content: "\02026"; + box-sizing: content-box; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + float: right; + position: relative; + top: -15px; + left: 100%; + width: 1em; + margin-left: -1em; + padding-right: 5px; + text-align: right; + background-color: rgba(121, 189, 216, 1); + transition: 0.2s; + } + div.item-container:not(.disabled) .rm-card:hover .text-card:after, div.item-container:not(.disabled) .rm-card.selected .text-card:after { + background-color: rgba(48, 137, 198, 1); + transition: 0.2s; + } + .item.rm-card .text-card font.highlight { + background-color: #CCCCCC; + } + .rm-circular { + width: 100%; + height: 100%; + border-radius: 50%; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border: 12px solid #79bdd8; + margin-right: auto; + margin-left: auto; + background-position: center center; + background-repeat: no-repeat; + background-color: #eeeeee; + box-sizing: border-box; + } + .rm-circular.rm-folder { + background-color: #9EDCEF; + } + .rm-card .image-center { + margin-right: auto; + margin-left: auto; + height: 110px; + width: 110px; + border: 2px white solid; + border-radius: 50%; + position: relative; + } + .rm-card .overlay-disabled { + height: 213px; + width: 190px; + position: absolute; + left: 0px; + top: 0px; + background-color: black; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + opacity: 0; + visibility: hidden; + -webkit-transition: visibility 0.2s linear, opacity 0.2s linear; + -moz-transition: visibility 0.2s linear, opacity 0.2s linear; + -o-transition: visibility 0.2s linear, opacity 0.2s linear; + } + div.item-container.disabled .rm-card { + cursor: auto; + } + div.item-container.disabled .rm-card .overlay-disabled { + opacity: 0.5; + visibility: visible; + } + .rm-card > div.rm-actions { + position: absolute; + right: -32px; + width: 32px; + background-color: #236F99; + top: 0; + bottom: 0; + transition: 0.2s; + + > div { + cursor: pointer; + } + } + .rm-card.selected > div.rm-actions, .rm-card:hover > div.rm-actions { + right: 0; + transition: 0.2s; + transition-delay: 0.4s; + } + .rm-card > div.unpublished { + position: absolute; + width: 32px; + height: 32px; + top: 6px; + left: 6px; + background-image: url(/DesktopModules/ResourceManager/Images/unpublished.svg); + } + .rm-card > div.rm-actions > div { + height: 32px; + background-position: center; + background-repeat: no-repeat; + position: absolute; + width: 100%; + background-size: 80%; + &.rm-edit { + top: 0; + background-image: url(/DesktopModules/ResourceManager/Images/edit.svg); + } + &.rm-link { + top: 32px; + background-image: url(/DesktopModules/ResourceManager/Images/clipboard.svg); + } + &.rm-download { + top: 96px; + background-image: url(/DesktopModules/ResourceManager/Images/download.svg); + } + &.rm-move { + top: 64px; + background-image: url(/DesktopModules/ResourceManager/Images/move.svg); + } + &.rm-delete { + background-image: url(/DesktopModules/ResourceManager/Images/delete.svg); + background-color: #195774; + bottom: 0; + } + } + .top-panel { + &.add-folder, &.manage-folder-types { + .animateHeight(970px, 0.5s); + .rm-button { + margin-bottom: 30px; + } + } + &.manage-folder-types { + h3{ + text-align: center; + } + table.folder-types{ + margin: 1em auto; + border: 1px solid gray; + th{ + text-transform: uppercase; + } + th, td { + padding: 1em 2em; + border-bottom: 1px solid gray; + button, a{ + border: none; + margin: 0; + padding: 0; + background-color: transparent; + svg{ + width: 1.5em; + height: auto; + } + } + } + } + } + } + + .folder-adding { + .folder-parent-label { + margin-right: 10px; + } + } + + .top-panel.add-folder > .folder-adding { + margin: 30px; + margin-bottom: 45px; + } + + .top-panel.add-asset { + .animateHeight(970px, 0.5s); + + .close { + float: none; + margin-bottom: 30px; + } + } + .details-panel { + border: none; + border-radius: 0; + padding: 30px; + } + div.item-details { + float: left; + margin: 0; + border-top: 2px solid #1E88C3; + border-bottom: 2px solid #1E88C3; + width: 100%; + padding: 25px 10px; + box-sizing: border-box; + overflow: hidden; + &.item-move{ + overflow: visible; + .dnn-folder-selector{ + border: 1px solid gray; + } + } + } + ul.tabControl { + background-color: #FFF; + border-radius: 0; + border: none; + border-bottom: 1px solid #ddd; + &> li { + text-transform: uppercase; + font-weight: bold; + padding: 10px 0; + margin: 0 20px; + &.selected { + border-bottom: 3px solid #1E88C3; + } + } + } + div.details-icon { + display: inline-block; + width: 50px; + height: 50px; + border-radius: 50%; + box-shadow: 0px 0px 0px 1px #79bdd8; + border: 5px solid #FFF; + background-position: center center; + background-repeat: no-repeat; + float: left; + margin: 0 15px 25px 0; + background-color: #eee; + } + div.details-icon.folder { + background-color: #9EDCEF; + background-size: 50%; + } + div.details-info { + padding-top: 12px; + position: relative; + } + div.details-field { + display: inline-block; + margin-bottom: 8px; + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: top; + &:first-child { + margin-right: 16px; + padding-right: 16px; + border-right: 1px solid #c8c8c8; + } + &.rm-url { + max-width: none; + } + } + div.details-field a { + color: #0087c6; + text-decoration: none; + } + div.details-field a:hover { + color: #2fa6eb; + } + div.details-field + div.vertical-separator { + margin: 0 16px; + border-left: 1px solid #e2e2e2; + display: inline; + height: 16px; + } + div.details-field + div.line-break { + clear: right; + } + div.details-field.right { + position: absolute; + right: 0; + top: 12px; + } + span.details-label { + font-weight: bold; + margin-right: 10px; + } + span.details-label.checkbox { + vertical-align: top; + line-height: 22px; + margin-right: 27px; + color: #46292b; + } + div.file-panel { + padding: 25px; + background-color: #fff; + } + div.separator { + clear: both; + border-bottom: 1px solid #C8C8C8; + margin-bottom: 8px; + } + label { + font-weight: bold; + } + label.formRequired::after { + content: "*"; + display: inline-block; + margin: 0 0 0 5px; + color: Red; + font-size: 16px; + line-height: 1em; + font-family: proxima_nova_semibold; + } + div.cancel { + width: 50%; + float: left; + margin: 10px 0 0 0; + position: relative; + } + div.cancel > a { + display: block; + float: right; + margin-right: 5px; + } + div.close { + width: 100%; + float: left; + text-align: center; + } + div.close > a { + margin-right: auto; + margin-left: auto; + } + div.save { + width: 50%; + float: left; + margin: 10px 0 0 0; + position: relative; + } + div.details-selector { + position: relative; + &> div { + margin: auto; + content: ''; + width: 0; + height: 0; + border-style: solid; + border-width: 8px 8px 0 8px; + border-color: #3089C6 transparent transparent transparent; + position: relative; + + } + } + + .rm-clear { + clear: both + } +} + +.dnn-slide-in-out-enter { + max-height: 0; +} + +.dnn-slide-in-out-enter.dnn-slide-in-out-enter-active { + max-height: 970px; + transition: max-height 500ms ease-in; +} + +.dnn-slide-in-out-leave { + max-height: 970px; +} + +.dnn-slide-in-out-leave.dnn-slide-in-out-leave-active { + max-height: 0; + transition: max-height 300ms ease-in; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/button.less b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/button.less new file mode 100644 index 00000000000..97193fe185a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/button.less @@ -0,0 +1,52 @@ +@import "~@dnnsoftware/dnn-react-common/styles/index"; + +button.rm-common-button { + border: 1px solid @curiousBlue; + height: 34px; + min-width: 100px; + padding: 0 22px; + font-size: 10pt; + color: @curiousBlue; + background: @white; + border-radius: 3px; + cursor: pointer; + font-family: Helvetica, Arial, sans-serif; + &:hover { + color: @cerulean; + border-color: @cerulean; + } + &:focus{ + outline: none; + } + &:active { + color: @matisse; + border-color: @matisse; + } + &:disabled { + color: @alto; + border-color: @alto; + cursor: not-allowed; + } + + &.large{ + height: 44px; + } + + &[role=primary] { + background: @curiousBlue; + border: none; + color: @white; + + &:hover { + background: @cerulean; + } + &:active { + background: @matisse; + } + &:disabled { + color: @mountainMist; + background: @mercury; + cursor: not-allowed; + } + } +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/components.less b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/components.less new file mode 100644 index 00000000000..522067ab022 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/components.less @@ -0,0 +1,183 @@ +.loading::after { + content: ""; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255,255,255,0.7) url(/DesktopModules/ResourceManager/Images/loading.gif) no-repeat center center; + z-index: 99999; +} + +.three-columns { + display: block; + width: 33%; + float: left; +} + +.dnn-dropdown { + height: 31px; + background-color: white; + + .collapsible-content { + margin: 0; + box-shadow: none; + width: 250px; + } + + ul, li { + margin: 0px; + list-style: none; + box-sizing: border-box; + } +} + +.rm-field .dnn-dropdown { + width: 100% +} + +label.rm-error { + color: red +} + +.file-upload-container { + .file-upload-panel { + position: relative; + border: 1px solid rgb(102, 102, 102); + padding: 10px; + margin-bottom: 30px; + min-height: 163px; + color: #959695; + transition: 200ms linear; + cursor: pointer; + + &:hover { + color: #FFF; + background-color: rgba(30,136,195,0.6); + } + + span { + overflow: hidden !important; + width: 140px !important; + display: block !important; + position: relative; + text-transform: none; + font-size: 14px; + padding-top: 95px; + text-align: center; + margin: 0 auto; + } + } + + .upload-file { + background-image: url(/DesktopModules/ResourceManager/Images/upload.svg); + height: 40px; + width: 40px; + display: block; + margin: 0 auto; + } + + span { + display: block; + text-align: center; + } +} + +.progresses-container { + margin: 20px 0; + max-height: 240px; + overflow-y: auto; +} + +.uploading-container { + overflow: hidden; + border-bottom: 1px solid #c8c8c8; + padding: 6px 0; + color: #0a85c3; + font-weight: bold; + font-family: proxima_nova,Arial; + font-size: 13px; + + .file-upload-thumbnail { + background: 0; + border-radius: 0; + border: 2px solid #0a85c3; + padding: 2px; + float: left; + position: relative; + height: 76px; + width: 76px; + line-height: 76px; + text-align: center; + + img { + max-height: 100%; + max-width: 100%; + } + } + .file-name-container, .progress-bar-container { + width: ~"calc(100% - 100px)"; + float: right; + } + .file-name-container { + span { + display: block; + width: 100%; + } + } + .progress-bar-container { + margin-top: 18px; + height: 5px; + background-color: #c7c7c7; + + .progress-bar { + background-color: #0a85c3; + height: 100%; + transition: 0.5s; + } + } + + &.rm-error { + color: red; + + .file-upload-thumbnail { + border: 2px solid #c8c8c8; + background-image: url(/DesktopModules/ResourceManager/Images/loader_failed.svg); + } + + .progress-bar { + background-color: red; + } + } + + &.rm-uploading { + .file-upload-thumbnail { + border: 2px solid #c8c8c8; + background: url(/DesktopModules/ResourceManager/Images/dnnanim.gif) no-repeat center; + } + } + + &.rm-stopped { + color: #777; + + .file-upload-thumbnail { + border: 2px solid #c8c8c8; + } + } +} + +.rm-error label { + color: red +} + +.dnn-switch-container { + display: inline-block; + float: none; + padding: 0; +} + +.dnn-dropdown .collapsible-label { + padding: 7px 15px; + box-sizing: border-box; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/mixins.less b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/mixins.less new file mode 100644 index 00000000000..074cc2b804f --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/mixins.less @@ -0,0 +1,25 @@ +.border-box(){ + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.transition(@transition){ + -moz-transition: @transition; + -webkit-transition: @transition; + transition: @transition; +} + +.animateHeight(@max-Height, @duration){ + & { + max-height: 0; + overflow: hidden; + height: 100%; + .transition(max-height @duration ease); + } + + &.rm-expanded{ + max-height: @max-Height; + } + +} diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/modal.less b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/modal.less new file mode 100644 index 00000000000..e48020bd392 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/modal.less @@ -0,0 +1,29 @@ +.ReactModalPortal { + .modal-header { + background-color: #092836; + border: none; + + h3 { + color: white; + margin: 0; + } + } + + .rm-dialog-modal-label { + float: none; + width: 100%; + text-align: center; + label { + margin: 0; + } + } + + .rm-form-buttons-container { + text-align: center; + margin-top: 20px; + + .rm-common-button { + margin-left: 10px; + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/styles.less b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/styles.less new file mode 100644 index 00000000000..b813c111dc5 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/less/styles.less @@ -0,0 +1,9 @@ +@import "mixins.less"; + +.rm-container { + @import "Assets.less"; + @import "components.less"; +} + +@import "modal.less"; +@import "button.less"; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/main.jsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/main.jsx new file mode 100644 index 00000000000..24fd667c86c --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/main.jsx @@ -0,0 +1,21 @@ +import React from "react"; +import { render } from "react-dom"; +import { Provider } from "react-redux"; +import configureStore from "./store/configureStore"; +import resourceManager from "./globals/resourceManager"; +import App from "./components/App"; + +import "fetch-ie8"; +import "es6-shim"; + +const store = configureStore(); +resourceManager.dispatch = store.dispatch; +resourceManager.render = function (appContainer) { + render( + + + , + appContainer + ); +}; + diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/AddFolderPanel.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/AddFolderPanel.js new file mode 100644 index 00000000000..26c199c1867 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/AddFolderPanel.js @@ -0,0 +1,44 @@ +import addFolderPanelActionsTypes from "../action types/addFolderPanelActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; + +const initialState = { + expanded: false +}; + +export default function addFolderPanelReducer(state = initialState, action) { + const data = action.data; + switch (action.type) { + case addFolderPanelActionsTypes.SHOW_ADD_FOLDER_PANEL: + return { ...state, expanded: true }; + case addFolderPanelActionsTypes.FOLDER_CREATED: + return { ...state, newFolderId: data.FolderID, expanded: false }; + case folderPanelActionsTypes.CLOSE_TOP_PANELS: + case addFolderPanelActionsTypes.HIDE_ADD_FOLDER_PANEL: { + let formData = { + name: "", + folderType: state.defaultFolderType + }; + let res = { ...state, formData, expanded: false, newFolderId: null }; + delete res.validationErrors; + + return res; + } + case addFolderPanelActionsTypes.FOLDER_MAPPINGS_LOADED: { + let defaultFolderType = data && data[0] ? data[0].FolderMappingID : null; + let formData = { ...state.formData, folderType: defaultFolderType }; + return { ...state, formData, folderMappings: data, defaultFolderType }; + } + case addFolderPanelActionsTypes.CHANGE_NAME: { + let formData = { ...state.formData, name: data }; + return { ...state, formData }; + } + case addFolderPanelActionsTypes.CHANGE_FOLDER_TYPE: { + let formData = { ...state.formData, folderType: data }; + return { ...state, formData }; + } + case addFolderPanelActionsTypes.SET_VALIDATION_ERRORS: + return { ...state, validationErrors: data }; + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/addAssetPanel.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/addAssetPanel.js new file mode 100644 index 00000000000..a515cfcb4d2 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/addAssetPanel.js @@ -0,0 +1,47 @@ +import addAssetPanelActionsTypes from "../action types/addAssetPanelActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; + +const initialState = { + expanded: false, + progress: {}, + uploadedFiles: [] +}; + +function mutateFileProgress(progress, fileProgress) { + return { ...progress, [fileProgress.fileName]: fileProgress }; +} + +export default function addFolderPanelReducer(state = initialState, action) { + const data = action.data; + switch (action.type) { + case addAssetPanelActionsTypes.SHOW_ADD_ASSET_PANEL: + return { ...state, expanded: true }; + case folderPanelActionsTypes.CLOSE_TOP_PANELS: + case addAssetPanelActionsTypes.HIDE_ADD_ASSET_PANEL: { + return { ...state, expanded: false }; + } + case addAssetPanelActionsTypes.RESET_PANEL: + return { ...state, error: null, progress: {}, uploadedFiles: [] }; + case addAssetPanelActionsTypes.ASSET_ADDED: { + let uploadedFiles = [ ...state.uploadedFiles, data ]; + let fileProgress = { ...state.progress[data.fileName], completed: true, path: data.path, fileIconUrl: data.fileIconUrl }; + return { ...state, uploadedFiles, progress: mutateFileProgress(state.progress, fileProgress) }; + } + case addAssetPanelActionsTypes.ASSET_ADDED_ERROR: { + const fileProgress = { ...state.progress[data.fileName], fileName: data.fileName, error: data.message}; + return { ...state, progress: mutateFileProgress(state.progress, fileProgress) }; + } + case addAssetPanelActionsTypes.UPDATE_PROGRESS: + return { ...state, progress: mutateFileProgress(state.progress, data) }; + case addAssetPanelActionsTypes.FILE_ALREADY_EXIST: { + const fileProgress = { ...state.progress[data.fileName], path: data.path, fileIconUrl: data.fileIconUrl, percent: 0, alreadyExists: true }; + return { ...state, progress: mutateFileProgress(state.progress, fileProgress) }; + } + case addAssetPanelActionsTypes.STOP_UPLOAD: { + const fileProgress = { ...state.progress[data], alreadyExists:false, stopped: true }; + return { ...state, progress: mutateFileProgress(state.progress, fileProgress) }; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/breadcrumbs.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/breadcrumbs.js new file mode 100644 index 00000000000..a78ef40d5d7 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/breadcrumbs.js @@ -0,0 +1,50 @@ +import globalActionsTypes from "../action types/globalActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; + +const initialState = { + breadcrumbs: [] +}; + +export default function breadcrumbsReducer(state = initialState, action) { + const data = action.data; + switch (action.type) { + case globalActionsTypes.MODULE_PARAMETERS_LOADED : { + const {openFolderId} = data; + let breadcrumbs = initialState.breadcrumbs; + if (openFolderId) { + breadcrumbs = [{folderId: data.homeFolderId}]; + } + + return { ...state, breadcrumbs }; + } + case folderPanelActionsTypes.CONTENT_LOADED : { + let found = false; + const { folderId, folderName, folderPath, folderParentId } = data.folder; + let folderLoaded = { folderId, folderName: !folderName && !folderPath ? "Site Root" : folderName }; + let breadcrumbs = state.breadcrumbs.slice(); + + for (let i = 0; i < breadcrumbs.length; i++) { + let breadcrumb = breadcrumbs[i]; + if (breadcrumb.folderId === folderId) { + breadcrumbs = breadcrumbs.slice(0, i); + found = true; + break; + } + else if (breadcrumb.folderId === folderParentId) { + breadcrumbs = breadcrumbs.slice(0, i+1); + found = true; + break; + } + } + + if (!found) { + breadcrumbs = breadcrumbs.slice(0, 1); + } + + breadcrumbs.push(folderLoaded); + return { ...state, breadcrumbs }; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/dialogModal.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/dialogModal.js new file mode 100644 index 00000000000..7b2b4a81c73 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/dialogModal.js @@ -0,0 +1,23 @@ +import dialogModalActionsTypes from "../action types/dialogModalActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; + +export default function dialogModalReducer(state = {}, action) { + const data = action.data; + + switch (action.type) { + case dialogModalActionsTypes.OPEN_DIALOG_MODAL : { + return Object.assign({}, state, data); + } + case dialogModalActionsTypes.CLOSE_DIALOG_MODAL : + case folderPanelActionsTypes.FOLDER_DELETED : + case folderPanelActionsTypes.DELETE_FOLDER_ERROR : { + let res = { ...state }; + delete res.dialogMessage; + delete res.yesFunction; + delete res.noFunction; + return res; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/folderPanel.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/folderPanel.js new file mode 100644 index 00000000000..e42b98f475a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/folderPanel.js @@ -0,0 +1,58 @@ +import globalActionsTypes from "../action types/globalActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; +import itemDetailsActionsTypes from "../action types/itemDetailsActionsTypes"; + +const initialState = { + loadedItems: 0, + numItems: 0, + sorting: "", + hasAddPermission: false +}; + +export default function folderPanelReducer(state = initialState, action) { + const data = action.data; + switch (action.type) { + case globalActionsTypes.MODULE_PARAMETERS_LOADED : { + return { ...state, homeFolderId: data.homeFolderId, currentFolderId: data.openFolderId || data.homeFolderId, + numItems: data.numItems, itemWidth: data.itemWidth, sortOptions: data.sortingOptions, sorting: data.sorting }; + } + case folderPanelActionsTypes.SET_LOADING : { + return { ...state, loading: data}; + } + case folderPanelActionsTypes.FILES_SEARCHED : { + let res = Object.assign({}, state, data); + delete res.newItem; + return { ...res, loadedItems: data.items.length }; + } + case folderPanelActionsTypes.CONTENT_LOADED : { + let res = Object.assign({}, state, data); + delete res.newItem; + delete res.search; + const {folder, items, hasAddPermission} = data; + const currentFolderName = !folder.folderName && !folder.folderPath ? "Root" : folder.folderName; + return { ...res, currentFolderId: folder.folderId, currentFolderName, loadedItems: items.length, hasAddPermission }; + } + case folderPanelActionsTypes.MORE_CONTENT_LOADED: { + let items = state.items.slice(); + items = items.concat(data.items); + return { ...state, items, loadedItems: items.length, hasAddPermission: data.hasAddPermission }; + } + case folderPanelActionsTypes.CHANGE_SEARCH: { + return { ...state, search: data }; + } + case itemDetailsActionsTypes.ITEM_SAVED : { + let itemUpdated = data; + let items = state.items.slice(); + let updatedItemIndex = items.findIndex(x => x.isFolder === itemUpdated.isFolder && x.itemId === itemUpdated.itemId); + + items[updatedItemIndex] = { ...items[updatedItemIndex], itemName: itemUpdated.itemName }; + + return { ...state, items }; + } + case folderPanelActionsTypes.CHANGE_SORTING : { + return { ...state, sorting: data }; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/infiniteScroll.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/infiniteScroll.js new file mode 100644 index 00000000000..0261e045f83 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/infiniteScroll.js @@ -0,0 +1,22 @@ +import infiniteScrollActionsTypes from "../action types/infiniteScrollActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; + +const initialState = { + maxScrollTop: 0 +}; + +export default function dialogModalReducer(state = initialState, action) { + const data = action.data; + + switch (action.type) { + case infiniteScrollActionsTypes.SET_MAX_SCROLL_TOP : { + return { ...state, maxScrollTop: data}; + } + case folderPanelActionsTypes.CONTENT_LOADED : + case folderPanelActionsTypes.FILES_SEARCHED : { + return { ...state, maxScrollTop: 0 }; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/itemDetails.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/itemDetails.js new file mode 100644 index 00000000000..f9be76284df --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/itemDetails.js @@ -0,0 +1,51 @@ +import itemDetailsActionsTypes from "../action types/itemDetailsActionsTypes"; + +const initialState = { + maxScrollTop: 0 +}; + +export default function itemDetailsReducer(state = initialState, action) { + const data = action.data; + + switch (action.type) { + case itemDetailsActionsTypes.EDIT_ITEM: { + return { ...state, itemEditing: data }; + } + case itemDetailsActionsTypes.MOVE_ITEM: { + return { ...state, itemMoving: data }; + } + case itemDetailsActionsTypes.CHANGE_NAME: { + let itemEditing = { ...state.itemEditing, fileName: data, folderName: data}; + return { ...state, itemEditing }; + } + case itemDetailsActionsTypes.CHANGE_TITLE: { + let itemEditing = { ...state.itemEditing, title: data }; + return { ...state, itemEditing }; + } + case itemDetailsActionsTypes.CHANGE_DESCRIPTION: { + let itemEditing = { ...state.itemEditing, description: data }; + return { ...state, itemEditing }; + } + case itemDetailsActionsTypes.CHANGE_PERMISSIONS: { + let itemEditing = { ...state.itemEditing, permissions: data }; + return { ...state, itemEditing }; + } + case itemDetailsActionsTypes.SET_VALIDATION_ERRORS: { + return { ...state, validationErrors: data }; + } + case itemDetailsActionsTypes.ITEM_SAVED : + case itemDetailsActionsTypes.CANCEL_EDIT_ITEM: { + let res = { ...state }; + delete res.itemEditing; + return res; + } + case itemDetailsActionsTypes.ITEM_MOVED : + case itemDetailsActionsTypes.CANCEL_MOVE_ITEM : { + let res = { ...state }; + delete res.itemMoving; + return res; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/manageFolderTypesPanel.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/manageFolderTypesPanel.js new file mode 100644 index 00000000000..3e90e5c347d --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/manageFolderTypesPanel.js @@ -0,0 +1,20 @@ +import manageFolderTypesPanelActionTypes from "../action types/manageFolderTypesPanelActionsTypes"; +import folderPanelActionTypes from "../action types/folderPanelActionsTypes"; + +const initialState = { + expanded: false +}; + +export default function manageFolderTypesPanelReducer(state = initialState, action) { + switch (action.type) { + case manageFolderTypesPanelActionTypes.SHOW_MANAGE_FOLDER_TYPES_PANEL: + return { ...state, expanded: true }; + case folderPanelActionTypes.CLOSE_TOP_PANELS: + case manageFolderTypesPanelActionTypes.HIDE_MANAGE_FOLDER_TYPES_PANEL: + return { ...state, expanded: false }; + case manageFolderTypesPanelActionTypes.ADD_FOLDER_TYPE_URL_LOADED: + return { ...state, addFolderTypeUrl: action.data }; + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/messageModal.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/messageModal.js new file mode 100644 index 00000000000..6f0fb9296a4 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/messageModal.js @@ -0,0 +1,34 @@ +import messageModalActionsTypes from "../action types/messageModalActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; +import itemDetailsActionsTypes from "../action types/itemDetailsActionsTypes"; +import addFolderPanelActionsTypes from "../action types/addFolderPanelActionsTypes"; +import localizeService from "../services/localizeService"; + +export default function messageModalReducer(state = {}, action) { + const data = action.data; + + switch (action.type) { + case messageModalActionsTypes.CLOSE_MESSAGE_MODAL : { + let res = { ...state }; + delete res.infoMessage; + delete res.errorMessage; + return res; + } + case itemDetailsActionsTypes.EDIT_ITEM_ERROR : + case itemDetailsActionsTypes.SAVE_ITEM_ERROR : + case folderPanelActionsTypes.DELETE_FILE_ERROR: + case folderPanelActionsTypes.DELETE_FOLDER_ERROR: + case folderPanelActionsTypes.LOAD_CONTENT_ERROR : + case addFolderPanelActionsTypes.ADD_FOLDER_ERROR: { + return { ...state, infoMessage: data}; + } + case itemDetailsActionsTypes.ITEM_SAVED : { + return { ...state, infoMessage: localizeService.getString("ItemSavedMessage") }; + } + case folderPanelActionsTypes.URL_COPIED_TO_CLIPBOARD : { + return { ...state, infoMessage: localizeService.getString("UrlCopiedMessage") }; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/module.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/module.js new file mode 100644 index 00000000000..078b81b3f8a --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/module.js @@ -0,0 +1,20 @@ +import globalActionsTypes from "../action types/globalActionsTypes"; + +const initialState = { + isEditMode: false, + moduleId: -1, + moduleName: "", + tabId: -1, + portalId: -1, + isAdmin: false +}; + +export default function moduleReducer(state = initialState, action) { + const data = action.data; + + switch (action.type) { + case globalActionsTypes.MODULE_PARAMETERS_LOADED: + return Object.assign({}, state, data); + } + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/rootReducer.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/rootReducer.js new file mode 100644 index 00000000000..34e49f3c7b8 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/rootReducer.js @@ -0,0 +1,28 @@ +import { combineReducers } from "redux"; +import module from "./module"; +import folderPanel from "./folderPanel"; +import breadcrumbs from "./breadcrumbs"; +import addFolderPanel from "./addFolderPanel"; +import addAssetPanel from "./addAssetPanel"; +import dialogModal from "./dialogModal"; +import infiniteScroll from "./infiniteScroll"; +import messageModal from "./messageModal"; +import itemDetails from "./itemDetails"; +import topBar from "./topBar"; +import manageFolderTypesPanel from "./manageFolderTypesPanel"; + +const rootReducer = combineReducers({ + module, + folderPanel, + breadcrumbs, + addFolderPanel, + addAssetPanel, + dialogModal, + infiniteScroll, + messageModal, + itemDetails, + topBar, + manageFolderTypesPanel, +}); + +export default rootReducer; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/topBar.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/topBar.js new file mode 100644 index 00000000000..8ba386dcec3 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/reducers/topBar.js @@ -0,0 +1,17 @@ +import topBarActionsTypes from "../action types/topBarActionsTypes"; +import folderPanelActionsTypes from "../action types/folderPanelActionsTypes"; + +export default function topBarReducer(state = {}, action) { + const data = action.data; + + switch (action.type) { + case topBarActionsTypes.CHANGE_SEARCH_FIELD: { + return { ...state, search: data }; + } + case folderPanelActionsTypes.CONTENT_LOADED: { + return { ...state, search: undefined }; + } + } + + return state; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/internalService.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/internalService.js new file mode 100644 index 00000000000..f08c1094e3b --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/internalService.js @@ -0,0 +1,28 @@ +import api from "../globals/api"; + +const API_PATH = "InternalServices/API/"; +const GET_FOLDERS_ENDPOINT = API_PATH + "ItemListService/GetFolders"; +const SEARCH_FOLDERS_ENDPOINT = API_PATH + "ItemListService/SearchFolders"; +const GET_FOLDER_DESCENDANT_ENDPOINT = API_PATH + "ItemListService/GetFolderDescendants"; + +function getUrl(endpoint) { + return api.getServiceRoot(true) + endpoint; +} + +function getFolders() { + return api.get(getUrl(GET_FOLDERS_ENDPOINT)); +} + +function searchFolders(searchText) { + return api.get(getUrl(SEARCH_FOLDERS_ENDPOINT), {searchText}); +} + +function getFolderDescendant(parentId) { + return api.get(getUrl(GET_FOLDER_DESCENDANT_ENDPOINT), {parentId}); +} + +export default { + getFolders, + searchFolders, + getFolderDescendant +}; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/itemsService.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/itemsService.js new file mode 100644 index 00000000000..97389ae4268 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/itemsService.js @@ -0,0 +1,159 @@ +import api from "../globals/api"; + +const GET_CONTENT_ENDPOINT = "Items/GetFolderContent"; +const SYNC_CONTENT_ENDPOINT = "Items/SyncFolderContent"; +const DOWNLOAD_FILE_ENDPOINT = "Items/Download"; +const FILE_DETAILS_ENDPOINT = "Items/GetFileDetails"; +const FOLDER_DETAILS_ENDPOINT = "Items/GetFolderDetails"; +const LOAD_FOLDER_MAPPINGS_ENDPOINT = "Items/GetFolderMappings"; +const ADD_FOLDER_ENDPOINT = "Items/CreateNewFolder"; +const DELETE_FOLDER_ENDPOINT = "Items/DeleteFolder"; +const DELETE_FILE_ENDPOINT = "Items/DeleteFile"; +const API_PATH = "InternalServices/API/"; +const FILE_UPLOAD = API_PATH + "FileUpload/UploadFromLocal"; +const SEARCH_FILES_ENDPOINT = "Items/Search"; +const SAVE_FILE_DETAILS_ENDPOINT = "Items/SaveFileDetails"; +const SAVE_FOLDER_DETAILS_ENDPOINT = "Items/SaveFolderDetails"; +const REMOVE_FOLDER_TYPE_ENDPOINT = "Items/RemoveFolderType"; +const ADD_FOLDER_TYPE_URL_ENDPOINT = "Items/GetAddFolderTypeUrl"; +const MOVE_FOLDER_URL_ENDPOINT = "Items/MoveFolder"; +const MOVE_FILE_URL_ENDPOINT = "Items/MoveFile"; + +function getUrl(endpoint, ignoreCurrentModuleAPI=false) { + return api.getServiceRoot(ignoreCurrentModuleAPI) + endpoint; +} + +function getContent(folderId, startIndex, numItems, sorting) { + return api.get(getUrl(GET_CONTENT_ENDPOINT), {folderId, startIndex, numItems, sorting}) + .then(response => { + return response; + }); +} + +function syncContent(folderId, numItems, sorting, recursive) { + return api.get(getUrl(SYNC_CONTENT_ENDPOINT), {folderId, numItems, sorting, recursive}) + .then(response => { + return response; + }); +} + +function getDownloadUrl(fileId) { + let {moduleId, tabId} = api.getHeadersObject(); + return getUrl(DOWNLOAD_FILE_ENDPOINT) + "?forceDownload=true&fileId=" + fileId + "&moduleId=" + moduleId + "&tabId=" + tabId; +} + +function loadFolderMappings() { + return (api.get(getUrl(LOAD_FOLDER_MAPPINGS_ENDPOINT))) + .then(response => { + return response; + }); +} + +function addFolder(data) { + return api.post(getUrl(ADD_FOLDER_ENDPOINT), data, { "Content-Type":"application/json" }); +} + +function deleteFolder(folderId) { + return api.post(getUrl(DELETE_FOLDER_ENDPOINT), {folderId}, { "Content-Type":"application/json" }); +} + +function deleteFile(fileId) { + return api.post(getUrl(DELETE_FILE_ENDPOINT), {fileId}, { "Content-Type":"application/json" }); +} + +function moveFolder(sourceFolderId, destinationFolderId) { + const data = { sourceFolderId, destinationFolderId } + return api.post(getUrl(MOVE_FOLDER_URL_ENDPOINT), data, { "Content-Type": "application/json" }); +} + +function moveFile(sourceFileId, destinationFolderId) { + const data = {sourceFileId, destinationFolderId}; + return api.post(getUrl(MOVE_FILE_URL_ENDPOINT), data, {"Content-Type": "application/json"}); +} + +function getFileDetails(fileId) { + return api.get(getUrl(FILE_DETAILS_ENDPOINT), {fileId}); +} + +function getFolderDetails(folderId) { + return api.get(getUrl(FOLDER_DETAILS_ENDPOINT), {folderId}); +} + +function uploadFile(file, folderPath, overwrite, trackProgress) { + const formData = new FormData(); + formData.append("postfile", file); + if (folderPath && typeof folderPath === "string") { + formData.append("folder", folderPath); + } + if (overwrite && typeof overwrite === "boolean") { + formData.append("overwrite", overwrite); + } + let {extensionWhitelist, validationCode} = api.getWhitelistObject(); + formData.append("filter", extensionWhitelist); + formData.append("validationCode", validationCode); + const url = getUrl(FILE_UPLOAD, true); + + return api.postFile(url, formData, trackProgress); +} + +function searchFiles(folderId, search, pageIndex, pageSize, sorting, culture) { + return api.get(getUrl(SEARCH_FILES_ENDPOINT), {folderId, search, pageIndex, pageSize, sorting, culture}) + .then(response => { + return response; + }); +} + +function getItemFullUrl(relativeUrl) { + return location.protocol + "//" + location.hostname + (location.port ? ":" + location.port : "") + relativeUrl; +} + +function getFolderUrl(folderId) { + return location.protocol + "//" + location.host + location.pathname + "?folderId=" + folderId; +} + +function getIconUrl(item) { + if (item.isFolder) { + return item.iconUrl; + } else { + return !item.thumbnailAvailable ? item.iconUrl : item.thumbnailUrl; + } +} + +function saveFileDetails(item) { + return api.post(getUrl(SAVE_FILE_DETAILS_ENDPOINT), item, { "Content-Type":"application/json" }); +} + +function saveFolderDetails(item) { + return api.post(getUrl(SAVE_FOLDER_DETAILS_ENDPOINT), item, { "Content-Type":"application/json" }); +} + +function removeFolderType(folderMappingId) { + return api.postPrimitive(getUrl(REMOVE_FOLDER_TYPE_ENDPOINT), folderMappingId.toString()); +} + +function getAddFolderTypeUrl() { + return api.get(getUrl(ADD_FOLDER_TYPE_URL_ENDPOINT)) +} + +export default { + getContent, + syncContent, + getDownloadUrl, + loadFolderMappings, + addFolder, + deleteFolder, + deleteFile, + getFileDetails, + getFolderDetails, + uploadFile, + searchFiles, + getItemFullUrl, + getFolderUrl, + getIconUrl, + saveFileDetails, + saveFolderDetails, + removeFolderType, + getAddFolderTypeUrl, + moveFolder, + moveFile, +}; \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/localizeService.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/localizeService.js new file mode 100644 index 00000000000..a2a3db54389 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/services/localizeService.js @@ -0,0 +1,19 @@ +let localization = {}; +let initialized = false; + +function init(localizedResources) { + localization = localizedResources; + initialized = true; +} + +function getString(key) { + if (!initialized) { + throw new Error("please call init method before use this method"); + } + return localization[key] || "[" + key + "]"; +} + +export default { + init, + getString +}; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/store/configureStore.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/store/configureStore.js new file mode 100644 index 00000000000..e4c7fbe3a20 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/app/store/configureStore.js @@ -0,0 +1,21 @@ +import { createStore, applyMiddleware, compose } from "redux"; +import thunkMiddleware from "redux-thunk"; +import reduxImmutableStateInvariant from "redux-immutable-state-invariant"; +import rootReducer from "../reducers/rootReducer"; +import DevTools from "../containers/DevTools"; + +/* eslint-disable no-undef */ +const IS_PRODUCTION = process.env.NODE_ENV === "production"; + +export default function configureStore(initialState) { + const store = createStore( + rootReducer, + initialState, + compose( + IS_PRODUCTION ? + applyMiddleware(thunkMiddleware) : + applyMiddleware(thunkMiddleware, reduxImmutableStateInvariant()), DevTools.instrument() + ) + ); + return store; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json new file mode 100644 index 00000000000..658ce75e5c7 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -0,0 +1,71 @@ +{ + "name": "resource-library", + "version": "9.7.0", + "description": "Resource Library", + "private": true, + "scripts": { + "build": "set NODE_ENV=production&&webpack -p", + "debug": "set NODE_ENV=debug&&webpack -p", + "webpack": "webpack-dev-server -d --port 8080 --hot --inline --content-base dist/ --history-api-fallback", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --colors --watch", + "analyze": "set NODE_ENV=production&&webpack -p --json | webpack-bundle-size-analyzer" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "@babel/core": "^7.2.0", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/preset-env": "^7.2.0", + "@babel/preset-react": "^7.0.0", + "@dnnsoftware/dnn-react-common": "9.7.0", + "babel-eslint": "^10.1.0", + "babel-loader": "8.0.6", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.26.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "babel-polyfill": "6.26.0", + "css-loader": "2.1.1", + "eslint": "5.8.0", + "eslint-loader": "2.1.1", + "eslint-plugin-babel": "5.3.0", + "eslint-plugin-filenames": "1.3.2", + "eslint-plugin-import": "2.21.2", + "eslint-plugin-react": "7.11.1", + "eslint-plugin-spellcheck": "0.0.11", + "prop-types": "^15.7.2", + "webpack": "4.43.0", + "webpack-bundle-size-analyzer": "3.1.0", + "webpack-cli": "3.3.11", + "webpack-dev-server": "3.11.0" + }, + "dependencies": { + "copy-to-clipboard": "^3.0.5", + "es6-shim": "0.35.0", + "fetch-ie8": "1.4.2", + "file-loader": "3.0.1", + "less": "3.9.0", + "less-loader": "5.0.0", + "lodash": "^4.17.4", + "raw-loader": "2.0.0", + "react": "^16.6.3", + "react-dom": "^16.6.3", + "react-dropzone": "6.2.4", + "react-height": "^3.0.1", + "react-hot-loader": "4.8.5", + "react-modal": "^3.5.1", + "react-motion": "^0.5.2", + "react-redux": "^5.1.1", + "react-tooltip": "^4.2.6", + "react-transition-group": "^1.2.0", + "redux": "^4.0.1", + "redux-devtools": "^3.5.0", + "redux-devtools-dock-monitor": "^1.1.3", + "redux-devtools-log-monitor": "^1.4.0", + "redux-immutable-state-invariant": "^2.1.0", + "redux-thunk": "^2.3.0", + "style-loader": "0.23.1", + "superagent": "^3.2.1", + "url-loader": "1.1.2" + } +} diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/webpack.config.js b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/webpack.config.js new file mode 100644 index 00000000000..94cbf632905 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/webpack.config.js @@ -0,0 +1,131 @@ +const webpack = require("webpack"); +const packageJson = require("./package.json"); +const path = require("path"); +const isProduction = process.env.NODE_ENV === "production"; +const settings = require("../../../../settings.local.json"); + +module.exports = { + entry: "./app/main.jsx", + optimization: { + minimize: isProduction + }, + output: { + path: + isProduction || settings.WebsitePath == "" + ? path.resolve( + __dirname, + "../scripts/" + ) + : settings.WebsitePath + + "\\DesktopModules\\ResourceManager\\scripts", + publicPath: isProduction ? "" : "http://localhost:8080/dist/", + filename: "resourceManager-bundle.js" + }, + devServer: { + disableHostCheck: !isProduction + }, + resolve: { + extensions: ["*", ".js", ".json", ".jsx"], + modules: [ + path.resolve("./src"), // Look in src first + path.resolve("./node_modules"), // Try local node_modules + path.resolve("../../../../node_modules") // Last fallback to workspaces node_modules + ] + }, + module: { + rules: [ + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + enforce: "pre", + loader: "eslint-loader", + options: { + fix: true + } + }, + { + test: /\.less$/, + use: [ + { + loader: "style-loader" // creates style nodes from JS strings + }, + { + loader: "css-loader", // translates CSS into CommonJS + options: { modules: "global" } + }, + { + loader: "less-loader" // compiles Less to CSS + } + ] + }, + { + test: /\.css$/, + use: [ + { + loader: "style-loader" + }, + { + loader: "css-loader", + options: { modules: "global" } + } + ] + }, + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + options: { + presets: ["@babel/preset-env", "@babel/preset-react"] + } + } + }, + { + test: /\.(ttf|woff)$/, + use: { + loader: "url-loader?limit=8192" + } + }, + { + test: /\.(gif|png)$/, + use: { + loader: "url-loader?mimetype=image/png" + } + }, + { + test: /\.woff(2)?(\?v=[0-9].[0-9].[0-9])?$/, + use: { + loader: "url-loader?mimetype=application/font-woff" + } + }, + { + test: /\.(ttf|eot)(\?v=[0-9].[0-9].[0-9])?$/, + use: { + loader: "file-loader?name=[name].[ext]" + } + }, + { + test: /\.(svg)/, + use: { + loader: "raw-loader" + } + } + ] + }, + + plugins: isProduction + ? [ + new webpack.DefinePlugin({ + VERSION: JSON.stringify(packageJson.version), + "process.env": { + NODE_ENV: JSON.stringify("production") + } + }) + ] + : [ + new webpack.DefinePlugin({ + VERSION: JSON.stringify(packageJson.version) + }) + ], + devtool: "source-map" +}; diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/yarn.lock b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/yarn.lock new file mode 100644 index 00000000000..140d5c16a90 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/yarn.lock @@ -0,0 +1,6944 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" + integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== + dependencies: + "@babel/highlight" "^7.10.1" + +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" + integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.2.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.1.tgz#2a0ad0ea693601820defebad2140206503d89af3" + integrity sha512-u8XiZ6sMXW/gPmoP5ijonSUln4unazG291X0XAQ5h0s8qnAFr6BRRZGUEK+jtRWdmB0NTJQt7Uga25q8GetIIg== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helpers" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.1.tgz#4d14458e539bcb04ffe34124143f5c489f2dbca9" + integrity sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA== + dependencies: + "@babel/types" "^7.10.1" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/generator@^7.11.0": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.4.tgz#1ec7eec00defba5d6f83e50e3ee72ae2fee482be" + integrity sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g== + dependencies: + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" + integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" + integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-builder-react-jsx-experimental@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz#9a7d58ad184d3ac3bafb1a452cec2bad7e4a0bc8" + integrity sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-module-imports" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-builder-react-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz#a327f0cf983af5554701b1215de54a019f09b532" + integrity sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-compilation-targets@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.1.tgz#ad6f69b4c3bae955081ef914a84e5878ffcaca63" + integrity sha512-YuF8IrgSmX/+MV2plPkjEnzlC2wf+gaok8ehMNN0jodF3/sejZauExqpEVGbJua62oaWoNYIXwz4RmAsVcGyHw== + dependencies: + "@babel/compat-data" "^7.10.1" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.1.tgz#6d8a45aafe492378d0e6fc0b33e5dea132eae21c" + integrity sha512-bwhdehBJZt84HuPUcP1HaTLuc/EywVS8rc3FgsEPDcivg+DCW+SHuLHVkYOmcBA1ZfI+Z/oZjQc/+bPmIO7uAA== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" + integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-regex" "^7.10.1" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" + integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/types" "^7.10.1" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" + integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== + dependencies: + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" + integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" + integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" + integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-member-expression-to-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" + integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" + integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-module-transforms@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" + integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== + dependencies: + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" + integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" + integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== + +"@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" + integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" + integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-wrap-function" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-replace-supers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" + integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" + integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== + dependencies: + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" + integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" + integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helpers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" + integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== + dependencies: + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/highlight@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" + integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.1.tgz#2e142c27ca58aa2c7b119d09269b702c8bbad28c" + integrity sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg== + +"@babel/parser@^7.10.4", "@babel/parser@^7.11.0": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.4.tgz#6fa1a118b8b0d80d0267b719213dc947e88cc0ca" + integrity sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA== + +"@babel/parser@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" + integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== + +"@babel/plugin-proposal-async-generator-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" + integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" + integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" + integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-json-strings@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" + integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" + integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" + integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" + +"@babel/plugin-proposal-object-rest-spread@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" + integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" + integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" + integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" + integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" + integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" + integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz#0ae371134a42b91d5418feb3c8c8d43e1565d2da" + integrity sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" + integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" + integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-arrow-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" + integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" + integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== + dependencies: + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" + +"@babel/plugin-transform-block-scoped-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" + integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-block-scoping@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" + integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" + integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-define-map" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" + integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-destructuring@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" + integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" + integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-duplicate-keys@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" + integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-exponentiation-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" + integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-for-of@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" + integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" + integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" + integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-member-expression-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" + integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-modules-amd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" + integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== + dependencies: + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" + integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== + dependencies: + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" + integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== + dependencies: + "@babel/helper-hoist-variables" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" + integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== + dependencies: + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + +"@babel/plugin-transform-new-target@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" + integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-object-super@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" + integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + +"@babel/plugin-transform-parameters@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" + integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== + dependencies: + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-property-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" + integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-react-display-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz#e6a33f6d48dfb213dda5e007d0c7ff82b6a3d8ef" + integrity sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-react-jsx-development@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz#1ac6300d8b28ef381ee48e6fec430cc38047b7f3" + integrity sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-jsx-self@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz#22143e14388d72eb88649606bb9e46f421bc3821" + integrity sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-jsx-source@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz#30db3d4ee3cdebbb26a82a9703673714777a4273" + integrity sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz#91f544248ba131486decb5d9806da6a6e19a2896" + integrity sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.1" + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-pure-annotations@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz#f5e7c755d3e7614d4c926e144f501648a5277b70" + integrity sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-regenerator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" + integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" + integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-shorthand-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" + integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-spread@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" + integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-sticky-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" + integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-regex" "^7.10.1" + +"@babel/plugin-transform-template-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" + integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-typeof-symbol@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" + integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-unicode-escapes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" + integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-unicode-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" + integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/preset-env@^7.2.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.1.tgz#099e1b76379739bdcbfab3d548dc7e7edb2ac808" + integrity sha512-bGWNfjfXRLnqbN2T4lB3pMfoic8dkRrmHpVZamSFHzGy5xklyHTobZ28TVUD2grhE5WDnu67tBj8oslIhkiOMQ== + dependencies: + "@babel/compat-data" "^7.10.1" + "@babel/helper-compilation-targets" "^7.10.1" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-proposal-async-generator-functions" "^7.10.1" + "@babel/plugin-proposal-class-properties" "^7.10.1" + "@babel/plugin-proposal-dynamic-import" "^7.10.1" + "@babel/plugin-proposal-json-strings" "^7.10.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" + "@babel/plugin-proposal-numeric-separator" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.10.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" + "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-private-methods" "^7.10.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.1" + "@babel/plugin-transform-arrow-functions" "^7.10.1" + "@babel/plugin-transform-async-to-generator" "^7.10.1" + "@babel/plugin-transform-block-scoped-functions" "^7.10.1" + "@babel/plugin-transform-block-scoping" "^7.10.1" + "@babel/plugin-transform-classes" "^7.10.1" + "@babel/plugin-transform-computed-properties" "^7.10.1" + "@babel/plugin-transform-destructuring" "^7.10.1" + "@babel/plugin-transform-dotall-regex" "^7.10.1" + "@babel/plugin-transform-duplicate-keys" "^7.10.1" + "@babel/plugin-transform-exponentiation-operator" "^7.10.1" + "@babel/plugin-transform-for-of" "^7.10.1" + "@babel/plugin-transform-function-name" "^7.10.1" + "@babel/plugin-transform-literals" "^7.10.1" + "@babel/plugin-transform-member-expression-literals" "^7.10.1" + "@babel/plugin-transform-modules-amd" "^7.10.1" + "@babel/plugin-transform-modules-commonjs" "^7.10.1" + "@babel/plugin-transform-modules-systemjs" "^7.10.1" + "@babel/plugin-transform-modules-umd" "^7.10.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.10.1" + "@babel/plugin-transform-object-super" "^7.10.1" + "@babel/plugin-transform-parameters" "^7.10.1" + "@babel/plugin-transform-property-literals" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/plugin-transform-reserved-words" "^7.10.1" + "@babel/plugin-transform-shorthand-properties" "^7.10.1" + "@babel/plugin-transform-spread" "^7.10.1" + "@babel/plugin-transform-sticky-regex" "^7.10.1" + "@babel/plugin-transform-template-literals" "^7.10.1" + "@babel/plugin-transform-typeof-symbol" "^7.10.1" + "@babel/plugin-transform-unicode-escapes" "^7.10.1" + "@babel/plugin-transform-unicode-regex" "^7.10.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.10.1" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.0.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.1.tgz#e2ab8ae9a363ec307b936589f07ed753192de041" + integrity sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-react-display-name" "^7.10.1" + "@babel/plugin-transform-react-jsx" "^7.10.1" + "@babel/plugin-transform-react-jsx-development" "^7.10.1" + "@babel/plugin-transform-react-jsx-self" "^7.10.1" + "@babel/plugin-transform-react-jsx-source" "^7.10.1" + "@babel/plugin-transform-react-pure-annotations" "^7.10.1" + +"@babel/runtime@^7.1.2": + version "7.9.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/@babel/runtime/-/@babel/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.8.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.1.tgz#b6eb75cac279588d3100baecd1b9894ea2840822" + integrity sha512-nQbbCbQc9u/rpg1XCxoMYQTbSMVZjCDxErQ1ClCn9Pvcmv1lGads19ep0a2VsEiIJeHqjZley6EQGEC3Yo1xMA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" + integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.1", "@babel/traverse@^7.7.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" + integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/traverse@^7.10.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" + integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.0" + "@babel/types" "^7.11.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.1", "@babel/types@^7.4.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.1.tgz#6886724d31c8022160a7db895e6731ca33483921" + integrity sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.10.4", "@babel/types@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@babel/types@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" + integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@dnnsoftware/dnn-react-common@9.7.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@dnnsoftware/dnn-react-common/-/dnn-react-common-2.1.2.tgz#8af42e5f4fe8075fb80b7f62d2b1f0893fe397d3" + integrity sha512-OvPmcaMGZbSnlxweT0jmhDe9lSiJYxNtHHht+mj8XHKts9g6/41RIP9EnCCbdaOt+bieuu15yG9EHI5aWHS++g== + dependencies: + interact.js "^1.2.8" + moment "^2.22.2" + raw-loader "0.5.1" + react-accessible-tooltip "^2.0.3" + react-collapse "^4.0.3" + react-custom-scrollbars "^4.2.1" + react-day-picker "^7.1.10" + react-height "^3.0.0" + react-modal "^3.5.1" + react-motion "^0.5.2" + react-scrollbar "^0.5.4" + react-slider "0.11.2" + react-tabs "2.3.0" + react-test-utils "0.0.1" + react-tooltip "^3.8.4" + react-widgets "^4.4.4" + redux-undo "^1.0.0-beta9" + scroll "^2.0.3" + shortid "^2.2.13" + throttle-debounce "^2.0.1" + +"@types/glob@^7.1.1": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz#06ca26521353a545d94a0adc74f38a59d232c987" + integrity sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.0.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9" + integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA== + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://www.myget.org/F/dnn-software-public/npm/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn@^6.0.2, acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +add-px-to-style@1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.3, ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://www.myget.org/F/dnn-software-public/npm/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.0.3, array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +asap@~2.0.3: + version "2.0.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.1.2: + version "2.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + +attr-accept@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.3.tgz#48230c79f93790ef2775fcec4f0db0f5db41ca52" + integrity sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ== + dependencies: + core-js "^2.5.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-loader@8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-transform-object-assign@6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" + integrity sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-remove-prop-types@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-polyfill@6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: + version "6.26.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base16@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + +base@^0.11.1: + version "0.11.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://www.myget.org/F/dnn-software-public/npm/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.12.0, browserslist@^4.8.5: + version "4.12.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" + integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== + dependencies: + caniuse-lite "^1.0.30001043" + electron-to-chromium "^1.3.413" + node-releases "^1.1.53" + pkg-up "^2.0.0" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +bytes@3.1.0: + version "3.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camelcase@^5.0.0, camelcase@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001043: + version "1.0.30001066" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz#0a8a58a10108f2b9bf38e7b65c237b12fd9c5f04" + integrity sha512-Gfj/WAastBtfxLws0RCh2sDbTK/8rJuSeZMecrSkNGYxPcv7EzblmDGfWQCFEQcSqYE2BRgQiJh8HOD07N5hIw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chain-function@^1.0.0: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.0, classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone@^2.1.1, clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.19.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.0, component-emitter@^1.2.1: + version "1.3.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://www.myget.org/F/dnn-software-public/npm/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +computed-style@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/computed-style/-/computed-style-0.1.4.tgz#7f344fd8584b2e425bedca4a1afc0e300bb05d74" + integrity sha1-fzRP2FhLLkJb7cpKGvwOMAuwXXQ= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config@^1.24.0: + version "1.31.0" + resolved "https://registry.yarnpkg.com/config/-/config-1.31.0.tgz#ab08aeba6536015d220cd0afe14b3e0501082542" + integrity sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA== + dependencies: + json5 "^1.0.1" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.4.0: + version "0.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + +cookiejar@^2.1.0: + version "2.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +copy-to-clipboard@^3.0.5: + version "3.3.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + dependencies: + toggle-selection "^1.0.6" + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.11" + resolved "https://www.myget.org/F/dnn-software-public/npm/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-loader@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" + integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== + dependencies: + camelcase "^5.2.0" + icss-utils "^4.1.0" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.14" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^2.0.6" + postcss-modules-scope "^2.1.0" + postcss-modules-values "^2.0.0" + postcss-value-parser "^3.3.0" + schema-utils "^1.0.0" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-arithmetic@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/date-arithmetic/-/date-arithmetic-3.1.0.tgz#1fcd03dbd504b9dbee2b9078c85a5f1c7d3cc2d3" + integrity sha1-H80D29UEudvuK5B4yFpfHH08wtM= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://www.myget.org/F/dnn-software-public/npm/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +depd@~1.1.2: + version "1.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dom-css@^2.0.0: + version "2.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/dom-css/-/dom-css-2.1.0.tgz#fdbc2d5a015d0a3e1872e11472bbd0e7b9e6a202" + dependencies: + add-px-to-style "1.0.0" + prefix-style "2.0.1" + to-camel-case "1.0.0" + +dom-helpers@^3.2.0, dom-helpers@^3.3.1, dom-helpers@^3.4.0: + version "3.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + dependencies: + "@babel/runtime" "^7.1.2" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +electron-to-chromium@^1.3.413: + version "1.3.453" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.453.tgz#758a8565a64b7889b27132a51d2abb8b135c9d01" + integrity sha512-IQbCfjJR0NDDn/+vojTlq7fPSREcALtF8M1n01gw7nQghCtfFYrJ2dfhsp8APr8bANoFC8vRTFVXMOGpT0eetw== + +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +envify@~0.2.0: + version "0.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/envify/-/envify-0.2.0.tgz#645091cfaf1279f7f8364a893b0cf81c680ecbe0" + dependencies: + falafel "~0.2.1" + through "~2.3.4" + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://www.myget.org/F/dnn-software-public/npm/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-shim@0.35.0: + version "0.35.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/es6-shim/-/es6-shim-0.35.0.tgz#272d927950889eabe299927cdc9c0010b7bfc00a" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://www.myget.org/F/dnn-software-public/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +eslint-import-resolver-node@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-loader@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.1.tgz#2a9251523652430bfdd643efdb0afc1a2a89546a" + integrity sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-babel@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023" + integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-plugin-filenames@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz#7094f00d7aefdd6999e3ac19f72cea058e590cf7" + integrity sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w== + dependencies: + lodash.camelcase "4.3.0" + lodash.kebabcase "4.1.1" + lodash.snakecase "4.1.1" + lodash.upperfirst "4.3.1" + +eslint-plugin-import@2.21.2: + version "2.21.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c" + integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.3" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-react@7.11.1: + version "7.11.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" + integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw== + dependencies: + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + prop-types "^15.6.2" + +eslint-plugin-spellcheck@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-spellcheck/-/eslint-plugin-spellcheck-0.0.11.tgz#f3fcff70a0446e1f04eacd5ebaa8cab23e691b4a" + integrity sha512-P8NCB9Y9u3PLSdW5PeVY6kcBR/WkP/FB3toik5ahaGc13s+Di+Op+ItinB89Z+61+IrXQX//qeGh1mgCGrp7LA== + dependencies: + globals "^11.3.0" + hunspell-spellchecker "^1.0.2" + lodash "^4.14.2" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@^4.0.0, eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.8.0.tgz#91fbf24f6e0471e8fdf681a4d9dd1b2c9f28309b" + integrity sha512-Zok6Bru3y2JprqTNm14mgQ15YQu/SMDkWdnmHfFg770DIUlmMFd/gqqzCHekxzjHZJxXv3tmTpH0C1icaYJsRQ== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.5.3" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^2.1.0" + eslint-scope "^4.0.0" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^4.0.0" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + imurmurhash "^0.1.4" + inquirer "^6.1.0" + is-resolvable "^1.1.0" + js-yaml "^3.12.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.5" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^2.0.1" + require-uncached "^1.0.3" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.0.2" + text-table "^0.2.0" + +espree@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" + integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== + dependencies: + acorn "^6.0.2" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + +esprima@substack/esprima#is-keyword: + version "1.1.0-dev" + resolved "https://codeload.github.com/substack/esprima/tar.gz/0a7f8489a11b44b019ce168506f535f22d0be290" + +esquery@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + +etag@~1.8.1: + version "1.8.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://www.myget.org/F/dnn-software-public/npm/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exenv@^1.2.0: + version "1.2.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +falafel@~0.2.1: + version "0.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/falafel/-/falafel-0.2.1.tgz#9efc51ce19ec5729086b22ae889e5d7d0e256601" + dependencies: + esprima substack/esprima#is-keyword + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + dependencies: + websocket-driver ">=0.5.1" + +fetch-ie8@1.4.2: + version "1.4.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/fetch-ie8/-/fetch-ie8-1.4.2.tgz#6c02911a9265be12521d0464f98416fcddc0af2a" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-loader@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== + dependencies: + loader-utils "^1.0.2" + schema-utils "^1.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.11.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + dependencies: + debug "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^2.3.1: + version "2.5.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formidable@^1.2.0: + version "1.2.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +global@~4.3.0: + version "4.3.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^11.1.0, globals@^11.3.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + dependencies: + react-is "^16.7.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://www.myget.org/F/dnn-software-public/npm/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +humanize@0.0.9: + version "0.0.9" + resolved "https://www.myget.org/F/dnn-software-public/npm/humanize/-/humanize-0.0.9.tgz#1994ffaecdfe9c441ed2bdac7452b7bb4c9e41a4" + +hunspell-spellchecker@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hunspell-spellchecker/-/hunspell-spellchecker-1.0.2.tgz#a10b0bd2fa00a65ab62a4c6b734ce496d318910e" + integrity sha1-oQsL0voAplq2Kkxrc0zkltMYkQ4= + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://www.myget.org/F/dnn-software-public/npm/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://www.myget.org/F/dnn-software-public/npm/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://www.myget.org/F/dnn-software-public/npm/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + +import-local@2.0.0, import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + +inherits@2.0.1: + version "2.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +inherits@2.0.3: + version "2.0.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@^1.3.4, ini@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@^6.1.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +interact.js@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/interact.js/-/interact.js-1.2.8.tgz#b62bc004563b5c6f294b6b115b396205d843f60b" + integrity sha1-tivABFY7XG8pS2sRWzliBdhD9gs= + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.1.0, invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-resolvable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +js-yaml@^3.12.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + +json5@^1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.3.0.tgz#edd727794ea284d7fda575015ed1b0cde0289ab6" + integrity sha512-3HNoc7nZ1hpZIKB3hJ7BlFRkzCx2BynRtfSwbkqZdpRdvAPsGMnzclPwrvDBS7/lalHTj21NwIeaEpysHBOudg== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +less-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466" + integrity sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg== + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^4.0.1" + +less@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/less/-/less-3.9.0.tgz#b7511c43f37cf57dc87dffd9883ec121289b1474" + integrity sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w== + dependencies: + clone "^2.1.2" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.4.1" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.83.0" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +line-height@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.1.1.tgz#e86705fbf0a6f50607aed65500d69db2d9db37e2" + integrity sha1-6GcF+/Cm9QYHrtZVANadstnbN+I= + dependencies: + computed-style "~0.1.3" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash.camelcase@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + +lodash.debounce@^3.1.1: + version "3.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/lodash.debounce/-/lodash.debounce-3.1.1.tgz#812211c378a94cc29d5aa4e3346cf0bfce3a7df5" + dependencies: + lodash._getnative "^3.0.0" + +lodash.debounce@^4.0.4: + version "4.0.8" + resolved "https://www.myget.org/F/dnn-software-public/npm/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + +lodash.kebabcase@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.snakecase@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= + +lodash.upperfirst@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= + +lodash@^4.14.2, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0: + version "4.17.15" + resolved "https://www.myget.org/F/dnn-software-public/npm/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + +lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@^1.1.1, methods@~1.1.2: + version "1.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mime@^2.0.3, mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://www.myget.org/F/dnn-software-public/npm/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3: + version "0.5.5" + resolved "https://www.myget.org/F/dnn-software-public/npm/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + dependencies: + minimist "^1.2.5" + +moment@^2.22.2: + version "2.26.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a" + integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@2.1.1: + version "2.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + +ms@^2.1.1: + version "2.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.12.1: + version "2.14.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + +nanoid@^2.1.0: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://www.myget.org/F/dnn-software-public/npm/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.53: + version "1.1.57" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.57.tgz#f6754ce225fad0611e61228df3e09232e017ea19" + integrity sha512-ZQmnWS7adi61A9JsllJ2gdj2PauElcjnOwTp2O011iGzoakTxUsDGSe+6vD7wXbKdqhSFymC0OSx35aAMhrSdw== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-key@^0.2.1: + version "0.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/parse-key/-/parse-key-0.2.1.tgz#7bcf76595536e36075664be4d687e4bdd910208f" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://www.myget.org/F/dnn-software-public/npm/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +portfinder@^1.0.26: + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" + integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + postcss-value-parser "^3.3.1" + +postcss-modules-scope@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" + integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^7.0.6" + +postcss-selector-parser@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + +postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.31.tgz#332af45cb73e26c0ee2614d7c7fb02dfcc2bd6dd" + integrity sha512-a937VDHE1ftkjk+8/7nj/mrjtmkn69xxzJgRETXdAUU+IgOYPQNJF17haGWbeDxSyk++HA14UA98FurvPyBJOA== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prefix-style@2.0.1: + version "2.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +private@^0.1.8: + version "0.1.8" + resolved "https://www.myget.org/F/dnn-software-public/npm/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +process@~0.5.1: + version "0.5.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^7.1.1: + version "7.3.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types-extra@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4: + version "1.4.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + +qs@6.7.0: + version "6.7.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + +qs@^6.5.1: + version "6.9.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + +raf@^3.1.0: + version "3.4.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + dependencies: + performance-now "^2.1.0" + +rafl@~1.2.1: + version "1.2.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740" + dependencies: + global "~4.3.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + +raw-body@2.4.0: + version "2.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= + +raw-loader@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26" + integrity sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + +react-accessible-tooltip@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/react-accessible-tooltip/-/react-accessible-tooltip-2.0.3.tgz#d676f23fda74c1df5733834869d27722a2649331" + integrity sha512-T/QPT8qBrrco+E8KQUuhtQAv46/B3Xpf+adLkKA2bofE/9db2wSaqr6XOlxO/Rx59dqt2V844kxrmT7WA2Q9kw== + +react-base16-styling@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.5.3.tgz#3858f24e9c4dd8cbd3f702f3f74d581ca2917269" + integrity sha1-OFjyTpxN2MvT9wLz901YHKKRcmk= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-collapse@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-collapse/-/react-collapse-4.0.3.tgz#b96de959ed0092a43534630b599a4753dd76d543" + integrity sha512-OO4NhtEqFtz+1ma31J1B7+ezdRnzHCZiTGSSd/Pxoks9hxrZYhzFEddeYt05A/1477xTtdrwo7xEa2FLJyWGCQ== + dependencies: + prop-types "^15.5.8" + +react-component-managers@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-component-managers/-/react-component-managers-3.2.2.tgz#b02a965465a32118ffc967f59730618370432412" + integrity sha512-SqtB09hS1ir0koBNybvNbNAB3k/r7IbIGbXSxvkkTV0m50s+4oJ59KYsbPAQ/2DhE169Rc5V26d674EcGcDbGA== + dependencies: + prop-types "^15.6.1" + spy-on-component "^1.1.0" + +react-custom-scrollbars@^4.2.1: + version "4.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/react-custom-scrollbars/-/react-custom-scrollbars-4.2.1.tgz#830fd9502927e97e8a78c2086813899b2a8b66db" + dependencies: + dom-css "^2.0.0" + prop-types "^15.5.10" + raf "^3.1.0" + +react-day-picker@^7.1.10: + version "7.4.8" + resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-7.4.8.tgz#675625240d3fae1b41c0a9d5177c968c8517c1d4" + integrity sha512-pp0hnxFVoRuBQcRdR1Hofw4CQtOCGVmzCNrscyvS0Q8NEc+UiYLEDqE5dk37bf0leSnBW4lheIt0CKKhuKzDVw== + dependencies: + prop-types "^15.6.2" + +react-dock@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/react-dock/-/react-dock-0.2.4.tgz#e727dc7550b3b73116635dcb9c0e04d0b7afe17c" + integrity sha1-5yfcdVCztzEWY13LnA4E0Lev4Xw= + dependencies: + lodash.debounce "^3.1.1" + prop-types "^15.5.8" + +react-dom@^16.6.3: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-dropzone@6.2.4: + version "6.2.4" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-6.2.4.tgz#6a63f7eb5fdd0ed5d85b0c8c3b8ecc3d3bb661fe" + integrity sha512-fkG/Nxalhai12FdNw9RZ6dIr1SctmRXWekkSoOKAhNDAECwDg4HWKuvvZVkEAedGNeAgmkQRVoqNfT8uje1zfg== + dependencies: + attr-accept "^1.1.3" + prop-types "^15.6.2" + +react-height@^3.0.0, react-height@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/react-height/-/react-height-3.0.1.tgz#2252652fb59468254751224ef1e94a2bb6e90d20" + integrity sha512-tduavxh0UamJoK3MTguUxz7zu+hpuZ1m7JivfGKXUF1Wx8D5lURsDkrxzE5TfpzDOXEeqswH7n/P0wfKRUjYAQ== + dependencies: + prop-types "^15.5.8" + +react-hot-loader@4.8.5: + version "4.8.5" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.8.5.tgz#9fb383345f8f059ed160c084f985744047e374d9" + integrity sha512-9Stc+7C2p23O9iOB78t+fKNxSxNfgXJpwsiToRuZZe7rNFJ0IMCyesXF2ls70XIxAzgnU36FzfW9c9mXhTz2xQ== + dependencies: + fast-levenshtein "^2.0.6" + global "^4.3.0" + hoist-non-react-statics "^3.3.0" + loader-utils "^1.1.0" + lodash "^4.17.11" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.0.2" + source-map "^0.7.3" + +react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + +react-json-tree@^0.11.0: + version "0.11.2" + resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.11.2.tgz#af70199fcbc265699ade2aec492465c51608f95e" + integrity sha512-aYhUPj1y5jR3ZQ+G3N7aL8FbTyO03iLwnVvvEikLcNFqNTyabdljo9xDftZndUBFyyyL0aK3qGO9+8EilILHUw== + dependencies: + babel-runtime "^6.6.1" + prop-types "^15.5.8" + react-base16-styling "^0.5.1" + +react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-modal@^3.5.1: + version "3.11.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/react-modal/-/react-modal-3.11.2.tgz#bad911976d4add31aa30dba8a41d11e21c4ac8a4" + dependencies: + exenv "^1.2.0" + prop-types "^15.5.10" + react-lifecycles-compat "^3.0.0" + warning "^4.0.3" + +react-motion@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" + integrity sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ== + dependencies: + performance-now "^0.2.0" + prop-types "^15.5.8" + raf "^3.1.0" + +react-pure-render@^1.0.2: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" + +react-redux@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" + integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q== + dependencies: + "@babel/runtime" "^7.1.2" + hoist-non-react-statics "^3.3.0" + invariant "^2.2.4" + loose-envify "^1.1.0" + prop-types "^15.6.1" + react-is "^16.6.0" + react-lifecycles-compat "^3.0.0" + +react-scrollbar@^0.5.4: + version "0.5.6" + resolved "https://registry.yarnpkg.com/react-scrollbar/-/react-scrollbar-0.5.6.tgz#bd57b45714f8d70e56813fe299d7fb3a2e42a27b" + integrity sha512-TsSLsuovOlxmfTxY9bRjRUfQjycvfs73L4gz7yE+2D8Qs7U3zhwbGS0lj0JScCDipcyn7EX66LsaI00cU3aRSQ== + dependencies: + config "^1.24.0" + line-height "^0.1.1" + react-motion "^0.5.2" + +react-slider@0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-0.11.2.tgz#ae014e1454c3cdd5f28b5c2495b2a08abd9971e6" + integrity sha512-y49ZwJJ7OcPdihgt71xYI8GRdAzpFuSLQR8b+cKotutxqf8MAEPEtqvWKlg+3ZQRe5PMN6oWbIb7wEYDF8XhNQ== + +react-tabs@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-2.3.0.tgz#0c37e786f288d369824acd06a96bd1818ab8b0dc" + integrity sha512-pYaefgVy76/36AMEP+B8YuVVzDHa3C5UFZ3REU78zolk0qMxEhKvUFofvDCXyLZwf0RZjxIfiwok1BEb18nHyA== + dependencies: + classnames "^2.2.0" + prop-types "^15.5.0" + +react-test-utils@0.0.1: + version "0.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/react-test-utils/-/react-test-utils-0.0.1.tgz#cd69a37c3e4d726e3497e325462a32785a19c026" + dependencies: + envify "~0.2.0" + react "~0.8.0" + +react-tooltip@^3.8.4: + version "3.11.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/react-tooltip/-/react-tooltip-3.11.6.tgz#4f9735a2a4aa50580af351ce23e74a56f41afc0c" + dependencies: + prop-types "^15.6.0" + +react-tooltip@^4.2.6: + version "4.2.6" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.6.tgz#a3d5f0d1b0c597c0852ba09c5e2af0019b7cfc70" + integrity sha512-KX/zCsPFCI8RuulzBX86U+Ur7FvgGNRBdb7dUu0ndo8Urinn48nANq9wfq4ABlehweQjPzLl7XdNAtLKza+I3w== + dependencies: + prop-types "^15.7.2" + uuid "^7.0.3" + +react-transition-group@^1.2.0: + version "1.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" + dependencies: + chain-function "^1.0.0" + dom-helpers "^3.2.0" + loose-envify "^1.3.1" + prop-types "^15.5.6" + warning "^3.0.0" + +react-transition-group@^2.4.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" + integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== + dependencies: + dom-helpers "^3.4.0" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" + +react-widgets@^4.4.4: + version "4.5.0" + resolved "https://registry.yarnpkg.com/react-widgets/-/react-widgets-4.5.0.tgz#dbbb913b05ecd8de1b47af7aad00750be4ff88f1" + integrity sha512-e/Y9kyLL0xqMQ3vIf3CwLxhGYkqfMGJn98xZ+U98pwZ6JTAY2KSaVA1clx6iE+6/zBdEe8cNOEiTwjZrx5FE/w== + dependencies: + classnames "^2.2.6" + date-arithmetic "^3.1.0" + dom-helpers "^3.3.1" + invariant "^2.2.4" + prop-types-extra "^1.0.1" + react-component-managers "^3.1.0" + react-lifecycles-compat "^3.0.4" + react-transition-group "^2.4.0" + uncontrollable "^5.0.0" + warning "^3.0.0" + +react@^16.6.3: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +react@~0.8.0: + version "0.8.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/react/-/react-0.8.0.tgz#9aef0dbc3e05b44d96139cdbdaa5d727b0506e1e" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://www.myget.org/F/dnn-software-public/npm/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +redux-devtools-dock-monitor@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/redux-devtools-dock-monitor/-/redux-devtools-dock-monitor-1.1.3.tgz#1205e823c82536570aac8551a1c4b70972cba6aa" + integrity sha512-yAXzoI0lpjv19CxVuw8RECeFWUVdyzayqnkX8ePZyeXV2ZgIk4T+rKx82Wk+REP1y3rl8o1/oFDq4B7EobOqMg== + dependencies: + babel-runtime "^6.2.0" + parse-key "^0.2.1" + prop-types "^15.5.8" + react-dock "^0.2.4" + react-pure-render "^1.0.2" + +redux-devtools-instrument@^1.9.0: + version "1.9.6" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.9.6.tgz#6b412595f74b9d48cfd4ecc13e585b1588ed6e7e" + integrity sha512-MwvY4cLEB2tIfWWBzrUR02UM9qRG2i7daNzywRvabOSVdvAY7s9BxSwMmVRH1Y/7QWjplNtOwgT0apKhHg2Qew== + dependencies: + lodash "^4.2.0" + symbol-observable "^1.0.2" + +redux-devtools-log-monitor@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.4.0.tgz#716b9580eda2a331cd359a36aa09e3a1602a854b" + integrity sha1-cWuVgO2iozHNNZo2qgnjoWAqhUs= + dependencies: + lodash.debounce "^4.0.4" + prop-types "^15.0.0" + react-json-tree "^0.11.0" + react-pure-render "^1.0.2" + redux-devtools-themes "^1.0.0" + +redux-devtools-themes@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/redux-devtools-themes/-/redux-devtools-themes-1.0.0.tgz#c482dce3c5373976045f40134907d9dcb3ae3d5d" + dependencies: + base16 "^1.0.0" + +redux-devtools@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.5.0.tgz#d69ab76d4f0f8abdf6d24bcf5954d7a1aa2b6827" + integrity sha512-pGU8TZNvWxPaCCE432AGm6H6alQbAz80gQM5CzM3SjX9/oSNu/HPF17xFdPQJOXasqyih1Gv167kZDTRe7r0iQ== + dependencies: + lodash "^4.2.0" + prop-types "^15.5.7" + redux-devtools-instrument "^1.9.0" + +redux-immutable-state-invariant@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/redux-immutable-state-invariant/-/redux-immutable-state-invariant-2.1.0.tgz#308fd3cc7415a0e7f11f51ec997b6379c7055ce1" + integrity sha512-3czbDKs35FwiBRsx/3KabUk5zSOoTXC+cgVofGkpBNv3jQcqIe5JrHcF5AmVt7B/4hyJ8MijBIpCJ8cife6yJg== + dependencies: + invariant "^2.1.0" + json-stringify-safe "^5.0.1" + +redux-thunk@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" + integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== + +redux-undo@^1.0.0-beta9: + version "1.0.1" + resolved "https://registry.yarnpkg.com/redux-undo/-/redux-undo-1.0.1.tgz#8d989d6c326e6718f4471042e90a5b8b6f3317eb" + integrity sha512-0yFPT+FUgwxCEiS0Mg5T1S4tkgjR8h6sJRY9CW4EMsbJOf1SxO289TbJmlzhRouCHacdDF+powPjrjLHoJYxWQ== + +redux@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://www.myget.org/F/dnn-software-public/npm/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + dependencies: + "@babel/runtime" "^7.8.4" + private "^0.1.8" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +request@^2.83.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://www.myget.org/F/dnn-software-public/npm/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.4.0: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-buffer@>=5.1.0: + version "5.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +scroll@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.3.tgz#0951b785544205fd17753bc3d294738ba16fc2ab" + integrity sha512-3ncZzf8gUW739h3LeS68nSssO60O+GGjT3SxzgofQmT8PIoyHzebql9HHPJopZX8iT6TKOdwaWFMqL6LzUN3DQ== + dependencies: + rafl "~1.2.1" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://www.myget.org/F/dnn-software-public/npm/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallowequal@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shortid@^2.2.13: + version "2.2.15" + resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.15.tgz#2b902eaa93a69b11120373cd42a1f1fe4437c122" + integrity sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw== + dependencies: + nanoid "^2.1.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://www.myget.org/F/dnn-software-public/npm/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +spy-on-component@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/spy-on-component/-/spy-on-component-1.1.3.tgz#7052dac3f82e7ac8627933088ba0106ec47603d5" + integrity sha512-a7jgnoBSdkcDWIQQwtEgUq4etajwG6+wGIjfC9ARUKwKOdHxJd+utgHTgLn81ETizpsw4xddUS3W8VePedtaIQ== + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + +superagent@^3.2.1: + version "3.8.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supports-color@6.1.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + dependencies: + has-flag "^3.0.0" + +symbol-observable@^1.0.2, symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +table@^5.0.2: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" + integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throttle-debounce@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" + integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6, through@~2.3.4: + version "2.3.8" + resolved "https://www.myget.org/F/dnn-software-public/npm/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-camel-case@1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/to-camel-case/-/to-camel-case-1.0.0.tgz#1a56054b2f9d696298ce66a60897322b6f423e46" + dependencies: + to-space-case "^1.0.0" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-no-case@^1.0.0: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-space-case@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/to-space-case/-/to-space-case-1.0.0.tgz#b052daafb1b2b29dc770cea0163e5ec0ebc9fc17" + dependencies: + to-no-case "^1.0.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://www.myget.org/F/dnn-software-public/npm/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://www.myget.org/F/dnn-software-public/npm/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uncontrollable@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-5.1.0.tgz#7e9a1c50ea24e3c78b625e52d21ff3f758c7bd59" + integrity sha512-5FXYaFANKaafg4IVZXUNtGyzsnYEvqlr9wQ3WpZxFpEUxl29A3H6Q4G1Dnnorvq9TGOGATBApWR4YpLAh+F5hw== + dependencies: + invariant "^2.2.4" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://www.myget.org/F/dnn-software-public/npm/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-loader@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" + integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://www.myget.org/F/dnn-software-public/npm/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3: + version "0.10.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +warning@^3.0.0: + version "3.0.0" + resolved "https://www.myget.org/F/dnn-software-public/npm/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + dependencies: + loose-envify "^1.0.0" + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-bundle-size-analyzer@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-size-analyzer/-/webpack-bundle-size-analyzer-3.1.0.tgz#ff4a4a17d34b8858b56eecb87826365395264669" + integrity sha512-8WlTT6uuCxZgZYNnCB0pRGukWRGH+Owg+HsqQUe1Zexakdno1eDYO+lE7ihBo9G0aCCZCJa8JWjYr9eLYfZrBA== + dependencies: + commander "^2.19.0" + filesize "^3.6.1" + humanize "0.0.9" + +webpack-cli@3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@4.43.0: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.1" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://www.myget.org/F/dnn-software-public/npm/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://www.myget.org/F/dnn-software-public/npm/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://www.myget.org/F/dnn-software-public/npm/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^13.1.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.dnn b/DNN Platform/Modules/ResourceManager/ResourceManager.dnn new file mode 100644 index 00000000000..9844e936b98 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.dnn @@ -0,0 +1,100 @@ + + + + Resource Manager + This module allows you to manage files on the server + ~/Images/icon_filemanager_32px.gif + + DNN + .NET Foundation + https://dnncommunity.org + info@dnncommunity.org + + + + + 09.02.00 + + + + + DesktopModules\ResourceManager + + + + + + + + DesktopModules/ResourceManager + + Resources.zip + + + + + + ResourceManager + ResourceManager + + + + ResourceManager + 0 + + + + DesktopModules/ResourceManager/View.ascx + False + + View + + + 0 + + + Settings + DesktopModules/ResourceManager/Settings.ascx + False + ResourceManager Settings + Edit + + + 0 + + + EditFolderMapping + DesktopModules/ResourceManager/EditFolderMapping.ascx + True + Edit Folder Mapping + Edit + + + 0 + True + + + + + + + + + + Dnn.Modules.ResourceManager.dll + bin + + + + + + + diff --git a/DNN Platform/Modules/ResourceManager/Scripts/dnn.Localization.js b/DNN Platform/Modules/ResourceManager/Scripts/dnn.Localization.js new file mode 100644 index 00000000000..a54e9227ac7 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Scripts/dnn.Localization.js @@ -0,0 +1,362 @@ +/* + * DotNetNuke® - http://www.dotnetnuke.com + * Copyright (c) 2002-2020 + * by DotNetNuke Corporation + * All Rights Reserved + */ + +/*** + * @class Localization + * + * Check if window storage is avaible, get resources settings, check resources timestamp, return sotred resources + * or request for new resources, store it if can and return resources + * + * @depends dnn.jquery.js + * + * @param {object} options: { + * {string} service + * {string} controller + * {string} resxName, name for store data, normally MyResourcesResx + * + * {object} resourceSettings: { + * {object} local, if defined, the remote request is not needed and the values for culture an timestamp are set here. + * { + * {string} culture, if defined, contains the current culture, so the + * {string} resxTimeStamp, if defined, contains the current culture + * }, + * {string} method, method name to obtain resource settings + * {string} methodType (get), get or post + * {object} data (null), add parameters to request (get or post) + * {string} paramNames: { name of parameters returned by the server + * {string} culture (culture), name for culture parameter + * {string} resxTimeStamp (resxTimeStamp), name for timestamp parameter + * }, + * {function} callback200(data) (null), callback to call after resource settings request for status 200, + data will return an object {culture: 'culture', resxTimeStamp: number} + * {function} callbackError (null), callback to call after resource settigs request for status not 200 + * }, + * + * {object} resources: { + * {string} method: method name to obtain resources + * {string} methodType (get), get or post + * {object} data (null), add parameters to request (get or post) + * {string} paramName (localization), name of parameter for returned data (if null, then resx are directly in the response). + * {function} callback200(data) (null), callback to call after resource request or storage load for status 200, + * normally you want use this callback to assign your resources, + data will return an object {localization: {resource_name: 'resource value'}} + * {function} callbackError (null), callback to call after resource request or storage load for status not 200 + * } + * } + * + */ + +// Namespace +window.dnn = window.dnn || {}; +window.dnn.utils = window.dnn.utils || {}; + +if (typeof window.dnn.utils.Localization === "undefined") { + (function IIFE() { + var LocalizationClass; + + LocalizationClass = (function IIFE() { + 'use strict'; + + //var this.options, this.resourceSettings; + + var detectStorage, + getStoredData, + setStoredData, + compareTimeStamp, + getServiceUrl, + getResourcesSettings, + getResourcesSettings200, + getResources, + getResources200, + updateCulture, + copyOtherSettings; + + /* Class properties */ + Localization["class"] = 'Localization'; + Localization.type = 'Class'; + Localization.storageAllowed = false; + + /* Private Constants and Properties */ + //this.options = {}; + + /* Constructor */ + function Localization(options) { + //console.log('~Localization'); + this.options = {}; + + // Defaults + if (!options.service || typeof options.service !== 'string') throw 'No service provided'; + this.options.service = options.service; + + if (!options.controller || typeof options.controller !== 'string') throw 'No controller provided'; + this.options.controller = options.controller; + + if (!options.resxName) throw 'No resxName provided'; + this.options.resxName = options.resxName; + + this.options.culture = options.culture || ''; + + this.options.key = this.options.resxName + this.options.culture; + this.options.keyTS = this.options.resxName + 'TimeStamp' + this.options.culture; + + this.options.key = this.options.resxName; + this.options.keyTS = this.options.resxName + 'TimeStamp' + this.options.culture; + + if (this.options.culture !== '') { + this.options.key += '.' + this.options.culture; + this.options.keyTS += '.' + this.options.culture; + } + + // Resource Settings + if (!options.resourceSettings || typeof options.resourceSettings !== 'object') + throw 'No resourceSettings provided'; + this.options.resourceSettings = options.resourceSettings; + + if (this.options.resourceSettings.local) { + if (!this.options.resourceSettings.local.culture || + !this.options.resourceSettings.local.resxTimeStamp) { + throw 'No local resourceSettings provided'; + } + options.resourceSettings.paramNames = options.resourceSettings.paramNames || {}; + } else { + if (!options.resourceSettings.method || typeof options.resourceSettings.method !== 'string') + throw 'No method for get resource settings provided'; + this.options.resourceSettings.method = options.resourceSettings.method; + + this.options.resourceSettings.methodType = options.resourceSettings.methodType || 'get'; + + if (!options.resourceSettings.paramNames || + typeof options.resourceSettings.paramNames !== 'object') { + options.resourceSettings.paramNames = {}; + } + + this.options.resourceSettings.params = this.options.resourceSettings.params || {}; + this.options.resourceSettings.callback200 = options.resourceSettings.callback200 || null; + this.options.resourceSettings.callbackError = options.resourceSettings.callbackError || null; + } + options.resourceSettings.paramNames.culture = options.resourceSettings.paramNames.culture || 'culture'; + options.resourceSettings.paramNames.resxTimeStamp = + options.resourceSettings.paramNames.resxTimeStamp || 'resxTimeStamp'; + this.options.resourceSettings.paramName = options.resourceSettings.paramNames; + + // Resources + if (!options.resources || typeof options.resources !== 'object') throw 'No resources provided'; + this.options.resources = options.resources; + + if (!options.resources.method || typeof options.resources.method !== 'string') + throw 'No method for get resource settings provided'; + this.options.resources.method = options.resources.method; + + this.options.resources.methodType = options.resources.methodType || 'get'; + + this.options.resources.params = this.options.resources.params || {}; + this.options.resources.callback200 = options.resources.callback200 || null; + this.options.resources.callbackError = options.resources.callbackError || null; + + detectStorage.call(this); + if (this.options.resourceSettings.local) { + getResourcesSettings200.call(this, this.options.resourceSettings.local); + } else { + getResourcesSettings.call(this); + } + } + + /* Private Methods */ + detectStorage = function() { + var fail, uid; + try { + uid = new Date(); + (Localization.storageAllowed = window.localStorage).setItem(uid, uid); + fail = Localization.storageAllowed.getItem(uid) !== uid + ''; + Localization.storageAllowed.removeItem(uid); + Localization.storageAllowed = fail ? false : true; + } catch (ex) { + Localization.storageAllowed = false; + } + }; + + getStoredData = function() { + + var stored; + if (!Localization.storageAllowed) return false; + + try { + stored = JSON.parse(window.localStorage.getItem(this.options.key)); + } catch (err) { + stored = {}; + window.localStorage.removeItem(this.options.key); + } + return { + storedTS: window.localStorage.getItem(this.options.keyTS), + stored: stored + }; + }; + + setStoredData = function(stored, storedTS) { + if (!Localization.storageAllowed) return false; + + try { + window.localStorage.setItem(this.options.key, JSON.stringify(stored)); + window.localStorage.setItem(this.options.keyTS, storedTS); + } catch (ex) { + if (ex.name === "QuotaExceededError") { + console.log("Local Storage might be full."); + } + console.log(ex); + if (window.localStorage[this.options.key]) { + window.localStorage.removeItem(this.options.key); + } + if (window.localStorage[this.options.keyTS]) { + window.localStorage.removeItem(this.options.keyTS); + } + return false; + } + }; + + compareTimeStamp = function(storedTS) { + if (!Localization.storageAllowed) return false; + return getStoredData.call(this).storedTS + '' === storedTS + ''; + }; + + getServiceUrl = function(method) { + return $.dnnSF().getServiceRoot(this.options.service) + this.options.controller + '/' + method; + }; + + getResourcesSettings = function() { + var self = this; + $.ajax({ + url: getServiceUrl.call(self, this.options.resourceSettings.method), + type: this.options.resourceSettings.methodType, + data: this.options.resourceSettings.data, + beforeSend: $.dnnSF().setModuleHeaders, + complete: null, // Study this case + success: function(data) { + getResourcesSettings200.call(self, data); + }, + error: this.options.resourceSettings.callbackError + }); + }; + + copyOtherSettings = function(settings, otherSettings) { + return $.extend(settings, otherSettings); + }; + + getResourcesSettings200 = function(data) { + + this.resourceSettings = { + culture: null, + resxTimeStamp: null + }; + + // Not browser storage allowed and no callback for this request + if (!Localization.storageAllowed && typeof this.options.resourceSettings.callback200 !== 'function') { + this.resourceSettings.culture = data[this.options.resourceSettings.paramNames.culture]; + updateCulture.call(this, this.resourceSettings.culture); + getResources.call(this); + return; + } + + if (!data[this.options.resourceSettings.paramNames.culture]) { + throw 'No culture from server'; + } + if (!data[this.options.resourceSettings.paramNames.resxTimeStamp]) { + throw 'No resxTimeStamp from server'; + } + + this.resourceSettings.culture = data[this.options.resourceSettings.paramNames.culture]; + updateCulture.call(this, this.resourceSettings.culture); + this.resourceSettings.resxTimeStamp = data[this.options.resourceSettings.paramNames.resxTimeStamp]; + + this.resourceSettings = copyOtherSettings(this.resourceSettings, data); + + if (typeof this.options.resourceSettings.callback200 === 'function') { + this.options.resourceSettings.callback200(this.resourceSettings); + + // Not browser storage allowed but callback for this request: callback and getResources + if (!Localization.storageAllowed) { + getResources.call(this); + return; + } + } + + // Return data from local or get new + if (this.resourceSettings.culture && this.resourceSettings.resxTimeStamp) { + if (compareTimeStamp.call(this, this.resourceSettings.resxTimeStamp)) { + if (typeof this.options.resources.callback200 === 'function') + this.options.resources.callback200({ localization: getStoredData.call(this).stored }); + } else { + getResources.call(this); + } + } else { + getResources.call(this); + } + + if (typeof this.options.resourceSettings.callback200 === 'function') { + this.options.resourceSettings.callback200(this.resourceSettings); + } + }; + + getResources = function() { + var self = this; + this.options.resources.data = this.options.resources.data || {}; + this.options.resources.data.culture = this.resourceSettings.culture; + + $.ajax({ + url: getServiceUrl.call(self, this.options.resources.method), + type: this.options.resources.methodType, + data: this.options.resources.data, + beforeSend: $.dnnSF().setModuleHeaders, + complete: null, // Study this case + success: function(data) { + getResources200.call(self, data); + }, + error: this.options.resources.callbackError + }); + }; + + // If called, need store data + getResources200 = function(data) { + var resData; + resData = { localization: null }; + + if (this.options.resources.paramName) { + if (!data[this.options.resources.paramName]) { + throw 'No localization from server'; + } else { + resData.localization = data[this.options.resources.paramName]; + } + } else if (!data) { + throw 'No localization from server'; + } else { + resData.localization = data; + } + + if (resData.localization && this.resourceSettings.resxTimeStamp) + setStoredData.call(this, resData.localization, this.resourceSettings.resxTimeStamp); + + if (typeof this.options.resources.callback200 === 'function') + this.options.resources.callback200(resData); + }; + + updateCulture = function(culture) { + if (culture != this.options.culture) { + this.options.culture = this.resourceSettings.culture; + } + this.options.key = this.options.resxName + '.' + this.options.culture; + this.options.keyTS = this.options.resxName + 'TimeStamp.' + this.options.culture; + }; + + /* test-code */ + /* end-test-code */ + + return Localization; + })(); + + window.dnn.utils.Localization = LocalizationClass; + + }).call(this); +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Attributes/ResourceManagerExceptionFilter.cs b/DNN Platform/Modules/ResourceManager/Services/Attributes/ResourceManagerExceptionFilter.cs new file mode 100644 index 00000000000..ebb9859df77 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Attributes/ResourceManagerExceptionFilter.cs @@ -0,0 +1,46 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Attributes +{ + using System.Net; + using System.Net.Http; + using System.Web.Http.Filters; + + using Dnn.Modules.ResourceManager.Exceptions; + + /// + /// A custom for the resource manager. + /// + public class ResourceManagerExceptionFilter : ExceptionFilterAttribute + { + /// + public override void OnException(HttpActionExecutedContext actionExecutedContext) + { + if (actionExecutedContext.Exception == null) + { + return; + } + + var exception = actionExecutedContext.Exception; + + if (exception is FolderPermissionNotMetException) + { + actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse( + HttpStatusCode.Forbidden, + new { message = exception.Message }); + return; + } + + if (exception is NotFoundException) + { + actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse( + HttpStatusCode.NotFound, + new { message = exception.Message }); + return; + } + + throw exception; + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/CreateNewFolderRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/CreateNewFolderRequest.cs new file mode 100644 index 00000000000..988bb1026aa --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/CreateNewFolderRequest.cs @@ -0,0 +1,31 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + /// + /// Represents a request to create a new folder. + /// + public class CreateNewFolderRequest + { + /// + /// Gets or sets the new folder name. + /// + public string FolderName { get; set; } + + /// + /// Gets or sets he parent folder id for the new folder. + /// + public int ParentFolderId { get; set; } + + /// + /// Gets or sets the folder mapping id. + /// + public int FolderMappingId { get; set; } + + /// + /// Gets or sets the mapped name. + /// + public string MappedName { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/DeleteFileRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/DeleteFileRequest.cs new file mode 100644 index 00000000000..619913407f1 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/DeleteFileRequest.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + /// + /// Represents a request to delete a file. + /// + public class DeleteFileRequest + { + /// + /// Gets or sets the id of the file to delete. + /// + public int FileId { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/DeleteFolderRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/DeleteFolderRequest.cs new file mode 100644 index 00000000000..f8ae9d79688 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/DeleteFolderRequest.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + /// + /// Represents a request to delete a folder. + /// + public class DeleteFolderRequest + { + /// + /// Gets or sets the id of the folder to delete. + /// + public int FolderId { get; set; } + + /// + /// Gets or sets a value indicating whether an unlink is allowed. + /// + public bool UnlinkAllowedStatus { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/FileDetailsRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/FileDetailsRequest.cs new file mode 100644 index 00000000000..cc1b9fccfff --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/FileDetailsRequest.cs @@ -0,0 +1,37 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + using System.Runtime.Serialization; + + /// + /// Represents a request to get file details. + /// + public class FileDetailsRequest + { + /// + /// Gets or sets the id of the file. + /// + [DataMember(Name = "fileId")] + public int FileId { get; set; } + + /// + /// Gets or sets the file name. + /// + [DataMember(Name = "fileName")] + public string FileName { get; set; } + + /// + /// Gets or sets the file title. + /// + [DataMember(Name = "title")] + public string Title { get; set; } + + /// + /// Gets or sets the description of the file. + /// + [DataMember(Name = "description")] + public string Description { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderDetailsRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderDetailsRequest.cs new file mode 100644 index 00000000000..9798af3e3a9 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderDetailsRequest.cs @@ -0,0 +1,31 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + using System.Runtime.Serialization; + + /// + /// Represents a request for folder details. + /// + public class FolderDetailsRequest + { + /// + /// Gets or sets the id of the folder. + /// + [DataMember(Name = "folderId")] + public int FolderId { get; set; } + + /// + /// Gets or sets the name of the folder. + /// + [DataMember(Name = "folderName")] + public string FolderName { get; set; } + + /// + /// Gets or sets the . + /// + [DataMember(Name = "permissions")] + public FolderPermissions Permissions { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs new file mode 100644 index 00000000000..518730fb04b --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs @@ -0,0 +1,88 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + using System.Linq; + + using Dnn.Modules.ResourceManager.Components; + + using DotNetNuke.Common.Utilities; + using DotNetNuke.Entities.Portals; + using DotNetNuke.Security.Permissions; + + /// + /// Provides information about folder permissions. + /// + public class FolderPermissions : Permissions + { + /// + /// Initializes a new instance of the class. + /// + public FolderPermissions() + : base(false) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// A vlaue indicating whether the permissions definitions need to be loaded. + public FolderPermissions(bool needDefinitions) + : base(needDefinitions) + { + foreach (var role in PermissionProvider.Instance().ImplicitRolesForFolders(PortalSettings.Current.PortalId)) + { + this.EnsureRole(role, true, true); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// A value indicating whether the permission definitions need to be loaded. + /// A colleciton of folder permissions. + public FolderPermissions(bool needDefinitions, FolderPermissionCollection permissions) + : base(needDefinitions) + { + foreach (var role in PermissionProvider.Instance().ImplicitRolesForFolders(PortalSettings.Current.PortalId)) + { + this.EnsureRole(role, true, true); + } + + foreach (FolderPermissionInfo permission in permissions) + { + if (permission.UserID != Null.NullInteger) + { + this.AddUserPermission(permission); + } + else + { + this.AddRolePermission(permission); + } + + this.RolePermissions = + this.RolePermissions.OrderByDescending(p => p.Locked) + .ThenByDescending(p => p.IsDefault) + .ThenBy(p => p.RoleName) + .ToList(); + this.UserPermissions = this.UserPermissions.OrderBy(p => p.DisplayName).ToList(); + } + } + + /// + protected override void LoadPermissionDefinitions() + { + foreach (PermissionInfo permission in PermissionController.GetPermissionsByFolder()) + { + this.PermissionDefinitions.Add(new Permission + { + PermissionId = permission.PermissionID, + PermissionName = permission.PermissionName, + FullControl = PermissionHelper.IsFullControl(permission), + View = PermissionHelper.IsViewPermission(permission), + }); + } + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/MoveFileRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/MoveFileRequest.cs new file mode 100644 index 00000000000..5dbc8188617 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/MoveFileRequest.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + /// + /// Represents a request to move a file into a folder. + /// + public class MoveFileRequest + { + /// + /// Gets or sets the id of the file to move. + /// + public int SourceFileId { get; set; } + + /// + /// Gets or sets the id of the folder to move the file into. + /// + public int DestinationFolderId { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/MoveFolderRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/MoveFolderRequest.cs new file mode 100644 index 00000000000..1f45a1c1a96 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/MoveFolderRequest.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + /// + /// Represents a request to move a folder to another folder. + /// + public class MoveFolderRequest + { + /// + /// Gets or sets the id of the folder to move. + /// + public int SourceFolderId { get; set; } + + /// + /// Gets or sets the id of the folder into which to move the source folder. + /// + public int DestinationFolderId { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/Permission.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/Permission.cs new file mode 100644 index 00000000000..007e65cadbb --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/Permission.cs @@ -0,0 +1,56 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + using System.Runtime.Serialization; + + /// + /// Defines one specific permission. + /// + [DataContract] + public class Permission + { + /// + /// Gets or sets the id of the permission. + /// + [DataMember(Name = "permissionId")] + public int PermissionId { get; set; } + + /// + /// Gets or sets the permission name. + /// + [DataMember(Name = "permissionName")] + public string PermissionName { get; set; } + + /// + /// Gets or sets the permission key. + /// + [DataMember(Name = "permissionKey")] + public string PermissionKey { get; set; } + + /// + /// Gets or sets the permission code. + /// + [DataMember(Name = "permissionCode")] + public string PermissionCode { get; set; } + + /// + /// Gets or sets a value indicating whether the target of the permission has full control over the resource. + /// + [DataMember(Name = "fullControl")] + public bool FullControl { get; set; } + + /// + /// Gets or sets a value indicating whether the target of the permission can view the resource. + /// + [DataMember(Name = "view")] + public bool View { get; set; } + + /// + /// Gets or sets a value indicating whether the target of the permission has access to the resource. + /// + [DataMember(Name = "allowAccess")] + public bool AllowAccess { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs new file mode 100644 index 00000000000..f1c9e578b87 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs @@ -0,0 +1,65 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + using System.Collections.Generic; + using System.Runtime.Serialization; + + using Dnn.Modules.ResourceManager.Components; + + /// + /// Represents a permissions set. + /// + [DataContract] + public abstract class Permissions + { + /// + /// Initializes a new instance of the class. + /// + protected Permissions() + : this(false) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// A value indicating whether the permissions need to be loaded. + protected Permissions(bool needDefinitions) + { + this.RolePermissions = new List(); + this.UserPermissions = new List(); + + if (needDefinitions) + { + this.PermissionDefinitions = new List(); + this.LoadPermissionDefinitions(); + this.EnsureDefaultRoles(); + } + } + + /// + /// Gets or sets the list of permissions definitions. + /// + [DataMember(Name = "permissionDefinitions")] + public IList PermissionDefinitions { get; set; } + + /// + /// Gets or sets a list of role based permissions. + /// + [DataMember(Name = "rolePermissions")] + public IList RolePermissions { get; set; } + + /// + /// Gets or sets a list of user based permissions. + /// + [DataMember(Name = "userPermissions")] + public IList UserPermissions { get; set; } + + /// + /// Loads the permissions definitions. + /// + protected abstract void LoadPermissionDefinitions(); + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/RolePermission.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/RolePermission.cs new file mode 100644 index 00000000000..2553aa5c40b --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/RolePermission.cs @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + using System.Collections.Generic; + using System.Runtime.Serialization; + + /// + /// Represents a role based permission. + /// + [DataContract] + public class RolePermission + { + /// + /// Initializes a new instance of the class. + /// + public RolePermission() + { + this.Permissions = new List(); + } + + /// + /// Gets or sets the id of the role. + /// + [DataMember(Name = "roleId")] + public int RoleId { get; set; } + + /// + /// Gets or sets the name of the role. + /// + [DataMember(Name = "roleName")] + public string RoleName { get; set; } + + /// + /// Gets or sets the list of permissions. + /// + [DataMember(Name = "permissions")] + public IList Permissions { get; set; } + + /// + /// Gets or sets a value indicating whether this permission is locked. + /// + [DataMember(Name = "locked")] + public bool Locked { get; set; } + + /// + /// Gets or sets a value indicating whether this is a default permission. + /// + [DataMember(Name = "default")] + public bool IsDefault { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/ThumbnailDownloadRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/ThumbnailDownloadRequest.cs new file mode 100644 index 00000000000..a8a84c3c8cd --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/ThumbnailDownloadRequest.cs @@ -0,0 +1,31 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + /// + /// Represents a request to download a thumbnail. + /// + public class ThumbnailDownloadRequest + { + /// + /// Gets or sets the id of the file. + /// + public int FileId { get; set; } + + /// + /// Gets or sets the width of the thumbnail. + /// + public int Width { get; set; } + + /// + /// Gets or sets the height of the thumbnail. + /// + public int Height { get; set; } + + /// + /// Gets or sets an optional version number. + /// + public int? Version { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/UserPermission.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/UserPermission.cs new file mode 100644 index 00000000000..93aa206f038 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/UserPermission.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services.Dto +{ + using System.Collections.Generic; + using System.Runtime.Serialization; + + /// + /// Represents a permission for a user. + /// + [DataContract] + public class UserPermission + { + /// + /// Initializes a new instance of the class. + /// + public UserPermission() + { + this.Permissions = new List(); + } + + /// + /// Gets or sets the id of the user. + /// + [DataMember(Name = "userId")] + public int UserId { get; set; } + + /// + /// Gets or sets the user display name. + /// + [DataMember(Name = "displayName")] + public string DisplayName { get; set; } + + /// + /// Gets or sets the list of permissions for the user. + /// + [DataMember(Name = "permissions")] + public IList Permissions { get; set; } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs new file mode 100644 index 00000000000..24696025b4c --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs @@ -0,0 +1,572 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services +{ + using System; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Net.Http.Headers; + using System.Web; + using System.Web.Http; + + using Dnn.Modules.ResourceManager.Components; + using Dnn.Modules.ResourceManager.Helpers; + using Dnn.Modules.ResourceManager.Services.Attributes; + using Dnn.Modules.ResourceManager.Services.Dto; + + using DotNetNuke.Common; + using DotNetNuke.Common.Utilities; + using DotNetNuke.Entities.Icons; + using DotNetNuke.Security; + using DotNetNuke.Security.Permissions; + using DotNetNuke.Services.Assets; + using DotNetNuke.Services.FileSystem; + using DotNetNuke.UI.Modules; + using DotNetNuke.Web.Api; + + using CreateNewFolderRequest = Dnn.Modules.ResourceManager.Services.Dto.CreateNewFolderRequest; + + /// + /// Expose any services via this class. You can keep services in separate classes or all together in one service class. + /// + [ResourceManagerExceptionFilter] + [DnnExceptionFilter] + [SupportedModules("ResourceManager")] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] + public class ItemsController : DnnApiController + { + private readonly IFolderMappingController folderMappingController = FolderMappingController.Instance; + private readonly IModuleControlPipeline modulePipeline; + + /// + /// Initializes a new instance of the class. + /// + /// + /// An instance of an used to hook into the + /// EditUrl of the webforms folders provider settings UI. + /// + public ItemsController(IModuleControlPipeline modulePipeline) + { + this.modulePipeline = modulePipeline; + } + + /// + /// Gets the content for a specific folder. + /// + /// The id of the folder. + /// The page number to get. + /// How many items to get per page. + /// How to sort the list. + /// + /// An object containing the folder information, a list of the folder contents and the permissions relating to that folder. + /// + [HttpGet] + public HttpResponseMessage GetFolderContent(int folderId, int startIndex, int numItems, string sorting) + { + ContentPage p; + var groupId = this.FindGroupId(this.Request); + var moduleId = this.Request.FindModuleId(); + var moduleMode = new SettingsManager(moduleId, groupId).Mode; + var permissionsManager = PermissionsManager.Instance; + + p = ItemsManager.Instance.GetFolderContent(folderId, startIndex, numItems, sorting, moduleMode); + + return this.Request.CreateResponse(HttpStatusCode.OK, new + { + folder = new + { + folderId = p.Folder.FolderID, + folderName = p.Folder.FolderName, + folderMappingId = p.Folder.FolderMappingID, + folderPath = p.Folder.FolderPath, + folderParentId = p.Folder.ParentID, + }, + items = p.Items.Select(this.GetItemViewModel), + totalCount = p.TotalCount, + hasAddFilesPermission = permissionsManager.HasAddFilesPermission(moduleMode, folderId), + hasAddFoldersPermission = permissionsManager.HasAddFoldersPermission(moduleMode, folderId), + hasDeletePermission = permissionsManager.HasDeletePermission(moduleMode, folderId), + hasManagePermission = permissionsManager.HasManagePermission(moduleMode, folderId), + }); + } + + /// + /// Syncs the folder content. + /// + /// The folder id. + /// The number of items. + /// The sorting. + /// If true sync recursively. + /// The http response message. + [HttpGet] + public HttpResponseMessage SyncFolderContent(int folderId, int numItems, string sorting, bool recursive) + { + var folder = FolderManager.Instance.GetFolder(folderId); + FolderManager.Instance.Synchronize(folder.PortalID, folder.FolderPath, recursive, true); + return this.GetFolderContent(folderId, 0, numItems, sorting); + } + + /// + /// Download thumbnail. + /// + /// The thumbnail download request. + /// The http repsonse message. + [HttpGet] + public HttpResponseMessage ThumbnailDownLoad([FromUri] ThumbnailDownloadRequest item) + { + var file = FileManager.Instance.GetFile(item.FileId); + if (file == null || !PermissionsManager.Instance.HasGetFileContentPermission(file.FolderId)) + { + return this.Request.CreateResponse(HttpStatusCode.NotFound, new { Message = "File doesn't exist." }); + } + + var thumbnailsManager = ThumbnailsManager.Instance; + var result = new HttpResponseMessage(HttpStatusCode.OK); + var thumbnail = thumbnailsManager.GetThumbnailContent(file, item.Width, item.Height, true); + result.Content = thumbnail.Content; + result.Content.Headers.ContentType = new MediaTypeHeaderValue(thumbnail.ContentType); + return result; + } + + /// + /// Downloads a file. + /// + /// The id of the file to download. + /// + /// A value indicating whether to force the download. + /// When true, will download the file as an attachment and ensures the browser won't just render the file if supported. + /// When false, the browser may render the file instead of downloading it for some formats like pdf or images. + /// + /// The actual requested file. + [HttpGet] + public HttpResponseMessage Download(int fileId, bool forceDownload) + { + var result = new HttpResponseMessage(HttpStatusCode.OK); + var streamContent = ItemsManager.Instance.GetFileContent(fileId, out var fileName, out var contentType); + result.Content = new StreamContent(streamContent); + result.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType); + result.Content.Headers.ContentDisposition = + new ContentDispositionHeaderValue(forceDownload ? "attachment" : "inline") { FileName = fileName }; + return result; + } + + /// + /// Gets a list of folder mappings. + /// + /// + /// A list of folder mapping including information such as if the folder mapping is default or not + /// and a url to edit the folder mapping using the provider settings UI. + /// + [HttpGet] + public HttpResponseMessage GetFolderMappings() + { + var isSuperTab = this.PortalSettings.ActiveTab != null && this.PortalSettings.ActiveTab.IsSuperTab; + + var moduleContext = this.GetModuleContext(); + var mappings = FolderMappingController.Instance.GetFolderMappings( + isSuperTab && this.UserInfo.IsSuperUser ? + Null.NullInteger : + this.PortalSettings.PortalId); + + var r = from m in mappings + select new + { + m.FolderMappingID, + m.MappingName, + m.FolderProviderType, + IsDefault = + m.MappingName == "Standard" || m.MappingName == "Secure" || m.MappingName == "Database", + editUrl = this.UserInfo.IsAdmin ? + moduleContext.EditUrl( + "ItemID", + m.FolderMappingID.ToString(), + "EditFolderMapping", + "mid", + this.ActiveModule.ModuleID.ToString()) + : + string.Empty, + }; + + return this.Request.CreateResponse(HttpStatusCode.OK, r); + } + + /// + /// Gets a url to add a new folder type. + /// + /// A url to the folder providers control that allows adding a new folder type. + [HttpGet] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + public HttpResponseMessage GetAddFolderTypeUrl() + { + var moduleContext = this.GetModuleContext(); + return this.Request.CreateResponse( + HttpStatusCode.OK, + moduleContext.EditUrl( + "ItemID", + "-1", + "EditFolderMapping", + "mid", + this.ActiveModule.ModuleID.ToString())); + } + + /// + /// Removes a folder type. + /// + /// The id of an existing folder mapping. + /// The id of the recently remove folder type. + [HttpPost] + [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Admin)] + [ValidateAntiForgeryToken] + public HttpResponseMessage RemoveFolderType([FromBody] int folderMappingId) + { + this.folderMappingController.DeleteFolderMapping(this.PortalSettings.PortalId, folderMappingId); + return this.Request.CreateResponse(HttpStatusCode.OK, folderMappingId); + } + + /// + /// Attempts to create a new folder. + /// + /// The request to add a new folder, . + /// Information about the new folder. + [HttpPost] + [ValidateAntiForgeryToken] + public HttpResponseMessage CreateNewFolder(CreateNewFolderRequest request) + { + var groupId = this.FindGroupId(this.Request); + var moduleId = this.Request.FindModuleId(); + var moduleMode = new SettingsManager(moduleId, groupId).Mode; + var parentFolder = FolderManager.Instance.GetFolder(request.ParentFolderId); + var folderMappingId = string.IsNullOrWhiteSpace(parentFolder.FolderPath) + ? request.FolderMappingId + : parentFolder.FolderMappingID; + + var folder = ItemsManager.Instance.CreateNewFolder(request.FolderName, request.ParentFolderId, folderMappingId, request.MappedName, moduleMode); + + return this.Request.CreateResponse( + HttpStatusCode.OK, + new + { + folder.FolderID, + folder.FolderName, + IconUrl = GetFolderIconUrl(this.PortalSettings.PortalId, folder.FolderMappingID), + folder.FolderMappingID, + }); + } + + /// + /// Attempts to delete a folder. + /// + /// The request to delete a folder, . + /// Ok if succedded. + [HttpPost] + [ValidateAntiForgeryToken] + public HttpResponseMessage DeleteFolder(DeleteFolderRequest request) + { + var groupId = this.FindGroupId(this.Request); + var moduleId = this.Request.FindModuleId(); + var moduleMode = new SettingsManager(moduleId, groupId).Mode; + + ItemsManager.Instance.DeleteFolder(request.FolderId, request.UnlinkAllowedStatus, moduleMode); + return this.Request.CreateResponse(HttpStatusCode.OK, new { Status = 0 }); + } + + /// + /// Attempts to delete a file. + /// + /// The file deletion request, . + /// OK if succeeded. + [HttpPost] + [ValidateAntiForgeryToken] + public HttpResponseMessage DeleteFile(DeleteFileRequest request) + { + var groupId = this.FindGroupId(this.Request); + var moduleId = this.Request.FindModuleId(); + var moduleMode = new SettingsManager(moduleId, groupId).Mode; + + ItemsManager.Instance.DeleteFile(request.FileId, moduleMode, groupId); + return this.Request.CreateResponse(HttpStatusCode.OK, new { Status = 0 }); + } + + /// + /// Performs file search in a folder. + /// + /// The id of the folder. + /// The search term. + /// The page index to get. + /// How many items per page. + /// How to sort the results. + /// The culture requested. + /// A list of the found resources together with the total count of found resources. + [HttpGet] + public HttpResponseMessage Search(int folderId, string search, int pageIndex, int pageSize, string sorting, string culture) + { + var folder = FolderManager.Instance.GetFolder(folderId); + if (folder == null) + { + throw new Exception(LocalizationHelper.GetString("FolderDoesNotExist.Error")); + } + + var groupId = this.FindGroupId(this.Request); + var moduleId = this.Request.FindModuleId(); + var moduleMode = new SettingsManager(moduleId, groupId).Mode; + + var searchResults = SearchController.Instance.SearchFolderContent(moduleId, folder, true, search, pageIndex, pageSize, sorting, moduleMode, out int totalHits); + + var items = (from file in searchResults + select this.GetItemViewModel(file)).ToArray(); + + return this.Request.CreateResponse(HttpStatusCode.OK, new + { + items, + totalCount = totalHits, + }); + } + + /// + /// Gets details about a file. + /// + /// The id of the file to get the details from. + /// Detailed information about the file. + [HttpGet] + [AllowAnonymous] + public HttpResponseMessage GetFileDetails(int fileId) + { + var file = FileManager.Instance.GetFile(fileId); + if (file == null) + { + return this.Request.CreateResponse(HttpStatusCode.NotFound, new { }); + } + + var folder = FolderManager.Instance.GetFolder(file.FolderId); + if (!FolderPermissionController.CanViewFolder((FolderInfo)folder)) + { + return this.Request.CreateResponse( + HttpStatusCode.InternalServerError, + new { message = LocalizationHelper.GetString("UserHasNoPermissionToReadFileProperties.Error") }); + } + + var createdBy = file.CreatedByUser(this.PortalSettings.PortalId); + var lastModifiedBy = file.LastModifiedByUser(this.PortalSettings.PortalId); + + return this.Request.CreateResponse(HttpStatusCode.OK, new + { + fileId = file.FileId, + fileName = file.FileName, + title = file.Title, + description = file.Description ?? string.Empty, + size = string.Format(new FileSizeFormatProvider(), "{0:fs}", file.Size), + createdOnDate = file.CreatedOnDate.ToShortDateString(), + createdBy = createdBy != null ? createdBy.Username : string.Empty, + lastModifiedOnDate = file.LastModifiedOnDate.ToShortDateString(), + lastModifiedBy = lastModifiedBy != null ? lastModifiedBy.Username : string.Empty, + url = FileManager.Instance.GetUrl(file), + }); + } + + /// + /// Attempts to save new details about a file. + /// + /// The new file details, . + /// OK if the request succeeded. + [HttpPost] + [ValidateAntiForgeryToken] + public HttpResponseMessage SaveFileDetails(FileDetailsRequest fileDetails) + { + var file = FileManager.Instance.GetFile(fileDetails.FileId); + if (file == null) + { + return this.Request.CreateResponse(HttpStatusCode.NotFound, new { message = "File doesn't exist." }); + } + + var folder = FolderManager.Instance.GetFolder(file.FolderId); + if (!FolderPermissionController.CanManageFolder((FolderInfo)folder)) + { + return this.Request.CreateResponse( + HttpStatusCode.InternalServerError, + new { message = LocalizationHelper.GetString("UserHasNoPermissionToManageFileProperties.Error") }); + } + + ItemsManager.Instance.SaveFileDetails(file, fileDetails); + + return this.Request.CreateResponse(HttpStatusCode.OK, new { Status = 0 }); + } + + /// + /// Gets details about a folder. + /// + /// The id of the folder from which to get the details. + /// Detailed information about the folder. + [HttpGet] + public HttpResponseMessage GetFolderDetails(int folderId) + { + var folder = FolderManager.Instance.GetFolder(folderId); + + if (!FolderPermissionController.CanManageFolder((FolderInfo)folder)) + { + return this.Request.CreateResponse( + HttpStatusCode.InternalServerError, + new { message = LocalizationHelper.GetString("UserHasNoPermissionToManageFolder.Error") }); + } + + var createdBy = folder.CreatedByUser(this.PortalSettings.PortalId); + var lastModifiedBy = folder.LastModifiedByUser(this.PortalSettings.PortalId); + + return this.Request.CreateResponse(HttpStatusCode.OK, new + { + folderId = folder.FolderID, + folderName = folder.FolderName, + createdOnDate = folder.CreatedOnDate.ToShortDateString(), + createdBy = createdBy != null ? createdBy.Username : string.Empty, + lastModifiedOnDate = folder.LastModifiedOnDate.ToShortDateString(), + lastModifiedBy = lastModifiedBy != null ? lastModifiedBy.Username : string.Empty, + type = FolderMappingController.Instance.GetFolderMapping(folder.FolderMappingID).MappingName, + isVersioned = folder.IsVersioned, + permissions = new FolderPermissions(true, folder.FolderPermissions), + }); + } + + /// + /// Attempts to save new details about a folder. + /// + /// The new folder details, . + /// OK if the request succeeded. + [HttpPost] + [ValidateAntiForgeryToken] + public HttpResponseMessage SaveFolderDetails(FolderDetailsRequest folderDetails) + { + var folder = FolderManager.Instance.GetFolder(folderDetails.FolderId); + if (folder == null) + { + return this.Request.CreateResponse(HttpStatusCode.NotFound, new { message = "Folder doesn't exist." }); + } + + if (!FolderPermissionController.CanManageFolder((FolderInfo)folder)) + { + return this.Request.CreateResponse( + HttpStatusCode.InternalServerError, + new { message = LocalizationHelper.GetString("UserHasNoPermissionToManageFolder.Error") }); + } + + ItemsManager.Instance.SaveFolderDetails(folder, folderDetails); + + return this.Request.CreateResponse(HttpStatusCode.OK, new { Status = 0 }); + } + + /// + /// Gets available sorting options. + /// + /// A list of values and labels to populate the search sorting dropdown. + [HttpGet] + public HttpResponseMessage GetSortOptions() + { + var sortOptions = new[] + { + new { value = "LastModifiedOnDate", label = LocalizationHelper.GetString("LastModifiedOnDate") }, + new { value = "CreatedOnDate", label = LocalizationHelper.GetString("CreatedOnDate") }, + new { value = "ItemName", label= LocalizationHelper.GetString("ItemName") }, + }; + return this.Request.CreateResponse(HttpStatusCode.OK, sortOptions); + } + + /// + /// Attempts to move a file into a folder. + /// + /// The file move request, . + /// A 0 status code if succeeded. + [HttpPost] + [ValidateAntiForgeryToken] + public HttpResponseMessage MoveFile(MoveFileRequest moveFileRequest) + { + var groupId = this.FindGroupId(this.Request); + var moduleId = this.Request.FindModuleId(); + var moduleMode = new SettingsManager(moduleId, groupId).Mode; + + ItemsManager.Instance.MoveFile(moveFileRequest.SourceFileId, moveFileRequest.DestinationFolderId, moduleMode, groupId); + return this.Request.CreateResponse(HttpStatusCode.OK, new { Status = 0 }); + } + + /// + /// Attempts to move a folder into another folder. + /// + /// The folder move request, . + /// A 0 status code if succeeded. + [HttpPost] + [ValidateAntiForgeryToken] + public HttpResponseMessage MoveFolder(MoveFolderRequest moveFolderRequest) + { + var groupId = this.FindGroupId(this.Request); + var moduleId = this.Request.FindModuleId(); + var moduleMode = new SettingsManager(moduleId, groupId).Mode; + + ItemsManager.Instance.MoveFolder(moveFolderRequest.SourceFolderId, moveFolderRequest.DestinationFolderId, moduleMode, groupId); + return this.Request.CreateResponse(HttpStatusCode.OK, new { Status = 0 }); + } + + private static string GetFileIconUrl(string extension) + { + if (!string.IsNullOrEmpty(extension) && File.Exists(HttpContext.Current.Server.MapPath(IconController.IconURL("Ext" + extension, "32x32", "Standard")))) + { + return IconController.IconURL("Ext" + extension, "32x32", "Standard"); + } + + return IconController.IconURL("ExtFile", "32x32", "Standard"); + } + + private static string GetFolderIconUrl(int portalId, int folderMappingId) + { + var url = Globals.ApplicationPath + "/" + Constants.ModulePath + "images/icon-asset-manager-{0}-folder.png"; + + var folderMapping = FolderMappingController.Instance.GetFolderMapping(portalId, folderMappingId); + var name = folderMapping != null && File.Exists(HttpContext.Current.Server.MapPath(folderMapping.ImageUrl)) + ? folderMapping.FolderProviderType.Replace("FolderProvider", string.Empty) + : "standard"; + + return string.Format(url, name.ToLower()); + } + + private int FindGroupId(HttpRequestMessage request) + { + var headers = request.Headers; + int groupId; + int.TryParse(headers.GetValues("GroupId").FirstOrDefault(), out groupId); + return groupId; + } + + private object GetItemViewModel(object item) + { + var folder = item as IFolderInfo; + if (folder != null) + { + return new + { + isFolder = true, + itemId = folder.FolderID, + itemName = folder.FolderName, + iconUrl = GetFolderIconUrl(this.PortalSettings.PortalId, folder.FolderMappingID), + }; + } + + var thumbnailsManager = ThumbnailsManager.Instance; + var file = item as IFileInfo; + return new + { + isFolder = false, + itemId = file.FileId, + itemName = file.FileName, + path = FileManager.Instance.GetUrl(file), + iconUrl = GetFileIconUrl(file.Extension), + thumbnailAvailable = thumbnailsManager.ThumbnailAvailable(file.FileName), + thumbnailUrl = thumbnailsManager.ThumbnailUrl(this.ActiveModule.ModuleID, file.FileId, 110, 110), + }; + } + + private ModuleInstanceContext GetModuleContext() + { + IModuleControl moduleControl = this.modulePipeline.CreateModuleControl(this.ActiveModule) as IModuleControl; + return new ModuleInstanceContext(moduleControl); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/LocalizationController.cs b/DNN Platform/Modules/ResourceManager/Services/LocalizationController.cs new file mode 100644 index 00000000000..4ed50621784 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/LocalizationController.cs @@ -0,0 +1,49 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services +{ + using System.Net; + using System.Net.Http; + using System.Web.Http; + + using Dnn.Modules.ResourceManager.Components; + using DotNetNuke.Web.Api; + using DotNetNuke.Web.Api.Internal; + + /// + /// Provides localization web services. + /// + [DnnAuthorize] + [DnnExceptionFilter] + public class LocalizationController : DnnApiController + { + private readonly ILocalizationController localizationController; + + /// + /// Initializes a new instance of the class. + /// + public LocalizationController() + { + this.localizationController = Components.LocalizationController.Instance; + } + + /// + /// Gets a dictionary of the resource manager localization values. + /// + /// The culture for which to get the localized texts. + /// + /// A dictionary of the keys and values where the key is the localization key + /// and the value is the localized text for the requested culture. + /// + [HttpGet] + [AllowAnonymous] + [DnnPageEditor] + public HttpResponseMessage GetResources(string culture) + { + return this.Request.CreateResponse( + HttpStatusCode.OK, + this.localizationController.GetLocalizedDictionary(Constants.ViewResourceFileName, culture, Constants.ResourceManagerLocalization)); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Services/RouteMapper.cs b/DNN Platform/Modules/ResourceManager/Services/RouteMapper.cs new file mode 100644 index 00000000000..14da26b9596 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Services/RouteMapper.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager.Services +{ + using DotNetNuke.Web.Api; + + /// + public class RouteMapper : IServiceRouteMapper + { + /// + public void RegisterRoutes(IMapRoute mapRouteManager) + { + mapRouteManager.MapHttpRoute("ResourceManager", "default", "{controller}/{action}", new[] { "Dnn.Modules.ResourceManager.Services" }); + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Settings.ascx b/DNN Platform/Modules/ResourceManager/Settings.ascx new file mode 100644 index 00000000000..f4a0f230aff --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Settings.ascx @@ -0,0 +1,22 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Settings.ascx.cs" Inherits="Dnn.Modules.ResourceManager.Settings" %> +<%@ Register TagName="label" TagPrefix="dnn" Src="~/controls/labelcontrol.ascx" %> +<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Web.UI.WebControls" Assembly="DotNetNuke.Web" %> + +

    <%=LocalizeString("BasicSettings")%>

    +
    +
    + + + +
    +
    +
    +
    + + +
    +
    + + + + diff --git a/DNN Platform/Modules/ResourceManager/Settings.ascx.cs b/DNN Platform/Modules/ResourceManager/Settings.ascx.cs new file mode 100644 index 00000000000..239c1760a8c --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Settings.ascx.cs @@ -0,0 +1,77 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager +{ + using System; + using System.Linq; + using System.Web.UI.WebControls; + + using Dnn.Modules.ResourceManager.Components.Common; + using DotNetNuke.Entities.Modules; + using DotNetNuke.Services.FileSystem; + + using Constants = Dnn.Modules.ResourceManager.Components.Constants; + using DnnExceptions = DotNetNuke.Services.Exceptions.Exceptions; + + /// + /// Provides module settings control. + /// + public partial class Settings : ModuleSettingsBase + { + /// + public override void LoadSettings() + { + try + { + if (this.Page.IsPostBack) + { + return; + } + + var displayTypesValues = Enum.GetValues(typeof(Constants.ModuleModes)).Cast(); + var displayTypes = displayTypesValues.Select(t => new ListItem(Utils.GetEnumDescription(t), ((int)t).ToString())).ToArray(); + + this.ddlMode.Items.AddRange(displayTypes); + + this.ddlMode.SelectedValue = this.Settings.Contains(Constants.ModeSettingName) + ? this.Settings[Constants.ModeSettingName].ToString() + : Constants.DefaultMode.ToString(); + + IFolderInfo homeFolder = null; + if (this.Settings.Contains(Constants.HomeFolderSettingName)) + { + int.TryParse(this.Settings[Constants.HomeFolderSettingName].ToString(), out var homeFolderId); + homeFolder = FolderManager.Instance.GetFolder(homeFolderId); + } + + if (homeFolder == null) + { + homeFolder = FolderManager.Instance.GetFolder(this.PortalId, string.Empty); + } + + this.ddlFolder.SelectedFolder = homeFolder; + } + catch (Exception exc) + { + DnnExceptions.ProcessModuleLoadException(this, exc); + } + } + + /// + public override void UpdateSettings() + { + try + { + var modules = new ModuleController(); + + modules.UpdateModuleSetting(this.ModuleId, Constants.ModeSettingName, this.ddlMode.SelectedValue); + modules.UpdateModuleSetting(this.ModuleId, Constants.HomeFolderSettingName, this.ddlFolder.SelectedFolder.FolderID.ToString()); + } + catch (Exception exc) + { + DnnExceptions.ProcessModuleLoadException(this, exc); + } + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/Settings.ascx.designer.cs b/DNN Platform/Modules/ResourceManager/Settings.ascx.designer.cs new file mode 100644 index 00000000000..c21897ffb89 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/Settings.ascx.designer.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Dnn.Modules.ResourceManager { + + + public partial class Settings { + + /// + /// lblMode control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.UserControl lblMode; + + /// + /// ddlMode control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlMode; + + /// + /// lblHomeFolder control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.UserControl lblHomeFolder; + + /// + /// ddlFolder control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Web.UI.WebControls.DnnFolderDropDownList ddlFolder; + } +} diff --git a/DNN Platform/Modules/ResourceManager/View.ascx b/DNN Platform/Modules/ResourceManager/View.ascx new file mode 100644 index 00000000000..18ab9657d6f --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/View.ascx @@ -0,0 +1,63 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="View.ascx.cs" Inherits="Dnn.Modules.ResourceManager.View" %> +<% + DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceManager.RegisterScript(this.Page, "~/js/dnn.servicesframework.js"); +%> + + + + + diff --git a/DNN Platform/Modules/ResourceManager/View.ascx.cs b/DNN Platform/Modules/ResourceManager/View.ascx.cs new file mode 100644 index 00000000000..b643a9b61e9 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/View.ascx.cs @@ -0,0 +1,222 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace Dnn.Modules.ResourceManager +{ + using System; + using System.Collections.Generic; + using System.Linq; + + using Dnn.Modules.ResourceManager.Components; + using Dnn.Modules.ResourceManager.Exceptions; + using DotNetNuke.Common.Utilities; + using DotNetNuke.Entities.Modules; + using DotNetNuke.Framework.JavaScriptLibraries; + using DotNetNuke.Services.FileSystem; + using DotNetNuke.Web.Client.ClientResourceManagement; + + using DnnExceptions = DotNetNuke.Services.Exceptions.Exceptions; + + /// + /// Provides the module view capabilities. + /// + public partial class View : PortalModuleBase + { + private readonly string bundleJsPath; + private int? gid; + private int? folderId; + private string extensionWhitelist; + private string validationCode; + + /// + /// Initializes a new instance of the class. + /// + public View() + { + this.bundleJsPath = Constants.ModulePath + "Scripts/resourceManager-bundle.js"; + } + + /// + /// Gets the group id. + /// + public int GroupId + { + get + { + if (this.gid.HasValue) + { + return this.gid.Value; + } + + if (!int.TryParse(this.Request.QueryString["groupid"], out var id)) + { + id = Null.NullInteger; + } + + this.gid = id; + return this.gid.Value; + } + } + + /// + /// Gets the list of allowed file extensions. + /// + public string ExtensionWhitelist + { + get + { + if (string.IsNullOrEmpty(this.extensionWhitelist)) + { + this.extensionWhitelist = FileManager.Instance.WhiteList.ToStorageString(); + } + + return this.extensionWhitelist; + } + } + + /// + /// Gets the file upload validation code. + /// + public string ValidationCode + { + get + { + if (string.IsNullOrEmpty(this.validationCode)) + { + var parameters = new List() { this.ExtensionWhitelist.Split(',').Select(i => i.Trim()).ToList() }; + parameters.Add(this.PortalSettings.UserInfo.UserID); + if (!this.PortalSettings.UserInfo.IsSuperUser) + { + parameters.Add(this.PortalSettings.PortalId); + } + + this.validationCode = ValidationUtils.ComputeValidationCode(parameters); + } + + return this.validationCode; + } + } + + /// + /// Gets the culture code used for localization. + /// + protected string ResxCulture => LocalizationController.Instance.CultureName; + + /// + /// Gets the timestamp of the localization resource file. + /// + protected string ResxTimeStamp => + LocalizationController.Instance.GetResxTimeStamp(Constants.ViewResourceFileName, Constants.ResourceManagerLocalization).ToString(); + + /// + /// Gets the id of the home folder. + /// + protected int HomeFolderId => new SettingsManager(this.ModuleId, this.GroupId).HomeFolderId; + + /// + /// Gets a value indicating whether the user is logged in. + /// + protected bool UserLogged => this.UserId > 0; + + /// + /// Gets a value indicating whether the currently logged in user is an administrator. + /// + protected bool IsAdmin => this.UserInfo.IsAdmin; + + /// + /// Gets how many items to show per page. + /// + protected int FolderPanelNumItems => Constants.ItemsPerPage; + + /// + /// Gets the width of each item in the resource grid. + /// + protected int ItemWidth => Constants.ItemWidth; + + /// + /// Gets the maximum allowed upload size. + /// + protected long MaxUploadSize => Config.GetMaxUploadSize(); + + /// + /// Gets a json serialized object defining the possible sort fields. + /// + protected string SortingFields => Json.Serialize(Constants.SortingFields); + + /// + /// Gets the default sort field key. + /// + protected string DefaultSortingField => Constants.DefaultSortingField; + + /// + /// Gets a human readable representation of the maximum upload size. + /// + protected string MaxUploadSizeHumanReadable + => string.Format(new FileSizeFormatProvider(), "{0:fs}", this.MaxUploadSize); + + /// + /// Gets the id of the currently open folder. + /// + protected int OpenFolderId => this.FolderId.GetValueOrDefault(); + + /// + /// Gets the path of the currently open folder. + /// + protected string OpenFolderPath + { + get + { + if (!this.FolderId.HasValue) + { + return string.Empty; + } + + var folder = FolderManager.Instance.GetFolder(this.FolderId.Value); + var folderPathElements = folder.FolderPath.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + return Json.Serialize(folderPathElements); + } + } + + /// + /// Gets the id of the url path requested folder id. + /// + private int? FolderId + { + get + { + if (!this.folderId.HasValue) + { + if (int.TryParse(this.Request.QueryString["folderId"], out var id)) + { + this.folderId = id; + } + } + + return this.folderId; + } + } + + /// + /// Handles the page load event. + /// + /// The sender of the event. + /// The event arguments. + protected void Page_Load(object sender, EventArgs e) + { + try + { + JavaScript.RequestRegistration(CommonJs.DnnPlugins); + ClientResourceManager.RegisterScript(this.Page, Constants.ModulePath + "Scripts/dnn.Localization.js"); + ClientResourceManager.RegisterScript(this.Page, this.bundleJsPath); + } + catch (ModeValidationException exc) + { + DnnExceptions.ProcessModuleLoadException(this.LocalizeString(exc.Message), this, exc); + } + catch (Exception exc) + { + DnnExceptions.ProcessModuleLoadException(exc.Message, this, exc); + } + } + } +} diff --git a/DNN Platform/Modules/ResourceManager/View.ascx.designer.cs b/DNN Platform/Modules/ResourceManager/View.ascx.designer.cs new file mode 100644 index 00000000000..b40a177565f --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/View.ascx.designer.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Dnn.Modules.ResourceManager { + + + public partial class View { + + /// + /// ResourceManagerContainer control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel ResourceManagerContainer; + } +} diff --git a/DNN Platform/Modules/ResourceManager/module.css b/DNN Platform/Modules/ResourceManager/module.css new file mode 100644 index 00000000000..e4221112863 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/module.css @@ -0,0 +1,3 @@ +.ReactModalPortal .modal-header { + padding: 0; +} \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/packages.config b/DNN Platform/Modules/ResourceManager/packages.config new file mode 100644 index 00000000000..4378e2e21f4 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/web.Debug.config b/DNN Platform/Modules/ResourceManager/web.Debug.config new file mode 100644 index 00000000000..fae9cfefa97 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/web.Release.config b/DNN Platform/Modules/ResourceManager/web.Release.config new file mode 100644 index 00000000000..da6e960b8d1 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/DNN Platform/Modules/ResourceManager/web.config b/DNN Platform/Modules/ResourceManager/web.config new file mode 100644 index 00000000000..f919ed44340 --- /dev/null +++ b/DNN Platform/Modules/ResourceManager/web.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/AscendingArrow.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/AscendingArrow.png index cbb1a355a1c..a64b349a49d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/AscendingArrow.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/AscendingArrow.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Clear.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Clear.png index 65d1322c58e..99cabe47eb0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Clear.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Clear.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/CreateFolder.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/CreateFolder.png index 6c7994d438a..44482e87f00 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/CreateFolder.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/CreateFolder.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DeleteFile.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DeleteFile.png index 90db39ec0b7..599d62852a0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DeleteFile.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DeleteFile.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DescendingArrow.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DescendingArrow.png index eaeda840f30..80f0d40d2bb 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DescendingArrow.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DescendingArrow.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DetailView.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DetailView.png index 84e5b6d2f60..89a3358a7ab 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DetailView.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DetailView.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DialogBackground.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DialogBackground.png index 23ccd077697..7f1fdb7914e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DialogBackground.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DialogBackground.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DownloadButton.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DownloadButton.png index 14c636bab00..c18078714ba 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DownloadButton.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/DownloadButton.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/IconsView.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/IconsView.png index 827c7742596..08a29950261 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/IconsView.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/IconsView.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ListView.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ListView.png index 3a2a56615ba..5a3e4f25b2f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ListView.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ListView.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Preview.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Preview.png index 0e080271936..8a31adab544 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Preview.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/Preview.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ResizeImage.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ResizeImage.png index b4f83459562..e3483f6121c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ResizeImage.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/ResizeImage.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortAscending.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortAscending.png index 8f380cfaeec..1ea86fc2921 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortAscending.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortAscending.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortDescending.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortDescending.png index 16980690f1d..104d1e1c205 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortDescending.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SortDescending.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SyncFolder.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SyncFolder.png index 8626e5cf313..958cdcabc4b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SyncFolder.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/SyncFolder.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/UploadButton.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/UploadButton.png index b0ae7f154f7..3e9402794a0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/UploadButton.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/UploadButton.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/7z.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/7z.png index 5ed205bb95b..b776f83b824 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/7z.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/7z.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Divx.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Divx.png index 99cb983eca3..196aed21aba 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Divx.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Divx.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dll.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dll.png index 7ac35c9846f..081f0d904d2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dll.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dll.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dmg.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dmg.png index a2c644bddca..23c2910b33c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dmg.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Dmg.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Doc.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Doc.png index 8738d2eb211..b91b8199291 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Doc.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Doc.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Eps.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Eps.png index 009582ced98..24fce066810 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Eps.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Eps.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Fla.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Fla.png index 648b1d07354..98123fe01ce 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Fla.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Fla.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Flv.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Flv.png index ccc1eb7f312..a9630d7f9c3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Flv.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Flv.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Iso.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Iso.png index e8df06db981..a0453af96c8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Iso.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Iso.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Log.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Log.png index bc99e85cf41..d222bd68aa8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Log.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Log.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4b.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4b.png index 8a73d4e5aa1..d56c4d47a22 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4b.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4b.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4p.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4p.png index f9d90b924c8..55d6371c74d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4p.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/M4p.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mov.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mov.png index 6a9186516fe..a05c7efd9bd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mov.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mov.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mp4.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mp4.png index caa154cea3f..a197fd4b9cf 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mp4.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mp4.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mpeg.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mpeg.png index 81994a291a4..d5d3c4ebc95 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mpeg.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Mpeg.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ogg.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ogg.png index a6b55f6cc23..ed25e7f6cc5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ogg.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ogg.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pdf.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pdf.png index 04423b49650..03ade911974 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pdf.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pdf.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pps.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pps.png index 44a2d2c7e8c..ea5eae0f1c5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pps.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Pps.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ps.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ps.png index 0e4b20ae0f0..27987575d9b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ps.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ps.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ram.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ram.png index a55ba848a1b..c8e10a7e302 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ram.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Ram.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rar.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rar.png index 934f18247fb..4bfaf31ba2f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rar.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rar.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rm.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rm.png index 639e1802158..a0d693e16a0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rm.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rm.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rmvb.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rmvb.png index 362ffdfce12..712825773c8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rmvb.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Rmvb.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Swf.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Swf.png index 3de371311f4..dd514a138ae 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Swf.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Swf.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tgz.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tgz.png index b896b276736..57609903013 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tgz.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tgz.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tmp.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tmp.png index 75e014ee902..c3d20e36259 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tmp.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Tmp.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Txt.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Txt.png index 1e7c12f8010..a7580600dd4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Txt.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Txt.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcard.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcard.png index 63edef655e7..952a1285972 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcard.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcard.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcd.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcd.png index d066ecbbeb7..76ce88d51a8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcd.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vcd.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vob.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vob.png index 2de5bed7d39..e0a68587be3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vob.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Vob.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wma.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wma.png index e699f0baac2..79235c9e2ea 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wma.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wma.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wmv.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wmv.png index 98001f5451b..9df18aa63ed 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wmv.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wmv.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wps.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wps.png index 0e7cbc05cc3..c06be46a368 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wps.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wps.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xls.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xls.png index 4a394e527df..7a6b3cecf28 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xls.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xls.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xml.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xml.png index 82f32ef8a2a..bb2ff689120 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xml.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xml.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xpi.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xpi.png index 4ff58d7e420..8fa90fa35fc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xpi.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Xpi.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/mime.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/mime.png index c6c95323503..48457ddd3ef 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/mime.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/mime.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/resource.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/resource.png index c2a8ef49337..491d9a8a47c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/resource.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/resource.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/CKEditorConfig.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/CKEditorConfig.png index 5ef20e1b56a..19aed07eee9 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/CKEditorConfig.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/CKEditorConfig.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/LogoCKEditor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/LogoCKEditor.png index 830fb2b709e..5c82d904911 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/LogoCKEditor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/LogoCKEditor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/About.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/About.png index 7f8ebf70c67..361d363d11f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/About.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/About.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Anchor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Anchor.png index bbb2abc6940..0645995e6dc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Anchor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Anchor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BGColor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BGColor.png index 78b3a391606..8b50ce7bf12 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BGColor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BGColor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiLtr.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiLtr.png index 15d13291a87..17a0ad6bacb 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiLtr.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiLtr.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiRtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiRtl.png index f5f4f03132a..17ff0aa4c37 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiRtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BidiRtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Blockquote.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Blockquote.png index b8cd5020192..5461c128d6d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Blockquote.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Blockquote.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Bold.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Bold.png index 191c568878c..2da800de1a5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Bold.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Bold.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BulletedList.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BulletedList.png index 999798886bc..570dadc605c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BulletedList.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/BulletedList.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Copy.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Copy.png index c6ff519a741..eb21bfc5902 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Copy.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Copy.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/CreateDiv.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/CreateDiv.png index 37b48e1a898..3ee56d781e8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/CreateDiv.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/CreateDiv.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Cut.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Cut.png index 8581bf5a9d2..e2f3cf25380 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Cut.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Cut.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Find.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Find.png index b15034b28b2..9f6b97597bb 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Find.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Find.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Flash.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Flash.png index 6ea5838544e..4ec9f6b4031 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Flash.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Flash.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Font.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Font.png index 59afc8611f3..8add536d822 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Font.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Font.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/FontSize.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/FontSize.png index 81e41de7d3a..c04f807a392 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/FontSize.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/FontSize.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Format.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Format.png index 7a2192b5166..8add536d822 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Format.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Format.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/HorizontalRule.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/HorizontalRule.png index a07161d4b83..ccfa06f2468 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/HorizontalRule.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/HorizontalRule.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Iframe.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Iframe.png index 0ba286ccd69..6c6f75130a1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Iframe.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Iframe.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Image.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Image.png index b312784b9ec..acc6b19ed3a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Image.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Image.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Indent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Indent.png index 4f4b37fbacc..db8591ff425 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Indent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Indent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Italic.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Italic.png index 726aea02b4d..5f961f9e29b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Italic.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Italic.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyBlock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyBlock.png index b1afb522777..cd4cffec779 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyBlock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyBlock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyCenter.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyCenter.png index 9d787fc21ad..5a0273fab25 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyCenter.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyCenter.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyLeft.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyLeft.png index 091f0a0974b..7c3872cbfa6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyLeft.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyLeft.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyRight.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyRight.png index c0942e81cdc..0e63c8a5811 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyRight.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/JustifyRight.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Link.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Link.png index 1b523edb761..59871808b2c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Link.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Link.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Maximize.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Maximize.png index a4515d04531..88cf6244f56 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Maximize.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Maximize.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NewPage.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NewPage.png index a846cea39eb..1081ccb6619 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NewPage.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NewPage.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NumberedList.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NumberedList.png index 8e881ad7cb3..09f79ff2b2a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NumberedList.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/NumberedList.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Outdent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Outdent.png index fcb6093342b..206526497f0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Outdent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Outdent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PageBreak.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PageBreak.png index 3c0b13aba8f..2c04d0b82f4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PageBreak.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PageBreak.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Paste.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Paste.png index dd9dfa5da3a..26836d99118 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Paste.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Paste.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteFromWord.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteFromWord.png index d1f10e1aedd..f62a16fb70a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteFromWord.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteFromWord.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteText.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteText.png index d7b3bd6b95e..42007bb77dd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteText.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/PasteText.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Preview.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Preview.png index 281fe97af23..df0db82b22e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Preview.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Preview.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Print.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Print.png index db7ba40b1e2..892ed1565ca 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Print.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Print.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Redo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Redo.png index 128422df7f7..e17afcfa51b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Redo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Redo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/RemoveFormat.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/RemoveFormat.png index 1d8022b9d77..f45ff0fa308 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/RemoveFormat.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/RemoveFormat.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Replace.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Replace.png index 557acf97811..c085bfd3a86 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Replace.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Replace.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Save.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Save.png index b4698db2fd8..96630377fe1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Save.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Save.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SelectAll.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SelectAll.png index a03a7a2dfac..31ad38481be 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SelectAll.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SelectAll.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/ShowBlocks.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/ShowBlocks.png index 7e293c891d7..34b2534ad3c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/ShowBlocks.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/ShowBlocks.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Smiley.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Smiley.png index 30dd1658783..415fbb5f1db 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Smiley.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Smiley.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Source.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Source.png index 302f9c9d07a..7d42d9e02c2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Source.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Source.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpecialChar.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpecialChar.png index a5d442f0ba0..55519328345 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpecialChar.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpecialChar.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpellChecker.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpellChecker.png index 4a356227c06..fbf6eec28dd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpellChecker.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/SpellChecker.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Strike.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Strike.png index 4b6391faf6d..0143bc26313 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Strike.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Strike.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Styles.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Styles.png index f6f2d3c48ad..8add536d822 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Styles.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Styles.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Subscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Subscript.png index 91e17379629..7ea7420ed2d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Subscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Subscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Superscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Superscript.png index 84d55307d01..408dc98bd8f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Superscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Superscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Table.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Table.png index ff45e8ed3a4..8b36dc503f4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Table.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Table.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Templates.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Templates.png index 25392b5e3a1..e7830b2da48 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Templates.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Templates.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/TextColor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/TextColor.png index b8c0b704711..d7a2cdd67cf 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/TextColor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/TextColor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Underline.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Underline.png index 3077d6eb6fc..021c80cfbb3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Underline.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Underline.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Undo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Undo.png index 24b04e050bb..a0d511a924d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Undo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Undo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Unlink.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Unlink.png index 1448705b556..4207cc651ae 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Unlink.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/Unlink.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/mathjax.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/mathjax.png index d25081be998..30844fc4695 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/mathjax.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/mathjax.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/oEmbed.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/oEmbed.png index 2ba7cce53a3..7d8f64e565d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/oEmbed.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/oEmbed.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/qrcodes.jpg b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/qrcodes.jpg index 0d0d78ff399..f1114b3054c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/qrcodes.jpg and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/qrcodes.jpg differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/separator.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/separator.png index 158e01c29ae..f3bb288f971 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/separator.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/icons/separator.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostHasSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostHasSetting.png index 6a2e4d1e214..ba9971842a7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostHasSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostHasSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostNoSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostNoSetting.png index d0b5758ae97..188b0ac3a24 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostNoSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/HostNoSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleHasSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleHasSetting.png index 1ec72db81ad..39f00038ab0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleHasSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleHasSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleNoSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleNoSetting.png index d2b91b42b90..a63989a5e0c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleNoSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/ModuleNoSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageHasSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageHasSetting.png index 5350bf7ee57..44a8d98d587 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageHasSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageHasSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageNoSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageNoSetting.png index 76c83facce5..2875e36d742 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageNoSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PageNoSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalHasSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalHasSetting.png index dc3910fe6c1..c6204c35417 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalHasSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalHasSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalNoSetting.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalNoSetting.png index b49f21e1545..8c512dc827f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalNoSetting.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/PortalNoSetting.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input-focus.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input-focus.png index 0b059d48da5..a4bf9d62538 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input-focus.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input-focus.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input.png index 485d222ebb1..6a475678f39 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/bg-input.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/editor_config_small.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/editor_config_small.png index fe455b29dce..d46b18c091e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/editor_config_small.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/editor_config_small.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/error.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/error.png index 517725822ba..96d172a225e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/error.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/error.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/information.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/information.png index fa9a60b5ad2..c6fa45814bd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/information.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/information.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/tick.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/tick.png index 2414885b857..97dc16cbcde 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/tick.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/tick.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/warning.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/warning.png index 9b0460ed47c..b289ef50be5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/warning.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/images/warning.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/hidpi/logo_ckeditor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/hidpi/logo_ckeditor.png index 10cc7368ad1..53839c6d0ae 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/hidpi/logo_ckeditor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/hidpi/logo_ckeditor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/logo_ckeditor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/logo_ckeditor.png index f186eb87a09..0ed12202f50 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/logo_ckeditor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/about/dialogs/logo_ckeditor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons.png index eaefc17a107..2f3aa77602e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons_hidpi.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons_hidpi.png index 6e103c05f11..25b25c32d0b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons_hidpi.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/icons_hidpi.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/image/images/noimage.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/image/images/noimage.png index 74c6ee9262b..34f95eb01ce 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/image/images/noimage.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/image/images/noimage.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/magicline/images/hidpi/icon.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/magicline/images/hidpi/icon.png index b981bb5c6c4..5eb71b1e688 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/magicline/images/hidpi/icon.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/magicline/images/hidpi/icon.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/broken_heart.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/broken_heart.png index a711c0d8d85..b584504ce74 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/broken_heart.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/broken_heart.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/envelope.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/envelope.png index 44398ad137f..cd62f77516f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/envelope.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/envelope.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/heart.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/heart.png index df409e62f55..4298daaf8ff 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/heart.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/heart.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/kiss.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/kiss.png index a4f2f36382b..c9eef6ef775 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/kiss.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/kiss.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/lightbulb.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/lightbulb.png index 0c4a92400d0..769239decfe 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/lightbulb.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/lightbulb.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/omg_smile.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/omg_smile.png index abc4e2d0fd6..d23c454fa98 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/omg_smile.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/omg_smile.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/teeth_smile.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/teeth_smile.png index 5e63785e421..d51e33c5919 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/teeth_smile.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/teeth_smile.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_down.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_down.png index 1823481f2f0..71dc09d666b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_down.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_down.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_up.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_up.png index d4e8b22a3cc..bfdce6672a8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_up.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/thumbs_up.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/tongue_smile.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/tongue_smile.png index 56553fbe115..a05ea08082f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/tongue_smile.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/plugins/smiley/images/tongue_smile.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/icons.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/icons.png index 1eebacfb6a0..5b3423c5f17 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/icons.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/icons.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides.png index c989356c14a..d528a11b604 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides_rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides_rtl.png index 63086c2fe87..b8da079db04 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides_rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/dialog_sides_rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/noimage.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/noimage.png index 159811305af..e9afc30591e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/noimage.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/noimage.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites.png index 0cba588e85b..bdbf5f11d25 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites_ie6.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites_ie6.png index bcfe75323b7..e7ff85ceb1f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites_ie6.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/black/images/sprites_ie6.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/arrow.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/arrow.png index 0d1eb39c676..ed0654af30f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/arrow.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/arrow.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/close.png index b2acd4fc5c6..1bdc11a737e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/close.png index da9fe628110..120c19cd44a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock-open.png index 7f63a94d47d..3f484336ada 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock.png index 0167a76fa31..7ee01d7567f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/refresh.png index 75af754f135..149f2d3fcb1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/hidpi/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock-open.png index 42bd5686f65..699025fc070 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock.png index 2f7347a46bf..55465b973dd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/refresh.png index 1908d6672b9..c13b99d1eed 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/bootstrap/images/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/bold.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/bold.png index 12d43c56c02..5df4dbae94d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/bold.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/bold.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/find-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/find-rtl.png index bde4bc2f923..643f86afac1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/find-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/find-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/arrow.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/arrow.png index 0d1eb39c676..ed0654af30f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/arrow.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/arrow.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/close.png index 04b9c97dde8..47933f7aee7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/close.png index 8abca8e9726..425d444a549 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock-open.png index aa5e740ee77..04b98fddb1c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock.png index 5404b063a0c..f79f10d85b0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/refresh.png index 1ebef3440d3..3ea9f2c74c7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/hidpi/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock-open.png index 3b256c06360..b6e731b2eae 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock.png index c127f9ebe78..24c1a97ebb0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/refresh.png index a1a061c50de..f0a11153074 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/images/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/scayt.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/scayt.png index de0e7b8cd42..da5fc6a920d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/scayt.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/icy-orange/scayt.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/about.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/about.png index 24e4a33ef08..89b627301f8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/about.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/about.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor-rtl.png index c7263eab7a9..c86800b1aea 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor.png index c24c6aaf7ff..129b9b9b87d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/anchor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bgcolor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bgcolor.png index 646840947dd..109411e29c6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bgcolor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bgcolor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidiltr.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidiltr.png index 972f7530e85..0175c453d1d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidiltr.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidiltr.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidirtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidirtl.png index dc73cbee4a0..4146ab30100 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidirtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bidirtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/blockquote.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/blockquote.png index 58ec8b2a947..29a7adec804 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/blockquote.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/blockquote.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bold.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bold.png index 2a9ae17af89..8c4fea94042 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bold.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bold.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist-rtl.png index 04dfb036925..3cadad8a9ba 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist.png index 9144eb97810..6778271ee62 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/bulletedlist.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/button.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/button.png index 06173092274..a67bafaf206 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/button.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/button.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/checkbox.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/checkbox.png index b1ced161cc8..796145f2808 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/checkbox.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/checkbox.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy-rtl.png index 8a041d62fb9..0b955b3c2c2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy.png index 1e8209c7886..5ca2a3be9f6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/copy.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/creatediv.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/creatediv.png index b15ee5e9596..4511d7b4408 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/creatediv.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/creatediv.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut-rtl.png index 8917011c4f0..725128dc9e7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut.png index 8917011c4f0..725128dc9e7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/cut.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find-rtl.png index 88a70c0f3cb..6b292b5adf7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find.png index 961b4d40066..b78d1ecaf07 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/find.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/flash.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/flash.png index dfe848cda4a..4369edbcd72 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/flash.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/flash.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/form.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/form.png index feecc4a0661..43112705b90 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/form.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/form.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/hiddenfield.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/hiddenfield.png index 8d3a47adedf..65c3cd79185 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/hiddenfield.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/hiddenfield.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/horizontalrule.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/horizontalrule.png index 4e8b49d5844..70ab1f8b4a0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/horizontalrule.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/horizontalrule.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/iframe.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/iframe.png index e61c2d7664c..81ee97ec0d4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/iframe.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/iframe.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/image.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/image.png index 3c9dc0f5a75..ecbba5f53b6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/image.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/image.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/imagebutton.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/imagebutton.png index 40cb954bf45..b51ca7b767e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/imagebutton.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/imagebutton.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent-rtl.png index 70c05d8691b..c0c798723c0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent.png index 686e7d6c272..b459559cedf 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/indent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/italic.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/italic.png index 84693d5b564..a4b7e021fd6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/italic.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/italic.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyblock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyblock.png index faf7e66038b..319ea5c652d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyblock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyblock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifycenter.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifycenter.png index c3c16e78787..c9744a95c7e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifycenter.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifycenter.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyleft.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyleft.png index 4fa8f6c381a..37a37ea01d7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyleft.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyleft.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyright.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyright.png index 8e1968f5861..d4307339700 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyright.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/justifyright.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/link.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/link.png index ace291ff03a..04e76acdf41 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/link.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/link.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/maximize.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/maximize.png index f9192598f9a..3219adddc95 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/maximize.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/maximize.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage-rtl.png index 443413fa5a8..0523e52a62f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage.png index 95e12a0358b..487d6c0f4e5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/newpage.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist-rtl.png index 9beedf42d71..b8cfa3a84d6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist.png index 3ea7ef45cf7..17a805e4fd8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/numberedlist.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent-rtl.png index 42c4916e3cd..f246d9a6dc4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent.png index d3fe5db68fd..66fc53004be 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/outdent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak-rtl.png index f20058546dd..692889adff1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak.png index 7e03c95a2cc..1322e35591d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pagebreak.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste-rtl.png index 4d563ef6ebf..3362f6fd37e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste.png index 664897bf5bf..3362f6fd37e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/paste.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword-rtl.png index 95e28104ddb..34971ab6173 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword.png index 8208996d76c..85c1434630d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastefromword.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext-rtl.png index 2e4ae0837ec..735f33364c7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext.png index 5820f255f45..96690ec4ed4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/pastetext.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview-rtl.png index ed8e9a797f6..df2d805a9b2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview.png index 8f241e8842c..371169c582a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/preview.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/print.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/print.png index f35311b06a8..048e519ef8d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/print.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/print.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/radio.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/radio.png index c596ac41158..282da103b83 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/radio.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/radio.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo-rtl.png index d945f5fafcb..3bf3f507587 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo.png index 2ee168ee6f6..90bebee9e11 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/redo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/removeformat.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/removeformat.png index a4566bb1370..1be89e2c8af 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/removeformat.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/removeformat.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/replace.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/replace.png index febff4323a3..50b7b9b12ed 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/replace.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/replace.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/save.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/save.png index 287f9f94515..f61999f9d08 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/save.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/save.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/scayt.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/scayt.png index 376432d7aaa..50fb9021218 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/scayt.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/scayt.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select-rtl.png index 966a602fbd2..35dc4c51d15 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select.png index 691edd99c51..4294a29ee1f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/select.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/selectall.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/selectall.png index 4cd101b7672..bfb8de1e16a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/selectall.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/selectall.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks-rtl.png index 39677a2a933..5d3f649d040 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks.png index a32256373aa..679888368aa 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/showblocks.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/smiley.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/smiley.png index 81dfdc1668e..2fba4cb5e08 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/smiley.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/smiley.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source-rtl.png index 7de8cb8645c..63b344cce1e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source.png index 0e31c7cd099..1fa1637f880 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/source.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/specialchar.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/specialchar.png index 323ccf02d2e..20db8ea55eb 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/specialchar.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/specialchar.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/spellchecker.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/spellchecker.png index 8b2430e6c71..50fb9021218 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/spellchecker.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/spellchecker.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/strike.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/strike.png index b1a4186f082..f970ed73e44 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/strike.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/strike.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/subscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/subscript.png index 7a4174b858f..1763f39ff0c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/subscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/subscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/superscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/superscript.png index b33a78debdc..b8317fd9304 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/superscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/superscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/table.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/table.png index 3fe041ccc61..771d858842f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/table.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/table.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates-rtl.png index b6d84cde6d6..9e32d125139 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates.png index 611813939cc..289a6e386e1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/templates.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea-rtl.png index 1c55e514f2b..5a6ade39618 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea.png index 740c834fe3d..9b1fb40c581 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textarea.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textcolor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textcolor.png index 042e5c3e00e..01b31634301 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textcolor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textcolor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield-rtl.png index e644333e4a7..bc7400e29e8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield.png index 7189e6cc3af..e24773d98bd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/textfield.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/underline.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/underline.png index 7067f54eb15..f9d32d57dfc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/underline.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/underline.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo-rtl.png index 9b3eb8a4396..76c1b5c95b1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo.png index 2289d932550..15b07948197 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/undo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/unlink.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/unlink.png index 1bdfd19bdd7..d1bff4b1fe5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/unlink.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/icons/unlink.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/arrow.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/arrow.png index 0d1eb39c676..ed0654af30f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/arrow.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/arrow.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/close.png index 900ae87edaa..653d360a7d8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/close.png index 5a288b69151..5e146625c77 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock-open.png index 6f465a8b687..4f5163e94d2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock.png index 07b23818d43..ae7702c8459 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/refresh.png index 53b610d47bc..d13c7cb021f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/hidpi/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock-open.png index 10b348f461f..7d2e58014c7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock.png index 7c535df5292..2c6f9e4f0ce 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/refresh.png index 3c10f067339..1c213284c7f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/resizer.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/resizer.png index 3534cc4e119..8d4618f6979 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/resizer.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono-dark/images/resizer.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons.png index eaefc17a107..2f3aa77602e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons_hidpi.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons_hidpi.png index 6e103c05f11..25b25c32d0b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons_hidpi.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/icons_hidpi.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/arrow.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/arrow.png index d72b5f3b880..ce7ff9eeaf7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/arrow.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/arrow.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/close.png index e406c2c35ba..e66362d2914 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock-open.png index edbd12f3bdc..9d3a759530d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock.png index 1b87bbb7a14..582e684a672 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/moono/images/hidpi/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/arrow.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/arrow.png index 0d1eb39c676..ed0654af30f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/arrow.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/arrow.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/close.png index f5ba87c9a0d..ba74cb74140 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/close.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/close.png index 65c2640d3cf..639728ef2ae 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/close.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/close.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock-open.png index aa5e740ee77..04b98fddb1c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock.png index 5404b063a0c..f79f10d85b0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/refresh.png index 1ebef3440d3..3ea9f2c74c7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/hidpi/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock-open.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock-open.png index 3b256c06360..b6e731b2eae 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock-open.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock-open.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock.png index c127f9ebe78..24c1a97ebb0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/lock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/refresh.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/refresh.png index a1a061c50de..f0a11153074 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/refresh.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/office2013/images/refresh.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/about.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/about.png index 8be14e03a52..4b29b605016 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/about.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/about.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor-rtl.png index 9b1084273b7..c95176a9988 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor.png index 9b1084273b7..c95176a9988 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/anchor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bgcolor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bgcolor.png index 687819b41e9..a62fd622661 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bgcolor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bgcolor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidiltr.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidiltr.png index 4537ea5ac5e..f7bce38b4e3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidiltr.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidiltr.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidirtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidirtl.png index dc8c6ca805c..8b4704b3f81 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidirtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bidirtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/blockquote.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/blockquote.png index 800e78d727f..a88fd14ac2a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/blockquote.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/blockquote.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bold.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bold.png index bbeb52e9151..41d015c1bfa 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bold.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bold.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist-rtl.png index 78da0c56793..32ebc315b5c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist.png index e84930b829c..3d1a9163522 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/bulletedlist.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/button.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/button.png index cd8aba8e260..a661fc6b139 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/button.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/button.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/checkbox.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/checkbox.png index 6eecd692e06..a281a20ade3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/checkbox.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/checkbox.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy-rtl.png index 7df804b1251..ebb42740e55 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy.png index 7df804b1251..ebb42740e55 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/copy.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/creatediv.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/creatediv.png index 9d369b247a1..4ade43f4326 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/creatediv.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/creatediv.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut-rtl.png index 779f8577f63..47c6312ffd1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut.png index 779f8577f63..47c6312ffd1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/cut.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find-rtl.png index c1ce318dc0c..96cde28df31 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find.png index c1ce318dc0c..96cde28df31 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/find.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/flash.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/flash.png index b106a7ac28f..7aedc4e6bfc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/flash.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/flash.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/form.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/form.png index 5d05a73a846..794b4c9c4fe 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/form.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/form.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/hiddenfield.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/hiddenfield.png index dc49eefb8d2..49251f64024 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/hiddenfield.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/hiddenfield.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/horizontalrule.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/horizontalrule.png index ad5d10dfdc8..f71b6fd1a0a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/horizontalrule.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/horizontalrule.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/iframe.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/iframe.png index fdb07c686e9..7b5025d76ee 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/iframe.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/iframe.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/image.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/image.png index 1c342151faf..1cc5851516b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/image.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/image.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/imagebutton.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/imagebutton.png index 9b087a950c5..0d9de7e07a6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/imagebutton.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/imagebutton.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent-rtl.png index 1f78077b623..df6baa23889 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent.png index 98bbe103857..e54b0062865 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/indent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/italic.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/italic.png index 3418f84e2d6..180ebd750e2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/italic.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/italic.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyblock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyblock.png index bb3e0ec0389..8e5264fa1d9 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyblock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyblock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifycenter.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifycenter.png index aea08d9eb85..9248ccccf18 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifycenter.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifycenter.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyleft.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyleft.png index ebae08381e4..a7f756ef09e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyleft.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyleft.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyright.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyright.png index 29bc27f3951..f4e876cb369 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyright.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/justifyright.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/link.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/link.png index 66ec2aaf758..82bc47c1894 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/link.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/link.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/maximize.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/maximize.png index feb375584ba..8e9029aadef 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/maximize.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/maximize.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage-rtl.png index db21d25b275..59ea84fb93e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage.png index db21d25b275..59ea84fb93e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/newpage.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist-rtl.png index df282860e6f..7ad4f529765 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist.png index 88508ef5456..43f396e2188 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/numberedlist.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent-rtl.png index 9525dc437c7..2df803ac178 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent.png index 95edf2a6373..9f640473a76 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/outdent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak-rtl.png index 768cc758b7e..07225eaa869 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak.png index 768cc758b7e..07225eaa869 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pagebreak.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paintroller.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paintroller.png index 9d288e481ec..b74d4761895 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paintroller.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paintroller.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste-rtl.png index c4976948dc9..04fea767f50 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste.png index c4976948dc9..04fea767f50 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/paste.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword-rtl.png index 88e805d636e..57863dd6682 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword.png index 88e805d636e..57863dd6682 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastefromword.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext-rtl.png index 89ea81ee7d5..35c16817aa2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext.png index 89ea81ee7d5..35c16817aa2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/pastetext.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/presentation.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/presentation.png index 92fa9b4abc9..e8ae88ef42a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/presentation.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/presentation.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview-rtl.png index df6c616ee1c..79bd3174f87 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview.png index df6c616ee1c..79bd3174f87 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/preview.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/print.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/print.png index 4cefc220229..a0b72186957 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/print.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/print.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/printer.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/printer.png index 72b8e276ce5..e494a120d21 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/printer.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/printer.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/radio.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/radio.png index 72061385f7f..d410258186a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/radio.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/radio.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo-rtl.png index d94233e7b19..0a3a0b5f178 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo.png index 04e25b50286..7320b48859f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/redo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/removeformat.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/removeformat.png index 211edf00203..3e747d17948 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/removeformat.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/removeformat.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/replace.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/replace.png index fc0bce5a9d2..3f60c59c15c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/replace.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/replace.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/resize-br.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/resize-br.png index 3995b58780f..7d79eeeaba2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/resize-br.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/resize-br.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/save.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/save.png index 9c69fd153c3..0f4fa912c9f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/save.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/save.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/scayt.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/scayt.png index 91d5d1b9387..2412820dd86 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/scayt.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/scayt.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select-rtl.png index d91227e08a5..e0ab8316d52 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select.png index 3a3295abab9..34e27b98c3a 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/select.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/selectall.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/selectall.png index fb86b32229f..e1d8b42af1f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/selectall.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/selectall.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks-rtl.png index 987c6a2d65f..014b370360c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks.png index 987c6a2d65f..014b370360c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/showblocks.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/smiley.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/smiley.png index c438f807142..1042ac50895 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/smiley.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/smiley.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source-rtl.png index d78bbc5fadd..36a91417347 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source.png index d78bbc5fadd..36a91417347 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source2.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source2.png index ed99e78dd5d..25e811a3945 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source2.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/source2.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/specialchar.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/specialchar.png index 679eff2db90..d8b63408e56 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/specialchar.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/specialchar.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/spellchecker.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/spellchecker.png index 352110f9473..151281833ad 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/spellchecker.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/spellchecker.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/strike.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/strike.png index ffabbd7a7d0..9012a37c9bd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/strike.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/strike.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/subscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/subscript.png index 556f4c24344..7fcd9f0b838 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/subscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/subscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/superscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/superscript.png index 61671d36799..73946d4842b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/superscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/superscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/table.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/table.png index 6047a46079a..a8546f0f1ec 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/table.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/table.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates-rtl.png index ef18416f02e..5db84743a73 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates.png index ef18416f02e..5db84743a73 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/templates.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textalt.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textalt.png index 16a84995061..cc2f8642ab0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textalt.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textalt.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea-rtl.png index 67bc88d38d0..4814834cd1d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea.png index 67bc88d38d0..4814834cd1d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textarea.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textcolor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textcolor.png index 6900ef730e5..01a85d0e0e3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textcolor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textcolor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textfield.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textfield.png index dcc3236e361..064a73d0586 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textfield.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/textfield.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/underline.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/underline.png index 8c041b60d73..af0dea6641d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/underline.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/underline.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo-rtl.png index 69ee7f2a45b..05314c57e58 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo.png index 360dc88a4e2..bd4b5add9e4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/undo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/unlink.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/unlink.png index 11b3df214a6..3861259be4f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/unlink.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/icons/unlink.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/screenshot.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/screenshot.png index 5222c7f5194..e843fb069ba 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/screenshot.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/ozone/screenshot.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/about.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/about.png index 30671d563a7..0ab8373ce92 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/about.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/about.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor-rtl.png index 546cfb4e2bf..c5549eb6b7d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor.png index 546cfb4e2bf..c5549eb6b7d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/anchor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bgcolor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bgcolor.png index 41bfbcc2d8d..a52e973c4a6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bgcolor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bgcolor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidiltr.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidiltr.png index a60ebe3f3b0..7d8b219161d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidiltr.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidiltr.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidirtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidirtl.png index faab002c2eb..1c39980b782 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidirtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bidirtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/blockquote.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/blockquote.png index 26533cbc5e5..793d3645f81 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/blockquote.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/blockquote.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bold.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bold.png index af67b75b2e7..3ae0a0b3730 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bold.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bold.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist-rtl.png index fb11f8f0513..fa41a8ef81d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist.png index 22a755fb1e3..7ca18e127e0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/bulletedlist.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/button.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/button.png index bc9bdc840f2..0f3a4c2495e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/button.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/button.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/checkbox.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/checkbox.png index 577104974fb..335a2ed71aa 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/checkbox.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/checkbox.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy-rtl.png index 0cbce31f98b..719adbecf55 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy.png index 38f368dba93..ce29f1ec778 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/copy.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/creatediv.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/creatediv.png index 6df200bca7b..acfc09b080c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/creatediv.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/creatediv.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut-rtl.png index 283466aa8d2..4584cd587f3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut.png index 5fd355e2fbb..4584cd587f3 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/cut.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops-rtl.png index 61ac5edbaaf..a6349c0c725 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops.png index f1d3de47c66..f18416cb2ca 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/docprops.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find-rtl.png index be3f376ec2d..9fca1a4b73f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find.png index 27122d7100a..bbdfca770a8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/find.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/flash.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/flash.png index dbe0155d677..4c040b889dd 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/flash.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/flash.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/form.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/form.png index 6d6d6929542..23b4c5988f7 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/form.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/form.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/hiddenfield.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/hiddenfield.png index 7925396e78c..aaee391bc08 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/hiddenfield.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/hiddenfield.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/horizontalrule.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/horizontalrule.png index c623c9a2832..357dae6d862 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/horizontalrule.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/horizontalrule.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/iframe.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/iframe.png index 5e3a4e7101a..b9ab7c2e159 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/iframe.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/iframe.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/image.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/image.png index cb91df0cc6e..867f1d3755f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/image.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/image.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/imagebutton.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/imagebutton.png index e72377bed09..f0b7c39436b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/imagebutton.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/imagebutton.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent-rtl.png index 6c3650bc7f1..96a17127042 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent.png index ce006a6d8fb..9a9c683ed81 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/indent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/italic.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/italic.png index b1ca9c944b7..592326f9d0c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/italic.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/italic.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyblock.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyblock.png index 157f985ec4f..1309da681f8 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyblock.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyblock.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifycenter.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifycenter.png index a2e469f7780..d07dac190ec 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifycenter.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifycenter.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyleft.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyleft.png index f4b44b845ff..9c16c0ae3c5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyleft.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyleft.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyright.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyright.png index 81af9b42dc6..cf9de40b6ce 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyright.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/justifyright.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/link.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/link.png index 823ece51370..09e57535c39 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/link.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/link.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/maximize.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/maximize.png index 070f3db9662..f22e91766a6 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/maximize.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/maximize.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage-rtl.png index c903dad6ba4..d5f8fc120ff 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage.png index 954884bf080..8e4e57b3b19 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/newpage.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist-rtl.png index a04280ce0de..76f60ec963b 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist.png index f71656490c2..60cf4f1d3c2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/numberedlist.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent-rtl.png index 76db013fe24..c96a1efaa80 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent.png index 826b3e572e7..7bf0715a156 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/outdent.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak-rtl.png index ea2110ca50f..6e5ae22af57 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak.png index 3b566a707a7..29ff3d6504e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pagebreak.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste-rtl.png index c9946f47e1c..32b5cdf6944 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste.png index ad1e046cf1e..66e3c288e0c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/paste.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword-rtl.png index 8c640425203..d7f653e21de 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword.png index e3f00bd187e..6b62cacd019 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastefromword.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext-rtl.png index 6997395bd37..fa89eabe63d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext.png index 4b2dc8fdafd..bc054fac5cc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/pastetext.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview-rtl.png index f5c9c45d915..b59f0689018 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview.png index ff082dd3393..1fbfdc3c9c2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/preview.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/print.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/print.png index 0a9191d6395..7343d38cd77 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/print.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/print.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/radio.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/radio.png index 6b988c096b0..1c871825d7c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/radio.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/radio.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo-rtl.png index 2954c006d9e..4ef2b415ec9 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo.png index cce1949e9b0..e88ca0ee6ad 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/redo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/removeformat.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/removeformat.png index 839b81b8562..2f831607714 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/removeformat.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/removeformat.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/replace.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/replace.png index f12db8d6809..a0f73ab1c0c 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/replace.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/replace.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/save.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/save.png index 66ff95c87e8..17bb0d3826e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/save.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/save.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/scayt.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/scayt.png index 799ebc24fab..e8342584228 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/scayt.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/scayt.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select-rtl.png index 22c44967c98..5260c1911e5 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select.png index 8187f6ddb86..161132b6128 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/select.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/selectall.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/selectall.png index a8eb1cb93cd..5ad52f2d209 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/selectall.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/selectall.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks-rtl.png index 47335669f55..6f43932a5aa 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks.png index f64a8aae35a..cd366a07daa 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/showblocks.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/smiley.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/smiley.png index bfe6243d1e8..4dc30e397db 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/smiley.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/smiley.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source-rtl.png index dfa1d5f69da..bf8b6a64ad1 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source.png index 3cfda2c8cf6..d4ea6379b6d 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/source.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/specialchar.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/specialchar.png index 151216a8de0..316c5fd95b2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/specialchar.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/specialchar.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/spellchecker.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/spellchecker.png index c257b8a3a71..e8342584228 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/spellchecker.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/spellchecker.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/strike.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/strike.png index 80c9ac8551d..6146c27363e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/strike.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/strike.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/subscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/subscript.png index 3f475fc663a..014c983c23e 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/subscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/subscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/superscript.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/superscript.png index 06cf8f26894..69c8f1d5dc4 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/superscript.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/superscript.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/table.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/table.png index 19df983c468..7787ec9e038 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/table.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/table.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates-rtl.png index d6e6e50b825..84d3c364bdc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates.png index 6290e087ae3..bf519173954 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/templates.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea-rtl.png index 50a6caf9bad..74507274903 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea.png index 0b76aa714ee..882c880b782 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textarea.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textcolor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textcolor.png index 24d2fce0758..db8d865ba97 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textcolor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textcolor.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textfield.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textfield.png index ccd1c543ded..e946fa454bb 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textfield.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/textfield.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/underline.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/underline.png index 1d1c9556119..0526bcac6e2 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/underline.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/underline.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo-rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo-rtl.png index d3f62adc7df..3eced7846e0 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo-rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo-rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo.png index 5971cd4fb0d..ca6e7104813 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/undo.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/unlink.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/unlink.png index b0555987cb4..665d11210e9 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/unlink.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/icons/unlink.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/comboBgHover.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/comboBgHover.png index 855425a01e8..05922a5087f 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/comboBgHover.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/comboBgHover.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/resizer.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/resizer.png index dab1dc7fbb0..e73017c2375 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/resizer.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/resizer.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/toolBgStriped.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/toolBgStriped.png index dde863c3af2..3fe852ec4bc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/toolBgStriped.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/custom/toolBgStriped.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides.png index 1042a61cf9f..9b80c3e62cf 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides_rtl.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides_rtl.png index d7f7b49fcc3..fdcb4540ecf 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides_rtl.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/images/dialog_sides_rtl.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/preview.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/preview.png index 0666024ceb1..be752497acc 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/preview.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/preview.png differ diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/uicolor.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/uicolor.png index 533eaee841f..55fe89b2063 100644 Binary files a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/uicolor.png and b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/ckeditor/4.5.3/skins/silver/preview/uicolor.png differ diff --git a/DNN_Platform.sln b/DNN_Platform.sln index 5db261f43e0..2b5ee8c5659 100644 --- a/DNN_Platform.sln +++ b/DNN_Platform.sln @@ -503,6 +503,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Caching", "Caching", "{EC1B EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider", "DNN Platform\Providers\CachingProviders\DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider\DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider.csproj", "{2C25580C-A971-4F0B-9F70-436A35C2473E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dnn.Modules.ResourceManager", "DNN Platform\Modules\ResourceManager\Dnn.Modules.ResourceManager.csproj", "{7D61A32C-0F21-453F-A981-BD8E5A3A5304}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HtmlEditorProviders", "HtmlEditorProviders", "{682824D2-B21A-4460-AC66-67BFFDD5A559}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DNNConnect.CKE", "DNNConnect.CKE", "{8BA6DD11-0CD5-4556-8853-282B3C1C3A06}" @@ -1923,6 +1925,30 @@ Global {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release-Net45|Any CPU.Build.0 = Release|Any CPU {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release-Net45|x86.ActiveCfg = Release|Any CPU {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release-Net45|x86.Build.0 = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Debug|Any CPU.Build.0 = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Debug|x86.ActiveCfg = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Debug|x86.Build.0 = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Release|Any CPU.ActiveCfg = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Release|Any CPU.Build.0 = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Release|x86.ActiveCfg = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Cloud_Release|x86.Build.0 = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug|x86.Build.0 = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug-Net45|Any CPU.ActiveCfg = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug-Net45|Any CPU.Build.0 = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug-Net45|x86.ActiveCfg = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Debug-Net45|x86.Build.0 = Debug|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release|Any CPU.Build.0 = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release|x86.ActiveCfg = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release|x86.Build.0 = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release-Net45|Any CPU.ActiveCfg = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release-Net45|Any CPU.Build.0 = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release-Net45|x86.ActiveCfg = Release|Any CPU + {7D61A32C-0F21-453F-A981-BD8E5A3A5304}.Release-Net45|x86.Build.0 = Release|Any CPU {AE7E021E-7C7B-4003-9BD6-5A04C781C277}.Cloud_Debug|Any CPU.ActiveCfg = Debug|Any CPU {AE7E021E-7C7B-4003-9BD6-5A04C781C277}.Cloud_Debug|Any CPU.Build.0 = Debug|Any CPU {AE7E021E-7C7B-4003-9BD6-5A04C781C277}.Cloud_Debug|x86.ActiveCfg = Debug|Any CPU @@ -2052,6 +2078,7 @@ Global {6928A9B1-F88A-4581-A132-D3EB38669BB0} = {29273BE6-1AA8-4970-98A0-41BFFEEDA67B} {EC1BEDFA-6DD4-48AD-9326-8274436539E6} = {5D82591D-1525-40A1-ACA3-1F89D817E9AD} {2C25580C-A971-4F0B-9F70-436A35C2473E} = {EC1BEDFA-6DD4-48AD-9326-8274436539E6} + {7D61A32C-0F21-453F-A981-BD8E5A3A5304} = {FDDC95FE-3341-4AED-A93E-7A5DF85A55C2} {682824D2-B21A-4460-AC66-67BFFDD5A559} = {5D82591D-1525-40A1-ACA3-1F89D817E9AD} {8BA6DD11-0CD5-4556-8853-282B3C1C3A06} = {682824D2-B21A-4460-AC66-67BFFDD5A559} {AE7E021E-7C7B-4003-9BD6-5A04C781C277} = {8BA6DD11-0CD5-4556-8853-282B3C1C3A06} diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx index a8049000200..8274440dc3b 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx @@ -374,7 +374,7 @@ Dropdown.propTypes = { autoHide: PropTypes.bool, value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), closeOnClick: PropTypes.bool, - prependWith: PropTypes.string, + prependWith: PropTypes.object, labelIsMultiLine: PropTypes.bool, title: PropTypes.string, onScrollUpdate: PropTypes.func, diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Grid.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Grid.jsx index 73069409461..1ee4ac6c4c3 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Grid.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Grid.jsx @@ -139,7 +139,7 @@ class Grid extends Component { } Grid.propTypes = { - dispatch: PropTypes.func.isRequired, + dispatch: PropTypes.func, permissions: PropTypes.object.isRequired, definitions: PropTypes.object.isRequired, localization: PropTypes.object, diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/index.jsx index fec9f028f05..76a425f89c7 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/index.jsx @@ -110,7 +110,7 @@ class RoleGroupFilter extends Component { } RoleGroupFilter.propTypes = { - dispatch: PropTypes.func.isRequired, + dispatch: PropTypes.func, service: PropTypes.object, localization: PropTypes.object, onChange: PropTypes.func.isRequired diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Suggestion/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Suggestion/index.jsx index f1b1f450c36..e2069f3ec72 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Suggestion/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/Suggestion/index.jsx @@ -109,7 +109,7 @@ class Suggestion extends Component { } Suggestion.propTypes = { - dispatch: PropTypes.func.isRequired, + dispatch: PropTypes.func, service: PropTypes.object, localization: PropTypes.object, onSelect: PropTypes.func.isRequired, diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/index.jsx index 719f91a60b1..fd073f1a230 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/index.jsx @@ -133,7 +133,7 @@ class PermissionGrid extends Component { } PermissionGrid.propTypes = { - dispatch: PropTypes.func.isRequired, + dispatch: PropTypes.func, permissions: PropTypes.object.isRequired, localization: PropTypes.object, className: PropTypes.string, diff --git a/SolutionInfo.cs b/SolutionInfo.cs index acded048c6a..a12ea0dee9c 100644 --- a/SolutionInfo.cs +++ b/SolutionInfo.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information + using System.Reflection; // General Information about an assembly is controlled through the following diff --git a/package.json b/package.json index 84adea68ad1..b0453099613 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "Dnn.AdminExperience/ClientSide/Themes.Web", "Dnn.AdminExperience/ClientSide/Users.Web", "Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables", - "Dnn.AdminExperience/ClientSide/Vocabularies.Web" + "Dnn.AdminExperience/ClientSide/Vocabularies.Web", + "Dnn Platform/Modules/ResourceManager/ResourceManager.Web" ], "devDependencies": { "lerna": "^3.16.4" diff --git a/yarn.lock b/yarn.lock index 6e5b9469ebe..ad1bf9d5a26 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,20 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/code-frame@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" + integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg== + dependencies: + "@babel/highlight" "^7.10.3" + +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/core@7.1.6": version "7.1.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" @@ -80,6 +94,25 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5" + integrity sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA== + dependencies: + "@babel/types" "^7.10.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/generator@^7.11.5": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" + integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== + dependencies: + "@babel/types" "^7.11.5" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -112,6 +145,18 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-create-class-features-plugin@^7.3.0", "@babel/helper-create-class-features-plugin@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" @@ -150,6 +195,24 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz#79316cd75a9fa25ba9787ff54544307ed444f197" + integrity sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.3" + "@babel/template" "^7.10.3" + "@babel/types" "^7.10.3" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -157,6 +220,20 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz#3a28f7b28ccc7719eacd9223b659fdf162e4c45e" + integrity sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg== + dependencies: + "@babel/types" "^7.10.3" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + "@babel/helper-hoist-variables@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" @@ -171,6 +248,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + "@babel/helper-module-imports@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" @@ -197,11 +281,23 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + "@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" @@ -230,6 +326,16 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/helper-simple-access@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" @@ -245,6 +351,30 @@ dependencies: "@babel/types" "^7.4.4" +"@babel/helper-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" + integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + "@babel/helper-wrap-function@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" @@ -273,11 +403,39 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/highlight@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" + integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== + dependencies: + "@babel/helper-validator-identifier" "^7.10.3" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.1.3", "@babel/parser@^7.1.6", "@babel/parser@^7.2.2", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== +"@babel/parser@^7.10.3", "@babel/parser@^7.7.0": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" + integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA== + +"@babel/parser@^7.10.4", "@babel/parser@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== + "@babel/plugin-proposal-async-generator-functions@^7.1.0", "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -295,6 +453,14 @@ "@babel/helper-create-class-features-plugin" "^7.3.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-class-properties@^7.3.0": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" @@ -431,6 +597,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-async-to-generator@^7.1.0", "@babel/plugin-transform-async-to-generator@^7.2.0", "@babel/plugin-transform-async-to-generator@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" @@ -976,6 +1149,24 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" +"@babel/template@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8" + integrity sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA== + dependencies: + "@babel/code-frame" "^7.10.3" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.2", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" @@ -991,6 +1182,36 @@ globals "^11.1.0" lodash "^4.17.11" +"@babel/traverse@^7.10.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/traverse@^7.7.0": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" + integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug== + dependencies: + "@babel/code-frame" "^7.10.3" + "@babel/generator" "^7.10.3" + "@babel/helper-function-name" "^7.10.3" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" @@ -1000,6 +1221,24 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.7.0": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" + integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.3" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -1008,6 +1247,32 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@dnnsoftware/dnn-react-common@9.7.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@dnnsoftware/dnn-react-common/-/dnn-react-common-2.1.2.tgz#8af42e5f4fe8075fb80b7f62d2b1f0893fe397d3" + integrity sha512-OvPmcaMGZbSnlxweT0jmhDe9lSiJYxNtHHht+mj8XHKts9g6/41RIP9EnCCbdaOt+bieuu15yG9EHI5aWHS++g== + dependencies: + interact.js "^1.2.8" + moment "^2.22.2" + raw-loader "0.5.1" + react-accessible-tooltip "^2.0.3" + react-collapse "^4.0.3" + react-custom-scrollbars "^4.2.1" + react-day-picker "^7.1.10" + react-height "^3.0.0" + react-modal "^3.5.1" + react-motion "^0.5.2" + react-scrollbar "^0.5.4" + react-slider "0.11.2" + react-tabs "2.3.0" + react-test-utils "0.0.1" + react-tooltip "^3.8.4" + react-widgets "^4.4.4" + redux-undo "^1.0.0-beta9" + scroll "^2.0.3" + shortid "^2.2.13" + throttle-debounce "^2.0.1" + "@emotion/cache@^10.0.9": version "10.0.9" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.9.tgz#e0c7b7a289f7530edcfad4dcf3858bd2e5700a6f" @@ -2559,6 +2824,11 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/knockout@^3.4.66": version "3.4.66" resolved "https://registry.yarnpkg.com/@types/knockout/-/knockout-3.4.66.tgz#9dcede87f6f1da3f0128ee495023af2521271572" @@ -2625,21 +2895,45 @@ "@webassemblyjs/helper-wasm-bytecode" "1.8.5" "@webassemblyjs/wast-parser" "1.8.5" +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@webassemblyjs/floating-point-hex-parser@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + "@webassemblyjs/helper-api-error@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + "@webassemblyjs/helper-buffer@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + "@webassemblyjs/helper-code-frame@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" @@ -2647,11 +2941,23 @@ dependencies: "@webassemblyjs/wast-printer" "1.8.5" +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/helper-fsm@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + "@webassemblyjs/helper-module-context@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" @@ -2660,11 +2966,23 @@ "@webassemblyjs/ast" "1.8.5" mamacro "^0.0.3" +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + "@webassemblyjs/helper-wasm-section@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" @@ -2675,6 +2993,16 @@ "@webassemblyjs/helper-wasm-bytecode" "1.8.5" "@webassemblyjs/wasm-gen" "1.8.5" +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/ieee754@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" @@ -2682,6 +3010,13 @@ dependencies: "@xtuc/ieee754" "^1.2.0" +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/leb128@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" @@ -2689,11 +3024,23 @@ dependencies: "@xtuc/long" "4.2.2" +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + "@webassemblyjs/utf8@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + "@webassemblyjs/wasm-edit@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" @@ -2708,6 +3055,20 @@ "@webassemblyjs/wasm-parser" "1.8.5" "@webassemblyjs/wast-printer" "1.8.5" +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/wasm-gen@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" @@ -2719,6 +3080,17 @@ "@webassemblyjs/leb128" "1.8.5" "@webassemblyjs/utf8" "1.8.5" +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/wasm-opt@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" @@ -2729,6 +3101,16 @@ "@webassemblyjs/wasm-gen" "1.8.5" "@webassemblyjs/wasm-parser" "1.8.5" +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wasm-parser@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" @@ -2741,6 +3123,18 @@ "@webassemblyjs/leb128" "1.8.5" "@webassemblyjs/utf8" "1.8.5" +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/wast-parser@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" @@ -2753,6 +3147,18 @@ "@webassemblyjs/helper-fsm" "1.8.5" "@xtuc/long" "4.2.2" +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + "@webassemblyjs/wast-printer@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" @@ -2762,6 +3168,15 @@ "@webassemblyjs/wast-parser" "1.8.5" "@xtuc/long" "4.2.2" +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2799,7 +3214,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4, accepts@~1.3.5: +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== @@ -2840,6 +3255,11 @@ acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.5, acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + add-px-to-style@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" @@ -2925,6 +3345,11 @@ ajv-keywords@^3.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== +ajv-keywords@^3.4.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.0.tgz#5c894537098785926d71e696114a53ce768ed773" + integrity sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw== + ajv@^5.0.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -2945,6 +3370,16 @@ ajv@^6.1.0, ajv@^6.5.3, ajv@^6.5.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.10.2: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -3029,6 +3464,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + app-root-dir@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" @@ -3147,6 +3590,15 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -3209,6 +3661,14 @@ array.prototype.flat@^1.2.1: es-abstract "^1.10.0" function-bind "^1.1.1" +array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + array.prototype.flatmap@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz#3103cd4826ef90019c9b0a4839b2535fa6faf4e9" @@ -3298,6 +3758,13 @@ async@^2.1.4, async@^2.4.1, async@^2.5.0: dependencies: lodash "^4.17.11" +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3313,6 +3780,13 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +attr-accept@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.3.tgz#48230c79f93790ef2775fcec4f0db0f5db41ca52" + integrity sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ== + dependencies: + core-js "^2.5.0" + autoprefixer@^9.4.7: version "9.5.1" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.5.1.tgz#243b1267b67e7e947f28919d786b50d3bb0fb357" @@ -3356,6 +3830,18 @@ babel-eslint@^10.0.1: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-helper-builder-react-jsx@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" @@ -4285,6 +4771,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.4" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" @@ -4316,6 +4807,22 @@ body-parser@1.18.3: raw-body "2.3.3" type-is "~1.6.16" +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -4370,6 +4877,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -4525,6 +5039,11 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cacache@^11.0.2, cacache@^11.3.2: version "11.3.2" resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" @@ -4566,6 +5085,27 @@ cacache@^12.0.0: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -4712,6 +5252,11 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chain-function@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" + integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== + chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -4802,6 +5347,40 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.1.5: optionalDependencies: fsevents "^1.2.7" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -4814,6 +5393,13 @@ chrome-trace-event@^1.0.0: dependencies: tslib "^1.9.0" +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -4899,6 +5485,15 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" @@ -5015,6 +5610,11 @@ commander@^2.18.0, commander@^2.19.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -5038,7 +5638,7 @@ compare-func@^1.3.1: array-ify "^1.0.0" dot-prop "^3.0.0" -component-emitter@^1.2.1: +component-emitter@^1.2.0, component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -5140,6 +5740,13 @@ content-disposition@0.5.2: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -5245,6 +5852,16 @@ cookie@0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -5262,6 +5879,13 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-to-clipboard@^3.0.5: + version "3.3.1" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + dependencies: + toggle-selection "^1.0.6" + core-js-compat@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.1.tgz#bff73ba31ca8687431b9c88f78d3362646fb76f0" @@ -5766,7 +6390,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -5904,7 +6528,7 @@ del@^3.0.0: pify "^3.0.0" rimraf "^2.2.8" -del@^4.1.0: +del@^4.1.0, del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== @@ -6096,7 +6720,7 @@ dom-css@^2.0.0: prefix-style "2.0.1" to-camel-case "1.0.0" -dom-helpers@^3.3.1, dom-helpers@^3.4.0: +dom-helpers@^3.2.0, dom-helpers@^3.3.1, dom-helpers@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== @@ -6300,7 +6924,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.1.0: +enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== @@ -6426,6 +7050,23 @@ es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13 is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -6435,6 +7076,15 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es5-shim@^4.5.13: version "4.5.13" resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.13.tgz#5d88062de049f8969f83783f4a4884395f21d28b" @@ -6462,6 +7112,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +es6-shim@0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.0.tgz#272d927950889eabe299927cdc9c0010b7bfc00a" + integrity sha1-Jy2SeVCInqvimZJ83JwAELe/wAo= + es6-shim@^0.35.5: version "0.35.5" resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" @@ -6497,6 +7152,14 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.5.0" +eslint-import-resolver-node@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + eslint-import-resolver-webpack@^0.10.1: version "0.10.1" resolved "https://www.myget.org/F/dnn-software-public/npm/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.10.1.tgz#4cbceed2c0c43e488a74775c30861e58e00fb290" @@ -6559,14 +7222,22 @@ eslint-module-utils@^2.4.0: debug "^2.6.8" pkg-dir "^2.0.0" -eslint-plugin-babel@^5.2.1: +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-babel@5.3.0, eslint-plugin-babel@^5.2.1: version "5.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023" integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w== dependencies: eslint-rule-composer "^0.3.0" -eslint-plugin-filenames@^1.0.0, eslint-plugin-filenames@^1.3.2: +eslint-plugin-filenames@1.3.2, eslint-plugin-filenames@^1.0.0, eslint-plugin-filenames@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz#7094f00d7aefdd6999e3ac19f72cea058e590cf7" integrity sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w== @@ -6576,6 +7247,25 @@ eslint-plugin-filenames@^1.0.0, eslint-plugin-filenames@^1.3.2: lodash.snakecase "4.1.1" lodash.upperfirst "4.3.1" +eslint-plugin-import@2.21.2: + version "2.21.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c" + integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.3" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + eslint-plugin-import@^2.14.0: version "2.17.2" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz#d227d5c6dc67eca71eb590d2bb62fb38d86e9fcb" @@ -7012,13 +7702,49 @@ express@^4.16.2, express@^4.16.3, express@^4.16.4: utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: - is-extendable "^0.1.0" - + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" @@ -7092,6 +7818,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^2.0.2, fast-glob@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" @@ -7179,6 +7910,11 @@ fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" +fetch-ie8@1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/fetch-ie8/-/fetch-ie8-1.4.2.tgz#6c02911a9265be12521d0464f98416fcddc0af2a" + integrity sha1-bAKRGpJlvhJSHQRk+YQW/N3Aryo= + fetch-mock@^7.2.5: version "7.3.3" resolved "https://registry.yarnpkg.com/fetch-mock/-/fetch-mock-7.3.3.tgz#d1abdf309cdef8adb4b0fc0596d3f97fcfbd4528" @@ -7256,6 +7992,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" @@ -7269,6 +8012,19 @@ finalhandler@1.1.1: statuses "~1.4.0" unpipe "~1.0.0" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -7323,6 +8079,16 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -7399,6 +8165,15 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -7413,6 +8188,11 @@ format@^0.2.2: resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= +formidable@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -7497,6 +8277,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -7545,6 +8330,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-pkg-repo@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" @@ -7654,6 +8444,13 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -7729,7 +8526,7 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -global@^4.3.0, global@^4.3.2: +global@^4.3.0, global@^4.3.2, global@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= @@ -7883,6 +8680,11 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -8091,6 +8893,11 @@ html-entities@^1.2.0, html-entities@^1.2.1: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + html-minifier@^3.5.20: version "3.5.21" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" @@ -8170,6 +8977,28 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-parser-js@>=0.4.0: version "0.5.0" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" @@ -8183,7 +9012,7 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" -http-proxy-middleware@^0.19.1: +http-proxy-middleware@0.19.1, http-proxy-middleware@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== @@ -8361,7 +9190,7 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-local@^2.0.0: +import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -8419,6 +9248,11 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= +inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -8489,7 +9323,7 @@ internal-ip@^3.0.1: default-gateway "^2.6.0" ipaddr.js "^1.5.2" -internal-ip@^4.2.0: +internal-ip@^4.2.0, internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== @@ -8497,7 +9331,7 @@ internal-ip@^4.2.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.0.0, interpret@^1.1.0, interpret@^1.2.0: +interpret@1.2.0, interpret@^1.0.0, interpret@^1.1.0, interpret@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== @@ -8529,11 +9363,21 @@ ipaddr.js@1.9.0, ipaddr.js@^1.5.2, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -8578,6 +9422,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" @@ -8598,6 +9449,11 @@ is-callable@^1.1.3, is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -8722,7 +9578,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -8753,6 +9609,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -8827,6 +9688,13 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + is-resolvable@^1.0.0, is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -8854,6 +9722,11 @@ is-string@^1.0.4: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -9772,7 +10645,7 @@ loader-fs-cache@^1.0.0: find-cache-dir "^0.1.1" mkdirp "0.5.1" -loader-runner@^2.3.0: +loader-runner@^2.3.0, loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== @@ -9968,16 +10841,26 @@ lodash@4.17.11, lodash@^4.14.2, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -lodash@^4.17.14, lodash@^4.2.1: +lodash@^4.17.13, lodash@^4.17.14, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + loglevel@^1.4.1, loglevel@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po= +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -10263,7 +11146,7 @@ merge2@^1.2.3: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== -methods@~1.1.2: +methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -10312,7 +11195,7 @@ mime@1.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== -mime@^1.4.1: +mime@1.6.0, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -10322,6 +11205,11 @@ mime@^2.0.3, mime@^2.3.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78" integrity sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg== +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -10383,6 +11271,11 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -10449,6 +11342,13 @@ mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5. dependencies: minimist "0.0.8" +mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -10595,6 +11495,11 @@ neo-async@^2.5.0, neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== +neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" @@ -10651,6 +11556,11 @@ node-forge@0.7.5: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + node-gyp@^5.0.2: version "5.0.3" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.3.tgz#80d64c23790244991b6d44532f0a351bedd3dd45" @@ -10702,6 +11612,35 @@ node-int64@^0.4.0: util "^0.11.0" vm-browserify "0.0.4" +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -10785,7 +11724,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -10933,12 +11872,17 @@ object-inspect@^1.6.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -11050,6 +11994,16 @@ object.values@^1.0.4, object.values@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -11150,7 +12104,7 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^3.0.0: +os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== @@ -11264,6 +12218,13 @@ p-reduce@^1.0.0: resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -11398,7 +12359,7 @@ parse5@^5.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== -parseurl@~1.3.2: +parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -11413,6 +12374,11 @@ path-browserify@0.0.0: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -11504,6 +12470,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -11602,6 +12573,15 @@ portfinder@^1.0.20, portfinder@^1.0.9: debug "^2.2.0" mkdirp "0.5.x" +portfinder@^1.0.26: + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -12155,7 +13135,7 @@ prop-types@15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" -prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -12196,6 +13176,14 @@ proxy-addr@~2.0.4: forwarded "~0.1.2" ipaddr.js "1.9.0" +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -12278,11 +13266,16 @@ qs@6.5.2, qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -qs@^6.5.2: +qs@6.7.0, qs@^6.5.2: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.5.1: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -12310,6 +13303,13 @@ raf@^3.1.0, raf@^3.4.0: dependencies: performance-now "^2.1.0" +rafl@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740" + integrity sha1-/pMPdYIRAg1H44gV9Rlqi+QVB0A= + dependencies: + global "~4.3.0" + railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" @@ -12328,7 +13328,7 @@ randexp@0.4.6: discontinuous-range "1.0.0" ret "~0.1.10" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -12348,6 +13348,11 @@ range-parser@^1.0.3, range-parser@~1.2.0: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + raw-body@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" @@ -12358,6 +13363,21 @@ raw-body@2.3.3: iconv-lite "0.4.23" unpipe "1.0.0" +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= + raw-loader@2.0.0, raw-loader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26" @@ -12534,6 +13554,14 @@ react-draggable@^3.1.1: classnames "^2.2.5" prop-types "^15.6.0" +react-dropzone@6.2.4: + version "6.2.4" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-6.2.4.tgz#6a63f7eb5fdd0ed5d85b0c8c3b8ecc3d3bb661fe" + integrity sha512-fkG/Nxalhai12FdNw9RZ6dIr1SctmRXWekkSoOKAhNDAECwDg4HWKuvvZVkEAedGNeAgmkQRVoqNfT8uje1zfg== + dependencies: + attr-accept "^1.1.3" + prop-types "^15.6.2" + react-error-overlay@^5.1.4: version "5.1.5" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.5.tgz#884530fd055476c764eaa8ab13b8ecf1f57bbf2c" @@ -12561,6 +13589,13 @@ react-height@3.0.0, react-height@^3.0.0: dependencies: prop-types "15.5.8" +react-height@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/react-height/-/react-height-3.0.1.tgz#2252652fb59468254751224ef1e94a2bb6e90d20" + integrity sha512-tduavxh0UamJoK3MTguUxz7zu+hpuZ1m7JivfGKXUF1Wx8D5lURsDkrxzE5TfpzDOXEeqswH7n/P0wfKRUjYAQ== + dependencies: + prop-types "^15.5.8" + react-helmet-async@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-0.2.0.tgz#d20d8725c1dcdcc95d54e281a1040af47c3abffa" @@ -12770,6 +13805,14 @@ react-syntax-highlighter@^8.0.1: prismjs "^1.8.4" refractor "^2.4.1" +react-tabs@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-2.3.0.tgz#0c37e786f288d369824acd06a96bd1818ab8b0dc" + integrity sha512-pYaefgVy76/36AMEP+B8YuVVzDHa3C5UFZ3REU78zolk0qMxEhKvUFofvDCXyLZwf0RZjxIfiwok1BEb18nHyA== + dependencies: + classnames "^2.2.0" + prop-types "^15.5.0" + react-tabs@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.0.0.tgz#60311a17c755eb6aa9b3310123e67db421605127" @@ -12821,6 +13864,25 @@ react-tooltip@^3.8.4: classnames "^2.2.5" prop-types "^15.6.0" +react-tooltip@^4.2.6: + version "4.2.6" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.6.tgz#a3d5f0d1b0c597c0852ba09c5e2af0019b7cfc70" + integrity sha512-KX/zCsPFCI8RuulzBX86U+Ur7FvgGNRBdb7dUu0ndo8Urinn48nANq9wfq4ABlehweQjPzLl7XdNAtLKza+I3w== + dependencies: + prop-types "^15.7.2" + uuid "^7.0.3" + +react-transition-group@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" + integrity sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q== + dependencies: + chain-function "^1.0.0" + dom-helpers "^3.2.0" + loose-envify "^1.3.1" + prop-types "^15.5.6" + warning "^3.0.0" + react-transition-group@^2.4.0: version "2.9.0" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" @@ -13026,6 +14088,19 @@ read@1, read@~1.0.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.3.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9" @@ -13054,6 +14129,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -13537,6 +14619,13 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.3.2, resolve@^1.5.0 dependencies: path-parse "^1.0.6" +resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + resolve@^1.4.0: version "1.12.0" resolved "https://www.myget.org/F/dnn-software-public/npm/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" @@ -13562,6 +14651,11 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -13728,6 +14822,13 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +scroll@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.3.tgz#0951b785544205fd17753bc3d294738ba16fc2ab" + integrity sha512-3ncZzf8gUW739h3LeS68nSssO60O+GGjT3SxzgofQmT8PIoyHzebql9HHPJopZX8iT6TKOdwaWFMqL6LzUN3DQ== + dependencies: + rafl "~1.2.1" + scroll@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scroll/-/scroll-3.0.1.tgz#d5afb59fb3592ee3df31c89743e78b39e4cd8a26" @@ -13750,6 +14851,13 @@ selfsigned@^1.10.4, selfsigned@^1.9.1: dependencies: node-forge "0.7.5" +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" @@ -13765,7 +14873,7 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== -semver@^6.2.0: +semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -13794,11 +14902,37 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@^1.4.0, serialize-javascript@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + serve-favicon@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" @@ -13833,6 +14967,16 @@ serve-static@1.13.2: parseurl "~1.3.2" send "0.16.2" +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + services@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/services/-/services-0.0.3.tgz#337dfcae89a171a11fbfc1721b6962166bec0763" @@ -13876,6 +15020,11 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -14035,6 +15184,18 @@ sockjs-client@1.3.0: json3 "^3.3.2" url-parse "^1.4.3" +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + sockjs@0.3.19: version "0.3.19" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" @@ -14043,6 +15204,15 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + socks-proxy-agent@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" @@ -14098,6 +15268,14 @@ source-map-support@^0.5.6, source-map-support@~0.5.10: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -14179,6 +15357,17 @@ spdy@^4.0.0: select-hose "^2.0.0" spdy-transport "^3.0.0" +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -14255,7 +15444,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= @@ -14327,7 +15516,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -14379,6 +15568,22 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -14414,7 +15619,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -14493,6 +15698,29 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +superagent@^3.2.1: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supports-color@6.1.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -14505,13 +15733,6 @@ supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-co dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - svg-url-loader@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-2.3.2.tgz#dd86b26c19fe3b914f04ea10ef39594eade04464" @@ -14572,7 +15793,7 @@ tapable@^0.1.8: resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q= -tapable@^1.0.0, tapable@^1.1.0: +tapable@^1.0.0, tapable@^1.1.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== @@ -14655,6 +15876,21 @@ terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.1: webpack-sources "^1.1.0" worker-farm "^1.5.2" +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + terser@^3.16.1: version "3.17.0" resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" @@ -14664,6 +15900,15 @@ terser@^3.16.1: source-map "~0.6.1" source-map-support "~0.5.10" +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -14819,6 +16064,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -14836,6 +16088,16 @@ to-space-case@^1.0.0: dependencies: to-no-case "^1.0.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tough-cookie@^2.3.3, tough-cookie@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -14889,6 +16151,16 @@ tryer@^1.0.0: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -14923,7 +16195,7 @@ type-fest@^0.3.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== -type-is@~1.6.16: +type-is@~1.6.16, type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -15258,6 +16530,21 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + v8-compile-cache@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" @@ -15345,6 +16632,11 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -15373,6 +16665,13 @@ warning@^4.0.2: dependencies: loose-envify "^1.0.0" +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + watchpack@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -15382,6 +16681,17 @@ watchpack@^1.5.0: graceful-fs "^4.1.2" neo-async "^2.5.0" +watchpack@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" + wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" @@ -15434,6 +16744,15 @@ webpack-bundle-size-analyzer@3.0.0, webpack-bundle-size-analyzer@^3.0.0: filesize "^3.6.1" humanize "0.0.9" +webpack-bundle-size-analyzer@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-size-analyzer/-/webpack-bundle-size-analyzer-3.1.0.tgz#ff4a4a17d34b8858b56eecb87826365395264669" + integrity sha512-8WlTT6uuCxZgZYNnCB0pRGukWRGH+Owg+HsqQUe1Zexakdno1eDYO+lE7ihBo9G0aCCZCJa8JWjYr9eLYfZrBA== + dependencies: + commander "^2.19.0" + filesize "^3.6.1" + humanize "0.0.9" + webpack-cli@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.2.tgz#17d7e01b77f89f884a2bbf9db545f0f6a648e746" @@ -15450,6 +16769,23 @@ webpack-cli@3.1.2: v8-compile-cache "^2.0.2" yargs "^12.0.2" +webpack-cli@3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + webpack-cli@^3.1.2: version "3.3.2" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.2.tgz#aed2437b0db0a7faa2ad28484e166a5360014a91" @@ -15487,6 +16823,17 @@ webpack-dev-middleware@^3.5.1, webpack-dev-middleware@^3.6.2: range-parser "^1.0.3" webpack-log "^2.0.0" +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + webpack-dev-server@3.1.14: version "3.1.14" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz#60fb229b997fc5a0a1fc6237421030180959d469" @@ -15523,6 +16870,45 @@ webpack-dev-server@3.1.14: webpack-log "^2.0.0" yargs "12.0.2" +webpack-dev-server@3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + webpack-dev-server@^3.1.14: version "3.3.1" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.3.1.tgz#7046e49ded5c1255a82c5d942bcdda552b72a62d" @@ -15590,6 +16976,14 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0: source-list-map "^2.0.0" source-map "~0.6.1" +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + webpack@4.31.0, webpack@^4.29.0, webpack@^4.31.0: version "4.31.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.31.0.tgz#ae201d45f0571336e42d1c2b5c8ab56c4d3b0c63" @@ -15620,6 +17014,42 @@ webpack@4.31.0, webpack@^4.29.0, webpack@^4.31.0: watchpack "^1.5.0" webpack-sources "^1.3.0" +webpack@4.43.0: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.1" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + websocket-driver@>=0.5.1: version "0.7.0" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" @@ -15731,6 +17161,15 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -15807,7 +17246,7 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -ws@^6.0.0: +ws@^6.0.0, ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== @@ -15864,6 +17303,14 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^13.1.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@12.0.2: version "12.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" @@ -15899,3 +17346,36 @@ yargs@12.0.5, yargs@^12.0.1, yargs@^12.0.2, yargs@^12.0.5: which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2"