using System.IO; using System.Text.RegularExpressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Umbraco.Core.Manifest; namespace Umbraco.Web.UI.JavaScript { /// /// Reads from all defined manifests and ensures that any of their initialization is output with the /// main Umbraco initialization output. /// internal class RequireJsInit { private readonly ManifestParser _parser; public RequireJsInit(ManifestParser parser) { _parser = parser; } private static readonly Regex Token = new Regex("(\"##\\w+?##\")", RegexOptions.Compiled); /// /// Processes all found manifest files and outputs the main.js file containing all plugin manifests /// public string GetJavascriptInitialization(JObject umbracoConfig, JArray umbracoInit) { foreach (var m in _parser.GetManifests()) { ManifestParser.MergeJObjects(umbracoConfig, m.JavaScriptConfig, true); ManifestParser.MergeJArrays(umbracoInit, m.JavaScriptInitialize); } return ParseMain(umbracoConfig.ToString(), umbracoInit.ToString()); } /// /// Returns the default config as a JObject /// /// internal static JObject GetDefaultConfig() { var config = Resources.RequireJsConfig; var jObj = JsonConvert.DeserializeObject(config); return jObj; } /// /// Returns the default config as a JArray /// /// internal static JArray GetDefaultInitialization() { var init = Resources.RequireJsInitialize; var jArr = JsonConvert.DeserializeObject(init); return jArr; } /// /// Parses the JsResources.Main and replaces the replacement tokens accordingly. /// /// /// internal static string ParseMain(params string[] replacements) { var count = 0; return Token.Replace(Resources.Main, match => { var replaced = replacements[count]; count++; return replaced; }); } } }