// Set Default settings public static MvcHtmlString ResourceSettings(this HtmlHelper html, HTMLResourceOptions options) { var resources = GetResources(html); if (options.Bundle != null) { resources.Bundle = (bool)options.Bundle; } if (options.Debug != null) { resources.Debug = (bool)options.Debug; } if (options.Minify != null) { resources.Minify = (bool)options.Minify; } if (options.Strict != null) { resources.Strict = (bool)options.Strict; } if (options.Inline != null) { resources.Inline = (int)options.Inline; } if (options.CacheFolder != null) { resources.CacheFolder = options.CacheFolder; resources.StyleSheetFolder = options.StyleSheetFolder; resources.ScriptFolder = options.ScriptFolder; resources.ImageFolder = options.ImageFolder; } if (options.StyleSheetFolder != null) { resources.StyleSheetFolder = options.StyleSheetFolder; } if (options.ScriptFolder != null) { resources.ScriptFolder = options.ScriptFolder; } if (options.ImageFolder != null) { resources.ImageFolder = options.ImageFolder; } if (options.BundleTimeout != null) { resources.BundleTimeout = (int)options.BundleTimeout; } if (options.MimifyTimeout != null) { resources.MimifyTimeout = (int)options.MimifyTimeout; } if (options.ContextCacheLifetime != null) { resources.ContextCacheLifetime = (int)options.ContextCacheLifetime; } // TODO: If debug print settings as commented out HTML return null; }
// Glob recursive options: html.Resource("~/Content/*.css", true, new ResourceOptions() { Bundle = false }); public static MvcHtmlString Resource(this HtmlHelper html, string value, bool recursive, HTMLResourceOptions options) { return Resource(html, value, null, recursive, options, false); }
public static MvcHtmlString Resource(this HtmlHelper html, string value, string regex, bool recursive, HTMLResourceOptions options, bool force) { var resources = GetResources(html); // TODO: Return cached copy here so we don't need to do more code parsing // Find out how deep we are in the page structure so we add the resources in the right order int depth = GetDepth(html); // Get helper class to convert path's var url = new UrlHelper(html.ViewContext.RequestContext); var server = html.ViewContext.RequestContext.HttpContext.Server; // Make sure the paths exist Directory.CreateDirectory(server.MapPath(resources.ScriptFolder)); Directory.CreateDirectory(server.MapPath(resources.StyleSheetFolder)); Directory.CreateDirectory(server.MapPath(resources.ImageFolder)); FileInfo[] files = null; if (regex != null) { // TODO: Implement } // Try to glob for files if it's not a regular expression else { var filename = value.Substring(value.LastIndexOf('/') + 1); var asp_path = value.Substring(0, value.LastIndexOf('/') + 1); var di = new DirectoryInfo(Path.GetDirectoryName(server.MapPath(asp_path))); files = di.GetFiles(Path.GetFileName(filename), recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); } // Throw exception if we are in strict mode and nothing was found if (files.Length == 0 && ((resources.Strict && resources.Strict != false) || resources.Strict == true)) { throw new FileNotFoundException(String.Format("Could not find file {0}", value), value); } foreach (var info in files) { // Find the Relative URL path var relative_filename = MapPathReverse(html, info.FullName); // Skip cache folders if (InCacheFolder(resources, relative_filename) && !force) { continue; } // Find the path diffrence so we can fix up included resources in fx css resources.PathOffset[relative_filename] = GetPathOffset(url.Content(relative_filename.Substring(0, relative_filename.Length - info.Name.Length)), url.Content(resources.ScriptFolder)); // Save options for later use resources.Options[relative_filename] = options; // Make group as used if we included a resource from it if (resources.GroupsLookup.ContainsKey(relative_filename)) { resources.GroupsUsed.Add(resources.GroupsLookup[relative_filename]); } if (relative_filename.EndsWith(".js")) { // Ensure that list exists. if (!resources.Scripts.Keys.Contains(depth)) { resources.Scripts.Add(depth, new List<string>()); } if (!resources.Scripts[depth].Contains(relative_filename)) { // Note the latest date a file was changed. if (DateTime.Compare(resources.LatestScriptFile, info.LastWriteTime) < 0) { resources.LatestScriptFile = info.LastWriteTime; } resources.Scripts[depth].Add(relative_filename); } } else if (relative_filename.EndsWith(".css")) { // Ensure that list exists. if (!resources.Stylesheets.Keys.Contains(depth)) { resources.Stylesheets.Add(depth, new List<string>()); } if (!resources.Stylesheets[depth].Contains(relative_filename)) { // Note the latest date a file was changed. if (DateTime.Compare(resources.LatestCSSFile, info.LastWriteTime) < 0) { resources.LatestCSSFile = info.LastWriteTime; } resources.Stylesheets[depth].Add(relative_filename); } } else if (relative_filename.EndsWith(".png") || relative_filename.EndsWith(".gif")) { // Ensure that list exists. if (!resources.Images.Keys.Contains(depth)) { resources.Images.Add(depth, new List<string>()); } if (!resources.Images[depth].Contains(relative_filename)) { // Note the latest date a file was changed. if (DateTime.Compare(resources.LatestImageFile, info.LastWriteTime) < 0) { resources.LatestImageFile = info.LastWriteTime; } resources.Images[depth].Add(relative_filename); } } } return null; }
public static MvcHtmlString Resource(this HtmlHelper html, string value, HTMLResourceOptions options, bool force) { return Resource(html, value, null, false, options, force); }