private static void RequireModuleLoader(
            this HtmlHelper helper,
            ScriptOutputContext context, 
            StringBuilder stringBuilder)
        {
            if (!context.IsLoaderScriptWritten)
            {
                string action;
                var config = AmdConfiguration.Current;

                if (config.ScriptLoadingMode == ScriptLoadingMode.Dynamic)
                {
                    if (config.LoaderUrl == null)
                    {
                        throw new AmdConfigurationException("Dynamic script loading requires a third-party script loader.");
                    }
                    else
                    {
                        action = "Loader";
                    }
                }
                else
                {
                    action = "LiteLoader";
                }

                helper.WriteScriptActionInclude(action, stringBuilder, false);
                context.IsLoaderScriptWritten = true;
            }
        }
        private static void RequireModuleIncludeRecursive(
            this HtmlHelper helper, 
            string moduleId,
            ScriptOutputContext context,
            StringBuilder stringBuilder)
        {
            if (!context.WrittenModules.Contains(moduleId))
            {
                context.WrittenModules.Add(moduleId);

                var module = context.ResolveModule(moduleId);
                if (module != null)
                {
                    foreach (var dependency
                        in module.Dependencies.OrEmpty().Where(m => m.Content != null))
                    {
                        helper.RequireModuleIncludeRecursive(
                            dependency.Id,
                            context,
                            stringBuilder);
                    }
                }

                helper.WriteScriptActionInclude("Module", moduleId, stringBuilder);
            }
        }
        private static ScriptOutputContext GetScriptOutputContext(HttpContextBase httpContext)
        {
            if (httpContext.Items.Contains(OutputContextKey))
            {
                return httpContext.Items[OutputContextKey] as ScriptOutputContext;
            }

            var context = new ScriptOutputContext();
            httpContext.Items[OutputContextKey] = context;
            return context;
        }
 private static void RequireAmdConfiguration(
     this HtmlHelper helper,
     ScriptOutputContext context,
     StringBuilder stringBuilder)
 {
     if (!context.IsConfigScriptWritten)
     {
         helper.WriteScriptActionInclude("config", stringBuilder, false);
         context.IsConfigScriptWritten = true;
     }
 }
 private static void EnsureAmdSystemInitialized(
     this HtmlHelper helper,
     ScriptOutputContext outputContext,
     StringBuilder stringBuilder)
 {
     helper.RequireModuleLoader(outputContext, stringBuilder);
     helper.RequireAmdConfiguration(outputContext, stringBuilder);
 }