Exemple #1
0
        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]);
        }
Exemple #2
0
        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]);
        }
Exemple #3
0
 /// <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);
 }
Exemple #5
0
        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();
 }
Exemple #8
0
        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 _));
        }
Exemple #15
0
 private void RegisterResources(DotvvmRouteTable routeTable)
 {
 }
Exemple #16
0
 private void RegisterRoutes(DotvvmRouteTable routeTable)
 {
     routeTable.Add("DefaultRoute", "", "Views/default.dothtml");
 }
Exemple #17
0
        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);
        }
Exemple #18
0
 /// <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();
 }