/// <summary> /// Setup RequireJS to be used in layouts /// </summary> /// <param name="baseUrl">Scrips folder</param> /// <param name="requireUrl">requirejs.js url</param> /// <param name="configsList">RequireJS.config files path</param> public static MvcHtmlString RenderRequireJsSetup(this HtmlHelper html, string baseUrl, string requireUrl, IList <string> configsList, IRequireJsLogger logger = null) { var entryPointPath = html.RequireJsEntryPoint(); if (entryPointPath == null) { return(new MvcHtmlString(string.Empty)); } if (!configsList.Any()) { throw new Exception("No config files to load."); } var processedConfigs = configsList.Select(r => { var resultingPath = html.ViewContext.HttpContext.MapPath(r); PathHelpers.VerifyFileExists(resultingPath); return(resultingPath); }).ToList(); var loader = new ConfigLoader(processedConfigs, logger); var resultingConfig = loader.Get(); var outputConfig = new JsonConfig { BaseUrl = baseUrl, Locale = html.CurrentCulture(), Paths = resultingConfig.Paths.PathList.ToDictionary(r => r.Key, r => r.Value), Shim = resultingConfig.Shim.ShimEntries.ToDictionary(r => r.For, r => new JsonRequireDeps { Dependencies = r.Dependencies.Select(x => x.Dependency).ToList(), Exports = r.Exports }), Map = resultingConfig.Map.MapElements.ToDictionary(r => r.For, r => r.Replacements.ToDictionary(x => x.OldKey, x => x.NewKey)) }; var options = new JsonRequireOptions { Locale = html.CurrentCulture(), PageOptions = html.ViewBag.PageOptions, WebsiteOptions = html.ViewBag.GlobalOptions }; var configBuilder = new JavaScriptBuilder(); configBuilder.AddStatement(JavaScriptHelpers.SerializeAsVariable(options, "requireConfig")); configBuilder.AddStatement(JavaScriptHelpers.SerializeAsVariable(outputConfig, "require")); var requireRootBuilder = new JavaScriptBuilder(); requireRootBuilder.AddAttributesToStatement("data-main", entryPointPath.ToString()); requireRootBuilder.AddAttributesToStatement("src", requireUrl); return(new MvcHtmlString(configBuilder.Render() + requireRootBuilder.Render())); }
internal static JsonRequireOptions createOptionsFrom(System.Web.HttpContextBase httpContext, RequireRendererConfiguration config, string locale) { var options = new JsonRequireOptions { Locale = locale, PageOptions = RequireJsOptions.GetPageOptions(httpContext), WebsiteOptions = RequireJsOptions.GetGlobalOptions(httpContext) }; config.ProcessOptions(options); return(options); }
/// <summary> /// Setup RequireJS to be used in layouts /// </summary> /// <param name="html"> /// Html helper. /// </param> /// <param name="config"> /// Configuration object for various options. /// </param> /// <returns> /// The <see cref="MvcHtmlString"/>. /// </returns> public static MvcHtmlString RenderRequireJsSetup( this HtmlHelper html, RequireRendererConfiguration config) { if (config == null) { throw new ArgumentNullException("config"); } var entryPointPath = html.RequireJsEntryPoint(config.BaseUrl, config.EntryPointRoot); if (entryPointPath == null) { return(new MvcHtmlString(string.Empty)); } if (config.ConfigurationFiles == null || !config.ConfigurationFiles.Any()) { throw new Exception("No config files to load."); } var processedConfigs = config.ConfigurationFiles.Select(r => { var resultingPath = html.ViewContext.HttpContext.MapPath(r); PathHelpers.VerifyFileExists(resultingPath); return(resultingPath); }).ToList(); var resultingConfig = GetCachedOverridenConfig(processedConfigs, config, entryPointPath.ToString()); var locale = config.LocaleSelector(html); var outputConfig = new JsonRequireOutput { BaseUrl = config.BaseUrl, Locale = locale, UrlArgs = config.UrlArgs, WaitSeconds = config.WaitSeconds, Paths = resultingConfig.Paths.PathList.ToDictionary(r => r.Key, r => r.Value), Shim = resultingConfig.Shim.ShimEntries.ToDictionary( r => r.For, r => new JsonRequireDeps { Dependencies = r.Dependencies.Select(x => x.Dependency).ToList(), Exports = r.Exports }), Map = resultingConfig.Map.MapElements.ToDictionary( r => r.For, r => r.Replacements.ToDictionary(x => x.OldKey, x => x.NewKey)) }; config.ProcessConfig(outputConfig); var options = new JsonRequireOptions { Locale = locale, PageOptions = RequireJsOptions.GetPageOptions(html.ViewContext.HttpContext), WebsiteOptions = RequireJsOptions.GetGlobalOptions(html.ViewContext.HttpContext) }; config.ProcessOptions(options); var configBuilder = new JavaScriptBuilder(); configBuilder.AddStatement(JavaScriptHelpers.SerializeAsVariable(options, "requireConfig")); configBuilder.AddStatement(JavaScriptHelpers.SerializeAsVariable(outputConfig, "require")); var requireRootBuilder = new JavaScriptBuilder(); requireRootBuilder.AddAttributesToStatement("src", config.RequireJsUrl); var requireEntryPointBuilder = new JavaScriptBuilder(); requireEntryPointBuilder.AddStatement( JavaScriptHelpers.MethodCall( "require", (object)new[] { entryPointPath.ToString() })); return(new MvcHtmlString( configBuilder.Render() + Environment.NewLine + requireRootBuilder.Render() + Environment.NewLine + requireEntryPointBuilder.Render())); }