Browse Source

Method overloading support for jquery script generation.

pull/122/head
Halil İbrahim Kalkan 9 years ago
parent
commit
d51df64b3a
  1. 1
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs
  2. 6
      src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs
  3. 37
      src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs

1
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs

@ -80,6 +80,7 @@ namespace Volo.Abp.AspNetCore.Mvc
}
var actionModel = controllerModel.AddAction(uniqueMethodName, ActionApiDescriptionModel.Create(
uniqueMethodName,
method,
apiDescription.RelativePath,
apiDescription.HttpMethod,

6
src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs

@ -10,6 +10,8 @@ namespace Volo.Abp.Http.Modeling
[Serializable]
public class ActionApiDescriptionModel
{
public string UniqueName { get; set; }
public string Name { get; set; }
public string HttpMethod { get; set; }
@ -29,8 +31,9 @@ namespace Volo.Abp.Http.Modeling
}
public static ActionApiDescriptionModel Create([NotNull] MethodInfo method, [NotNull] string url, [NotNull] string httpMethod, [NotNull] IList<string> supportedVersions)
public static ActionApiDescriptionModel Create([NotNull] string uniqueName, [NotNull] MethodInfo method, [NotNull] string url, [NotNull] string httpMethod, [NotNull] IList<string> supportedVersions)
{
Check.NotNull(uniqueName, nameof(uniqueName));
Check.NotNull(method, nameof(method));
Check.NotNull(url, nameof(url));
Check.NotNull(httpMethod, nameof(httpMethod));
@ -38,6 +41,7 @@ namespace Volo.Abp.Http.Modeling
return new ActionApiDescriptionModel
{
UniqueName = uniqueName,
Name = method.Name,
Url = url,
HttpMethod = httpMethod,

37
src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs

@ -63,21 +63,23 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery
script.AppendLine($" abp.utils.createNamespace(window, '{controllerName}');");
var normalizedActionNames = CalculateNormalizedActionNames(controller.Actions);
foreach (var action in controller.Actions.Values)
{
script.AppendLine();
AddActionScript(script, module, controllerName, controller, action);
AddActionScript(script, module, controllerName, controller, action, normalizedActionNames[action]);
}
script.AppendLine();
script.AppendLine(" })();");
}
private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, string controllerName, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action)
private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, string controllerName, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action, string normalizedActionName)
{
var parameterList = ProxyScriptingJsFuncHelper.GenerateJsFuncParameterList(action, "ajaxParams");
script.AppendLine($" {controllerName}{ProxyScriptingJsFuncHelper.WrapWithBracketsOrWithDotPrefix(action.Name.RemovePostFix("Async").ToCamelCase())} = function({parameterList}) {{");
script.AppendLine($" {controllerName}{ProxyScriptingJsFuncHelper.WrapWithBracketsOrWithDotPrefix(normalizedActionName.RemovePostFix("Async").ToCamelCase())} = function({parameterList}) {{");
script.AppendLine(" return abp.ajax($.extend(true, {");
AddAjaxCallParameters(script, controller, action);
@ -125,6 +127,35 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery
script.AppendLine();
}
private static Dictionary<ActionApiDescriptionModel, string> CalculateNormalizedActionNames(Dictionary<string, ActionApiDescriptionModel> actions)
{
var result = new Dictionary<ActionApiDescriptionModel, string>();
var actionsByName = new Dictionary<string, List<ActionApiDescriptionModel>>();
foreach (var action in actions.Values)
{
var actionName = action.Name.RemovePostFix("Async").ToCamelCase();
result[action] = actionName;
actionsByName.GetOrAdd(actionName, () => new List<ActionApiDescriptionModel>()).Add(action);
}
foreach (var actionByName in actionsByName)
{
if (actionByName.Value.Count <= 1)
{
continue;
}
foreach (var action in actionByName.Value)
{
result[action] = action.UniqueName;
}
}
return result;
}
private static string GetNormalizedTypeName(string typeWithAssemblyName)
{
return CamelCaseWithNamespace(

Loading…
Cancel
Save