public static void AddWithAmp(this DotvvmRouteTable routeTable, string routeName, string url, Type dotvvmPagePresenterType, Type ampPagePresenterType, DotvvmConfiguration dotvvmConfiguration, object dotvvmPageDefaultValues = null, object ampPageDefaultValues = null) { if (!typeof(IAmpPresenter).IsAssignableFrom(ampPagePresenterType)) { throw new ArgumentException($"ampPagePresenterType has to inherit from {nameof(IAmpPresenter)}.", nameof(ampPagePresenterType)); } var ampRouteManager = GetAmpConfiguration(dotvvmConfiguration).RouteManager; var ampPageRoute = ampRouteManager.BuildAmpRouteName(routeName); if (ampPageDefaultValues == null) { ampPageDefaultValues = dotvvmPageDefaultValues; } Func <IServiceProvider, IDotvvmPresenter> presenterFactory = provider => { if (!typeof(IDotvvmPresenter).IsAssignableFrom(dotvvmPagePresenterType)) { throw new ArgumentException("presenterType has to inherit from DotVVM.Framework.Hosting.IDotvvmPresenter.", nameof(dotvvmPagePresenterType)); } var dotvvmPresenter = (IDotvvmPresenter)provider.GetService(dotvvmPagePresenterType); return(new DotvvmAmpLinkPresenter(dotvvmPresenter, ampRouteManager)); }; routeTable.Add(routeName, url, presenterFactory, dotvvmPageDefaultValues); routeTable.Add(ampPageRoute, ampRouteManager.BuildAmpUrl(url), ampPagePresenterType, ampPageDefaultValues); ampRouteManager.RegisterRoute(routeTable[ampPageRoute], routeTable[routeName]); }
public static void AddWithAmp(this DotvvmRouteTable routeTable, string routeName, string url, DotvvmConfiguration dotvvmConfiguration, Func <IServiceProvider, IDotvvmPresenter> dotvvmPagePresenterFactory = null, Func <IServiceProvider, IAmpPresenter> ampPagePresenterFactory = null, object dotvvmPageDefaultValues = null, object ampPageDefaultValues = null) { var ampRouteManager = GetAmpConfiguration(dotvvmConfiguration).RouteManager; var ampPageRoute = ampRouteManager.BuildAmpRouteName(routeName); if (ampPageDefaultValues == null) { ampPageDefaultValues = dotvvmPageDefaultValues; } Func <IServiceProvider, IDotvvmPresenter> defaultPresenterFactory; if (dotvvmPagePresenterFactory == null) { defaultPresenterFactory = provider => { var dotvvmPresenter = routeTable.GetDefaultPresenter(provider); return(new DotvvmAmpLinkPresenter(dotvvmPresenter, ampRouteManager)); }; } else { defaultPresenterFactory = provider => { var dotvvmPresenter = dotvvmPagePresenterFactory(provider); return(new DotvvmAmpLinkPresenter(dotvvmPresenter, ampRouteManager)); }; } routeTable.Add(routeName, url, defaultPresenterFactory, dotvvmPageDefaultValues); routeTable.Add(ampPageRoute, ampRouteManager.BuildAmpUrl(url), ampPagePresenterFactory ?? new Func <IServiceProvider, IDotvvmPresenter>(GetDefaultAmpPresenter), ampPageDefaultValues); ampRouteManager.RegisterRoute(routeTable[ampPageRoute], routeTable[routeName]); }
/// <summary> /// Initializes a new instance of the <see cref="DotvvmConfiguration"/> class. /// </summary> internal DotvvmConfiguration() { DefaultCulture = CultureInfo.CurrentCulture.Name; Markup = new DotvvmMarkupConfiguration(); RouteTable = new DotvvmRouteTable(this); Resources = new DotvvmResourceRepository(); Security = new DotvvmSecurityConfiguration(); Runtime = new DotvvmRuntimeConfiguration(); Styles = new StyleRepository(this); }
/// <summary> /// Initializes a new instance of the <see cref="DotvvmConfiguration"/> class. /// </summary> internal DotvvmConfiguration() { DefaultCulture = CultureInfo.CurrentCulture.Name; Markup = new DotvvmMarkupConfiguration(new Lazy <JavascriptTranslatorConfiguration>(() => ServiceLocator.GetService <IOptions <JavascriptTranslatorConfiguration> >().Value)); RouteTable = new DotvvmRouteTable(this); Resources = new DotvvmResourceRepository(); Security = new DotvvmSecurityConfiguration(); Runtime = new DotvvmRuntimeConfiguration(); Styles = new StyleRepository(this); }
public void DotvvmRoute_PresenterType() { var configuration = DotvvmConfiguration.CreateDefault(services => { services.TryAddScoped <TestPresenter>(); }); var table = new DotvvmRouteTable(configuration); table.Add("Article", "", provider => provider.GetService <TestPresenter>(), null); Assert.IsInstanceOfType(table.First().GetPresenter(configuration.ServiceProvider), typeof(TestPresenter)); }
public void RouteTableGroup_PresenterFactoryMethod() { var configuration = DotvvmConfiguration.CreateDefault(services => { services.TryAddScoped <TestPresenter>(); }); var table = new DotvvmRouteTable(configuration); table.AddGroup("Group", null, null, opt => { opt.Add("Article", "", provider => provider.GetRequiredService <TestPresenter>(), null); }); Assert.IsInstanceOfType(table.First().GetPresenter(configuration.ServiceProvider), typeof(TestPresenter)); }
public void WriteJson(JsonWriter writer, DotvvmRouteTable value, JsonSerializer serializer) { writer.WriteStartObject(); foreach (var route in value) { writer.WritePropertyName(route.RouteName); new JObject() { ["url"] = route.Url, ["virtualPath"] = route.VirtualPath, ["defaultValues"] = JObject.FromObject(route.DefaultValues) }.WriteTo(writer); } writer.WriteEndObject(); }
public void DotvvmRoute_PresenterFactoryMethod() { var configuration = DotvvmConfiguration.CreateDefault(services => { services.TryAddScoped <TestPresenter>(); }); var table = new DotvvmRouteTable(configuration); table.Add("Article", "", typeof(TestPresenter), null); Assert.IsInstanceOfType(table.First().GetPresenter(configuration.ServiceProvider), typeof(TestPresenter)); Assert.ThrowsException <ArgumentException>(() => { table.Add("Blog", "", typeof(TestPresenterWithoutInterface)); }); }
public void RouteTableGroup_MultipleRoutes() { var table = new DotvvmRouteTable(configuration); table.AddGroup("Group", "UrlPrefix/{Id}", null, opt => { opt.Add("Route0", "Article0/{Title}", null, null, null); opt.Add("Route1", "Article1/{Title}", null, null, null); }); var group = table.GetGroup("Group"); Assert.IsTrue(group.Contains("Group_Route0")); Assert.IsTrue(group.Contains("Group_Route1")); Assert.IsTrue(group["Group_Route0"].IsMatch("UrlPrefix/0/Article0/test0", out _)); Assert.IsTrue(group["Group_Route1"].IsMatch("UrlPrefix/1/Article1/test1", out _)); }
public void RouteTableGroup_EmptyRouteName() { var table = new DotvvmRouteTable(configuration); table.AddGroup("Group", "UrlPrefix/{Id}", null, opt => { opt.Add("Default", "", null, null, null); }); var group = table.GetGroup("Group"); var route = group.First(); Assert.AreEqual(route.RouteName, "Group_Default"); Assert.IsTrue(route.IsMatch("UrlPrefix/5", out var parameters)); Assert.AreEqual("5", parameters["Id"]); }
public void RouteTableGroup_DefaultValues() { var table = new DotvvmRouteTable(configuration); table.AddGroup("Group", "UrlPrefix/{Id}", null, opt => { opt.Add("Route", "Article/{Title}", null, new { Title = "test" }, null); }); var group = table.GetGroup("Group"); var route = group.First(); Assert.AreEqual(route.RouteName, "Group_Route"); Assert.IsTrue(route.IsMatch("UrlPrefix/5/Article", out var parameters)); Assert.AreEqual("5", parameters["Id"]); Assert.AreEqual("test", parameters["Title"]); }
public void RouteTableGroup_MultipleRoutesWithParameters() { var table = new DotvvmRouteTable(configuration); table.AddGroup("Group", "UrlPrefix/{Id}", null, opt => { opt.Add("Route0", "Article0/{Title}", null, null, null); opt.Add("Route1", "Article1/{Title}", null, null, null); }); var group = table.GetGroup("Group"); Assert.IsTrue(group["Group_Route0"].IsMatch("UrlPrefix/0/Article0/test0", out var parameters)); Assert.AreEqual("0", parameters["Id"]); Assert.AreEqual("test0", parameters["Title"]); Assert.IsTrue(group["Group_Route1"].IsMatch("UrlPrefix/1/Article1/test1", out parameters)); Assert.AreEqual("1", parameters["Id"]); Assert.AreEqual("test1", parameters["Title"]); }
public void RouteTableGroup_UrlWithParameters() { var table = new DotvvmRouteTable(configuration); table.AddGroup("Group", "UrlPrefix/{Id}", "PathPrefix", opt => { opt.Add("Route", "Article/{Title}", "route.dothtml", null, null); }); var group = table.GetGroup("Group"); var route = group.First(); Assert.AreEqual(route.RouteName, "Group_Route"); Assert.AreEqual(route.VirtualPath, "PathPrefix/route.dothtml"); Assert.IsTrue(route.IsMatch("UrlPrefix/5/Article/test", out var parameters)); Assert.AreEqual("5", parameters["Id"]); Assert.AreEqual("test", parameters["Title"]); }
public void RouteTableGroup_NestedGroups() { var table = new DotvvmRouteTable(configuration); table.AddGroup("Group1", "UrlPrefix1", null, opt1 => { opt1.AddGroup("Group2", "UrlPrefix2", null, opt2 => { opt2.AddGroup("Group3", "UrlPrefix3", null, opt3 => { opt3.Add("Route3", "Article3", null, null, null); }); opt2.Add("Route2", "Article2", null, null, null); }); opt1.Add("Route1", "Article1", null, null, null); }); var group = table.GetGroup("Group1"); var nestedGroup = table.GetGroup("Group1").GetGroup("Group2"); var nestedGroup2 = table.GetGroup("Group1").GetGroup("Group2").GetGroup("Group3"); var route3 = "Group1_Group2_Group3_Route3"; var route2 = "Group1_Group2_Route2"; var route1 = "Group1_Route1"; Assert.IsTrue(group.Contains(route3)); Assert.IsTrue(nestedGroup.Contains(route3)); Assert.IsTrue(nestedGroup2.Contains(route3)); Assert.IsTrue(group.Contains(route2)); Assert.IsTrue(nestedGroup.Contains(route2)); Assert.IsFalse(nestedGroup2.Contains(route2)); Assert.IsTrue(group.Contains(route1)); Assert.IsFalse(nestedGroup.Contains(route1)); Assert.IsFalse(nestedGroup2.Contains(route1)); Assert.IsTrue(group[route3].IsMatch("UrlPrefix1/UrlPrefix2/UrlPrefix3/Article3", out _)); Assert.IsTrue(group[route2].IsMatch("UrlPrefix1/UrlPrefix2/Article2", out _)); Assert.IsTrue(group[route1].IsMatch("UrlPrefix1/Article1", out _)); }
private void RegisterResources(DotvvmRouteTable routeTable) { }
private void RegisterRoutes(DotvvmRouteTable routeTable) { routeTable.Add("DefaultRoute", "", "Views/default.dothtml"); }
public static void AddLocalizedRoute(this DotvvmRouteTable routeTable, string routeName, string url, string virtualPath, object defaultValues = null, Func <IDotvvmPresenter> presenterFactory = null) { var localizedUrl = $"{{{Constants.CultureRouteParameterName}:{Constants.CultureRouteParameterName}}}{(string.IsNullOrWhiteSpace(url) ? "" : "/")}{url}"; routeTable.Add(routeName, localizedUrl, virtualPath, defaultValues, presenterFactory); }
/// <summary> /// Initializes a new instance of the <see cref="DotvvmConfiguration"/> class. /// </summary> internal DotvvmConfiguration() { DefaultCulture = Thread.CurrentThread.CurrentCulture.Name; Markup = new DotvvmMarkupConfiguration(); RouteTable = new DotvvmRouteTable(this); Resources = new DotvvmResourceRepository(); Security = new DotvvmSecurityConfiguration(); Runtime = new DotvvmRuntimeConfiguration(); Debug = true; Styles = new StyleRepository(); }