private void WritePluginJs(PluginAssembly plugin, StringBuilder js) { var jsBlocks = new List <JsBlock>(); //除了放在 commands 文件夹下的 js,都加载进来。 var assembly = plugin.Assembly; var resources = assembly.GetManifestResourceNames() .Where(r => !r.ToLower().Contains("commands.") && r.ToLower().Contains(".js")) .ToArray(); foreach (var resource in resources) { var stream = assembly.GetManifestResourceStream(resource); using (var sr = new StreamReader(stream)) { var jsContent = sr.ReadToEnd(); WebCommandJsHelper.LoadCommandJsBlocks(jsContent, jsBlocks); } } JsBlock.SortByHierachy(jsBlocks); foreach (var jsBlock in jsBlocks) { js.AppendLine(jsBlock.JavascriptCode); } }
/// <summary> /// 通过解析 js 代码格式来添加 WebCommand。 /// </summary> /// <param name="js"></param> private void AddByJs(string js) { var jsClasses = new List <JsBlock>(); WebCommandJsHelper.LoadCommandJsBlocks(js, jsClasses); foreach (var jsClass in jsClasses) { //在 JS 代码中匹配出元数据属性。 var command = new WebCommand { Name = jsClass.ClassName, Extend = jsClass.Extend, JavascriptCode = jsClass.JavascriptCode }; //text var textMatch = WebCommandJsHelper.TextRegex.Match(jsClass.JavascriptCode); if (textMatch.Success) { command.Label = textMatch.Groups["text"].Value; } //group var groupMatch = WebCommandJsHelper.GroupRegex.Match(jsClass.JavascriptCode); if (groupMatch.Success) { var group = groupMatch.Groups["group"].Value.ToLower(); if (group == "view") { command.Group = CommandGroupType.View; } else if (group == "edit") { command.Group = CommandGroupType.Edit; } else if (group == "business") { command.Group = CommandGroupType.Business; } } this.AddCommand(command); } }