diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Data/ELFinderJsonDataResult.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Data/ELFinderJsonDataResult.cs new file mode 100644 index 0000000..7d7b81d --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Data/ELFinderJsonDataResult.cs @@ -0,0 +1,71 @@ +using ELFinder.Connector.Web.Serialization; +using ELFinder.Connector.Web.Serialization.Values; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Formatters.Json.Internal; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Net.Http.Headers; +using Newtonsoft.Json; +using System; +using System.IO; +using System.Text; +using System.Threading.Tasks; + +namespace ELFinder.Connector.ASPNetCore.ActionResults.Data +{ + + /// + /// ELFInder Json data result + /// + public class ELFinderJsonDataResult : JsonResult + { + + #region Constructors + + /// + /// Create a new instance + /// + //public ELFinderJsonDataResult() + //{ + //} + + /// + /// Create a new instance + /// + /// Data + public ELFinderJsonDataResult(object data):base(data) + { + } + + #endregion + + #region Overrides + + /// + /// Enables processing of the result of an action method by a custom type that inherits from the class. + /// + /// The context within which the result is executed.The parameter is null. + public override Task ExecuteResultAsync(ActionContext context) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + var services = context.HttpContext.RequestServices; + var executor = services.GetRequiredService(); + return executor.ExecuteAsync(context, this); + } + + /// + /// Enables processing of the result of an action method by a custom type that inherits from the class. + /// + /// The context within which the result is executed.The parameter is null. + public override void ExecuteResult(ActionContext context) + { + ExecuteResultAsync(context); + } + + #endregion + + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Data/ELFinderJsonResultExecutor.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Data/ELFinderJsonResultExecutor.cs new file mode 100644 index 0000000..05060d4 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Data/ELFinderJsonResultExecutor.cs @@ -0,0 +1,162 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Buffers; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.Internal; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Microsoft.Net.Http.Headers; +using Newtonsoft.Json; +using ELFinder.Connector.Web.Serialization.Values; +using ELFinder.Connector.Web.Serialization; +using Microsoft.AspNetCore.Mvc.Formatters.Json.Internal; +using Microsoft.AspNetCore.Mvc; + +namespace ELFinder.Connector.ASPNetCore.ActionResults.Data +{ + /// + /// ELFInder Json Result Executor + /// Executes a to write to the response. + /// + public class ELFinderJsonResultExecutor + { + private static readonly string DefaultContentType = new MediaTypeHeaderValue("application/json") + { + Encoding = Encoding.UTF8 + }.ToString(); + + private readonly IArrayPool _charPool; + + /// + /// Creates a new . + /// + /// The . + /// The . + /// The . + /// The for creating buffers. + public ELFinderJsonResultExecutor( + IHttpResponseStreamWriterFactory writerFactory, + ILogger logger, + IOptions options, + ArrayPool charPool) + { + if (writerFactory == null) + { + throw new ArgumentNullException(nameof(writerFactory)); + } + + if (logger == null) + { + throw new ArgumentNullException(nameof(logger)); + } + + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + + if (charPool == null) + { + throw new ArgumentNullException(nameof(charPool)); + } + + WriterFactory = writerFactory; + Logger = logger; + Options = options.Value; + _charPool = new JsonArrayPool(charPool); + } + + /// + /// Gets the . + /// + protected ILogger Logger { get; } + + /// + /// Gets the . + /// + protected MvcJsonOptions Options { get; } + + /// + /// Gets the . + /// + protected IHttpResponseStreamWriterFactory WriterFactory { get; } + + /// + /// Executes the and writes the response. + /// + /// The . + /// The . + /// A which will complete when writing has completed. + public Task ExecuteAsync(ActionContext context, JsonResult result) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (result == null) + { + throw new ArgumentNullException(nameof(result)); + } + + var response = context.HttpContext.Response; + + string resolvedContentType = null; + Encoding resolvedContentTypeEncoding = null; + ResponseContentTypeHelper.ResolveContentTypeAndEncoding( + result.ContentType, + response.ContentType, + DefaultContentType, + out resolvedContentType, + out resolvedContentTypeEncoding); + + response.ContentType = resolvedContentType; + + if (result.StatusCode != null) + { + response.StatusCode = result.StatusCode.Value; + } + + var serializerSettings = result.SerializerSettings ?? Options.SerializerSettings; + + // Logger.JsonResultExecuting(result.Value); + using (var writer = WriterFactory.CreateWriter(response.Body, resolvedContentTypeEncoding)) + { + using (var jsonWriter = new JsonTextWriter(writer)) + { + jsonWriter.ArrayPool = _charPool; + jsonWriter.CloseOutput = false; + + var jsonSerializer = GetJsonSerializer(); //JsonSerializer.Create(serializerSettings); + jsonSerializer.Serialize(jsonWriter, result.Value); + } + } + + return TaskCache.CompletedTask; + } + + /// + /// Get the Json serializer + /// + /// Result + protected JsonSerializer GetJsonSerializer() + { + + // Get default serializer + var serializer = new JsonSerializer(); + + // Add converters + serializer.Converters.Add(new ELFinderResponseBooleanValueConverter()); + + // Set contract resolver + serializer.ContractResolver = new ELFinderResponseContractResolver(); + + // Return it + return serializer; + + } + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/Common/ELFinderContentCommandStreamResult.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/Common/ELFinderContentCommandStreamResult.cs new file mode 100644 index 0000000..c57314c --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/Common/ELFinderContentCommandStreamResult.cs @@ -0,0 +1,96 @@ +using ELFinder.Connector.Commands.Results.Content.Common; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Internal; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace ELFinder.Connector.ASPNetCore.ActionResults.Files.Common +{ + + /// + /// ELFinder content command stream result + /// + public abstract class ELFinderContentCommandStreamResult : FileStreamResult + where TResult : BaseFileContentResult + { + + #region Properties + + /// + /// Command result + /// + public TResult CommandResult { get; } + + #endregion + + #region Constructors + + /// + /// Create a new instance + /// + /// Command result + protected ELFinderContentCommandStreamResult(TResult commandResult) : + base(commandResult.GetContentStream(), commandResult.ContentType) + { + + // Assign values + CommandResult = commandResult; + + } + + #endregion + + #region Virtual methods + + /// + /// Set content headers + /// + /// Controller context + /// Response + protected virtual void SetContentHeaders(ActionContext context, HttpResponse response) + { + + // Set content type + //context.HttpContext.Response.ContentType= ContentType; + response.ContentType = ContentType; + + } + + #endregion + + #region Overrides + + /// + /// Execute result + /// + /// Controller context + public override void ExecuteResult(ActionContext context) + { + + // Validate context + if (context == null) throw new ArgumentNullException(nameof(context)); + + // Get response + var response = context.HttpContext.Response; + + // Set content headers + SetContentHeaders(context, response); + + // Write file + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + var executor = context.HttpContext.RequestServices.GetRequiredService(); + executor.ExecuteAsync(context, this); + + + } + + #endregion + + } + +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/ELFinderFileDownloadResult.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/ELFinderFileDownloadResult.cs new file mode 100644 index 0000000..73436a5 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/ELFinderFileDownloadResult.cs @@ -0,0 +1,85 @@ +using ELFinder.Connector.ASPNetCore.ActionResults.Files.Common; +using ELFinder.Connector.ASPNetCore.Extensions; +using ELFinder.Connector.Commands.Results.Content; +using ELFinder.Connector.Web.Extensions; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System.Net; + +namespace ELFinder.Connector.ASPNetCore.ActionResults.Files +{ + + /// + /// ELFinder file download result + /// + public class ELFinderFileDownloadResult : ELFinderContentCommandStreamResult + { + + #region Constructors + + /// + /// Create a new instance + /// + /// Command result + public ELFinderFileDownloadResult(FileCommandResult commandResult) + : base(commandResult) + { + } + + #endregion + + #region Overrides + + /// + /// Set content headers + /// + /// Controller context + /// Response + protected override void SetContentHeaders(ActionContext context, HttpResponse response) + { + + // Call base method + base.SetContentHeaders(context, response); + + // Encode file name + //var encodedFileName = HttpUtility.UrlEncode(CommandResult.File.Name); + var encodedFileName = WebUtility.UrlEncode(CommandResult.File.Name); + + // Compute file name disposition value + // IE < 9 does not support RFC 6266 (RFC 2231/RFC 5987) + var fileNameDisposition = context.HttpContext.Request.IsFromMSIE() + ? $"filename=\"{encodedFileName}\"" + : $"filename*=UTF-8\'\'{encodedFileName}"; + + // Compute content disposition + string contentDisposition; + if (CommandResult.IsDownload) + { + + // Download attachment disposition + contentDisposition = "attachment; " + fileNameDisposition; + } + else + { + + // Check if content is inline or should be set as attachment + contentDisposition = + (CommandResult.IsInlineFile() + ? "inline; " + : "attachment; ") + fileNameDisposition; + + } + + // Set headers + response.Headers["Content-Disposition"] = contentDisposition; + response.Headers["Content-Location"] = CommandResult.File.Name; + response.Headers["Content-Transfer-Encoding"] = "binary"; + response.Headers["Content-Length"] = CommandResult.File.Length.ToString(); + + } + + #endregion + + } + +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/ELFinderGetThumbnailResult.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/ELFinderGetThumbnailResult.cs new file mode 100644 index 0000000..31311d9 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ActionResults/Files/ELFinderGetThumbnailResult.cs @@ -0,0 +1,91 @@ +using ELFinder.Connector.ASPNetCore.ActionResults.Files.Common; +using ELFinder.Connector.Commands.Results.Image.Thumbnails; +using ELFinder.Connector.Drivers.FileSystem.Utils; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; + +namespace ELFinder.Connector.ASPNetCore.ActionResults.Files +{ + + /// + /// ELFinder get thumbnail result + /// + public class ELFinderGetThumbnailResult : ELFinderContentCommandStreamResult + { + + #region Constructors + + /// + /// Create a new instance + /// + /// Command result + public ELFinderGetThumbnailResult(GetThumbnailResult commandResult) : + base(commandResult) + { + } + + #endregion + + #region Overrides + + /// + /// Set content headers + /// + /// Controller context + /// Response + protected override void SetContentHeaders(ActionContext context, HttpResponse response) + { + + // Call base method + base.SetContentHeaders(context, response); + + // Get info + var lastModified = CommandResult.File.LastWriteTimeUtc; + var fileName = CommandResult.File.Name; + var eTag = GetFileETag(fileName, lastModified); + + // Get if file is considered modified + //if (HttpCacheHelper.ReturnNotModified(eTag, lastModified, context)) + //{ + + // // Not modified + // response.StatusCode = (int)HttpStatusCode.NotModified; + // response.StatusDescription = "Not Modified"; + // response.Headers.Add("Content-Length", "0"); + // response.Cache.SetCacheability(HttpCacheability.Public); + // response.Cache.SetLastModified(lastModified); + // response.Cache.SetETag(eTag); + + //} + //else + //{ + + // // Modified + // response.Headers["ETag"] = eTag; + // response.Headers["Last-Modified"] = lastModified.ToString("R"); + + //} + + } + + #endregion + + #region Static methods + + /// + /// Get file ETag + /// + /// File name + /// Modified date + /// Result ETag + private static string GetFileETag(string fileName, DateTime modified) + { + return $"\"{FileSystemUtils.GetFileMd5(fileName, modified)}\""; + } + + #endregion + + } + +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Config/DefaultASPNetConnectorConfig.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Config/DefaultASPNetConnectorConfig.cs new file mode 100644 index 0000000..e1c31ab --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Config/DefaultASPNetConnectorConfig.cs @@ -0,0 +1,44 @@ +using ELFinder.Connector.Config; +using System.IO; + +namespace ELFinder.Connector.ASPNetCore.Config +{ + + /// + /// Default connector config for ASP.Net + /// + public static class DefaultASPNetConnectorConfig + { + + #region Static methods + + /// + /// Create default configuration instance + /// + /// Result config + public static ELFinderConfig Create() + { + + var config = new ELFinderConfig( + Directory.GetCurrentDirectory() + @"\App_Data", + //HostingEnvironment.MapPath("~/App_Data"), + thumbnailsUrl: "Thumbnails/" + ); + + config.RootVolumes.Add( + new ELFinderRootVolumeConfigEntry( + Directory.GetCurrentDirectory() + @"~\App_Data", + isLocked: false, + isReadOnly: false, + isShowOnly: false, + maxUploadSizeKb: null, // null = Unlimited upload size + uploadOverwrite: true, + startDirectory: "")); + + return config; + } + + #endregion + + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Controllers/ELFinderBaseConnectorController.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Controllers/ELFinderBaseConnectorController.cs new file mode 100644 index 0000000..c9e9df6 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Controllers/ELFinderBaseConnectorController.cs @@ -0,0 +1,325 @@ +using ELFinder.Connector.ASPNetCore.ActionResults.Data; +using ELFinder.Connector.ASPNetCore.ActionResults.Files; +using ELFinder.Connector.ASPNetCore.Config; +using ELFinder.Connector.ASPNetCore.Streams; +using ELFinder.Connector.Commands.Operations.Add; +using ELFinder.Connector.Commands.Operations.Change; +using ELFinder.Connector.Commands.Operations.Common.Interfaces; +using ELFinder.Connector.Commands.Operations.Content; +using ELFinder.Connector.Commands.Operations.Image; +using ELFinder.Connector.Commands.Operations.Image.Thumbnails; +using ELFinder.Connector.Commands.Operations.Open; +using ELFinder.Connector.Commands.Operations.Remove; +using ELFinder.Connector.Commands.Operations.Replace; +using ELFinder.Connector.Commands.Operations.Search; +using ELFinder.Connector.Commands.Operations.Tree; +using ELFinder.Connector.Config.Interfaces; +using ELFinder.Connector.Drivers.FileSystem; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Linq; + +namespace ELFinder.Connector.ASPNetCore.Controllers +{ + + /// + /// ELFinder connector controller + /// IMPORTANT: If you use this controller in your existing application, make sure to register the custom ELFinder model binder (ELFinderModelBinder) with ASP.NET MVC. + /// Look at the Application_Start() method in Global.asax.cs on how to do so. + /// + public abstract class ELFinderBaseConnectorController : Controller + { + + #region Properties + + + /// + /// Driver + /// + protected FileSystemConnectorDriver Driver { get; set; } + + #endregion + + #region Constructors + + + /// + /// Create a new instance using default config + /// + protected ELFinderBaseConnectorController() : this(DefaultASPNetConnectorConfig.Create()) + { + } + + /// + /// Create a new instance + /// + /// ELFinder config + protected ELFinderBaseConnectorController(IELFinderConfig config) + { + + // Initialize driver using config + Driver = new FileSystemConnectorDriver(config); + + } + + #endregion + + #region Methods + + #region Public + + /// + /// Main handler + /// + /// Command + /// Result + public virtual IActionResult Main(string cmd) + { + + // Dispatch command + + // Init + if (cmd == "open" && Request.Query["init"] == "1") + { + return DispatchCommand(); + } + + // Open + if (cmd == "open" && Request.Query["init"] != "1") + { + return DispatchCommand(); + } + + // Parents + if (cmd == "parents") + { + return DispatchCommand(); + } + + // Tree + if (cmd == "tree") + { + return DispatchCommand(); + } + + // MakeDir + if (cmd == "mkdir") + { + return DispatchCommand(); + } + + // MakeFile + if (cmd == "mkfile") + { + return DispatchCommand(); + } + + // Remove + if (cmd == "rm") + { + return DispatchCommand(); + } + + // Get + if (cmd == "get") + { + return DispatchCommand(); + } + + // Rename + if (cmd == "rename") + { + return DispatchCommand(); + } + + // Duplicate + if (cmd == "duplicate") + { + return DispatchCommand(); + } + + // Paste + if (cmd == "paste") + { + return DispatchCommand(); + } + + // File + if (cmd == "file") + { + return DispatchCommand(ExecuteFileDownloadCommand); + } + + // Search + if (cmd == "search") + { + return DispatchCommand(); + } + + // Put + if (cmd == "put") + { + return DispatchCommand(); + } + + // Upload + if (cmd == "upload") + { + return DispatchCommand(); + } + + // Resize image + if (cmd == "resize" && Request.Query["mode"] == "resize") + { + return DispatchCommand(); + } + + // Rotate image + if (cmd == "resize" && Request.Query["mode"] == "rotate") + { + return DispatchCommand(); + } + + // Crop image + if (cmd == "resize" && Request.Query["mode"] == "crop") + { + return DispatchCommand(); + } + + // Generate thumbnails + if (cmd == "tmb") + { + return DispatchCommand(); + } + + // Command not found + return new NotFoundResult(); + + } + + /// + /// Thumbnails handler + /// + /// Target + /// Result + public virtual ActionResult Thumbnails(string target) + { + + // Thumbnails + return DispatchCommand(ExecuteGetThumbnailCommand); + + } + + #endregion + + #region Protected + + /// + /// Dispatch command + /// + /// Command type + /// Result + protected virtual ActionResult DispatchCommand() + where TCommand : class, IConnectorCommand, new() + { + + // Use default command execution handler + return DispatchCommand(ExecuteCommand); + + } + + /// + /// Dispatch command + /// + /// Command type + /// Execute command handler + /// Result + protected virtual ActionResult DispatchCommand(Func executeCommandHandler) + where TCommand : class, IConnectorCommand, new() + { + + // Create a command instance + var command = new TCommand(); + + // Bind it (Don't care about validation exceptions) + TryUpdateModelAsync(command); + + + // Set driver + command.Driver = Driver; + + + // Assign files + //TODO: ASSIGN FILES + if (Request.Method =="POST") + { + command.Files = Request.Form.Files.Select(x => new HttpFileStream(x)); + } + + //command.Files = Request.Files.AllKeys.Select(x => new HttpFileStream(Request.Files.Get(x))); + + // Execute it + return executeCommandHandler(command); + + } + + /// + /// Execute command + /// + /// Command type + /// Command + /// Result + protected virtual ActionResult ExecuteCommand(TCommand command) + where TCommand : class, IConnectorCommand + { + + // Execute it + var resultData = command.Execute(); + + // Return it as Json-encoded + return new ELFinderJsonDataResult(resultData); + + } + + /// + /// Execute file download command + /// + /// Command type + /// Command + /// Result + protected virtual ActionResult ExecuteFileDownloadCommand(TCommand command) + where TCommand : ConnectorFileCommand + { + + // Execute it + var resultData = command.Execute(); + + // Return it as file + return new ELFinderFileDownloadResult(resultData); + + } + + /// + /// Execute get thumbnail command + /// + /// Command type + /// Command + /// Result + protected virtual ActionResult ExecuteGetThumbnailCommand(TCommand command) + where TCommand : ConnectorGetThumbnailCommand + { + + // Execute it + var resultData = command.Execute(); + + // Return it as thumbnail + return new ELFinderGetThumbnailResult(resultData); + + } + + #endregion + + #endregion + + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ELFinder.Connector.ASPNetCore.csproj b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ELFinder.Connector.ASPNetCore.csproj new file mode 100644 index 0000000..ad8f501 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ELFinder.Connector.ASPNetCore.csproj @@ -0,0 +1,450 @@ + + + + + Debug + AnyCPU + {3E2DE043-E051-4FB2-AC5C-56A9D35B1F67} + Library + Properties + ELFinder.Connector.ASPNetCore + ELFinder.Connector.ASPNetCore + v4.6.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\..\RoshdCore\RoshdCore\packages\ELFinder.Connector.1.0.1\lib\net40\ELFinder.Connector.dll + True + + + ..\..\..\..\RoshdCore\RoshdCore\packages\ImageProcessor.2.3.3.0\lib\net45\ImageProcessor.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Antiforgery.1.1.0\lib\net451\Microsoft.AspNetCore.Antiforgery.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Authorization.1.1.0\lib\net451\Microsoft.AspNetCore.Authorization.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Cors.1.1.0\lib\net451\Microsoft.AspNetCore.Cors.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Cryptography.Internal.1.1.0\lib\net451\Microsoft.AspNetCore.Cryptography.Internal.dll + True + + + ..\..\packages\Microsoft.AspNetCore.DataProtection.1.1.0\lib\net451\Microsoft.AspNetCore.DataProtection.dll + True + + + ..\..\packages\Microsoft.AspNetCore.DataProtection.Abstractions.1.1.0\lib\net451\Microsoft.AspNetCore.DataProtection.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Diagnostics.Abstractions.1.1.0\lib\netstandard1.0\Microsoft.AspNetCore.Diagnostics.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Hosting.Abstractions.1.1.0\lib\net451\Microsoft.AspNetCore.Hosting.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.1.1.0\lib\net451\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Html.Abstractions.1.1.0\lib\netstandard1.0\Microsoft.AspNetCore.Html.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Http.1.1.0\lib\net451\Microsoft.AspNetCore.Http.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Http.Abstractions.1.1.0\lib\net451\Microsoft.AspNetCore.Http.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Http.Extensions.1.1.0\lib\net451\Microsoft.AspNetCore.Http.Extensions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Http.Features.1.1.0\lib\net451\Microsoft.AspNetCore.Http.Features.dll + True + + + ..\..\packages\Microsoft.AspNetCore.JsonPatch.1.1.0\lib\net451\Microsoft.AspNetCore.JsonPatch.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Localization.1.1.0\lib\net451\Microsoft.AspNetCore.Localization.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.Abstractions.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.ApiExplorer.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.ApiExplorer.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.Core.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.Core.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.Cors.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.Cors.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.DataAnnotations.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.DataAnnotations.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.Formatters.Json.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.Formatters.Json.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.Localization.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.Localization.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.Razor.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.Razor.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.Razor.Host.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.Razor.Host.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.TagHelpers.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.TagHelpers.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Mvc.ViewFeatures.1.1.0\lib\net451\Microsoft.AspNetCore.Mvc.ViewFeatures.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Razor.1.1.0\lib\net451\Microsoft.AspNetCore.Razor.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Razor.Runtime.1.1.0\lib\net451\Microsoft.AspNetCore.Razor.Runtime.dll + True + + + ..\..\packages\Microsoft.AspNetCore.ResponseCaching.Abstractions.1.1.0\lib\net451\Microsoft.AspNetCore.ResponseCaching.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Routing.1.1.0\lib\net451\Microsoft.AspNetCore.Routing.dll + True + + + ..\..\packages\Microsoft.AspNetCore.Routing.Abstractions.1.1.0\lib\net451\Microsoft.AspNetCore.Routing.Abstractions.dll + True + + + ..\..\packages\Microsoft.AspNetCore.WebUtilities.1.1.0\lib\net451\Microsoft.AspNetCore.WebUtilities.dll + True + + + ..\..\packages\Microsoft.CodeAnalysis.Common.1.3.2\lib\net45\Microsoft.CodeAnalysis.dll + True + + + ..\..\packages\Microsoft.CodeAnalysis.CSharp.1.3.2\lib\net45\Microsoft.CodeAnalysis.CSharp.dll + True + + + ..\..\packages\Microsoft.DotNet.PlatformAbstractions.1.1.0\lib\net451\Microsoft.DotNet.PlatformAbstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.Caching.Abstractions.1.1.0\lib\netstandard1.0\Microsoft.Extensions.Caching.Abstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.Caching.Memory.1.1.0\lib\net451\Microsoft.Extensions.Caching.Memory.dll + True + + + ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.1.1.0\lib\netstandard1.0\Microsoft.Extensions.Configuration.Abstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.DependencyInjection.1.1.0\lib\netstandard1.1\Microsoft.Extensions.DependencyInjection.dll + True + + + ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.1.1.0\lib\netstandard1.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.DependencyModel.1.1.0\lib\net451\Microsoft.Extensions.DependencyModel.dll + True + + + ..\..\packages\Microsoft.Extensions.FileProviders.Abstractions.1.1.0\lib\netstandard1.0\Microsoft.Extensions.FileProviders.Abstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.FileProviders.Composite.1.1.0\lib\netstandard1.0\Microsoft.Extensions.FileProviders.Composite.dll + True + + + ..\..\packages\Microsoft.Extensions.FileProviders.Physical.1.1.0\lib\net451\Microsoft.Extensions.FileProviders.Physical.dll + True + + + ..\..\packages\Microsoft.Extensions.FileSystemGlobbing.1.1.0\lib\net45\Microsoft.Extensions.FileSystemGlobbing.dll + True + + + ..\..\packages\Microsoft.Extensions.Globalization.CultureInfoCache.1.1.0\lib\netstandard1.1\Microsoft.Extensions.Globalization.CultureInfoCache.dll + True + + + ..\..\packages\Microsoft.Extensions.Localization.1.1.0\lib\net451\Microsoft.Extensions.Localization.dll + True + + + ..\..\packages\Microsoft.Extensions.Localization.Abstractions.1.1.0\lib\netstandard1.0\Microsoft.Extensions.Localization.Abstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.Logging.Abstractions.1.1.0\lib\netstandard1.1\Microsoft.Extensions.Logging.Abstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.ObjectPool.1.1.0\lib\net451\Microsoft.Extensions.ObjectPool.dll + True + + + ..\..\packages\Microsoft.Extensions.Options.1.1.0\lib\netstandard1.0\Microsoft.Extensions.Options.dll + True + + + ..\..\packages\Microsoft.Extensions.PlatformAbstractions.1.1.0\lib\net451\Microsoft.Extensions.PlatformAbstractions.dll + True + + + ..\..\packages\Microsoft.Extensions.Primitives.1.1.0\lib\netstandard1.0\Microsoft.Extensions.Primitives.dll + True + + + ..\..\packages\Microsoft.Extensions.WebEncoders.1.1.0\lib\netstandard1.0\Microsoft.Extensions.WebEncoders.dll + True + + + ..\..\packages\Microsoft.Net.Http.Headers.1.1.0\lib\netstandard1.1\Microsoft.Net.Http.Headers.dll + True + + + ..\..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll + True + + + ..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + True + + + + ..\..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll + True + + + ..\..\packages\System.Buffers.4.3.0\lib\netstandard1.1\System.Buffers.dll + True + + + ..\..\packages\System.Collections.Immutable.1.3.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll + True + + + + + ..\..\packages\System.Console.4.3.0\lib\net46\System.Console.dll + True + + + + ..\..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll + True + + + ..\..\packages\System.Diagnostics.FileVersionInfo.4.3.0\lib\net46\System.Diagnostics.FileVersionInfo.dll + True + + + ..\..\packages\System.Diagnostics.StackTrace.4.3.0\lib\net46\System.Diagnostics.StackTrace.dll + True + + + ..\..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll + True + + + ..\..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll + True + + + ..\..\packages\System.IO.4.3.0\lib\net462\System.IO.dll + True + + + ..\..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll + True + + + + ..\..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll + True + + + ..\..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll + True + + + ..\..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll + True + + + ..\..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll + True + + + ..\..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll + True + + + + ..\..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll + True + + + ..\..\packages\System.Reflection.Metadata.1.4.1\lib\portable-net45+win8\System.Reflection.Metadata.dll + True + + + ..\..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll + True + + + ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.3.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll + True + + + ..\..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll + True + + + ..\..\packages\System.Runtime.InteropServices.4.3.0\lib\net462\System.Runtime.InteropServices.dll + True + + + ..\..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + + + + ..\..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll + True + + + ..\..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + True + + + ..\..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + True + + + ..\..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll + True + + + ..\..\packages\System.Text.Encoding.CodePages.4.3.0\lib\net46\System.Text.Encoding.CodePages.dll + True + + + ..\..\packages\System.Text.Encodings.Web.4.3.0\lib\netstandard1.0\System.Text.Encodings.Web.dll + True + + + ..\..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll + True + + + + + + + + ..\..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll + True + + + ..\..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll + True + + + ..\..\packages\System.Xml.XPath.4.3.0\lib\net46\System.Xml.XPath.dll + True + + + ..\..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ELFinder.Connector.ASPNetCore.csproj.user b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ELFinder.Connector.ASPNetCore.csproj.user new file mode 100644 index 0000000..944ec00 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ELFinder.Connector.ASPNetCore.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Extensions/HttpRequestExtensions.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Extensions/HttpRequestExtensions.cs new file mode 100644 index 0000000..fbd9225 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Extensions/HttpRequestExtensions.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Http; +using System.Linq; + +namespace ELFinder.Connector.ASPNetCore.Extensions +{ + + /// + /// Http request extensions + /// + public static class HttpRequestExtensions + { + + #region Extension methods + + /// + /// Gets whether request was made by MSIE browser or not + /// + /// Request + /// True/False, based on result + public static bool IsFromMSIE(this HttpRequest request) + { + + return request.Headers["User-Agent"].Contains("MSIE"); + + } + + #endregion + + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Helpers/HttpCacheHelper.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Helpers/HttpCacheHelper.cs new file mode 100644 index 0000000..196d11b --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Helpers/HttpCacheHelper.cs @@ -0,0 +1,151 @@ +using ELFinder.Connector.Drivers.FileSystem.Utils; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Globalization; +using System.IO; +using System.Linq; + +namespace ELFinder.Connector.ASPNetCore.Helpers +{ + + /// + /// Http cache helper + /// + public class HttpCacheHelper + { + + #region Static methods + + /// + /// Returns whether to return a not modified response, based on the etag and last modified date + /// of the resource, and the current controller context + /// + /// Current resource etag, or null + /// Current resource last modified, or null + /// Current controller context + /// True if not modified should be sent, false otherwise + public static bool ReturnNotModified(string etag, DateTime? lastModified, ActionContext context) + { + + // Check context + if (context == null || context.HttpContext.Request == null) + { + return false; + } + + // Get ETag header + var requestEtag = context.HttpContext.Request.Headers ["If-None-Match"].ToList(); + + // Get Last-Modified-Since header + var requestDate = ParseDateTime(context.HttpContext.Request.Headers["If-Modified-Since"]); + + // Check if file ETag has changed + if (requestEtag != null && !string.IsNullOrEmpty(etag) && requestEtag.Contains(etag)) + { + return true; + } + + // Check if request date has changed + if (requestDate.HasValue && lastModified.HasValue && ((int)(lastModified.Value - requestDate.Value).TotalSeconds) <= 0) + { + return true; + } + + return false; + + } + + /// + /// Parse request date time + /// + /// Value + /// Result, null if parsing cannot be done. + private static DateTime? ParseDateTime(string value) + { + + DateTime result; + + // Note CultureInfo.InvariantCulture is ignored + if (DateTime.TryParseExact(value, "R", CultureInfo.InvariantCulture, DateTimeStyles.None, out result)) + { + return result; + } + + return null; + + } + + /// + /// Get if given file + /// + /// + /// + /// + /// + public static bool IsFileFromCache(FileInfo info, HttpRequest request, HttpResponse response) + { + DateTime updated = info.LastWriteTimeUtc; + string filename = info.Name; + DateTime modifyDate; + if (!DateTime.TryParse(request.Headers["If-Modified-Since"], out modifyDate)) + { + modifyDate = DateTime.UtcNow; + } + string eTag = GetFileETag(filename, updated); + //if (!IsFileModified(updated, eTag, request)) + //{ + // response.StatusCode = (int)System.Net.HttpStatusCode.NotModified; + // response.StatusDescription = "Not Modified"; + // response.Headers.Add("Content-Length", "0"); + // response.Cache.SetCacheability(HttpCacheability.Public); + // response.Cache.SetLastModified(updated); + // response.Cache.SetETag(eTag); + // return true; + //} + //else + //{ + // response.Cache.SetAllowResponseInBrowserHistory(true); + // response.Cache.SetCacheability(HttpCacheability.Public); + // response.Cache.SetLastModified(updated); + // response.Cache.SetETag(eTag); + // return false; + //} + return false; + } + + private static string GetFileETag(string fileName, DateTime modified) + { + return "\"" + FileSystemUtils.GetFileMd5(fileName, modified) + "\""; + } + + private static bool IsFileModified(DateTime modifyDate, string eTag, HttpRequest request) + { + DateTime modifiedSince; + bool fileDateModified = true; + + //Check If-Modified-Since request header, if it exists + if (!string.IsNullOrEmpty(request.Headers["If-Modified-Since"]) && DateTime.TryParse(request.Headers["If-Modified-Since"], out modifiedSince)) + { + fileDateModified = false; + if (modifyDate > modifiedSince) + { + TimeSpan modifyDiff = modifyDate - modifiedSince; + //ignore time difference of up to one seconds to compensate for date encoding + fileDateModified = modifyDiff > TimeSpan.FromSeconds(1); + } + } + + //check the If-None-Match header, if it exists, this header is used by FireFox to validate entities based on the etag response header + bool eTagChanged = false; + if (!string.IsNullOrEmpty(request.Headers["If-None-Match"])) + { + eTagChanged = request.Headers["If-None-Match"] != eTag; + } + return (eTagChanged || fileDateModified); + } + + #endregion + + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ModelBinders/ELFinderModelBinder.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ModelBinders/ELFinderModelBinder.cs new file mode 100644 index 0000000..8a75154 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ModelBinders/ELFinderModelBinder.cs @@ -0,0 +1,51 @@ +using ELFinder.Connector.Commands.Operations.Common.Interfaces; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; +using System.Collections.Generic; +using System.Linq; + +namespace ELFinder.Connector.ASPNetCore.ModelBinders +{ + + /// + /// ELFinder custom model binder + /// + /// + + public class ELFinderModelBinder : ComplexTypeModelBinder + { + public ELFinderModelBinder(Dictionary propertyBinders) : base(propertyBinders) + { + } + + protected override void SetProperty(ModelBindingContext bindingContext, string modelName, ModelMetadata propertyMetadata, ModelBindingResult result) + { + if (bindingContext.ModelType.GetInterfaces().Contains(typeof(IConnectorMultipleTargetsCommand))) + { + + // Check property descriptor + if (modelName == nameof(IConnectorMultipleTargetsCommand.Targets)) + { + // Get targets + var targetsList = bindingContext.ActionContext.HttpContext.Request.Query["targets[]"].ToList(); + result = ModelBindingResult.Success(targetsList); + } + + } + + if (bindingContext.ModelType.GetInterfaces().Contains(typeof(IConnectorCommand))) + { + if (result.Model is bool) + { + // Use Get query string value for property where 1 = True and 0 = False + var blnResult = bindingContext.ActionContext.HttpContext.Request.Query[modelName] == "1"; + result=ModelBindingResult.Success(blnResult); + } + } + + base.SetProperty(bindingContext, modelName, propertyMetadata, result); + } + } + + +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ModelBinders/ELFinderModelBinderProvider.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ModelBinders/ELFinderModelBinderProvider.cs new file mode 100644 index 0000000..f9cbadb --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/ModelBinders/ELFinderModelBinderProvider.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding; +using System; +using System.Collections.Generic; + +namespace ELFinder.Connector.ASPNetCore.ModelBinders +{ + public class ELFinderModelBinderProvider: IModelBinderProvider + { + public IModelBinder GetBinder(ModelBinderProviderContext context) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Metadata.IsComplexType && !context.Metadata.IsCollectionType) + { + var propertyBinders = new Dictionary(); ; + foreach (var property in context.Metadata.Properties) + { + propertyBinders.Add(property, context.CreateBinder(property)); + } + + return new ELFinderModelBinder(propertyBinders); + } + + return null; + } + } +} diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Properties/AssemblyInfo.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ec50113 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +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("ELFinder.Connector.ASPNetCore")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ELFinder.Connector.ASPNetCore")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 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("3e2de043-e051-4fb2-ac5c-56a9d35b1f67")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Streams/HttpFileStream.cs b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Streams/HttpFileStream.cs new file mode 100644 index 0000000..cede999 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/Streams/HttpFileStream.cs @@ -0,0 +1,58 @@ +using System.IO; +using System.Web; +using ELFinder.Connector.Streams; +using Microsoft.AspNetCore.Http; + +namespace ELFinder.Connector.ASPNetCore.Streams +{ + + /// + /// Http file stream + /// + public class HttpFileStream : IFileStream + { + + #region Properties + + /// + /// Source Http file + /// + private IFormFile SourceHttpFile { get; } + + #endregion + + #region IFileStream members + + /// + /// File name + /// + public string FileName => SourceHttpFile.FileName; + + /// + /// Content type + /// + public string ContentType => SourceHttpFile.ContentType; + + /// + /// Stream instance + /// + public Stream Stream => SourceHttpFile.OpenReadStream(); + + #endregion + + #region Constructors + + /// + /// Create a new instance + /// + /// Source Http file + public HttpFileStream(IFormFile sourceHttpFile) + { + SourceHttpFile = sourceHttpFile; + } + + #endregion + + } + +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/app.config b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/app.config new file mode 100644 index 0000000..c5dfea0 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/app.config @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/packages.config b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/packages.config new file mode 100644 index 0000000..ab294f1 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.Connector.ASPNetCore/packages.config @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/.bowerrc b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/.bowerrc new file mode 100644 index 0000000..6406626 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "wwwroot/lib" +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/App_Data/Files/Pishi.jpg b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/App_Data/Files/Pishi.jpg new file mode 100644 index 0000000..baa4819 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/App_Data/Files/Pishi.jpg differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Config/SharedConfig.cs b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Config/SharedConfig.cs new file mode 100644 index 0000000..659525f --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Config/SharedConfig.cs @@ -0,0 +1,23 @@ +using ELFinder.Connector.Config; + +namespace ELFinder.WebServer.ASPNetCore.Config +{ + + /// + /// Shared config + /// + public static class SharedConfig + { + + #region Properties + + /// + /// ELFinder shared configuration + /// + public static ELFinderConfig ELFinder { get; set; } + + #endregion + + } + +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/ELFinderConnectorController.cs b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/ELFinderConnectorController.cs new file mode 100644 index 0000000..908dd4c --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/ELFinderConnectorController.cs @@ -0,0 +1,28 @@ + +using ELFinder.Connector.ASPNetCore.Controllers; +using ELFinder.WebServer.ASPNetCore.Config; + +namespace ELFinder.WebServer.ASPNetCore.Controllers +{ + + /// + /// ELFinder connector controller + /// IMPORTANT: If you use this controller in your existing application, make sure to register the custom ELFinder model binder (ELFinderModelBinder) with ASP.NET MVC. + /// Look at the Application_Start() method in Global.asax.cs on how to do so. + /// + public class ELFinderConnectorController : ELFinderBaseConnectorController + { + + #region Constructors + + /// + /// Create a new instance + /// + public ELFinderConnectorController() : base(SharedConfig.ELFinder) + { + } + + #endregion + + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/ELFinderController.cs b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/ELFinderController.cs new file mode 100644 index 0000000..55b369a --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/ELFinderController.cs @@ -0,0 +1,39 @@ + + +using Microsoft.AspNetCore.Mvc; + +namespace ELFinder.WebServer.ASPNet.Controllers +{ + + /// + /// ELFinder controller + /// IMPORTANT: If you use this controller in your existing application, make sure to register the custom ELFinder model binder (ELFinderModelBinder) with ASP.NET MVC. + /// Look at the Application_Start() method in Global.asax.cs on how to do so. + /// + public class ELFinderController : Controller + { + + #region Methods + + /// + /// Index page for V 2.1 + /// + /// Result view + public ActionResult Index() + { + return View(); + } + + /// + /// Index page for V 2 + /// + /// Result view + public ActionResult Index2() + { + return View(); + } + + #endregion + + } +} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/HomeController.cs b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/HomeController.cs new file mode 100644 index 0000000..3980aed --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Controllers/HomeController.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; + +namespace ELFinder.WebServer.ASPNetCore.Controllers +{ + public class HomeController : Controller + { + public IActionResult Index() + { + return View(); + } + + public IActionResult About() + { + ViewData["Message"] = "Your application description page."; + + return View(); + } + + public IActionResult Contact() + { + ViewData["Message"] = "Your contact page."; + + return View(); + } + + public IActionResult Error() + { + return View(); + } + } +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/ELFinder.WebServer.ASPNetCore.csproj b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/ELFinder.WebServer.ASPNetCore.csproj new file mode 100644 index 0000000..7745ba0 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/ELFinder.WebServer.ASPNetCore.csproj @@ -0,0 +1,90 @@ + + + + Exe + net462 + true + win7-x86 + + + + + + + + + + + + 1.0.0-alpha-20161104-2-112 + + + 1.1.0 + + + 1.1.0 + + + 1.0.0-preview2-final + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.1.0 + + + 1.0.0 + + + + + 2.2.301 + + + + + + + + + + + + + + + PreserveNewest + + + + \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Program.cs b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Program.cs new file mode 100644 index 0000000..6327d51 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; + +namespace ELFinder.WebServer.ASPNetCore +{ + public class Program + { + public static void Main(string[] args) + { + var host = new WebHostBuilder() + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup() + .Build(); + + host.Run(); + } + } +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Properties/launchSettings.json b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Properties/launchSettings.json new file mode 100644 index 0000000..aea6393 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:2440/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "ELFinder.WebServer.ASPNetCore": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:2441" + } + } +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Startup.cs b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Startup.cs new file mode 100644 index 0000000..473a503 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Startup.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using ELFinder.WebServer.ASPNetCore.Config; +using ELFinder.Connector.Config; +using Microsoft.AspNetCore.Mvc; +using ELFinder.Connector.ASPNetCore.ModelBinders; +using ELFinder.Connector.ASPNetCore.ActionResults.Data; + +namespace ELFinder.WebServer.ASPNetCore +{ + public class Startup + { + public Startup(IHostingEnvironment env) + { + var builder = new ConfigurationBuilder() + .SetBasePath(env.ContentRootPath) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) + .AddEnvironmentVariables(); + Configuration = builder.Build(); + } + + public IConfigurationRoot Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // Add framework services. + services.AddMvc().Services.Configure(options => { + // Use custom ELFinder model binder + options.ModelBinderProviders.Insert(0, new ELFinderModelBinderProvider()); + + }); + // Use custom ELFinder Json Result Executer + services.AddSingleton(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) + { + loggerFactory.AddConsole(Configuration.GetSection("Logging")); + loggerFactory.AddDebug(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + app.UseBrowserLink(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + } + + app.UseStaticFiles(); + + app.UseMvc(routes => + { + // Commands + routes.MapRoute("Connector", "ELFinderConnector", + new { controller = "ELFinderConnector", action = "Main" }); + + // Thumbnails + routes.MapRoute("Thumbnauls", "Thumbnails/{target}", + new { controller = "ELFinderConnector", action = "Thumbnails" }); + + // Index view + routes.MapRoute("Default", "{controller}/{action}", + new { controller = "ELFinder", action = "Index" } + ); + }); + + // Initialize ELFinder configuration + InitELFinderConfiguration(env); + } + + // Initialize ELFinder configuration + protected void InitELFinderConfiguration(IHostingEnvironment env) + { + + SharedConfig.ELFinder = new ELFinderConfig( + env.ContentRootPath + @"\App_Data", + thumbnailsUrl: "Thumbnails/" + ); + + SharedConfig.ELFinder.RootVolumes.Add( + new ELFinderRootVolumeConfigEntry( + env.ContentRootPath + @"\App_Data\Files", + isLocked: false, + isReadOnly: false, + isShowOnly: false, + maxUploadSizeKb: null, // null = Unlimited upload size + uploadOverwrite: true, + startDirectory: "")); + + } + } +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/ELFinder/Index.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/ELFinder/Index.cshtml new file mode 100644 index 0000000..732d7c6 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/ELFinder/Index.cshtml @@ -0,0 +1,45 @@ + +@{ + ViewData["Title"] = "elFinder 2.1"; +} +

+ ElFinder 2.1 +

+ +
+ + +@section Scripts { + + + + + + + + + + + + + + + + + +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/ELFinder/Index2.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/ELFinder/Index2.cshtml new file mode 100644 index 0000000..48d0d5f --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/ELFinder/Index2.cshtml @@ -0,0 +1,47 @@ + +@{ + ViewData["Title"] = "elFinder 2.0"; +} + +

+ ElFinder 2.0 +

+ + +
+ + +@section Scripts { + + + + + + + + + + + + + + + + + +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/About.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/About.cshtml new file mode 100644 index 0000000..50476d1 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/About.cshtml @@ -0,0 +1,7 @@ +@{ + ViewData["Title"] = "About"; +} +

@ViewData["Title"].

+

@ViewData["Message"]

+ +

Use this area to provide additional information.

diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/Contact.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/Contact.cshtml new file mode 100644 index 0000000..15c12c6 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/Contact.cshtml @@ -0,0 +1,17 @@ +@{ + ViewData["Title"] = "Contact"; +} +

@ViewData["Title"].

+

@ViewData["Message"]

+ +
+ One Microsoft Way
+ Redmond, WA 98052-6399
+ P: + 425.555.0100 +
+ +
+ Support: Support@example.com
+ Marketing: Marketing@example.com +
diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/Index.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/Index.cshtml new file mode 100644 index 0000000..39326c0 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Home/Index.cshtml @@ -0,0 +1,109 @@ +@{ + ViewData["Title"] = "Home Page"; +} + + + + diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Shared/Error.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Shared/Error.cshtml new file mode 100644 index 0000000..e514139 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/Shared/Error.cshtml @@ -0,0 +1,14 @@ +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application. +

diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/_ViewImports.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/_ViewImports.cshtml new file mode 100644 index 0000000..b3153b7 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/_ViewImports.cshtml @@ -0,0 +1,2 @@ +@using ELFinder.WebServer.ASPNetCore +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/_ViewStart.cshtml b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/app.config b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/app.config new file mode 100644 index 0000000..49aadfa --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/app.config @@ -0,0 +1,5 @@ + + + + + diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/appsettings.json b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/appsettings.json new file mode 100644 index 0000000..fa8ce71 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/bower.json b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/bower.json new file mode 100644 index 0000000..b7232ae --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/bower.json @@ -0,0 +1,12 @@ +{ + "name": "asp.net", + "private": true, + "dependencies": { + "bootstrap": "3.3.6", + "jquery": "2.2.0", + "jquery-validation": "1.14.0", + "jquery-validation-unobtrusive": "3.2.6", + "elfinder": "2.1.18", + "jquery-ui": "1.12.1" + } +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/bundleconfig.json b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/bundleconfig.json new file mode 100644 index 0000000..04754ba --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/bundleconfig.json @@ -0,0 +1,24 @@ +// Configure bundling and minification for the project. +// More info at https://go.microsoft.com/fwlink/?LinkId=808241 +[ + { + "outputFileName": "wwwroot/css/site.min.css", + // An array of relative input file paths. Globbing patterns supported + "inputFiles": [ + "wwwroot/css/site.css" + ] + }, + { + "outputFileName": "wwwroot/js/site.min.js", + "inputFiles": [ + "wwwroot/js/site.js" + ], + // Optionally specify minification options + "minify": { + "enabled": true, + "renameLocals": true + }, + // Optinally generate .map file + "sourceMap": false + } +] diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/web.config b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/web.config new file mode 100644 index 0000000..b70ce7e --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/web.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/elfinder.full.css b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/elfinder.full.css new file mode 100644 index 0000000..f7a9062 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/elfinder.full.css @@ -0,0 +1,1667 @@ +/*! + * elFinder - file manager for web + * Version 2.0.6 (2016-02-21) + * http://elfinder.org + * + * Copyright 2009-2016, Studio 42 + * Licensed under a 3 clauses BSD license + */ + +/* File: /css/commands.css */ +/******************************************************************/ +/* COMMANDS STYLES */ +/******************************************************************/ + +/********************** COMMAND "RESIZE" ****************************/ +.elfinder-dialog-resize { margin-top:.3em; } +.elfinder-resize-type { float:left; margin-bottom: .4em; } +.elfinder-resize-control { padding-top:3em; } +.elfinder-resize-control input[type=text] { border:1px solid #aaa; text-align: right; } +.elfinder-resize-preview { + width:400px; + height:400px; + padding:10px; + background:#fff; + border:1px solid #aaa; + float:right; + position:relative; + overflow:auto; +/* z-index:100;*/ +} + +.elfinder-resize-handle { position:relative;} + +.elfinder-resize-handle-hline, +.elfinder-resize-handle-vline { + position:absolute; + background-image:url("../img/crop.gif"); +} + +.elfinder-resize-handle-hline { + width:100%; + height:1px !important; + background-repeat:repeat-x; +} +.elfinder-resize-handle-vline { + width:1px !important; + height:100%; + background-repeat:repeat-y; +} + +.elfinder-resize-handle-hline-top { top:0; left:0; } +.elfinder-resize-handle-hline-bottom { bottom:0; left:0; } +.elfinder-resize-handle-vline-left { top:0; left:0; } +.elfinder-resize-handle-vline-right { top:0; right:0; } + +.elfinder-resize-handle-point { + position:absolute; + width:8px; + height:8px; + border:1px solid #777; + background:transparent; +} + +.elfinder-resize-handle-point-n { + top:0; + left:50%; + margin-top:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-ne { + top:0; + right:0; + margin-top:-5px; + margin-right:-5px; +} +.elfinder-resize-handle-point-e { + top:50%; + right:0; + margin-top:-5px; + margin-right:-5px; +} +.elfinder-resize-handle-point-se { + bottom:0; + right:0; + margin-bottom:-5px; + margin-right:-5px; +} +.elfinder-resize-handle-point-s { + bottom:0; + left:50%; + margin-bottom:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-sw { + bottom:0; + left:0; + margin-bottom:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-w { + top:50%; + left:0; + margin-top:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-nw { + top:0; + left:0; + margin-top:-5px; + margin-left:-5px; +} + +.elfinder-resize-spinner { + position:absolute; + width:200px; + height:30px; + top:50%; + margin-top:-25px; + left:50%; + margin-left:-100px; + text-align:center; + background:url(../img/progress.gif) center bottom repeat-x; +} + +.elfinder-resize-row { margin-bottom:7px; position:relative;} + +.elfinder-resize-label { float:left; width:80px; padding-top: 3px; } + +.elfinder-resize-reset { + width:16px; + height:16px; +/* border:1px solid #111;*/ + position:absolute; + margin-top:-8px; +} + +.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e { height:100%; width:10px; } +.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s { width:100%; height:10px; } +.elfinder-dialog .elfinder-dialog-resize .ui-resizable-se { + background:transparent; + bottom:0; + right:0; + margin-right:-7px; + margin-bottom:-7px; +} + +.elfinder-dialog-resize .ui-icon-grip-solid-vertical { + position:absolute; + top:50%; + right:0; + margin-top:-8px; + margin-right:-11px; +} +.elfinder-dialog-resize .ui-icon-grip-solid-horizontal { + position:absolute; + left:50%; + bottom:0; + margin-left:-8px; + margin-bottom:-11px;; +} + +.elfinder-resize-row .elfinder-buttonset { float:right; } + +.elfinder-resize-rotate-slider { + float: left; + width: 195px; + margin: 7px 7px 0; +} + +/********************** COMMAND "EDIT" ****************************/ +/* edit text file textarea */ +.elfinder-file-edit { + width:99%; + height:99%; + margin:0; + padding:2px; + border:1px solid #ccc; +} + +/********************** COMMAND "SORT" ****************************/ +/* for list table header sort triangle icon */ +div.elfinder-cwd-wrapper-list tr.ui-state-default td { + position: relative; +} +div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon { + position: absolute; + top: -5px; + left: 0; + right: 0; + margin: auto; +} + + +/********************** COMMAND "HELP" ****************************/ +/* help dialog */ +.elfinder-help { margin-bottom:.5em; } + +/* fix tabs */ +.elfinder-help .ui-tabs-panel { padding:.5em; } +.elfinder-dialog .ui-tabs .ui-tabs-nav li a { padding:.2em 1em;} + +.elfinder-help-shortcuts { + height:300px; + padding:1em; + margin:.5em 0; + overflow:auto; +} +.elfinder-help-shortcut { white-space:nowrap; clear:both;} + +.elfinder-help-shortcut-pattern { float:left; width:160px;} + +.elfinder-help-logo { + width:100px; + height:96px; + float:left; + margin-right:1em; + background:url('../img/logo.png') center center no-repeat; +} + +.elfinder-help h3 { font-size:1.5em; margin:.2em 0 .3em 0; } + +.elfinder-help-separator { clear:both; padding:.5em; } + +.elfinder-help-link { padding:2px; } + +.elfinder-help .ui-priority-secondary { font-size:.9em;} + +.elfinder-help .ui-priority-primary { margin-bottom:7px;} + +.elfinder-help-team { + clear: both; + text-align:right; + border-bottom:1px solid #ccc; + margin:.5em 0; + font-size:.9em; +} + +.elfinder-help-team div { float:left; } +.elfinder-help-license { font-size:.9em;} + +.elfinder-help-disabled { + font-weight:bold; + text-align:center; + margin:90px 0; +} + +.elfinder-help .elfinder-dont-panic { + display:block; + border:1px solid transparent; + width:200px; + height:200px; + margin:30px auto; + text-decoration:none; + text-align:center; + position:relative; + background:#d90004; + -moz-box-shadow: 5px 5px 9px #111; + -webkit-box-shadow: 5px 5px 9px #111; + box-shadow: 5px 5px 9px #111; + background: -moz-radial-gradient(80px 80px, circle farthest-corner, #d90004 35%, #960004 100%); + background: -webkit-gradient(radial, 80 80, 60, 80 80, 120, from(#d90004), to(#960004)); + -moz-border-radius: 100px; + -webkit-border-radius: 100px; + border-radius: 100px; + outline:none; +} + +.elfinder-help .elfinder-dont-panic span { + font-size:3em; + font-weight:bold; + text-align:center; + color:#fff; + position:absolute; + left:0; + top:45px; +} + + + + +/* File: /css/common.css */ +/*********************************************/ +/* COMMON ELFINDER STUFFS */ +/*********************************************/ + +/* common container */ +.elfinder { padding:0; position:relative; display:block; } + +/* right to left enviroment */ +.elfinder-rtl { text-align:right; direction:rtl; } + +/* nav and cwd container */ +.elfinder-workzone { + padding: 0; + position:relative; + overflow:hidden; +} + +/* dir/file permissions and symlink markers */ +.elfinder-perms, +.elfinder-symlink { + position:absolute; + width:16px; + height:16px; + background-image:url(../img/toolbar.png); + background-repeat:no-repeat; + background-position:0 -528px; +} + +.elfinder-symlink { } + +/* noaccess */ +.elfinder-na .elfinder-perms { background-position:0 -96px; } + +/* read only */ +.elfinder-ro .elfinder-perms { background-position:0 -64px;} + +/* write only */ +.elfinder-wo .elfinder-perms { background-position:0 -80px;} + +/* drag helper */ +.elfinder-drag-helper { + width:60px; + height:50px; + padding:0 0 0 25px; + z-index:100000; +} + +/* drag helper "plus" icon */ +.elfinder-drag-helper-icon-plus { + position:absolute; + width:16px; + height:16px; + left:43px; + top:55px; + background:url('../img/toolbar.png') 0 -544px no-repeat; + display:none; +} + +/* show "plus" icon when ctrl/shift pressed */ +.elfinder-drag-helper-plus .elfinder-drag-helper-icon-plus { display:block; } + +/* files num in drag helper */ +.elfinder-drag-num { + position:absolute; + top:0; + left:0; + width:16px; + height:14px; + text-align:center; + padding-top:2px; + + font-weight:bold; + color:#fff; + background-color:red; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +/* icon in drag helper */ +.elfinder-drag-helper .elfinder-cwd-icon { margin:0 0 0 -24px; float:left; } + +/* transparent overlay >_< */ +.elfinder-overlay { opacity: 0; filter:Alpha(Opacity=0); } + +/* panels under/below cwd (for search field etc) */ +.elfinder .elfinder-panel { + position:relative; + background-image:none; + padding:7px 12px; +} + + + + + + +/* File: /css/contextmenu.css */ +/* menu and submenu */ +.elfinder-contextmenu, +.elfinder-contextmenu-sub { + display:none; + position:absolute; + border:1px solid #aaa; + background:#fff; + color:#555; + padding:4px 0; +} + +/* submenu */ +.elfinder-contextmenu-sub { top:5px; } +/* submenu in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-sub { margin-left:-5px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-sub { margin-right:-5px; } + +/* menu item */ +.elfinder-contextmenu-item { + position:relative; + display:block; + padding:4px 30px; + text-decoration:none; + white-space:nowrap; + cursor:default; +} +.elfinder-contextmenu-item .ui-icon { + width:16px; + height:16px; + position:absolute; + left:2px; + top:50%; + margin-top:-8px; + display:none; +} + +/* text in item */ +.elfinder-contextmenu .elfinder-contextmenu-item span { display:block; } + + + +/* submenu item in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-item { text-align:left; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-item { text-align:right; } +.elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-left:12px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-right:12px; } + +/* command/submenu icon */ +.elfinder-contextmenu-arrow, +.elfinder-contextmenu-icon { + position:absolute; + top:50%; + margin-top:-8px; +} + +/* command icon in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-icon { left:8px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-icon { right:8px; } + +/* arrow icon */ +.elfinder-contextmenu-arrow { + width:16px; + height:16px; + background:url('../img/arrows-normal.png') 5px 4px no-repeat; +} + +/* arrow icon in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-arrow { right:5px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-arrow { left:5px; background-position: 0 -10px; } + +/* disable ui border/bg image on hover */ +.elfinder-contextmenu .ui-state-hover { border:0 solid; background-image:none;} + +/* separator */ +.elfinder-contextmenu-separator { + height:0px; + border-top:1px solid #ccc; + margin:0 1px; +} + +/* File: /css/cwd.css */ +/******************************************************************/ +/* CURRENT DIRECTORY STYLES */ +/******************************************************************/ +/* cwd container to avoid selectable on scrollbar */ +.elfinder-cwd-wrapper { + overflow: auto; + position:relative; + padding:2px; + margin:0; +} + +.elfinder-cwd-wrapper-list { padding:0; } + +/* container */ +.elfinder-cwd { + position:relative; + cursor:default; + padding:0; + margin:0; + -ms-touch-action: auto; + touch-action: auto; + -moz-user-select: -moz-none; + -khtml-user-select: none; + -webkit-user-select: none; + user-select: none; + -webkit-tap-highlight-color:rgba(0,0,0,0); +} + +/* container active on dropenter */ +.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active { + padding:0; + border:2px solid #8cafed; +} + + +/************************** ICONS VIEW ********************************/ + +/* file container */ +.elfinder-cwd-view-icons .elfinder-cwd-file { + width:120px; + height:80px; + padding-bottom:2px; + cursor:default; + border:none; +/* overflow:hidden;*/ +/* position:relative;*/ +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file { float:left; margin:0 3px 12px 0; } +.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file { float:right; margin:0 0 5px 3px; } + +/* remove ui hover class border */ +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { border:0 solid; } + +/* icon wrapper to create selected highlight around icon */ +.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper { + width:52px; + height:52px; + margin:1px auto 1px auto; + padding:2px; + position:relative; +} + +/* file name place */ +.elfinder-cwd-view-icons .elfinder-cwd-filename { + text-align:center; + white-space:pre; + overflow:hidden; + text-overflow:ellipsis; + -o-text-overflow:ellipsis; + margin:3px 1px 0 1px; + padding:1px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +/* permissions/symlink markers */ +.elfinder-cwd-view-icons .elfinder-perms { bottom:4px; right:2px; } +.elfinder-cwd-view-icons .elfinder-symlink { bottom:6px; left:0px; } + +/* icon/thumbnail */ +.elfinder-cwd-icon { + display:block; + width:48px; + height:48px; + margin:0 auto; + background: url('../img/icons-big.png') 0 0 no-repeat; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} + +/* "opened folder" icon on dragover */ +.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon { background-position: 0 -100px; } + +/* mimetypes icons */ +.elfinder-cwd-icon-directory { background-position:0 -50px; } +.elfinder-cwd-icon-application { background-position:0 -150px; } +.elfinder-cwd-icon-x-empty, +.elfinder-cwd-icon-text { background-position:0 -200px; } +.elfinder-cwd-icon-image, +.elfinder-cwd-icon-vnd-adobe-photoshop, +.elfinder-cwd-icon-postscript { background-position:0 -250px; } +.elfinder-cwd-icon-audio { background-position:0 -300px; } +.elfinder-cwd-icon-video, +.elfinder-cwd-icon-flash-video { background-position:0 -350px; } +.elfinder-cwd-icon-rtf, +.elfinder-cwd-icon-rtfd { background-position: 0 -401px; } +.elfinder-cwd-icon-pdf { background-position: 0 -450px; } +.elfinder-cwd-icon-ms-excel, +.elfinder-cwd-icon-msword, +.elfinder-cwd-icon-vnd-ms-excel, +.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-office, +.elfinder-cwd-icon-vnd-ms-powerpoint, +.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-word, +.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12, +.elfinder-cwd-icon-vnd-oasis-opendocument-chart, +.elfinder-cwd-icon-vnd-oasis-opendocument-database, +.elfinder-cwd-icon-vnd-oasis-opendocument-formula, +.elfinder-cwd-icon-vnd-oasis-opendocument-graphics, +.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-image, +.elfinder-cwd-icon-vnd-oasis-opendocument-presentation, +.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet, +.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-text, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-master, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-web, +.elfinder-cwd-icon-vnd-openofficeorg-extension, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template { background-position: 0 -500px; } +.elfinder-cwd-icon-html { background-position: 0 -550px; } +.elfinder-cwd-icon-css { background-position: 0 -600px; } +.elfinder-cwd-icon-javascript, +.elfinder-cwd-icon-x-javascript { background-position: 0 -650px; } +.elfinder-cwd-icon-x-perl { background-position: 0 -700px; } +.elfinder-cwd-icon-x-python { background-position: 0 -750px; } +.elfinder-cwd-icon-x-ruby { background-position: 0 -800px; } +.elfinder-cwd-icon-x-sh, +.elfinder-cwd-icon-x-shellscript { background-position: 0 -850px; } +.elfinder-cwd-icon-x-c, +.elfinder-cwd-icon-x-csrc, +.elfinder-cwd-icon-x-chdr, +.elfinder-cwd-icon-x-c--, +.elfinder-cwd-icon-x-c--src, +.elfinder-cwd-icon-x-c--hdr, +.elfinder-cwd-icon-x-java, +.elfinder-cwd-icon-x-java-source { background-position: 0 -900px; } +.elfinder-cwd-icon-x-php { background-position: 0 -950px; } +.elfinder-cwd-icon-xml { background-position: 0 -1000px; } +.elfinder-cwd-icon-zip, +.elfinder-cwd-icon-x-zip, +.elfinder-cwd-icon-x-xz, +.elfinder-cwd-icon-x-7z-compressed { background-position: 0 -1050px; } +.elfinder-cwd-icon-x-gzip, +.elfinder-cwd-icon-x-tar { background-position: 0 -1100px; } +.elfinder-cwd-icon-x-bzip, +.elfinder-cwd-icon-x-bzip2 { background-position: 0 -1150px; } +.elfinder-cwd-icon-x-rar, +.elfinder-cwd-icon-x-rar-compressed { background-position: 0 -1200px; } +.elfinder-cwd-icon-x-shockwave-flash { background-position: 0 -1250px; } +.elfinder-cwd-icon-group { background-position:0 -1300px;} + +/* textfield inside icon */ +.elfinder-cwd input { width:100%; border:0px solid; margin:0; padding:0; } +.elfinder-cwd-view-icons input {text-align:center; } + +.elfinder-cwd-view-icons { text-align:center; } + + +/************************************ LIST VIEW ************************************/ + +/*.elfinder-cwd-view-list { padding:0 0 4px 0; }*/ + +.elfinder-cwd table { + width: 100%; + border-collapse: separate; + border: 0 solid; + margin: 0 0 10px 0; + border-spacing: 0; +} +.elfinder .elfinder-cwd table thead tr { border-left:0 solid; border-top:0 solid; border-right:0 solid; } + +.elfinder .elfinder-cwd table td { + padding:4px 12px; + white-space:pre; + overflow:hidden; + text-align:right; + cursor:default; + border:0 solid; + +} + +.elfinder-ltr .elfinder-cwd table td { text-align:right; } +.elfinder-ltr .elfinder-cwd table td:first-child { text-align:left; } +.elfinder-rtl .elfinder-cwd table td { text-align:left; } +.elfinder-rtl .elfinder-cwd table td:first-child { text-align:right; } + +.elfinder-odd-row { background:#eee; } + +/* filename container */ +.elfinder-cwd-view-list .elfinder-cwd-file-wrapper { width:97%; position:relative; } +/* filename container in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-file-wrapper { padding-left:23px; } +.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-file-wrapper { padding-right:23px; } + +/* premissions/symlink marker */ +.elfinder-cwd-view-list .elfinder-perms, +.elfinder-cwd-view-list .elfinder-symlink { top:50%; margin-top:-6px; } +/* markers in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms { left:7px; } +.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink { left:-7px; } + +/* file icon */ +.elfinder-cwd-view-list td .elfinder-cwd-icon { + width:16px; + height:16px; + position:absolute; + top:50%; + margin-top:-8px; + background-image:url(../img/icons-small.png); +} +/* icon in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon { left:0; } +.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon { right:0; } + + + +/* File: /css/dialog.css */ +/*********************************************/ +/* DIALOGS STYLES */ +/*********************************************/ + +/* common dialogs class */ +.std42-dialog { + padding:0; + position:absolute; + left:auto; + right:auto; +} + +/* titlebar */ +.std42-dialog .ui-dialog-titlebar { + border-left:0 solid transparent; + border-top:0 solid transparent; + border-right:0 solid transparent; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + font-weight:normal; + padding:.2em 1em; +} + +.std42-dialog .ui-dialog-titlebar-close, +.std42-dialog .ui-dialog-titlebar-close:hover { padding:1px; } + +.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar { text-align:right; } +.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close { right:auto; left:.3em; } + +/* content */ +.std42-dialog .ui-dialog-content { + padding:.3em .5em; +} + +/* buttons */ +.std42-dialog .ui-dialog-buttonpane { + border:0 solid; + margin:0; + padding:.5em .7em; +} + +.std42-dialog .ui-dialog-buttonpane button { margin:0 0 0 .4em; padding:0; outline:0px solid; } +.std42-dialog .ui-dialog-buttonpane button span { padding:2px 9px; } + +.elfinder-dialog .ui-resizable-e, +.elfinder-dialog .ui-resizable-s { width:0; height:0;} + +.std42-dialog .ui-button input { cursor: pointer;} + +/* error/notify/confirm dialogs icon */ +.elfinder-dialog-icon { + position:absolute; + width:32px; + height:32px; + left:12px; + top:50%; + margin-top:-15px; + background:url("../img/dialogs.png") 0 0 no-repeat; +} + +.elfinder-rtl .elfinder-dialog-icon { left:auto; right:12px;} + + + +/*********************** ERROR DIALOG **************************/ + +.elfinder-dialog-error .ui-dialog-content, +.elfinder-dialog-confirm .ui-dialog-content { padding-left: 56px; min-height:35px; } + +.elfinder-rtl .elfinder-dialog-error .ui-dialog-content, +.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content { padding-left:0; padding-right: 56px; } + +/*********************** NOTIFY DIALOG **************************/ + +.elfinder-dialog-notify .ui-dialog-titlebar-close { display:none; } +.elfinder-dialog-notify .ui-dialog-content { padding:0; } + +/* one notification container */ +.elfinder-notify { + border-bottom:1px solid #ccc; + position:relative; + padding:.5em; + + text-align:center; + overflow:hidden; +} + +.elfinder-ltr .elfinder-notify { padding-left:30px; } +.elfinder-rtl .elfinder-notify { padding-right:30px; } + +.elfinder-notify:last-child { border:0 solid; } + +/* progressbar */ +.elfinder-notify-progressbar { + width:180px; + height:8px; + border:1px solid #aaa; + background:#f5f5f5; + margin:5px auto; + overflow:hidden; +} + +.elfinder-notify-progress { + width:100%; + height:8px; + background:url(../img/progress.gif) center center repeat-x; +} + +.elfinder-notify-progressbar, .elfinder-notify-progress { + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +/* icons */ +.elfinder-dialog-icon-open, +.elfinder-dialog-icon-file { background-position: 0 -225px; } +.elfinder-dialog-icon-reload { background-position: 0 -225px; } +.elfinder-dialog-icon-mkdir { background-position: 0 -64px; } +.elfinder-dialog-icon-mkfile { background-position: 0 -96px; } +.elfinder-dialog-icon-copy, +.elfinder-dialog-icon-prepare, +.elfinder-dialog-icon-move { background-position: 0 -128px;} +.elfinder-dialog-icon-upload { background-position: 0 -160px; } +.elfinder-dialog-icon-rm { background-position: 0 -192px; } +.elfinder-dialog-icon-download { background-position: 0 -260px; } +.elfinder-dialog-icon-save { background-position: 0 -295px; } +.elfinder-dialog-icon-rename { background-position: 0 -330px; } +.elfinder-dialog-icon-archive, +.elfinder-dialog-icon-extract { background-position: 0 -365px; } +.elfinder-dialog-icon-search { background-position: 0 -402px; } +.elfinder-dialog-icon-resize, +.elfinder-dialog-icon-loadimg, +.elfinder-dialog-icon-netmount, +.elfinder-dialog-icon-netunmount, +.elfinder-dialog-icon-dim { background-position: 0 -434px; } + +/*********************** CONFIRM DIALOG **************************/ + +.elfinder-dialog-confirm-applyall { padding-top:3px; } + +.elfinder-dialog-confirm .elfinder-dialog-icon { background-position:0 -32px; } + + + +/*********************** FILE INFO DIALOG **************************/ + + +.elfinder-info-title .elfinder-cwd-icon { + float:left; + width:48px; + height:48px; + margin-right:1em; +} + +.elfinder-info-title strong { display:block; padding:.3em 0 .5em 0; } + +.elfinder-info-tb { + min-width:200px; + border:0 solid; + margin:1em .2em 1em .2em; +} + +.elfinder-info-tb td { white-space:nowrap; padding:2px; } + +.elfinder-info-tb tr td:first-child { text-align:right; } + +.elfinder-info-tb span { float:left;} +.elfinder-info-tb a { outline: none; text-decoration:underline; } +.elfinder-info-tb a:hover { text-decoration:none; } +.elfinder-info-spinner { + width:14px; + height:14px; + float:left; + background: url("../img/spinner-mini.gif") center center no-repeat; + margin:0 5px; +} + +.elfinder-netmount-tb { margin:0 auto; } +.elfinder-netmount-tb input { border:1px solid #ccc; } +/*********************** UPLOAD DIALOG **************************/ + +.elfinder-upload-dropbox { + text-align:center; + padding:2em 0; + border:3px dashed #aaa; +} + +.elfinder-upload-dropbox.ui-state-hover { + background:#dfdfdf; + border:3px dashed #555; +} + +.elfinder-upload-dialog-or { + margin:.3em 0; + text-align:center; +} + +.elfinder-upload-dialog-wrapper { text-align:center; } + +.elfinder-upload-dialog-wrapper .ui-button { position:relative; overflow:hidden; } + +.elfinder-upload-dialog-wrapper .ui-button form { + position:absolute; + right:0; + top:0; + opacity: 0; filter:Alpha(Opacity=0); +} + +.elfinder-upload-dialog-wrapper .ui-button form input { + padding:0 20px; + font-size:3em; + +} + + +/* dialog for elFinder itself */ +.dialogelfinder .dialogelfinder-drag { + border-left:0 solid; + border-top:0 solid; + border-right:0 solid; + font-weight:normal; + padding:2px 12px; + cursor:move; + position:relative; + text-align:left; +} + +.elfinder-rtl .dialogelfinder-drag { text-align:right;} + +.dialogelfinder-drag-close { + position: absolute; + top:50%; + margin-top:-8px; +} + +.elfinder-ltr .dialogelfinder-drag-close { right:12px; } +.elfinder-rtl .dialogelfinder-drag-close { left:12px; } + + + +/* File: /css/fonts.css */ +.elfinder-contextmenu .elfinder-contextmenu-item span { font-size:.76em; } + +.elfinder-cwd-view-icons .elfinder-cwd-filename { font-size:.7em; } +.elfinder-cwd-view-list td { font-size:.7em; } + +.std42-dialog .ui-dialog-titlebar { font-size:.82em; } +.std42-dialog .ui-dialog-content { font-size:.72em; } +.std42-dialog .ui-dialog-buttonpane { font-size:.76em; } +.elfinder-info-tb { font-size:.9em; } +.elfinder-upload-dropbox { font-size:1.2em; } +.elfinder-upload-dialog-or { font-size:1.2em; } +.dialogelfinder .dialogelfinder-drag { font-size:.9em; } +.elfinder .elfinder-navbar { font-size:.72em; } +.elfinder-place-drag .elfinder-navbar-dir { font-size:.9em;} +.elfinder-quicklook-title { font-size:.7em; } +.elfinder-quicklook-info-data { font-size:.72em; } +.elfinder-quicklook-preview-text-wrapper { font-size:.9em; } +.elfinder-button-menu-item { font-size:.72em; } +.elfinder-button-search input { font-size:.8em; } +.elfinder-statusbar div { font-size:.7em; } +.elfinder-drag-num { font-size:12px; } + + +/* File: /css/navbar.css */ +/*********************************************/ +/* NAVIGATION PANEL */ +/*********************************************/ + +/* container */ +.elfinder .elfinder-navbar { + width:230px; + padding:3px 5px; + background-image:none; + border-top:0 solid; + border-bottom:0 solid; + overflow:auto; + display:none; + position:relative; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + user-select: none; + -webkit-tap-highlight-color:rgba(0,0,0,0); +/* border:1px solid #111;*/ +} + + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar { float:left; border-left:0 solid; } +.elfinder-rtl .elfinder-navbar { float:right; border-right:0 solid; } +.elfinder-ltr .ui-resizable-e { margin-left:10px; } + +/* folders tree container */ +.elfinder-tree { + display:table; width:100%; margin: 0 0 .5em 0; + -webkit-tap-highlight-color:rgba(0,0,0,0); +} + +/* one folder wrapper */ +.elfinder-navbar-wrapper, .elfinder-place-wrapper { } + +/* folder */ +.elfinder-navbar-dir { + position:relative; + display:block; + white-space:nowrap; + padding:3px 12px; + margin: 0; + outline:0px solid; + border:1px solid transparent; + cursor:default; + +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-dir { padding-left:35px; } +.elfinder-rtl .elfinder-navbar-dir { padding-right:35px; } + +/* arrow before icon */ +.elfinder-navbar-arrow { + width:12px; + height:14px; + position:absolute; + display:none; + top:50%; + margin-top:-8px; + background-image:url("../img/arrows-normal.png"); + background-repeat:no-repeat; +/* border:1px solid #111;*/ +} + +.ui-state-active .elfinder-navbar-arrow { background-image:url("../img/arrows-active.png"); } + +/* collapsed/expanded arrow view */ +.elfinder-navbar-collapsed .elfinder-navbar-arrow { display:block; } + +/* arrow ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow { background-position: 0 4px; left:0; } +.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow { background-position: 0 -10px; right:0; } +.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow, +.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow { background-position:0 -21px; } + + +/* folder icon */ +.elfinder-navbar-icon { + width:16px; + height:16px; + position:absolute; + top:50%; + margin-top:-8px; + background-image:url("../img/toolbar.png"); + background-repeat:no-repeat; + background-position:0 -16px; +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-icon { left:14px; } +.elfinder-rtl .elfinder-navbar-icon { right:14px; } + +/* root folder */ +.elfinder-tree .elfinder-navbar-root .elfinder-navbar-icon { background-position:0 0; } +.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon { background-position:0 -48px; } + +/* icon in active/hove/dropactive state */ +.ui-state-active .elfinder-navbar-icon, +.elfinder-droppable-active .elfinder-navbar-icon, +.ui-state-hover .elfinder-navbar-icon { background-position:0 -32px; } + +/* subdirs tree */ +.elfinder-navbar-subtree { display:none; } + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-subtree { margin-left:12px; } +.elfinder-rtl .elfinder-navbar-subtree { margin-right:12px; } + + +/* spinner */ +.elfinder-navbar-spinner { + width:14px; + height:14px; + position:absolute; + display:block; + top:50%; + margin-top:-7px; + background: url("../img/spinner-mini.gif") center center no-repeat; +} +/* spinner ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-spinner { left:0; margin-left:-2px; } +.elfinder-rtl .elfinder-navbar-spinner { right:0; margin-right:-2px; } + +/* permissions marker */ +.elfinder-navbar .elfinder-perms { top:50%; margin-top:-8px; } + +/* permissions/symlink markers ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar .elfinder-perms { left: 18px; } +.elfinder-rtl .elfinder-navbar .elfinder-perms { right: 18px; } +.elfinder-ltr .elfinder-navbar .elfinder-symlink { left: 8px; } +.elfinder-rtl .elfinder-navbar .elfinder-symlink { right: 8px; } + +/* resizable */ +.elfinder-navbar .ui-resizable-handle { width:12px; background:transparent url('../img/resize.png') center center no-repeat; left:0; } +.elfinder-nav-handle-icon { + position:absolute; + top:50%; + margin:-8px 2px 0 2px; + opacity: .5; filter:Alpha(Opacity=50); +} + +.elfinder-places { + border: none; + margin: 0; + padding: 0; +} +.elfinder-places.elfinder-droppable-active { + /*border:1px solid #8cafed;*/ +} + + + + + + + +/* File: /css/places.css */ + +/* File: /css/quicklook.css */ +/* quicklook window */ +.elfinder-quicklook { + position:absolute; + background:url("../img/quicklook-bg.png"); + display:none; + overflow:hidden; + border-radius:7px; + -moz-border-radius:7px; + -webkit-border-radius:7px; + padding:20px 0 40px 0; +} + +.elfinder-quicklook .ui-resizable-se { + width:14px; + height:14px; + right:5px; + bottom:3px; + background:url("../img/toolbar.png") 0 -496px no-repeat;} + +/* quicklook fullscreen window */ +.elfinder-quicklook-fullscreen { + border-radius:0; + -moz-border-radius:0; + -webkit-border-radius:0; + -webkit-background-clip: padding-box; +/* background-clip:padding-box;*/ + padding:0; + background:#000; + z-index:90000; + display:block; +} +/* hide titlebar in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar { display:none; } + +/* hide preview border in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-preview { border:0 solid ;} + +/* quicklook titlebar */ +.elfinder-quicklook-titlebar { + text-align:center; + background:#777; + position:absolute; + left:0; + top:0; + width:100%; + height:20px; + -moz-border-radius-topleft: 7px; + -webkit-border-top-left-radius: 7px; + border-top-left-radius: 7px; + -moz-border-radius-topright: 7px; + -webkit-border-top-right-radius: 7px; + border-top-right-radius: 7px; + cursor:move; +} + +/* window title */ +.elfinder-quicklook-title { + color:#fff; + white-space:nowrap; + overflow:hidden; + padding:2px 0; +} + +/* icon "close" in titlebar */ +.elfinder-quicklook-titlebar .ui-icon { + position:absolute; + left : 4px; + top:50%; + margin-top:-8px; + width:16px; + height:16px; + cursor:default; +} + +/* main part of quicklook window */ +.elfinder-quicklook-preview { + overflow:hidden; + position:relative; + border:0 solid; + border-left:1px solid transparent; + border-right:1px solid transparent; + height:100%; +} + +/* wrapper for file info/icon */ +.elfinder-quicklook-info-wrapper { + position:absolute; + width:100%; + left:0; + top:50%; + margin-top:-50px; +} + +/* file info */ +.elfinder-quicklook-info { + padding: 0 12px 0 112px; +} + +/* file name in info */ +.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child { + color:#fff; + font-weight:bold; + padding-bottom:.5em; +} + +/* other data in info */ +.elfinder-quicklook-info-data { + padding-bottom:.2em; + color:#fff; +} + + +/* file icon */ +.elfinder-quicklook .elfinder-cwd-icon { + position:absolute; + left:32px; + top:50%; + margin-top:-20px; +} + +/* image in preview */ +.elfinder-quicklook-preview img { + display:block; + margin:0 auto; +} + +/* navigation bar on quicklook window bottom */ +.elfinder-quicklook-navbar { + position:absolute; + left:50%; + bottom:4px; + width:140px; + height:32px; + padding:0px; + margin-left:-70px; + border:1px solid transparent; + border-radius:19px; + -moz-border-radius:19px; + -webkit-border-radius:19px; +} + +/* navigation bar in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar { + width:188px; + margin-left:-94px; + padding:5px; + border:1px solid #eee; + background:#000; +} + +/* show close icon in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close, +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator { + display:inline; +} + +/* icons in navbar */ +.elfinder-quicklook-navbar-icon { + width:32px; + height:32px; + margin:0 7px; + float:left; + background:url("../img/quicklook-icons.png") 0 0 no-repeat; + +} + +/* fullscreen icon */ +.elfinder-quicklook-navbar-icon-fullscreen { + background-position:0 -64px; +} + +/* exit fullscreen icon */ +.elfinder-quicklook-navbar-icon-fullscreen-off { + background-position:0 -96px; +} + +/* prev file icon */ +.elfinder-quicklook-navbar-icon-prev { + background-position:0 0; +} + +/* next file icon */ +.elfinder-quicklook-navbar-icon-next { + background-position:0 -32px; +} + +/* close icon */ +.elfinder-quicklook-navbar-icon-close { + background-position:0 -128px; + display:none; +} + +/* icons separator */ +.elfinder-quicklook-navbar-separator { + width:1px; + height:32px; + float:left; + border-left:1px solid #fff; + display:none; +} + +/* text files preview wrapper */ +.elfinder-quicklook-preview-text-wrapper { + width: 100%; + height:100%; + background:#fff; + color:#222; + overflow:auto; +} + +/* text preview */ +pre.elfinder-quicklook-preview-text { + margin:0; + padding:3px 9px; +} + +/* html/pdf preview */ +.elfinder-quicklook-preview-html, +.elfinder-quicklook-preview-pdf { + width:100%; + height:100%; + background:#fff; + border:0 solid; + margin:0; +} + +/* swf preview container */ +.elfinder-quicklook-preview-flash { + width:100%; + height:100%; +} + +/* audio preview container */ +.elfinder-quicklook-preview-audio { + width:100%; + position:absolute; + bottom:0; + left:0; +} + +/* audio preview using embed */ +embed.elfinder-quicklook-preview-audio { + height:30px; + background:transparent; +} + +/* video preview container */ +.elfinder-quicklook-preview-video { + width:100%; + height:100%; +} + + + + + + + + + + + + + + +/* File: /css/statusbar.css */ +/******************************************************************/ +/* STATUSBAR STYLES */ +/******************************************************************/ + + +/* statusbar container */ +.elfinder-statusbar { + text-align:center; + font-weight:normal; + padding:.2em .5em; + + border-right:0 solid transparent; + border-bottom:0 solid transparent; + border-left:0 solid transparent; +} + +.elfinder-statusbar a { text-decoration:none; } + + + +/* path in statusbar */ +.elfinder-path { + max-width:30%; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + -o-text-overflow:ellipsis; +} +.elfinder-ltr .elfinder-path { float:left; } +.elfinder-rtl .elfinder-path { float:right; } + +/* total/selected size in statusbar */ +.elfinder-stat-size { white-space:nowrap; } +.elfinder-ltr .elfinder-stat-size { float:right; } +.elfinder-rtl .elfinder-stat-size { float:left; } + +.elfinder-stat-selected { white-space:nowrap; overflow:hidden; } + +/* File: /css/toolbar.css */ +/*********************************************/ +/* TOOLBAR STYLES */ +/*********************************************/ +/* toolbar container */ +.elfinder-toolbar { + padding:4px 0 3px 0; + border-left:0 solid transparent; + border-top:0 solid transparent; + border-right:0 solid transparent; +} + +/* container for button's group */ +.elfinder-buttonset { + margin: 1px 4px; + float:left; + background:transparent; + padding:0; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +/*.elfinder-buttonset:first-child { margin:0; }*/ + +/* button */ +.elfinder .elfinder-button { + width:16px; + height:16px; + margin:0; + padding:4px; + float:left; + overflow:hidden; + position:relative; + border:0 solid; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.elfinder .ui-icon-search { cursor:pointer;} + +.elfinder-button:first-child { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.elfinder-button:last-child { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +/* separator between buttons, required for berder between button with ui color */ +.elfinder-toolbar-button-separator { + float:left; + padding:0; + height:24px; + border-top:0 solid; + border-right:0 solid; + border-bottom:0 solid; + width:0; +} + +/* change icon opacity^ not button */ +.elfinder .elfinder-button.ui-state-disabled { opacity:1; filter:Alpha(Opacity=100);} +.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon { opacity:.4; filter:Alpha(Opacity=40);} + +/* rtl enviroment */ +.elfinder-rtl .elfinder-buttonset { float:right; } + +/* icon inside button */ +.elfinder-button-icon { + width:16px; + height:16px; + display:block; + background:url('../img/toolbar.png') no-repeat; +} + +/* buttons icons */ +.elfinder-button-icon-home { background-position: 0 0; } +.elfinder-button-icon-back { background-position: 0 -112px; } +.elfinder-button-icon-forward { background-position: 0 -128px; } +.elfinder-button-icon-up { background-position: 0 -144px; } +.elfinder-button-icon-reload { background-position: 0 -160px; } +.elfinder-button-icon-open { background-position: 0 -176px; } +.elfinder-button-icon-mkdir { background-position: 0 -192px; } +.elfinder-button-icon-mkfile { background-position: 0 -208px; } +.elfinder-button-icon-rm { background-position: 0 -224px; } +.elfinder-button-icon-copy { background-position: 0 -240px; } +.elfinder-button-icon-cut { background-position: 0 -256px; } +.elfinder-button-icon-paste { background-position: 0 -272px; } +.elfinder-button-icon-getfile { background-position: 0 -288px; } +.elfinder-button-icon-duplicate { background-position: 0 -304px; } +.elfinder-button-icon-rename { background-position: 0 -320px; } +.elfinder-button-icon-edit { background-position: 0 -336px; } +.elfinder-button-icon-quicklook { background-position: 0 -352px; } +.elfinder-button-icon-upload { background-position: 0 -368px; } +.elfinder-button-icon-download { background-position: 0 -384px; } +.elfinder-button-icon-info { background-position: 0 -400px; } +.elfinder-button-icon-extract { background-position: 0 -416px; } +.elfinder-button-icon-archive { background-position: 0 -432px; } +.elfinder-button-icon-view { background-position: 0 -448px; } +.elfinder-button-icon-view-list { background-position: 0 -464px; } +.elfinder-button-icon-help { background-position: 0 -480px; } +.elfinder-button-icon-resize { background-position: 0 -512px; } +.elfinder-button-icon-search { background-position: 0 -561px; } +.elfinder-button-icon-sort { background-position: 0 -577px; } +.elfinder-button-icon-rotate-r { background-position: 0 -625px; } +.elfinder-button-icon-rotate-l { background-position: 0 -641px; } + +/* button with dropdown menu*/ +.elfinder .elfinder-menubutton { overflow:visible; } + + + +/* menu */ +.elfinder-button-menu { + position:absolute; + left:0; + top:25px; + padding:3px 0; +} + +/* menu item */ +.elfinder-button-menu-item { + white-space:nowrap; + cursor:default; + padding:5px 19px; + position:relative; +} + +/* fix hover ui class */ +.elfinder-button-menu .ui-state-hover { border:0 solid; } + +.elfinder-button-menu-item-separated { border-top:1px solid #ccc; } + +.elfinder-button-menu-item .ui-icon { + width:16px; + height:16px; + position:absolute; + left:2px; + top:50%; + margin-top:-8px; + display:none; +} + +.elfinder-button-menu-item-selected .ui-icon { display:block; } +.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-n { display:none; } +.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-s { display:none; } + +/* hack for upload button */ +.elfinder-button form { + position:absolute; + top:0; + right:0; + opacity: 0; filter:Alpha(Opacity=0); + cursor: pointer; +} + +.elfinder .elfinder-button form input { background:transparent; cursor: default;} + +/* search "button" */ +.elfinder .elfinder-button-search { + border:0 solid; + background:transparent; + padding:0; + margin: 1px 4px; + height: auto; + min-height: 26px; + float:right; + width:202px; +} + +/* ltr/rte enviroment */ +.elfinder-ltr .elfinder-button-search { float:right; margin-right:10px; } +.elfinder-rtl .elfinder-button-search { float:left; margin-left:10px; } + +/* search text field */ +.elfinder-button-search input { + width:160px; + height:22px; + padding:0 20px; + line-height: 22px; + border:0 solid; + border:1px solid #aaa; + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + outline:0px solid; +} + +.elfinder-rtl .elfinder-button-search input { direction:rtl; } + +/* icons */ +.elfinder-button-search .ui-icon { + position:absolute; + height:18px; + top: 50%; + margin:-9px 4px 0 4px; + opacity: .6; + filter:Alpha(Opacity=60); +} + +/* search/close icons */ +.elfinder-ltr .elfinder-button-search .ui-icon-search { left:0;} +.elfinder-rtl .elfinder-button-search .ui-icon-search { right:0;} +.elfinder-ltr .elfinder-button-search .ui-icon-close { right:0;} +.elfinder-rtl .elfinder-button-search .ui-icon-close { left:0;} + + + + + + diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/elfinder.min.css b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/elfinder.min.css new file mode 100644 index 0000000..66bb1a4 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/elfinder.min.css @@ -0,0 +1,9 @@ +/*! + * elFinder - file manager for web + * Version 2.0.6 (2016-02-21) + * http://elfinder.org + * + * Copyright 2009-2016, Studio 42 + * Licensed under a 3 clauses BSD license + */ +.elfinder-dialog-resize{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{padding-top:3em}.elfinder-resize-control input[type=text]{border:1px solid #aaa;text-align:right}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:auto}.elfinder-resize-handle{position:relative}.elfinder-resize-handle-hline,.elfinder-resize-handle-vline{position:absolute;background-image:url("../img/crop.gif")}.elfinder-resize-handle-hline{width:100%;height:1px!important;background-repeat:repeat-x}.elfinder-resize-handle-vline{width:1px!important;height:100%;background-repeat:repeat-y}.elfinder-resize-handle-hline-top{top:0;left:0}.elfinder-resize-handle-hline-bottom{bottom:0;left:0}.elfinder-resize-handle-vline-left{top:0;left:0}.elfinder-resize-handle-vline-right{top:0;right:0}.elfinder-resize-handle-point{position:absolute;width:8px;height:8px;border:1px solid #777;background:0 0}.elfinder-resize-handle-point-n{top:0;left:50%;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-ne{top:0;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-e{top:50%;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-se{bottom:0;right:0;margin-bottom:-5px;margin-right:-5px}.elfinder-resize-handle-point-s{bottom:0;left:50%;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-sw{bottom:0;left:0;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-w{top:50%;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-nw{top:0;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-spinner{position:absolute;width:200px;height:30px;top:50%;margin-top:-25px;left:50%;margin-left:-100px;text-align:center;background:url(../img/progress.gif) center bottom repeat-x}.elfinder-resize-row{margin-bottom:7px;position:relative}.elfinder-resize-label{float:left;width:80px;padding-top:3px}.elfinder-resize-reset{width:16px;height:16px;position:absolute;margin-top:-8px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e{height:100%;width:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-se{background:0 0;bottom:0;right:0;margin-right:-7px;margin-bottom:-7px}.elfinder-dialog-resize .ui-icon-grip-solid-vertical{position:absolute;top:50%;right:0;margin-top:-8px;margin-right:-11px}.elfinder-dialog-resize .ui-icon-grip-solid-horizontal{position:absolute;left:50%;bottom:0;margin-left:-8px;margin-bottom:-11px}.elfinder-resize-row .elfinder-buttonset{float:right}.elfinder-resize-rotate-slider{float:left;width:195px;margin:7px 7px 0}.elfinder-file-edit{width:99%;height:99%;margin:0;padding:2px;border:1px solid #ccc}div.elfinder-cwd-wrapper-list tr.ui-state-default td{position:relative}div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{position:absolute;top:-5px;left:0;right:0;margin:auto}.elfinder-help{margin-bottom:.5em}.elfinder-help .ui-tabs-panel{padding:.5em}.elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.2em 1em}.elfinder-help-shortcuts{height:300px;padding:1em;margin:.5em 0;overflow:auto}.elfinder-help-shortcut{white-space:nowrap;clear:both}.elfinder-help-shortcut-pattern{float:left;width:160px}.elfinder-help-logo{width:100px;height:96px;float:left;margin-right:1em;background:url('../img/logo.png') center center no-repeat}.elfinder-help h3{font-size:1.5em;margin:.2em 0 .3em}.elfinder-help-separator{clear:both;padding:.5em}.elfinder-help-link{padding:2px}.elfinder-help .ui-priority-secondary{font-size:.9em}.elfinder-help .ui-priority-primary{margin-bottom:7px}.elfinder-help-team{clear:both;text-align:right;border-bottom:1px solid #ccc;margin:.5em 0;font-size:.9em}.elfinder-help-team div{float:left}.elfinder-help-license{font-size:.9em}.elfinder-help-disabled{font-weight:700;text-align:center;margin:90px 0}.elfinder-help .elfinder-dont-panic{display:block;border:1px solid transparent;width:200px;height:200px;margin:30px auto;text-decoration:none;text-align:center;position:relative;background:#d90004;-moz-box-shadow:5px 5px 9px #111;-webkit-box-shadow:5px 5px 9px #111;box-shadow:5px 5px 9px #111;background:-moz-radial-gradient(80px 80px,circle farthest-corner,#d90004 35%,#960004 100%);background:-webkit-gradient(radial,80 80,60,80 80,120,from(#d90004),to(#960004));-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;outline:none}.elfinder-help .elfinder-dont-panic span{font-size:3em;font-weight:700;text-align:center;color:#fff;position:absolute;left:0;top:45px}.elfinder{padding:0;position:relative;display:block}.elfinder-rtl{text-align:right;direction:rtl}.elfinder-workzone{padding:0;position:relative;overflow:hidden}.elfinder-perms,.elfinder-symlink{position:absolute;width:16px;height:16px;background-image:url(../img/toolbar.png);background-repeat:no-repeat;background-position:0 -528px}.elfinder-na .elfinder-perms{background-position:0 -96px}.elfinder-ro .elfinder-perms{background-position:0 -64px}.elfinder-wo .elfinder-perms{background-position:0 -80px}.elfinder-drag-helper{width:60px;height:50px;padding:0 0 0 25px;z-index:100000}.elfinder-drag-helper-icon-plus{position:absolute;width:16px;height:16px;left:43px;top:55px;background:url('../img/toolbar.png') 0 -544px no-repeat;display:none}.elfinder-drag-helper-plus .elfinder-drag-helper-icon-plus{display:block}.elfinder-drag-num{position:absolute;top:0;left:0;width:16px;height:14px;text-align:center;padding-top:2px;font-weight:700;color:#fff;background-color:red;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-drag-helper .elfinder-cwd-icon{margin:0 0 0 -24px;float:left}.elfinder-overlay{opacity:0;filter:Alpha(Opacity=0)}.elfinder .elfinder-panel{position:relative;background-image:none;padding:7px 12px}.elfinder-contextmenu,.elfinder-contextmenu-sub{display:none;position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0}.elfinder-contextmenu-sub{top:5px}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-right:12px}.elfinder-contextmenu-arrow,.elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px}.elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder-contextmenu-rtl .elfinder-contextmenu-icon{right:8px}.elfinder-contextmenu-arrow{width:16px;height:16px;background:url('../img/arrows-normal.png') 5px 4px no-repeat}.elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder-cwd-wrapper{overflow:auto;position:relative;padding:2px;margin:0}.elfinder-cwd-wrapper-list{padding:0}.elfinder-cwd{position:relative;cursor:default;padding:0;margin:0;-ms-touch-action:auto;touch-action:auto;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active{padding:0;border:2px solid #8cafed}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:80px;padding-bottom:2px;cursor:default;border:none}.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file{float:left;margin:0 3px 12px 0}.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file{float:right;margin:0 0 5px 3px}.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover{border:0 solid}.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:52px;height:52px;margin:1px auto;padding:2px;position:relative}.elfinder-cwd-view-icons .elfinder-cwd-filename{text-align:center;white-space:pre;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;margin:3px 1px 0;padding:1px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-cwd-view-icons .elfinder-perms{bottom:4px;right:2px}.elfinder-cwd-view-icons .elfinder-symlink{bottom:6px;left:0}.elfinder-cwd-icon{display:block;width:48px;height:48px;margin:0 auto;background:url('../img/icons-big.png') 0 0 no-repeat;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon{background-position:0 -100px}.elfinder-cwd-icon-directory{background-position:0 -50px}.elfinder-cwd-icon-application{background-position:0 -150px}.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-text{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-postscript{background-position:0 -250px}.elfinder-cwd-icon-audio{background-position:0 -300px}.elfinder-cwd-icon-video,.elfinder-cwd-icon-flash-video{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtfd{background-position:0 -401px}.elfinder-cwd-icon-pdf{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-msword,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-office,.elfinder-cwd-icon-vnd-ms-powerpoint,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,.elfinder-cwd-icon-vnd-oasis-opendocument-chart,.elfinder-cwd-icon-vnd-oasis-opendocument-database,.elfinder-cwd-icon-vnd-oasis-opendocument-formula,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,.elfinder-cwd-icon-vnd-oasis-opendocument-image,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,.elfinder-cwd-icon-vnd-openofficeorg-extension,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template{background-position:0 -500px}.elfinder-cwd-icon-html{background-position:0 -550px}.elfinder-cwd-icon-css{background-position:0 -600px}.elfinder-cwd-icon-javascript,.elfinder-cwd-icon-x-javascript{background-position:0 -650px}.elfinder-cwd-icon-x-perl{background-position:0 -700px}.elfinder-cwd-icon-x-python{background-position:0 -750px}.elfinder-cwd-icon-x-ruby{background-position:0 -800px}.elfinder-cwd-icon-x-sh,.elfinder-cwd-icon-x-shellscript{background-position:0 -850px}.elfinder-cwd-icon-x-c,.elfinder-cwd-icon-x-csrc,.elfinder-cwd-icon-x-chdr,.elfinder-cwd-icon-x-c--,.elfinder-cwd-icon-x-c--src,.elfinder-cwd-icon-x-c--hdr,.elfinder-cwd-icon-x-java,.elfinder-cwd-icon-x-java-source{background-position:0 -900px}.elfinder-cwd-icon-x-php{background-position:0 -950px}.elfinder-cwd-icon-xml{background-position:0 -1000px}.elfinder-cwd-icon-zip,.elfinder-cwd-icon-x-zip,.elfinder-cwd-icon-x-xz,.elfinder-cwd-icon-x-7z-compressed{background-position:0 -1050px}.elfinder-cwd-icon-x-gzip,.elfinder-cwd-icon-x-tar{background-position:0 -1100px}.elfinder-cwd-icon-x-bzip,.elfinder-cwd-icon-x-bzip2{background-position:0 -1150px}.elfinder-cwd-icon-x-rar,.elfinder-cwd-icon-x-rar-compressed{background-position:0 -1200px}.elfinder-cwd-icon-x-shockwave-flash{background-position:0 -1250px}.elfinder-cwd-icon-group{background-position:0 -1300px}.elfinder-cwd input{width:100%;border:0 solid;margin:0;padding:0}.elfinder-cwd-view-icons input,.elfinder-cwd-view-icons{text-align:center}.elfinder-cwd table{width:100%;border-collapse:separate;border:0 solid;margin:0 0 10px;border-spacing:0}.elfinder .elfinder-cwd table thead tr{border-left:0 solid;border-top:0 solid;border-right:0 solid}.elfinder .elfinder-cwd table td{padding:4px 12px;white-space:pre;overflow:hidden;text-align:right;cursor:default;border:0 solid}.elfinder-ltr .elfinder-cwd table td{text-align:right}.elfinder-ltr .elfinder-cwd table td:first-child{text-align:left}.elfinder-rtl .elfinder-cwd table td{text-align:left}.elfinder-rtl .elfinder-cwd table td:first-child{text-align:right}.elfinder-odd-row{background:#eee}.elfinder-cwd-view-list .elfinder-cwd-file-wrapper{width:97%;position:relative}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-left:23px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-right:23px}.elfinder-cwd-view-list .elfinder-perms,.elfinder-cwd-view-list .elfinder-symlink{top:50%;margin-top:-6px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms{left:7px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink{left:-7px}.elfinder-cwd-view-list td .elfinder-cwd-icon{width:16px;height:16px;position:absolute;top:50%;margin-top:-8px;background-image:url(../img/icons-small.png)}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon{left:0}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon{right:0}.std42-dialog{padding:0;position:absolute;left:auto;right:auto}.std42-dialog .ui-dialog-titlebar{border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;font-weight:400;padding:.2em 1em}.std42-dialog .ui-dialog-titlebar-close,.std42-dialog .ui-dialog-titlebar-close:hover{padding:1px}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar{text-align:right}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close{right:auto;left:.3em}.std42-dialog .ui-dialog-content{padding:.3em .5em}.std42-dialog .ui-dialog-buttonpane{border:0 solid;margin:0;padding:.5em .7em}.std42-dialog .ui-dialog-buttonpane button{margin:0 0 0 .4em;padding:0;outline:0 solid}.std42-dialog .ui-dialog-buttonpane button span{padding:2px 9px}.elfinder-dialog .ui-resizable-e,.elfinder-dialog .ui-resizable-s{width:0;height:0}.std42-dialog .ui-button input{cursor:pointer}.elfinder-dialog-icon{position:absolute;width:32px;height:32px;left:12px;top:50%;margin-top:-15px;background:url("../img/dialogs.png") 0 0 no-repeat}.elfinder-rtl .elfinder-dialog-icon{left:auto;right:12px}.elfinder-dialog-error .ui-dialog-content,.elfinder-dialog-confirm .ui-dialog-content{padding-left:56px;min-height:35px}.elfinder-rtl .elfinder-dialog-error .ui-dialog-content,.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content{padding-left:0;padding-right:56px}.elfinder-dialog-notify .ui-dialog-titlebar-close{display:none}.elfinder-dialog-notify .ui-dialog-content{padding:0}.elfinder-notify{border-bottom:1px solid #ccc;position:relative;padding:.5em;text-align:center;overflow:hidden}.elfinder-ltr .elfinder-notify{padding-left:30px}.elfinder-rtl .elfinder-notify{padding-right:30px}.elfinder-notify:last-child{border:0 solid}.elfinder-notify-progressbar{width:180px;height:8px;border:1px solid #aaa;background:#f5f5f5;margin:5px auto;overflow:hidden}.elfinder-notify-progress{width:100%;height:8px;background:url(../img/progress.gif) center center repeat-x}.elfinder-notify-progressbar,.elfinder-notify-progress{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.elfinder-dialog-icon-open,.elfinder-dialog-icon-file,.elfinder-dialog-icon-reload{background-position:0 -225px}.elfinder-dialog-icon-mkdir{background-position:0 -64px}.elfinder-dialog-icon-mkfile{background-position:0 -96px}.elfinder-dialog-icon-copy,.elfinder-dialog-icon-prepare,.elfinder-dialog-icon-move{background-position:0 -128px}.elfinder-dialog-icon-upload{background-position:0 -160px}.elfinder-dialog-icon-rm{background-position:0 -192px}.elfinder-dialog-icon-download{background-position:0 -260px}.elfinder-dialog-icon-save{background-position:0 -295px}.elfinder-dialog-icon-rename{background-position:0 -330px}.elfinder-dialog-icon-archive,.elfinder-dialog-icon-extract{background-position:0 -365px}.elfinder-dialog-icon-search{background-position:0 -402px}.elfinder-dialog-icon-resize,.elfinder-dialog-icon-loadimg,.elfinder-dialog-icon-netmount,.elfinder-dialog-icon-netunmount,.elfinder-dialog-icon-dim{background-position:0 -434px}.elfinder-dialog-confirm-applyall{padding-top:3px}.elfinder-dialog-confirm .elfinder-dialog-icon{background-position:0 -32px}.elfinder-info-title .elfinder-cwd-icon{float:left;width:48px;height:48px;margin-right:1em}.elfinder-info-title strong{display:block;padding:.3em 0 .5em}.elfinder-info-tb{min-width:200px;border:0 solid;margin:1em .2em}.elfinder-info-tb td{white-space:nowrap;padding:2px}.elfinder-info-tb tr td:first-child{text-align:right}.elfinder-info-tb span{float:left}.elfinder-info-tb a{outline:none;text-decoration:underline}.elfinder-info-tb a:hover{text-decoration:none}.elfinder-info-spinner{width:14px;height:14px;float:left;background:url("../img/spinner-mini.gif") center center no-repeat;margin:0 5px}.elfinder-netmount-tb{margin:0 auto}.elfinder-netmount-tb input{border:1px solid #ccc}.elfinder-upload-dropbox{text-align:center;padding:2em 0;border:3px dashed #aaa}.elfinder-upload-dropbox.ui-state-hover{background:#dfdfdf;border:3px dashed #555}.elfinder-upload-dialog-or{margin:.3em 0;text-align:center}.elfinder-upload-dialog-wrapper{text-align:center}.elfinder-upload-dialog-wrapper .ui-button{position:relative;overflow:hidden}.elfinder-upload-dialog-wrapper .ui-button form{position:absolute;right:0;top:0;opacity:0;filter:Alpha(Opacity=0)}.elfinder-upload-dialog-wrapper .ui-button form input{padding:0 20px;font-size:3em}.dialogelfinder .dialogelfinder-drag{border-left:0 solid;border-top:0 solid;border-right:0 solid;font-weight:400;padding:2px 12px;cursor:move;position:relative;text-align:left}.elfinder-rtl .dialogelfinder-drag{text-align:right}.dialogelfinder-drag-close{position:absolute;top:50%;margin-top:-8px}.elfinder-ltr .dialogelfinder-drag-close{right:12px}.elfinder-rtl .dialogelfinder-drag-close{left:12px}.elfinder-contextmenu .elfinder-contextmenu-item span{font-size:.76em}.elfinder-cwd-view-icons .elfinder-cwd-filename,.elfinder-cwd-view-list td{font-size:.7em}.std42-dialog .ui-dialog-titlebar{font-size:.82em}.std42-dialog .ui-dialog-content{font-size:.72em}.std42-dialog .ui-dialog-buttonpane{font-size:.76em}.elfinder-info-tb{font-size:.9em}.elfinder-upload-dropbox,.elfinder-upload-dialog-or{font-size:1.2em}.dialogelfinder .dialogelfinder-drag{font-size:.9em}.elfinder .elfinder-navbar{font-size:.72em}.elfinder-place-drag .elfinder-navbar-dir{font-size:.9em}.elfinder-quicklook-title{font-size:.7em}.elfinder-quicklook-info-data{font-size:.72em}.elfinder-quicklook-preview-text-wrapper{font-size:.9em}.elfinder-button-menu-item{font-size:.72em}.elfinder-button-search input{font-size:.8em}.elfinder-statusbar div{font-size:.7em}.elfinder-drag-num{font-size:12px}.elfinder .elfinder-navbar{width:230px;padding:3px 5px;background-image:none;border-top:0 solid;border-bottom:0 solid;overflow:auto;display:none;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder-ltr .elfinder-navbar{float:left;border-left:0 solid}.elfinder-rtl .elfinder-navbar{float:right;border-right:0 solid}.elfinder-ltr .ui-resizable-e{margin-left:10px}.elfinder-tree{display:table;width:100%;margin:0 0 .5em;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder-navbar-dir{position:relative;display:block;white-space:nowrap;padding:3px 12px;margin:0;outline:0 solid;border:1px solid transparent;cursor:default}.elfinder-ltr .elfinder-navbar-dir{padding-left:35px}.elfinder-rtl .elfinder-navbar-dir{padding-right:35px}.elfinder-navbar-arrow{width:12px;height:14px;position:absolute;display:none;top:50%;margin-top:-8px;background-image:url("../img/arrows-normal.png");background-repeat:no-repeat}.ui-state-active .elfinder-navbar-arrow{background-image:url("../img/arrows-active.png")}.elfinder-navbar-collapsed .elfinder-navbar-arrow{display:block}.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 4px;left:0}.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 -10px;right:0}.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow{background-position:0 -21px}.elfinder-navbar-icon{width:16px;height:16px;position:absolute;top:50%;margin-top:-8px;background-image:url("../img/toolbar.png");background-repeat:no-repeat;background-position:0 -16px}.elfinder-ltr .elfinder-navbar-icon{left:14px}.elfinder-rtl .elfinder-navbar-icon{right:14px}.elfinder-tree .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 0}.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 -48px}.ui-state-active .elfinder-navbar-icon,.elfinder-droppable-active .elfinder-navbar-icon,.ui-state-hover .elfinder-navbar-icon{background-position:0 -32px}.elfinder-navbar-subtree{display:none}.elfinder-ltr .elfinder-navbar-subtree{margin-left:12px}.elfinder-rtl .elfinder-navbar-subtree{margin-right:12px}.elfinder-navbar-spinner{width:14px;height:14px;position:absolute;display:block;top:50%;margin-top:-7px;background:url("../img/spinner-mini.gif") center center no-repeat}.elfinder-ltr .elfinder-navbar-spinner{left:0;margin-left:-2px}.elfinder-rtl .elfinder-navbar-spinner{right:0;margin-right:-2px}.elfinder-navbar .elfinder-perms{top:50%;margin-top:-8px}.elfinder-ltr .elfinder-navbar .elfinder-perms{left:18px}.elfinder-rtl .elfinder-navbar .elfinder-perms{right:18px}.elfinder-ltr .elfinder-navbar .elfinder-symlink{left:8px}.elfinder-rtl .elfinder-navbar .elfinder-symlink{right:8px}.elfinder-navbar .ui-resizable-handle{width:12px;background:url('../img/resize.png') center center no-repeat;left:0}.elfinder-nav-handle-icon{position:absolute;top:50%;margin:-8px 2px 0;opacity:.5;filter:Alpha(Opacity=50)}.elfinder-places{border:none;margin:0;padding:0}.elfinder-quicklook{position:absolute;background:url("../img/quicklook-bg.png");display:none;overflow:hidden;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;padding:20px 0 40px}.elfinder-quicklook .ui-resizable-se{width:14px;height:14px;right:5px;bottom:3px;background:url("../img/toolbar.png") 0 -496px no-repeat}.elfinder-quicklook-fullscreen{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-background-clip:padding-box;padding:0;background:#000;z-index:90000;display:block}.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar{display:none}.elfinder-quicklook-fullscreen .elfinder-quicklook-preview{border:0 solid}.elfinder-quicklook-titlebar{text-align:center;background:#777;position:absolute;left:0;top:0;width:100%;height:20px;-moz-border-radius-topleft:7px;-webkit-border-top-left-radius:7px;border-top-left-radius:7px;-moz-border-radius-topright:7px;-webkit-border-top-right-radius:7px;border-top-right-radius:7px;cursor:move}.elfinder-quicklook-title{color:#fff;white-space:nowrap;overflow:hidden;padding:2px 0}.elfinder-quicklook-titlebar .ui-icon{position:absolute;left:4px;top:50%;margin-top:-8px;width:16px;height:16px;cursor:default}.elfinder-quicklook-preview{overflow:hidden;position:relative;border:0 solid;border-left:1px solid transparent;border-right:1px solid transparent;height:100%}.elfinder-quicklook-info-wrapper{position:absolute;width:100%;left:0;top:50%;margin-top:-50px}.elfinder-quicklook-info{padding:0 12px 0 112px}.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child{color:#fff;font-weight:700;padding-bottom:.5em}.elfinder-quicklook-info-data{padding-bottom:.2em;color:#fff}.elfinder-quicklook .elfinder-cwd-icon{position:absolute;left:32px;top:50%;margin-top:-20px}.elfinder-quicklook-preview img{display:block;margin:0 auto}.elfinder-quicklook-navbar{position:absolute;left:50%;bottom:4px;width:140px;height:32px;padding:0;margin-left:-70px;border:1px solid transparent;border-radius:19px;-moz-border-radius:19px;-webkit-border-radius:19px}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar{width:188px;margin-left:-94px;padding:5px;border:1px solid #eee;background:#000}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator{display:inline}.elfinder-quicklook-navbar-icon{width:32px;height:32px;margin:0 7px;float:left;background:url("../img/quicklook-icons.png") 0 0 no-repeat}.elfinder-quicklook-navbar-icon-fullscreen{background-position:0 -64px}.elfinder-quicklook-navbar-icon-fullscreen-off{background-position:0 -96px}.elfinder-quicklook-navbar-icon-prev{background-position:0 0}.elfinder-quicklook-navbar-icon-next{background-position:0 -32px}.elfinder-quicklook-navbar-icon-close{background-position:0 -128px;display:none}.elfinder-quicklook-navbar-separator{width:1px;height:32px;float:left;border-left:1px solid #fff;display:none}.elfinder-quicklook-preview-text-wrapper{width:100%;height:100%;background:#fff;color:#222;overflow:auto}pre.elfinder-quicklook-preview-text{margin:0;padding:3px 9px}.elfinder-quicklook-preview-html,.elfinder-quicklook-preview-pdf{width:100%;height:100%;background:#fff;border:0 solid;margin:0}.elfinder-quicklook-preview-flash{width:100%;height:100%}.elfinder-quicklook-preview-audio{width:100%;position:absolute;bottom:0;left:0}embed.elfinder-quicklook-preview-audio{height:30px;background:0 0}.elfinder-quicklook-preview-video{width:100%;height:100%}.elfinder-statusbar{text-align:center;font-weight:400;padding:.2em .5em;border-right:0 solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent}.elfinder-statusbar a{text-decoration:none}.elfinder-path{max-width:30%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.elfinder-ltr .elfinder-path{float:left}.elfinder-rtl .elfinder-path{float:right}.elfinder-stat-size{white-space:nowrap}.elfinder-ltr .elfinder-stat-size{float:right}.elfinder-rtl .elfinder-stat-size{float:left}.elfinder-stat-selected{white-space:nowrap;overflow:hidden}.elfinder-toolbar{padding:4px 0 3px;border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent}.elfinder-buttonset{margin:1px 4px;float:left;background:0 0;padding:0;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.elfinder .elfinder-button{width:16px;height:16px;margin:0;padding:4px;float:left;overflow:hidden;position:relative;border:0 solid;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.elfinder .ui-icon-search{cursor:pointer}.elfinder-button:first-child{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.elfinder-button:last-child{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.elfinder-toolbar-button-separator{float:left;padding:0;height:24px;border-top:0 solid;border-right:0 solid;border-bottom:0 solid;width:0}.elfinder .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:block;background:url('../img/toolbar.png') no-repeat}.elfinder-button-icon-home{background-position:0 0}.elfinder-button-icon-back{background-position:0 -112px}.elfinder-button-icon-forward{background-position:0 -128px}.elfinder-button-icon-up{background-position:0 -144px}.elfinder-button-icon-reload{background-position:0 -160px}.elfinder-button-icon-open{background-position:0 -176px}.elfinder-button-icon-mkdir{background-position:0 -192px}.elfinder-button-icon-mkfile{background-position:0 -208px}.elfinder-button-icon-rm{background-position:0 -224px}.elfinder-button-icon-copy{background-position:0 -240px}.elfinder-button-icon-cut{background-position:0 -256px}.elfinder-button-icon-paste{background-position:0 -272px}.elfinder-button-icon-getfile{background-position:0 -288px}.elfinder-button-icon-duplicate{background-position:0 -304px}.elfinder-button-icon-rename{background-position:0 -320px}.elfinder-button-icon-edit{background-position:0 -336px}.elfinder-button-icon-quicklook{background-position:0 -352px}.elfinder-button-icon-upload{background-position:0 -368px}.elfinder-button-icon-download{background-position:0 -384px}.elfinder-button-icon-info{background-position:0 -400px}.elfinder-button-icon-extract{background-position:0 -416px}.elfinder-button-icon-archive{background-position:0 -432px}.elfinder-button-icon-view{background-position:0 -448px}.elfinder-button-icon-view-list{background-position:0 -464px}.elfinder-button-icon-help{background-position:0 -480px}.elfinder-button-icon-resize{background-position:0 -512px}.elfinder-button-icon-search{background-position:0 -561px}.elfinder-button-icon-sort{background-position:0 -577px}.elfinder-button-icon-rotate-r{background-position:0 -625px}.elfinder-button-icon-rotate-l{background-position:0 -641px}.elfinder .elfinder-menubutton{overflow:visible}.elfinder-button-menu{position:absolute;left:0;top:25px;padding:3px 0}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.elfinder-button-menu .ui-state-hover{border:0 solid}.elfinder-button-menu-item-separated{border-top:1px solid #ccc}.elfinder-button-menu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-button-menu-item-selected .ui-icon{display:block}.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-n,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-s{display:none}.elfinder-button form{position:absolute;top:0;right:0;opacity:0;filter:Alpha(Opacity=0);cursor:pointer}.elfinder .elfinder-button form input{background:0 0;cursor:default}.elfinder .elfinder-button-search{border:0 solid;background:0 0;padding:0;margin:1px 4px;height:auto;min-height:26px;float:right;width:202px}.elfinder-ltr .elfinder-button-search{float:right;margin-right:10px}.elfinder-rtl .elfinder-button-search{float:left;margin-left:10px}.elfinder-button-search input{width:160px;height:22px;padding:0 20px;line-height:22px;border:1px solid #aaa;-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px;outline:0 solid}.elfinder-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-9px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-rtl .elfinder-button-search .ui-icon-search,.elfinder-ltr .elfinder-button-search .ui-icon-close{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0} \ No newline at end of file diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/animated-overlay.gif b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/animated-overlay.gif new file mode 100644 index 0000000..d441f75 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/animated-overlay.gif differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..e078a34 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_flat_75_ffffff_40x100.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..d418d05 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..366c9aa Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_65_ffffff_1x400.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..05dd582 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_75_dadada_1x400.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..c918cd2 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_75_e6e6e6_1x400.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..1b3d84f Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_95_fef1ec_1x400.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..f2785a4 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..8e9b6e2 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_222222_256x240.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..c1cb117 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_222222_256x240.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_2e83ff_256x240.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..84b601b Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_2e83ff_256x240.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_454545_256x240.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..b6db1ac Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_454545_256x240.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_888888_256x240.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..feea0e2 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_888888_256x240.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_cd0a0a_256x240.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..ed5b6b0 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/images/ui-icons_cd0a0a_256x240.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/jquery-ui.css b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/jquery-ui.css new file mode 100644 index 0000000..1c22746 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/jquery-ui.css @@ -0,0 +1,1225 @@ +/*! jQuery UI - v1.11.4 - 2015-03-11 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ + font-size: 100%; +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; /* support: IE7 */ + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + /* Support: IE7 */ + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer; +} +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50%; +} +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #212121; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +} diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/theme.css b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/theme.css new file mode 100644 index 0000000..fce0c99 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/css/theme.css @@ -0,0 +1,55 @@ +/** + * MacOS X like theme for elFinder. + * Required jquery ui "smoothness" theme. + * + * @author Dmitry (dio) Levashov + **/ + +/* dialogs */ +.std42-dialog, .std42-dialog .ui-widget-content { background-color:#ededed; background-image:none; background-clip: content-box; } + +/* navbar */ +.elfinder .elfinder-navbar { background:#dde4eb; } +.elfinder-navbar .ui-state-hover { background:transparent; border-color:transparent; } +.elfinder-navbar .ui-state-active { background: #3875d7; border-color:#3875d7; color:#fff; } +.elfinder-navbar .elfinder-droppable-active {background:#A7C6E5 !important;} +/* disabled elfinder */ +.elfinder-disabled .elfinder-navbar .ui-state-active { background: #dadada; border-color:#aaa; color:#fff; } + + +/* current directory */ +/* selected file in "icons" view */ +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { background:#ccc; } + +/* list view*/ +.elfinder-cwd table thead td.ui-state-hover { background:#ddd; } +.elfinder-cwd table tr:nth-child(odd) { background-color:#edf3fe; } +.elfinder-cwd table tr { + border: 1px solid transparent; + border-top:1px solid #fff; +} + +/* common selected background/color */ +.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, +.elfinder-cwd table td.ui-state-hover, +.elfinder-button-menu .ui-state-hover { background: #3875d7; color:#fff;} +/* disabled elfinder */ +.elfinder-disabled .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, +.elfinder-disabled .elfinder-cwd table td.ui-state-hover { background:#dadada;} + +/* statusbar */ +.elfinder .elfinder-statusbar { color:#555; } +.elfinder .elfinder-statusbar a { text-decoration:none; color:#555;} + + +.std42-dialog .elfinder-help, .std42-dialog .elfinder-help .ui-widget-content { background:#fff;} + +/* contextmenu */ +.elfinder-contextmenu .ui-state-hover { background: #3875d7; color:#fff; } +.elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow { background-image:url('../img/arrows-active.png'); } + + + + + + diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/arrows-active.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/arrows-active.png new file mode 100644 index 0000000..2ad7109 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/arrows-active.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/arrows-normal.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/arrows-normal.png new file mode 100644 index 0000000..9d8b4d2 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/arrows-normal.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/crop.gif b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/crop.gif new file mode 100644 index 0000000..72ea7cc Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/crop.gif differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/dialogs.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/dialogs.png new file mode 100644 index 0000000..20de357 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/dialogs.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/icons-big.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/icons-big.png new file mode 100644 index 0000000..00be0a6 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/icons-big.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/icons-small.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/icons-small.png new file mode 100644 index 0000000..95849dc Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/icons-small.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/logo.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/logo.png new file mode 100644 index 0000000..c1036de Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/logo.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/progress.gif b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/progress.gif new file mode 100644 index 0000000..8bab11e Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/progress.gif differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/quicklook-bg.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/quicklook-bg.png new file mode 100644 index 0000000..aedeadd Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/quicklook-bg.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/quicklook-icons.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/quicklook-icons.png new file mode 100644 index 0000000..76df30c Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/quicklook-icons.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/resize.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/resize.png new file mode 100644 index 0000000..6ec17cd Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/resize.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/spinner-mini.gif b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/spinner-mini.gif new file mode 100644 index 0000000..5b33f7e Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/spinner-mini.gif differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/toolbar.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/toolbar.png new file mode 100644 index 0000000..3b51326 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/toolbar.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_dropbox.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_dropbox.png new file mode 100644 index 0000000..13a0d1e Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_dropbox.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_ftp.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_ftp.png new file mode 100644 index 0000000..605729d Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_ftp.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_local.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_local.png new file mode 100644 index 0000000..2c024e4 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_local.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_sql.png b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_sql.png new file mode 100644 index 0000000..0792546 Binary files /dev/null and b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/img/volume_icon_sql.png differ diff --git a/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/js/elfinder.full.js b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/js/elfinder.full.js new file mode 100644 index 0000000..f31f444 --- /dev/null +++ b/ASP.NET.CORE/ELFinder.WebServer.ASPNetCore/wwwroot/Content/js/elfinder.full.js @@ -0,0 +1,11526 @@ +/*! + * elFinder - file manager for web + * Version 2.0.6 (2016-02-21) + * http://elfinder.org + * + * Copyright 2009-2016, Studio 42 + * Licensed under a 3 clauses BSD license + */ +(function($) { + + +/* + * File: /js/elFinder.js + */ + +/** + * @class elFinder - file manager for web + * + * @author Dmitry (dio) Levashov + **/ +window.elFinder = function(node, opts) { + this.time('load'); + + var self = this, + + /** + * Node on which elfinder creating + * + * @type jQuery + **/ + node = $(node), + + /** + * Store node contents. + * + * @see this.destroy + * @type jQuery + **/ + prevContent = $('
').append(node.contents()), + + /** + * Store node inline styles + * + * @see this.destroy + * @type String + **/ + prevStyle = node.attr('style'), + + /** + * Instance ID. Required to get/set cookie + * + * @type String + **/ + id = node.attr('id') || '', + + /** + * Events namespace + * + * @type String + **/ + namespace = 'elfinder-'+(id || Math.random().toString().substr(2, 7)), + + /** + * Mousedown event + * + * @type String + **/ + mousedown = 'mousedown.'+namespace, + + /** + * Keydown event + * + * @type String + **/ + keydown = 'keydown.'+namespace, + + /** + * Keypress event + * + * @type String + **/ + keypress = 'keypress.'+namespace, + + /** + * Is shortcuts/commands enabled + * + * @type Boolean + **/ + enabled = true, + + /** + * Store enabled value before ajax requiest + * + * @type Boolean + **/ + prevEnabled = true, + + /** + * List of build-in events which mapped into methods with same names + * + * @type Array + **/ + events = ['enable', 'disable', 'load', 'open', 'reload', 'select', 'add', 'remove', 'change', 'dblclick', 'getfile', 'lockfiles', 'unlockfiles', 'dragstart', 'dragstop'], + + /** + * Rules to validate data from backend + * + * @type Object + **/ + rules = {}, + + /** + * Current working directory hash + * + * @type String + **/ + cwd = '', + + /** + * Current working directory options + * + * @type Object + **/ + cwdOptions = { + path : '', + url : '', + tmbUrl : '', + disabled : [], + separator : '/', + archives : [], + extract : [], + copyOverwrite : true, + tmb : false // old API + }, + + /** + * Files/dirs cache + * + * @type Object + **/ + files = {}, + + /** + * Selected files hashes + * + * @type Array + **/ + selected = [], + + /** + * Events listeners + * + * @type Object + **/ + listeners = {}, + + /** + * Shortcuts + * + * @type Object + **/ + shortcuts = {}, + + /** + * Buffer for copied files + * + * @type Array + **/ + clipboard = [], + + /** + * Copied/cuted files hashes + * Prevent from remove its from cache. + * Required for dispaly correct files names in error messages + * + * @type Array + **/ + remember = [], + + /** + * Queue for 'open' requests + * + * @type Array + **/ + queue = [], + + /** + * Commands prototype + * + * @type Object + **/ + base = new self.command(self), + + /** + * elFinder node width + * + * @type String + * @default "auto" + **/ + width = 'auto', + + /** + * elFinder node height + * + * @type Number + * @default 400 + **/ + height = 400, + + beeper = $(document.createElement('audio')).hide().appendTo('body')[0], + + syncInterval, + + open = function(data) { + if (data.init) { + // init - reset cache + files = {}; + } else { + // remove only files from prev cwd + for (var i in files) { + if (files.hasOwnProperty(i) + && files[i].mime != 'directory' + && files[i].phash == cwd + && $.inArray(i, remember) === -1) { + delete files[i]; + } + } + } + + cwd = data.cwd.hash; + cache(data.files); + if (!files[cwd]) { + cache([data.cwd]); + } + self.lastDir(cwd); + }, + + /** + * Store info about files/dirs in "files" object. + * + * @param Array files + * @return void + **/ + cache = function(data) { + var l = data.length, f; + + while (l--) { + f = data[l]; + if (f.name && f.hash && f.mime) { + if (!f.phash) { + var name = 'volume_'+f.name, + i18 = self.i18n(name); + + if (name != i18) { + f.i18 = i18; + } + } + files[f.hash] = f; + } + } + }, + + /** + * Exec shortcut + * + * @param jQuery.Event keydown/keypress event + * @return void + */ + execShortcut = function(e) { + var code = e.keyCode, + ctrlKey = !!(e.ctrlKey || e.metaKey); + + if (enabled) { + + $.each(shortcuts, function(i, shortcut) { + if (shortcut.type == e.type + && shortcut.keyCode == code + && shortcut.shiftKey == e.shiftKey + && shortcut.ctrlKey == ctrlKey + && shortcut.altKey == e.altKey) { + e.preventDefault() + e.stopPropagation(); + shortcut.callback(e, self); + self.debug('shortcut-exec', i+' : '+shortcut.description); + } + }); + + // prevent tab out of elfinder + if (code == 9 && !$(e.target).is(':input')) { + e.preventDefault(); + } + + } + }, + date = new Date(), + utc, + i18n + ; + + + /** + * Protocol version + * + * @type String + **/ + this.api = null; + + /** + * elFinder use new api + * + * @type Boolean + **/ + this.newAPI = false; + + /** + * elFinder use old api + * + * @type Boolean + **/ + this.oldAPI = false; + + /** + * Net drivers names + * + * @type Array + **/ + this.netDrivers = []; + /** + * User os. Required to bind native shortcuts for open/rename + * + * @type String + **/ + this.OS = navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other'; + + /** + * User browser UA. + * jQuery.browser: version deprecated: 1.3, removed: 1.9 + * + * @type Object + **/ + this.UA = (function(){ + var webkit = !document.uniqueID && !window.opera && !window.sidebar && window.localStorage && typeof window.orientation == "undefined"; + return { + // Browser IE <= IE 6 + ltIE6:typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined", + // Browser IE <= IE 7 + ltIE7:typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined", + // Browser IE <= IE 8 + ltIE8:typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined", + IE:document.uniqueID, + Firefox:window.sidebar, + Opera:window.opera, + Webkit:webkit, + Chrome:webkit && window.chrome, + Safari:webkit && !window.chrome, + Mobile:typeof window.orientation != "undefined" + } + })(); + + /** + * Configuration options + * + * @type Object + **/ + this.options = $.extend(true, {}, this._options, opts||{}); + + if (opts.ui) { + this.options.ui = opts.ui; + } + + if (opts.commands) { + this.options.commands = opts.commands; + } + + if (opts.uiOptions && opts.uiOptions.toolbar) { + this.options.uiOptions.toolbar = opts.uiOptions.toolbar; + } + + $.extend(this.options.contextmenu, opts.contextmenu); + + + /** + * Ajax request type + * + * @type String + * @default "get" + **/ + this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get', + + /** + * Any data to send across every ajax request + * + * @type Object + * @default {} + **/ + this.customData = $.isPlainObject(this.options.customData) ? this.options.customData : {}; + + /** + * ID. Required to create unique cookie name + * + * @type String + **/ + this.id = id; + + /** + * URL to upload files + * + * @type String + **/ + this.uploadURL = opts.urlUpload || opts.url; + + /** + * Events namespace + * + * @type String + **/ + this.namespace = namespace; + + /** + * Interface language + * + * @type String + * @default "en" + **/ + this.lang = this.i18[this.options.lang] && this.i18[this.options.lang].messages ? this.options.lang : 'en'; + + i18n = this.lang == 'en' + ? this.i18['en'] + : $.extend(true, {}, this.i18['en'], this.i18[this.lang]); + + /** + * Interface direction + * + * @type String + * @default "ltr" + **/ + this.direction = i18n.direction; + + /** + * i18 messages + * + * @type Object + **/ + this.messages = i18n.messages; + + /** + * Date/time format + * + * @type String + * @default "m.d.Y" + **/ + this.dateFormat = this.options.dateFormat || i18n.dateFormat; + + /** + * Date format like "Yesterday 10:20:12" + * + * @type String + * @default "{day} {time}" + **/ + this.fancyFormat = this.options.fancyDateFormat || i18n.fancyDateFormat; + + /** + * Today timestamp + * + * @type Number + **/ + this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000; + + /** + * Yesterday timestamp + * + * @type Number + **/ + this.yesterday = this.today - 86400; + + utc = this.options.UTCDate ? 'UTC' : ''; + + this.getHours = 'get'+utc+'Hours'; + this.getMinutes = 'get'+utc+'Minutes'; + this.getSeconds = 'get'+utc+'Seconds'; + this.getDate = 'get'+utc+'Date'; + this.getDay = 'get'+utc+'Day'; + this.getMonth = 'get'+utc+'Month'; + this.getFullYear = 'get'+utc+'FullYear'; + + /** + * Css classes + * + * @type String + **/ + this.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-'+(this.direction == 'rtl' ? 'rtl' : 'ltr')+' '+this.options.cssClass; + + /** + * Method to store/fetch data + * + * @type Function + **/ + this.storage = (function() { + try { + return 'localStorage' in window && window['localStorage'] !== null ? self.localStorage : self.cookie; + } catch (e) { + return self.cookie; + } + })(); + + this.viewType = this.storage('view') || this.options.defaultView || 'icons'; + + this.sortType = this.storage('sortType') || this.options.sortType || 'name'; + + this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc'; + + this.sortStickFolders = this.storage('sortStickFolders'); + + if (this.sortStickFolders === null) { + this.sortStickFolders = !!this.options.sortStickFolders; + } else { + this.sortStickFolders = !!this.sortStickFolders + } + + this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortsRules); + + $.each(this.sortRules, function(name, method) { + if (typeof method != 'function') { + delete self.sortRules[name]; + } + }); + + this.compare = $.proxy(this.compare, this); + + /** + * Delay in ms before open notification dialog + * + * @type Number + * @default 500 + **/ + this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500; + + /** + * Dragging UI Helper object + * + * @type jQuery | null + **/ + this.draggingUiHelper = null, + + /** + * Base draggable options + * + * @type Object + **/ + this.draggable = { + appendTo : 'body', + addClasses : true, + delay : 30, + distance : 8, + revert : true, + refreshPositions : true, + cursor : 'move', + cursorAt : {left : 50, top : 47}, + start : function(e, ui) { + var targets = $.map(ui.helper.data('files')||[], function(h) { return h || null ;}), + cnt, h; + self.draggingUiHelper = ui.helper; + cnt = targets.length; + while (cnt--) { + h = targets[cnt]; + if (files[h].locked) { + ui.helper.addClass('elfinder-drag-helper-plus').data('locked', true); + break; + } + } + }, + stop : function() { + self.draggingUiHelper = null; + self.trigger('focus').trigger('dragstop'); + }, + helper : function(e, ui) { + var element = this.id ? $(this) : $(this).parents('[id]:first'), + helper = $('
'), + icon = function(mime) { return '
'; }, + hashes, l; + + self.draggingUiHelper && self.draggingUiHelper.stop(true, true); + + self.trigger('dragstart', {target : element[0], originalEvent : e}); + + hashes = element.is('.'+self.res('class', 'cwdfile')) + ? self.selected() + : [self.navId2Hash(element.attr('id'))]; + + helper.append(icon(files[hashes[0]].mime)).data('files', hashes).data('locked', false); + + if ((l = hashes.length) > 1) { + helper.append(icon(files[hashes[l-1]].mime) + ''+l+''); + } + + $(document).bind(keydown + ' keyup.' + namespace, function(e){ + if (helper.is(':visible') && ! helper.data('locked')) { + helper.toggleClass('elfinder-drag-helper-plus', e.shiftKey||e.ctrlKey||e.metaKey); + } + }); + + return helper; + } + }; + + /** + * Base droppable options + * + * @type Object + **/ + this.droppable = { + // greedy : true, + tolerance : 'pointer', + accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file', + hoverClass : this.res('class', 'adroppable'), + drop : function(e, ui) { + var dst = $(this), + targets = $.map(ui.helper.data('files')||[], function(h) { return h || null }), + result = [], + c = 'class', + cnt, hash, i, h; + + if (dst.is('.'+self.res(c, 'cwd'))) { + hash = cwd; + } else if (dst.is('.'+self.res(c, 'cwdfile'))) { + hash = dst.attr('id'); + } else if (dst.is('.'+self.res(c, 'navdir'))) { + hash = self.navId2Hash(dst.attr('id')); + } + + cnt = targets.length; + + while (cnt--) { + h = targets[cnt]; + // ignore drop into itself or in own location + h != hash && files[h].phash != hash && result.push(h); + } + + if (result.length) { + ui.helper.hide(); + self.clipboard(result, !(e.ctrlKey||e.shiftKey||e.metaKey||ui.helper.data('locked'))); + self.exec('paste', hash); + self.trigger('drop', {files : targets}); + + } + } + }; + + /** + * Return true if filemanager is active + * + * @return Boolean + **/ + this.enabled = function() { + return node.is(':visible') && enabled; + } + + /** + * Return true if filemanager is visible + * + * @return Boolean + **/ + this.visible = function() { + return node.is(':visible'); + } + + /** + * Return root dir hash for current working directory + * + * @return String + */ + this.root = function(hash) { + var dir = files[hash || cwd], i; + + while (dir && dir.phash) { + dir = files[dir.phash] + } + if (dir) { + return dir.hash; + } + + while (i in files && files.hasOwnProperty(i)) { + dir = files[i] + if (!dir.phash && !dir.mime == 'directory' && dir.read) { + return dir.hash + } + } + + return ''; + } + + /** + * Return current working directory info + * + * @return Object + */ + this.cwd = function() { + return files[cwd] || {}; + } + + /** + * Return required cwd option + * + * @param String option name + * @return mixed + */ + this.option = function(name) { + return cwdOptions[name]||''; + } + + /** + * Return file data from current dir or tree by it's hash + * + * @param String file hash + * @return Object + */ + this.file = function(hash) { + return files[hash]; + }; + + /** + * Return all cached files + * + * @return Array + */ + this.files = function() { + return $.extend(true, {}, files); + } + + /** + * Return list of file parents hashes include file hash + * + * @param String file hash + * @return Array + */ + this.parents = function(hash) { + var parents = [], + dir; + + while ((dir = this.file(hash))) { + parents.unshift(dir.hash); + hash = dir.phash; + } + return parents; + } + + this.path2array = function(hash, i18) { + var file, + path = []; + + while (hash && (file = files[hash]) && file.hash) { + path.unshift(i18 && file.i18 ? file.i18 : file.name); + hash = file.phash; + } + + return path; + } + + /** + * Return file path + * + * @param Object file + * @return String + */ + this.path = function(hash, i18) { + return files[hash] && files[hash].path + ? files[hash].path + : this.path2array(hash, i18).join(cwdOptions.separator); + } + + /** + * Return file url if set + * + * @param Object file + * @return String + */ + this.url = function(hash) { + var file = files[hash]; + + if (!file || !file.read) { + return ''; + } + + if (file.url) { + return file.url; + } + + if (cwdOptions.url) { + return cwdOptions.url + $.map(this.path2array(hash), function(n) { return encodeURIComponent(n); }).slice(1).join('/') + } + + var params = $.extend({}, this.customData, { + cmd: 'file', + target: file.hash + }); + if (this.oldAPI) { + params.cmd = 'open'; + params.current = file.phash; + } + return this.options.url + (this.options.url.indexOf('?') === -1 ? '?' : '&') + $.param(params, true); + } + + /** + * Return thumbnail url + * + * @param String file hash + * @return String + */ + this.tmb = function(hash) { + var file = files[hash], + url = file && file.tmb && file.tmb != 1 ? cwdOptions['tmbUrl'] + file.tmb : ''; + + if (url && (this.UA.Opera || this.UA.IE)) { + url += '?_=' + new Date().getTime(); + } + return url; + } + + /** + * Return selected files hashes + * + * @return Array + **/ + this.selected = function() { + return selected.slice(0); + } + + /** + * Return selected files info + * + * @return Array + */ + this.selectedFiles = function() { + return $.map(selected, function(hash) { return files[hash] ? $.extend({}, files[hash]) : null }); + }; + + /** + * Return true if file with required name existsin required folder + * + * @param String file name + * @param String parent folder hash + * @return Boolean + */ + this.fileByName = function(name, phash) { + var hash; + + for (hash in files) { + if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) { + return files[hash]; + } + } + }; + + /** + * Valid data for required command based on rules + * + * @param String command name + * @param Object cammand's data + * @return Boolean + */ + this.validResponse = function(cmd, data) { + return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data); + } + + /** + * Proccess ajax request. + * Fired events : + * @todo + * @example + * @todo + * @return $.Deferred + */ + this.request = function(options) { + var self = this, + o = this.options, + dfrd = $.Deferred(), + // request data + data = $.extend({}, o.customData, {mimes : o.onlyMimes}, options.data || options), + // command name + cmd = data.cmd, + // call default fail callback (display error dialog) ? + deffail = !(options.preventDefault || options.preventFail), + // call default success callback ? + defdone = !(options.preventDefault || options.preventDone), + // options for notify dialog + notify = $.extend({}, options.notify), + // do not normalize data - return as is + raw = !!options.raw, + // sync files on request fail + syncOnFail = options.syncOnFail, + // open notify dialog timeout + timeout, + // request options + options = $.extend({ + url : o.url, + async : true, + type : this.requestType, + dataType : 'json', + cache : false, + // timeout : 100, + data : data + }, options.options || {}), + /** + * Default success handler. + * Call default data handlers and fire event with command name. + * + * @param Object normalized response data + * @return void + **/ + done = function(data) { + data.warning && self.error(data.warning); + + cmd == 'open' && open($.extend(true, {}, data)); + + // fire some event to update cache/ui + data.removed && data.removed.length && self.remove(data); + data.added && data.added.length && self.add(data); + data.changed && data.changed.length && self.change(data); + + // fire event with command name + self.trigger(cmd, data); + + // force update content + data.sync && self.sync(); + }, + /** + * Request error handler. Reject dfrd with correct error message. + * + * @param jqxhr request object + * @param String request status + * @return void + **/ + error = function(xhr, status) { + var error; + + switch (status) { + case 'abort': + error = xhr.quiet ? '' : ['errConnect', 'errAbort']; + break; + case 'timeout': + error = ['errConnect', 'errTimeout']; + break; + case 'parsererror': + error = ['errResponse', 'errDataNotJSON']; + break; + default: + if (xhr.status == 403) { + error = ['errConnect', 'errAccess']; + } else if (xhr.status == 404) { + error = ['errConnect', 'errNotFound']; + } else { + error = 'errConnect'; + } + } + + dfrd.reject(error, xhr, status); + }, + /** + * Request success handler. Valid response data and reject/resolve dfrd. + * + * @param Object response data + * @param String request status + * @return void + **/ + success = function(response) { + if (raw) { + return dfrd.resolve(response); + } + + if (!response) { + return dfrd.reject(['errResponse', 'errDataEmpty'], xhr); + } else if (!$.isPlainObject(response)) { + return dfrd.reject(['errResponse', 'errDataNotJSON'], xhr); + } else if (response.error) { + return dfrd.reject(response.error, xhr); + } else if (!self.validResponse(cmd, response)) { + return dfrd.reject('errResponse', xhr); + } + + response = self.normalize(response); + + if (!self.api) { + self.api = response.api || 1; + self.newAPI = self.api >= 2; + self.oldAPI = !self.newAPI; + } + + if (response.options) { + cwdOptions = $.extend({}, cwdOptions, response.options); + } + + if (response.netDrivers) { + self.netDrivers = response.netDrivers; + } + + dfrd.resolve(response); + response.debug && self.debug('backend-debug', response.debug); + }, + xhr, _xhr + ; + + defdone && dfrd.done(done); + dfrd.fail(function(error) { + if (error) { + deffail ? self.error(error) : self.debug('error', self.i18n(error)); + } + }) + + if (!cmd) { + return dfrd.reject('errCmdReq'); + } + + if (syncOnFail) { + dfrd.fail(function(error) { + error && self.sync(); + }); + } + + if (notify.type && notify.cnt) { + timeout = setTimeout(function() { + self.notify(notify); + dfrd.always(function() { + notify.cnt = -(parseInt(notify.cnt)||0); + self.notify(notify); + }) + }, self.notifyDelay) + + dfrd.always(function() { + clearTimeout(timeout); + }); + } + + // quiet abort not completed "open" requests + if (cmd == 'open') { + while ((_xhr = queue.pop())) { + if (_xhr.state() == 'pending') { + _xhr.quiet = true; + _xhr.abort(); + } + } + } + + delete options.preventFail + + xhr = this.transport.send(options).fail(error).done(success); + + // this.transport.send(options) + + // add "open" xhr into queue + if (cmd == 'open') { + queue.unshift(xhr); + dfrd.always(function() { + var ndx = $.inArray(xhr, queue); + + ndx !== -1 && queue.splice(ndx, 1); + }); + } + + return dfrd; + }; + + /** + * Compare current files cache with new files and return diff + * + * @param Array new files + * @return Object + */ + this.diff = function(incoming) { + var raw = {}, + added = [], + removed = [], + changed = [], + isChanged = function(hash) { + var l = changed.length; + + while (l--) { + if (changed[l].hash == hash) { + return true; + } + } + }; + + $.each(incoming, function(i, f) { + raw[f.hash] = f; + }); + + // find removed + $.each(files, function(hash, f) { + !raw[hash] && removed.push(hash); + }); + + // compare files + $.each(raw, function(hash, file) { + var origin = files[hash]; + + if (!origin) { + added.push(file); + } else { + $.each(file, function(prop) { + if (file[prop] != origin[prop]) { + changed.push(file) + return false; + } + }); + } + }); + + // parents of removed dirs mark as changed (required for tree correct work) + $.each(removed, function(i, hash) { + var file = files[hash], + phash = file.phash; + + if (phash + && file.mime == 'directory' + && $.inArray(phash, removed) === -1 + && raw[phash] + && !isChanged(phash)) { + changed.push(raw[phash]); + } + }); + + return { + added : added, + removed : removed, + changed : changed + }; + } + + /** + * Sync content + * + * @return jQuery.Deferred + */ + this.sync = function() { + var self = this, + dfrd = $.Deferred().done(function() { self.trigger('sync'); }), + opts1 = { + data : {cmd : 'open', init : 1, target : cwd, tree : this.ui.tree ? 1 : 0}, + preventDefault : true + }, + opts2 = { + data : {cmd : 'tree', target : (cwd == this.root())? cwd : this.file(cwd).phash}, + preventDefault : true + }; + + $.when( + this.request(opts1), + this.request(opts2) + ) + .fail(function(error) { + dfrd.reject(error); + error && self.request({ + data : {cmd : 'open', target : self.lastDir(''), tree : 1, init : 1}, + notify : {type : 'open', cnt : 1, hideCnt : true}, + preventDefault : true + }); + }) + .done(function(odata, pdata) { + var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : [])); + + diff.added.push(odata.cwd) + diff.removed.length && self.remove(diff); + diff.added.length && self.add(diff); + diff.changed.length && self.change(diff); + return dfrd.resolve(diff); + }); + + return dfrd; + } + + this.upload = function(files) { + return this.transport.upload(files, this); + } + + /** + * Attach listener to events + * To bind to multiply events at once, separate events names by space + * + * @param String event(s) name(s) + * @param Object event handler + * @return elFinder + */ + this.bind = function(event, callback) { + var i; + + if (typeof(callback) == 'function') { + event = ('' + event).toLowerCase().split(/\s+/); + + for (i = 0; i < event.length; i++) { + if (listeners[event[i]] === void(0)) { + listeners[event[i]] = []; + } + listeners[event[i]].push(callback); + } + } + return this; + }; + + /** + * Remove event listener if exists + * + * @param String event name + * @param Function callback + * @return elFinder + */ + this.unbind = function(event, callback) { + var l = listeners[('' + event).toLowerCase()] || [], + i = $.inArray(callback, l); + + i > -1 && l.splice(i, 1); + //delete callback; // need this? + callback = null + return this; + }; + + /** + * Fire event - send notification to all event listeners + * + * @param String event type + * @param Object data to send across event + * @return elFinder + */ + this.trigger = function(event, data) { + var event = event.toLowerCase(), + handlers = listeners[event] || [], i, j; + + this.debug('event-'+event, data) + + if (handlers.length) { + event = $.Event(event); + + for (i = 0; i < handlers.length; i++) { + // to avoid data modifications. remember about "sharing" passing arguments in js :) + event.data = $.extend(true, {}, data); + + try { + if (handlers[i](event, this) === false + || event.isDefaultPrevented()) { + this.debug('event-stoped', event.type); + break; + } + } catch (ex) { + window.console && window.console.log && window.console.log(ex); + } + + } + } + return this; + } + + /** + * Bind keybord shortcut to keydown event + * + * @example + * elfinder.shortcut({ + * pattern : 'ctrl+a', + * description : 'Select all files', + * callback : function(e) { ... }, + * keypress : true|false (bind to keypress instead of keydown) + * }) + * + * @param Object shortcut config + * @return elFinder + */ + this.shortcut = function(s) { + var patterns, pattern, code, i, parts; + + if (this.options.allowShortcuts && s.pattern && $.isFunction(s.callback)) { + patterns = s.pattern.toUpperCase().split(/\s+/); + + for (i= 0; i < patterns.length; i++) { + pattern = patterns[i] + parts = pattern.split('+'); + code = (code = parts.pop()).length == 1 + ? code > 0 ? code : code.charCodeAt(0) + : $.ui.keyCode[code]; + + if (code && !shortcuts[pattern]) { + shortcuts[pattern] = { + keyCode : code, + altKey : $.inArray('ALT', parts) != -1, + ctrlKey : $.inArray('CTRL', parts) != -1, + shiftKey : $.inArray('SHIFT', parts) != -1, + type : s.type || 'keydown', + callback : s.callback, + description : s.description, + pattern : pattern + }; + } + } + } + return this; + } + + /** + * Registered shortcuts + * + * @type Object + **/ + this.shortcuts = function() { + var ret = []; + + $.each(shortcuts, function(i, s) { + ret.push([s.pattern, self.i18n(s.description)]); + }); + return ret; + }; + + /** + * Get/set clipboard content. + * Return new clipboard content. + * + * @example + * this.clipboard([]) - clean clipboard + * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted + * + * @param Array new files hashes + * @param Boolean cut files? + * @return Array + */ + this.clipboard = function(hashes, cut) { + var map = function() { return $.map(clipboard, function(f) { return f.hash }); } + + if (hashes !== void(0)) { + clipboard.length && this.trigger('unlockfiles', {files : map()}); + remember = []; + + clipboard = $.map(hashes||[], function(hash) { + var file = files[hash]; + if (file) { + + remember.push(hash); + + return { + hash : hash, + phash : file.phash, + name : file.name, + mime : file.mime, + read : file.read, + locked : file.locked, + cut : !!cut + } + } + return null; + }); + this.trigger('changeclipboard', {clipboard : clipboard.slice(0, clipboard.length)}); + cut && this.trigger('lockfiles', {files : map()}); + } + + // return copy of clipboard instead of refrence + return clipboard.slice(0, clipboard.length); + } + + /** + * Return true if command enabled + * + * @param String command name + * @return Boolean + */ + this.isCommandEnabled = function(name) { + return this._commands[name] ? $.inArray(name, cwdOptions.disabled) === -1 : false; + } + + /** + * Exec command and return result; + * + * @param String command name + * @param String|Array usualy files hashes + * @param String|Array command options + * @return $.Deferred + */ + this.exec = function(cmd, files, opts) { + return this._commands[cmd] && this.isCommandEnabled(cmd) + ? this._commands[cmd].exec(files, opts) + : $.Deferred().reject('No such command'); + } + + /** + * Create and return dialog. + * + * @param String|DOMElement dialog content + * @param Object dialog options + * @return jQuery + */ + this.dialog = function(content, options) { + return $('
').append(content).appendTo(node).elfinderdialog(options); + } + + /** + * Return UI widget or node + * + * @param String ui name + * @return jQuery + */ + this.getUI = function(ui) { + return this.ui[ui] || node; + } + + this.command = function(name) { + return name === void(0) ? this._commands : this._commands[name]; + } + + /** + * Resize elfinder node + * + * @param String|Number width + * @param Number height + * @return void + */ + this.resize = function(w, h) { + node.css('width', w).height(h).trigger('resize'); + this.trigger('resize', {width : node.width(), height : node.height()}); + } + + /** + * Restore elfinder node size + * + * @return elFinder + */ + this.restoreSize = function() { + this.resize(width, height); + } + + this.show = function() { + node.show(); + this.enable().trigger('show'); + } + + this.hide = function() { + this.disable().trigger('hide'); + node.hide(); + } + + /** + * Destroy this elFinder instance + * + * @return void + **/ + this.destroy = function() { + if (node && node[0].elfinder) { + this.trigger('destroy').disable(); + listeners = {}; + shortcuts = {}; + $(document).add(node).unbind('.'+this.namespace); + self.trigger = function() { } + node.children().remove(); + node.append(prevContent.contents()).removeClass(this.cssClass).attr('style', prevStyle); + node[0].elfinder = null; + if (syncInterval) { + clearInterval(syncInterval); + } + } + } + + /************* init stuffs ****************/ + + // check jquery ui + if (!($.fn.selectable && $.fn.draggable && $.fn.droppable)) { + return alert(this.i18n('errJqui')); + } + + // check node + if (!node.length) { + return alert(this.i18n('errNode')); + } + // check connector url + if (!this.options.url) { + return alert(this.i18n('errURL')); + } + + $.extend($.ui.keyCode, { + 'F1' : 112, + 'F2' : 113, + 'F3' : 114, + 'F4' : 115, + 'F5' : 116, + 'F6' : 117, + 'F7' : 118, + 'F8' : 119, + 'F9' : 120 + }); + + this.dragUpload = false; + this.xhrUpload = (typeof XMLHttpRequestUpload != 'undefined' || typeof XMLHttpRequestEventTarget != 'undefined') && typeof File != 'undefined' && typeof FormData != 'undefined'; + + // configure transport object + this.transport = {} + + if (typeof(this.options.transport) == 'object') { + this.transport = this.options.transport; + if (typeof(this.transport.init) == 'function') { + this.transport.init(this) + } + } + + if (typeof(this.transport.send) != 'function') { + this.transport.send = function(opts) { return $.ajax(opts); } + } + + if (this.transport.upload == 'iframe') { + this.transport.upload = $.proxy(this.uploads.iframe, this); + } else if (typeof(this.transport.upload) == 'function') { + this.dragUpload = !!this.options.dragUploadAllow; + } else if (this.xhrUpload && !!this.options.dragUploadAllow) { + this.transport.upload = $.proxy(this.uploads.xhr, this); + this.dragUpload = true; + } else { + this.transport.upload = $.proxy(this.uploads.iframe, this); + } + + /** + * Alias for this.trigger('error', {error : 'message'}) + * + * @param String error message + * @return elFinder + **/ + this.error = function() { + var arg = arguments[0]; + return arguments.length == 1 && typeof(arg) == 'function' + ? self.bind('error', arg) + : self.trigger('error', {error : arg}); + } + + // create bind/trigger aliases for build-in events + $.each(['enable', 'disable', 'load', 'open', 'reload', 'select', 'add', 'remove', 'change', 'dblclick', 'getfile', 'lockfiles', 'unlockfiles', 'dragstart', 'dragstop', 'search', 'searchend', 'viewchange'], function(i, name) { + self[name] = function() { + var arg = arguments[0]; + return arguments.length == 1 && typeof(arg) == 'function' + ? self.bind(name, arg) + : self.trigger(name, $.isPlainObject(arg) ? arg : {}); + } + }); + + // bind core event handlers + this + .enable(function() { + if (!enabled && self.visible() && self.ui.overlay.is(':hidden')) { + enabled = true; + $('texarea:focus,input:focus,button').blur(); + node.removeClass('elfinder-disabled'); + } + }) + .disable(function() { + prevEnabled = enabled; + enabled = false; + node.addClass('elfinder-disabled'); + }) + .open(function() { + selected = []; + }) + .select(function(e) { + selected = $.map(e.data.selected || e.data.value|| [], function(hash) { return files[hash] ? hash : null; }); + }) + .error(function(e) { + var opts = { + cssClass : 'elfinder-dialog-error', + title : self.i18n(self.i18n('error')), + resizable : false, + destroyOnClose : true, + buttons : {} + }; + + opts.buttons[self.i18n(self.i18n('btnClose'))] = function() { $(this).elfinderdialog('close'); }; + + self.dialog(''+self.i18n(e.data.error), opts); + }) + .bind('tree parents', function(e) { + cache(e.data.tree || []); + }) + .bind('tmb', function(e) { + $.each(e.data.images||[], function(hash, tmb) { + if (files[hash]) { + files[hash].tmb = tmb; + } + }) + }) + .add(function(e) { + cache(e.data.added||[]); + }) + .change(function(e) { + $.each(e.data.changed||[], function(i, file) { + var hash = file.hash; + if ((files[hash].width && !file.width) || (files[hash].height && !file.height)) { + files[hash].width = undefined; + files[hash].height = undefined; + } + files[hash] = files[hash] ? $.extend(files[hash], file) : file; + }); + }) + .remove(function(e) { + var removed = e.data.removed||[], + l = removed.length, + rm = function(hash) { + var file = files[hash]; + if (file) { + if (file.mime == 'directory' && file.dirs) { + $.each(files, function(h, f) { + f.phash == hash && rm(h); + }); + } + delete files[hash]; + } + }; + + while (l--) { + rm(removed[l]); + } + + }) + .bind('search', function(e) { + cache(e.data.files); + }) + .bind('rm', function(e) { + var play = beeper.canPlayType && beeper.canPlayType('audio/wav; codecs="1"'); + + play && play != '' && play != 'no' && $(beeper).html('')[0].play() + }) + + ; + + // bind external event handlers + $.each(this.options.handlers, function(event, callback) { + self.bind(event, callback); + }); + + /** + * History object. Store visited folders + * + * @type Object + **/ + this.history = new this.history(this); + + // in getFileCallback set - change default actions on double click/enter/ctrl+enter + if (typeof(this.options.getFileCallback) == 'function' && this.commands.getfile) { + this.bind('dblclick', function(e) { + e.preventDefault(); + self.exec('getfile').fail(function() { + self.exec('open'); + }); + }); + this.shortcut({ + pattern : 'enter', + description : this.i18n('cmdgetfile'), + callback : function() { self.exec('getfile').fail(function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') }) } + }) + .shortcut({ + pattern : 'ctrl+enter', + description : this.i18n(this.OS == 'mac' ? 'cmdrename' : 'cmdopen'), + callback : function() { self.exec(self.OS == 'mac' ? 'rename' : 'open') } + }); + + } + + /** + * Loaded commands + * + * @type Object + **/ + this._commands = {}; + + if (!$.isArray(this.options.commands)) { + this.options.commands = []; + } + // check required commands + $.each(['open', 'reload', 'back', 'forward', 'up', 'home', 'info', 'quicklook', 'getfile', 'help'], function(i, cmd) { + $.inArray(cmd, self.options.commands) === -1 && self.options.commands.push(cmd); + }); + + // load commands + $.each(this.options.commands, function(i, name) { + var cmd = self.commands[name]; + if ($.isFunction(cmd) && !self._commands[name]) { + cmd.prototype = base; + self._commands[name] = new cmd(); + self._commands[name].setup(name, self.options.commandsOptions[name]||{}); + } + }); + + // prepare node + node.addClass(this.cssClass) + .bind(mousedown, function() { + !enabled && self.enable(); + }); + + /** + * UI nodes + * + * @type Object + **/ + this.ui = { + // container for nav panel and current folder container + workzone : $('
').appendTo(node).elfinderworkzone(this), + // container for folders tree / places + navbar : $('
').appendTo(node).elfindernavbar(this, this.options.uiOptions.navbar || {}), + // contextmenu + contextmenu : $('
').appendTo(node).elfindercontextmenu(this), + // overlay + overlay : $('
').appendTo(node).elfinderoverlay({ + show : function() { self.disable(); }, + hide : function() { prevEnabled && self.enable(); } + }), + // current folder container + cwd : $('
').appendTo(node).elfindercwd(this, this.options.uiOptions.cwd || {}), + // notification dialog window + notify : this.dialog('', { + cssClass : 'elfinder-dialog-notify', + position : {top : '12px', right : '12px'}, + resizable : false, + autoOpen : false, + title : ' ', + width : 280 + }), + statusbar : $('
').hide().appendTo(node) + } + + // load required ui + $.each(this.options.ui || [], function(i, ui) { + var name = 'elfinder'+ui, + opts = self.options.uiOptions[ui] || {}; + + if (!self.ui[ui] && $.fn[name]) { + self.ui[ui] = $('<'+(opts.tag || 'div')+'/>').appendTo(node)[name](self, opts); + } + }); + + + + // store instance in node + node[0].elfinder = this; + + // make node resizable + this.options.resizable + && $.fn.resizable + && node.resizable({ + handles : 'se', + minWidth : 300, + minHeight : 200 + }); + + if (this.options.width) { + width = this.options.width; + } + + if (this.options.height) { + height = parseInt(this.options.height); + } + + // update size + self.resize(width, height); + + // attach events to document + $(document) + // disable elfinder on click outside elfinder + .bind('click.'+this.namespace, function(e) { enabled && !$(e.target).closest(node).length && self.disable(); }) + // exec shortcuts + .bind(keydown+' '+keypress, execShortcut); + + // attach events to window + self.options.useBrowserHistory && $(window) + .on('popstate', function(ev) { + var target = ev.originalEvent.state && ev.originalEvent.state.thash; + target && !$.isEmptyObject(self.files()) && self.request({ + data : {cmd : 'open', target : target, onhistory : 1}, + notify : {type : 'open', cnt : 1, hideCnt : true}, + syncOnFail : true + }); + }); + + // send initial request and start to pray >_< + this.trigger('init') + .request({ + data : {cmd : 'open', target : self.startDir(), init : 1, tree : this.ui.tree ? 1 : 0}, + preventDone : true, + notify : {type : 'open', cnt : 1, hideCnt : true}, + freeze : true + }) + .fail(function() { + self.trigger('fail').disable().lastDir(''); + listeners = {}; + shortcuts = {}; + $(document).add(node).unbind('.'+this.namespace); + self.trigger = function() { }; + }) + .done(function(data) { + self.load().debug('api', self.api); + data = $.extend(true, {}, data); + open(data); + self.trigger('open', data); + }); + + // update ui's size after init + this.one('load', function() { + node.trigger('resize'); + if (self.options.sync > 1000) { + syncInterval = setInterval(function() { + self.sync(); + }, self.options.sync) + + } + + }); + + // self.timeEnd('load'); + +} + +/** + * Prototype + * + * @type Object + */ +elFinder.prototype = { + + res : function(type, id) { + return this.resources[type] && this.resources[type][id]; + }, + + /** + * Internationalization object + * + * @type Object + */ + i18 : { + en : { + translator : '', + language : 'English', + direction : 'ltr', + dateFormat : 'd.m.Y H:i', + fancyDateFormat : '$1 H:i', + messages : {} + }, + months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthsShort : ['msJan', 'msFeb', 'msMar', 'msApr', 'msMay', 'msJun', 'msJul', 'msAug', 'msSep', 'msOct', 'msNov', 'msDec'], + + days : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + daysShort : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] + }, + + /** + * File mimetype to kind mapping + * + * @type Object + */ + kinds : { + 'unknown' : 'Unknown', + 'directory' : 'Folder', + 'symlink' : 'Alias', + 'symlink-broken' : 'AliasBroken', + 'application/x-empty' : 'TextPlain', + 'application/postscript' : 'Postscript', + 'application/vnd.ms-office' : 'MsOffice', + 'application/vnd.ms-word' : 'MsWord', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' : 'MsWord', + 'application/vnd.ms-word.document.macroEnabled.12' : 'MsWord', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' : 'MsWord', + 'application/vnd.ms-word.template.macroEnabled.12' : 'MsWord', + 'application/vnd.ms-excel' : 'MsExcel', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'MsExcel', + 'application/vnd.ms-excel.sheet.macroEnabled.12' : 'MsExcel', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' : 'MsExcel', + 'application/vnd.ms-excel.template.macroEnabled.12' : 'MsExcel', + 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' : 'MsExcel', + 'application/vnd.ms-excel.addin.macroEnabled.12' : 'MsExcel', + 'application/vnd.ms-powerpoint' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' : 'MsPP', + 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' : 'MsPP', + 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.template' : 'MsPP', + 'application/vnd.ms-powerpoint.template.macroEnabled.12' : 'MsPP', + 'application/vnd.ms-powerpoint.addin.macroEnabled.12' : 'MsPP', + 'application/vnd.openxmlformats-officedocument.presentationml.slide' : 'MsPP', + 'application/vnd.ms-powerpoint.slide.macroEnabled.12' : 'MsPP', + 'application/pdf' : 'PDF', + 'application/xml' : 'XML', + 'application/vnd.oasis.opendocument.text' : 'OO', + 'application/vnd.oasis.opendocument.text-template' : 'OO', + 'application/vnd.oasis.opendocument.text-web' : 'OO', + 'application/vnd.oasis.opendocument.text-master' : 'OO', + 'application/vnd.oasis.opendocument.graphics' : 'OO', + 'application/vnd.oasis.opendocument.graphics-template' : 'OO', + 'application/vnd.oasis.opendocument.presentation' : 'OO', + 'application/vnd.oasis.opendocument.presentation-template' : 'OO', + 'application/vnd.oasis.opendocument.spreadsheet' : 'OO', + 'application/vnd.oasis.opendocument.spreadsheet-template' : 'OO', + 'application/vnd.oasis.opendocument.chart' : 'OO', + 'application/vnd.oasis.opendocument.formula' : 'OO', + 'application/vnd.oasis.opendocument.database' : 'OO', + 'application/vnd.oasis.opendocument.image' : 'OO', + 'application/vnd.openofficeorg.extension' : 'OO', + 'application/x-shockwave-flash' : 'AppFlash', + 'application/flash-video' : 'Flash video', + 'application/x-bittorrent' : 'Torrent', + 'application/javascript' : 'JS', + 'application/rtf' : 'RTF', + 'application/rtfd' : 'RTF', + 'application/x-font-ttf' : 'TTF', + 'application/x-font-otf' : 'OTF', + 'application/x-rpm' : 'RPM', + 'application/x-web-config' : 'TextPlain', + 'application/xhtml+xml' : 'HTML', + 'application/docbook+xml' : 'DOCBOOK', + 'application/x-awk' : 'AWK', + 'application/x-gzip' : 'GZIP', + 'application/x-bzip2' : 'BZIP', + 'application/x-xz' : 'XZ', + 'application/zip' : 'ZIP', + 'application/x-zip' : 'ZIP', + 'application/x-rar' : 'RAR', + 'application/x-tar' : 'TAR', + 'application/x-7z-compressed' : '7z', + 'application/x-jar' : 'JAR', + 'text/plain' : 'TextPlain', + 'text/x-php' : 'PHP', + 'text/html' : 'HTML', + 'text/javascript' : 'JS', + 'text/css' : 'CSS', + 'text/rtf' : 'RTF', + 'text/rtfd' : 'RTF', + 'text/x-c' : 'C', + 'text/x-csrc' : 'C', + 'text/x-chdr' : 'CHeader', + 'text/x-c++' : 'CPP', + 'text/x-c++src' : 'CPP', + 'text/x-c++hdr' : 'CPPHeader', + 'text/x-shellscript' : 'Shell', + 'application/x-csh' : 'Shell', + 'text/x-python' : 'Python', + 'text/x-java' : 'Java', + 'text/x-java-source' : 'Java', + 'text/x-ruby' : 'Ruby', + 'text/x-perl' : 'Perl', + 'text/x-sql' : 'SQL', + 'text/xml' : 'XML', + 'text/x-comma-separated-values' : 'CSV', + 'image/x-ms-bmp' : 'BMP', + 'image/jpeg' : 'JPEG', + 'image/gif' : 'GIF', + 'image/png' : 'PNG', + 'image/tiff' : 'TIFF', + 'image/x-targa' : 'TGA', + 'image/vnd.adobe.photoshop' : 'PSD', + 'image/xbm' : 'XBITMAP', + 'image/pxm' : 'PXM', + 'audio/mpeg' : 'AudioMPEG', + 'audio/midi' : 'AudioMIDI', + 'audio/ogg' : 'AudioOGG', + 'audio/mp4' : 'AudioMPEG4', + 'audio/x-m4a' : 'AudioMPEG4', + 'audio/wav' : 'AudioWAV', + 'audio/x-mp3-playlist' : 'AudioPlaylist', + 'video/x-dv' : 'VideoDV', + 'video/mp4' : 'VideoMPEG4', + 'video/mpeg' : 'VideoMPEG', + 'video/x-msvideo' : 'VideoAVI', + 'video/quicktime' : 'VideoMOV', + 'video/x-ms-wmv' : 'VideoWM', + 'video/x-flv' : 'VideoFlash', + 'video/x-matroska' : 'VideoMKV', + 'video/ogg' : 'VideoOGG' + }, + + /** + * Ajax request data validation rules + * + * @type Object + */ + rules : { + defaults : function(data) { + if (!data + || (data.added && !$.isArray(data.added)) + || (data.removed && !$.isArray(data.removed)) + || (data.changed && !$.isArray(data.changed))) { + return false; + } + return true; + }, + open : function(data) { return data && data.cwd && data.files && $.isPlainObject(data.cwd) && $.isArray(data.files); }, + tree : function(data) { return data && data.tree && $.isArray(data.tree); }, + parents : function(data) { return data && data.tree && $.isArray(data.tree); }, + tmb : function(data) { return data && data.images && ($.isPlainObject(data.images) || $.isArray(data.images)); }, + upload : function(data) { return data && ($.isPlainObject(data.added) || $.isArray(data.added));}, + search : function(data) { return data && data.files && $.isArray(data.files)} + }, + + + + + /** + * Commands costructors + * + * @type Object + */ + commands : {}, + + parseUploadData : function(text) { + var data; + + if (!$.trim(text)) { + return {error : ['errResponse', 'errDataEmpty']}; + } + + try { + data = $.parseJSON(text); + } catch (e) { + return {error : ['errResponse', 'errDataNotJSON']} + } + + if (!this.validResponse('upload', data)) { + return {error : ['errResponse']}; + } + data = this.normalize(data); + data.removed = $.map(data.added||[], function(f) { return f.hash; }) + return data; + + }, + + iframeCnt : 0, + + uploads : { + // upload transport using iframe + iframe : function(data, fm) { + var self = fm ? fm : this, + input = data.input, + dfrd = $.Deferred() + .fail(function(error) { + error && self.error(error); + }) + .done(function(data) { + data.warning && self.error(data.warning); + data.removed && self.remove(data); + data.added && self.add(data); + data.changed && self.change(data); + self.trigger('upload', data); + data.sync && self.sync(); + }), + name = 'iframe-'+self.namespace+(++self.iframeCnt), + form = $('
'), + msie = this.UA.IE, + // clear timeouts, close notification dialog, remove form/iframe + onload = function() { + abortto && clearTimeout(abortto); + notifyto && clearTimeout(notifyto); + notify && self.notify({type : 'upload', cnt : -cnt}); + + setTimeout(function() { + msie && $('