/// <summary> /// /// </summary> /// <param name="CssFileName"></param> /// <returns></returns> async protected Task<HttpStaticFileServer.ResultStruct> CssHandler(HttpStaticFileServer.HandlerStruct Parameter) { var FileSystem = Parameter.FileSystem; var CssFileName = Parameter.FilePath; var CssFileInfo = await FileSystem.GetFileInfoAsync(CssFileName); string RealFilePath; string CssFile; byte[] CssByteArray; DateTime LastWriteTimeUtc; if (CssFileInfo.Exists) { RealFilePath = CssFileName; CssFile = await FileSystem.ReadAsTextAsync(CssFileName, Encoding.UTF8); CssByteArray = Encoding.UTF8.GetBytes(CssFile); LastWriteTimeUtc = CssFileInfo.LastWriteTimeUtc; } else { var LessFileName = CssFileName.FullPathWithoutExtension + ".less"; var LessFileInfo = await FileSystem.GetFileInfoAsync(LessFileName); RealFilePath = LessFileName; CssFile = await TransformAsync(await FileSystem.ReadAsTextAsync(LessFileName, Encoding.UTF8), LessFileName); Parameter.AddCacheRelatedFile(LessFileName); LastWriteTimeUtc = LessFileInfo.LastWriteTimeUtc; } //Console.WriteLine("[1]"); if (Compressing) { CssFile = await Compressor.CompressCssAsync(CssFile); } //Console.WriteLine("[2]"); CssByteArray = Encoding.UTF8.GetBytes(CssFile); return new HttpStaticFileServer.ResultStruct() { ContentType = "text/css", Data = CssByteArray, RealFilePath = RealFilePath, FileInfo = new VirtualFileInfo() { Length = CssByteArray.Length, LastWriteTimeUtc = LastWriteTimeUtc, } }; }
/// <summary> /// /// </summary> /// <param name="Parameter"></param> /// <returns></returns> protected Task<HttpStaticFileServer.ResultStruct> LessHandler(HttpStaticFileServer.HandlerStruct Parameter) { throw (new HttpException(HttpCode.NOT_FOUND_404)); }
/// <summary> /// /// </summary> /// <param name="HttpStaticFileServer"></param> void IHttpStaticFilter.RegisterFilters(HttpStaticFileServer HttpStaticFileServer) { HttpStaticFileServer.AddExtensionHandler("css", CssHandler); HttpStaticFileServer.AddExtensionHandler("less", LessHandler); }
/// <summary> /// /// </summary> /// <param name="Parameter"></param> /// <returns></returns> async protected Task<HttpStaticFileServer.ResultStruct> JsHandler(HttpStaticFileServer.HandlerStruct Parameter) { var FileSystem = Parameter.FileSystem; var JsFileName = Parameter.FilePath; var JsxFileName = Parameter.FilePath.FullPathWithoutExtension + ".jsx"; var JsFileInfo = await Parameter.FileSystem.GetFileInfoAsync(JsFileName); var JsxFileInfo = await Parameter.FileSystem.GetFileInfoAsync(JsxFileName); DateTime CombinedJsDateTimeUtc = new DateTime(); string CombinedJsFile = ""; // A .jsx file exists if (JsxFileInfo.Exists) { Parameter.AddCacheRelatedFile(JsxFileName); var JsxFile = await FileSystem.ReadAsTextAsync(JsxFileName, Encoding.UTF8); foreach (var _Part in JsxFile.Split('\n', '\r')) { var JsComponentFileName = _Part.Trim(); if (JsComponentFileName.Length > 0) { Parameter.AddCacheRelatedFile(JsComponentFileName); var JsComponentFileInfo = await FileSystem.GetFileInfoAsync(JsComponentFileName); CombinedJsFile += await FileSystem.ReadAsTextAsync(JsComponentFileName, Encoding.UTF8); if (CombinedJsDateTimeUtc < JsComponentFileInfo.LastWriteTimeUtc) { CombinedJsDateTimeUtc = JsComponentFileInfo.LastWriteTimeUtc; } // //Console.WriteLine(Part); } } } // Not existing a .jsx file, serve the .js file else { CombinedJsFile = await FileSystem.ReadAsTextAsync(JsFileName, Encoding.UTF8); CombinedJsDateTimeUtc = JsFileInfo.LastWriteTimeUtc; } if (this.Compressing) { CombinedJsFile = await Compressor.CompressJavaScriptAsync(CombinedJsFile); } var JsFileArray = Encoding.UTF8.GetBytes(CombinedJsFile); return new HttpStaticFileServer.ResultStruct() { ContentType = "text/javascript", Data = JsFileArray, RealFilePath = JsFileName, FileInfo = new VirtualFileInfo() { Length = JsFileArray.Length, LastWriteTimeUtc = CombinedJsDateTimeUtc, } }; }
/// <summary> /// /// </summary> /// <param name="HttpStaticFileServer"></param> void IHttpStaticFilter.RegisterFilters(HttpStaticFileServer HttpStaticFileServer) { HttpStaticFileServer.AddExtensionHandler("js", JsHandler); HttpStaticFileServer.AddExtensionHandler("jsx", JsxHandler); }
internal HandlerStruct(HttpStaticFileServer HttpStaticFileServer) { this.HttpStaticFileServer = HttpStaticFileServer; }