public IJsMinifier CreateMinifier(string minifierName) { #if DNXCORE50 IJsMinifier minifier = new CrockfordJsMinifier(); #else IJsMinifier minifier; switch (minifierName) { case "CrockfordJsMinifier": minifier = new CrockfordJsMinifier(); break; case "MsAjaxJsMinifier": minifier = new MsAjaxJsMinifier(); break; case "YuiJsMinifier": minifier = new YuiJsMinifier(); break; default: throw new NotSupportedException(); } #endif return minifier; }
public IJsMinifier CreateMinifier(string minifierName) { IJsMinifier minifier; switch (minifierName) { case "CrockfordJsMinifier": minifier = new CrockfordJsMinifier(); break; #if !NETSTANDARD1_6 case "MsAjaxJsMinifier": minifier = new MsAjaxJsMinifier(); break; case "YuiJsMinifier": minifier = new YuiJsMinifier(); break; #endif case "NUglifyJsMinifier": minifier = new NUglifyJsMinifier(); break; default: throw new NotSupportedException(); } return minifier; }
public async Task<Stream> ModifyJs(Stream sourceStream, bool enableMinification) { using (sourceStream) { string content; using (var memoryStream = new MemoryStream()) { await sourceStream.CopyToAsync(memoryStream).ConfigureAwait(false); content = Encoding.UTF8.GetString(memoryStream.ToArray()); if (enableMinification) { try { var result = new CrockfordJsMinifier().Minify(content, false, Encoding.UTF8); if (result.Errors.Count > 0) { _logger.Error("Error minifying javascript: " + result.Errors[0].Message); } else { content = result.MinifiedContent; } } catch (Exception ex) { _logger.ErrorException("Error minifying javascript", ex); } } } var bytes = Encoding.UTF8.GetBytes(content); return new MemoryStream(bytes); } }
/// <summary> /// Gets a stream containing all concatenated javascript /// </summary> /// <returns>Task{Stream}.</returns> private async Task<Stream> GetAllJavascript(string mode, string culture, string version, bool enableMinification) { var memoryStream = new MemoryStream(); var newLineBytes = Encoding.UTF8.GetBytes(Environment.NewLine); await AppendResource(memoryStream, "bower_components/jquery/dist/jquery.min.js", newLineBytes).ConfigureAwait(false); //await AppendLocalization(memoryStream, culture, excludePhrases).ConfigureAwait(false); await memoryStream.WriteAsync(newLineBytes, 0, newLineBytes.Length).ConfigureAwait(false); if (!string.IsNullOrWhiteSpace(mode)) { var appModeBytes = Encoding.UTF8.GetBytes(string.Format("window.appMode='{0}';", mode)); await memoryStream.WriteAsync(appModeBytes, 0, appModeBytes.Length).ConfigureAwait(false); } // Write the version string for the dashboard comparison function var versionString = string.Format("window.dashboardVersion='{0}';", version); var versionBytes = Encoding.UTF8.GetBytes(versionString); await memoryStream.WriteAsync(versionBytes, 0, versionBytes.Length).ConfigureAwait(false); await memoryStream.WriteAsync(newLineBytes, 0, newLineBytes.Length).ConfigureAwait(false); var builder = new StringBuilder(); var commonFiles = new[] { "bower_components/requirejs/require.js", "thirdparty/jquerymobile-1.4.5/jquery.mobile.custom.js", "thirdparty/browser.js", "thirdparty/jquery.unveil-custom.js", "apiclient/logger.js", "apiclient/md5.js", "apiclient/sha1.js", "apiclient/store.js", "apiclient/device.js", "apiclient/credentials.js", "apiclient/ajax.js", "apiclient/events.js", "apiclient/deferred.js", "apiclient/apiclient.js" }.ToList(); commonFiles.Add("apiclient/connectionmanager.js"); foreach (var file in commonFiles) { using (var fs = _fileSystem.GetFileStream(GetDashboardResourcePath(file), FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true)) { using (var streamReader = new StreamReader(fs)) { var text = await streamReader.ReadToEndAsync().ConfigureAwait(false); builder.Append(text); builder.Append(Environment.NewLine); } } } foreach (var file in GetScriptFiles()) { var path = GetDashboardResourcePath("scripts/" + file); using (var fs = _fileSystem.GetFileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true)) { using (var streamReader = new StreamReader(fs)) { var text = await streamReader.ReadToEndAsync().ConfigureAwait(false); builder.Append(text); builder.Append(Environment.NewLine); } } } var js = builder.ToString(); if (enableMinification) { try { var result = new CrockfordJsMinifier().Minify(js, false, Encoding.UTF8); if (result.Errors.Count > 0) { _logger.Error("Error minifying javascript: " + result.Errors[0].Message); } else { js = result.MinifiedContent; } } catch (Exception ex) { _logger.ErrorException("Error minifying javascript", ex); } } var bytes = Encoding.UTF8.GetBytes(js); await memoryStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); memoryStream.Position = 0; return memoryStream; }
public IEnumerable<IDocument> Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) { CrockfordJsMinifier minifier = new CrockfordJsMinifier(); return Minify(inputs, context, (x) => minifier.Minify(x, _isInlineCode), "JS"); }