Exemple #1
0
 public static IHtmlString Terratype(this HtmlHelper htmlHelper, Models.Model map)
 {
     return(htmlHelper.Terratype(new Options()
     {
         MapSetId = Counter,
         Height = DefaultHeight
     }, map, null));
 }
Exemple #2
0
 public static IHtmlString Terratype(this HtmlHelper htmlHelper, Models.Model map, params Func <object, object>[] label)
 {
     return(htmlHelper.Terratype(new Options()
     {
         MapSetId = Counter,
         Height = DefaultHeight
     }, map, label));
 }
Exemple #3
0
        public static IHtmlString Terratype(this HtmlHelper htmlHelper, Options options, Models.Model map, params Func <object, object>[] label)
        {
            if (options == null && map == null)
            {
                //  Nothing to do, as no map or options are present
                return(new HtmlString(""));
            }

            if (map == null && options.Provider == null)
            {
                throw new ArgumentNullException("No map provider declared");
            }

            if (options == null)
            {
                options = new Options()
                {
                    MapSetId = Counter
                };
            }

            Models.Model merge = null;

            if (map == null)
            {
                merge = new Models.Model()
                {
                    Provider = options.Provider,
                    Position = options.Position,
                    Zoom     = (options.Zoom != null) ? (int)options.Zoom : 0,
                    Height   = (options.Height != null) ? (int)options.Height : DefaultHeight,
                    Icon     = options.Icon,
                };
            }
            else
            {
                merge = new Models.Model()
                {
                    Provider = map.Provider,
                    Position = map.Position,
                    Zoom     = map.Zoom,
                    Icon     = map.Icon,
                    Height   = map.Height
                };
                if (options.Provider != null)
                {
                    //  Merge providers, with options taking precedents
                    var mergeJson = JObject.FromObject(merge.Provider);
                    mergeJson.Merge(JObject.FromObject(options.Provider), new JsonMergeSettings {
                        MergeArrayHandling = MergeArrayHandling.Replace
                    });
                    var providerType = (options.Provider is Models.Provider) ? map.Provider.GetType() : options.Provider.GetType();
                    merge.Provider = (Models.Provider)mergeJson.ToObject(providerType);
                }
                if (options.Zoom != null)
                {
                    merge.Zoom = (int)options.Zoom;
                }
                if (options.Height != null)
                {
                    merge.Height = (int)options.Height;
                }
                if (options.Icon != null)
                {
                    merge.Icon = options.Icon;
                }
                if (options.Position != null)
                {
                    merge.Position = options.Position;
                }
            }

            var builder = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);

            using (var writer = new HtmlTextWriter(builder))
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Class, nameof(Terratype));
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                var hasLabel = map != null && (label != null || (map.Label != null && map.Label.HasContent));
                var labelId  = (hasLabel) ? nameof(Terratype) + Guid.NewGuid().ToString() : null;

                const string addScriptOnce = "9b5a5783-242f-4f75-b31f-d506dcf22bf9";
                if (!HttpContext.Current.Items.Contains(addScriptOnce))
                {
                    HttpContext.Current.Items.Add(addScriptOnce, true);
#if DEBUG
                    writer.AddAttribute(HtmlTextWriterAttribute.Src, UrlPath("scripts/terratype.renderer.js"));
#else
                    writer.AddAttribute(HtmlTextWriterAttribute.Src, UrlPath("scripts/terratype.renderer.min.js"));
#endif
                    //writer.AddAttribute("defer", "");
                    writer.RenderBeginTag(HtmlTextWriterTag.Script);
                    writer.RenderEndTag();
                }
                var guid = Guid.NewGuid();
                merge.Provider.Render(guid, writer, options.MapSetId ?? Counter, merge, labelId, merge.Height, options.Language, options.DomMonitorType,
                                      options.AutoShowLabel, options.AutoRecenterAfterRefresh, options.AutoFit, options.Tag);
                if (hasLabel)
                {
                    writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    writer.AddAttribute(HtmlTextWriterAttribute.Id, labelId);
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    if (label != null)
                    {
                        foreach (var value in label)
                        {
                            writer.Write(value.DynamicInvoke(htmlHelper.ViewContext));
                        }
                    }
                    else
                    {
                        map.Label.Render(guid, writer, map);
                    }

                    writer.RenderEndTag();
                    writer.RenderEndTag();
                }

                writer.RenderEndTag();
            }
            return(new HtmlString(builder.ToString()));
        }
Exemple #4
0
 public static IHtmlString Terratype(this HtmlHelper <RenderModel> htmlHelper, Options options, Models.Model map, params Func <object, object>[] label)
 {
     return((htmlHelper as HtmlHelper).Terratype(options, map, label));
 }
Exemple #5
0
 public static IHtmlString Terratype(this HtmlHelper <RenderModel> htmlHelper, Options options, Models.Model map)
 {
     return((htmlHelper as HtmlHelper).Terratype(options, map, null));
 }
Exemple #6
0
 public static IHtmlString Terratype(this HtmlHelper htmlHelper, Options options, Models.Model map)
 {
     return(htmlHelper.Terratype(options, map, null));
 }
Exemple #7
0
        public void BingModel_ConvertToJsonAndBack_ShouldBeEqual()
        {
            foreach (var culture in Cultures)
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);

                var icon = new Terratype.Models.Icon()
                {
                    Id   = "test",
                    Url  = new Uri("http://mydomain.com/myfile.jpg"),
                    Size = new Terratype.Models.Icon.SizeDefinition()
                    {
                        Width  = 50,
                        Height = 66
                    },
                    Anchor = new Terratype.Models.Icon.AnchorDefinition()
                    {
                        Vertical   = 25,
                        Horizontal = 33
                    }
                };

                var provider = new Terratype.Providers.BingMapsV8()
                {
                    Version  = "release",
                    ApiKey   = "abcdefghhijklmnopqrstuvwxyz",
                    Language = "en-gb",
                    Search   = new Terratype.Providers.BingMapsV8.SearchDefinition()
                    {
                        Enable = Terratype.Providers.BingMapsV8.SearchDefinition.SearchStatus.Enable
                    },
                    Variety = new Terratype.Providers.BingMapsV8.VarietyDefinition()
                    {
                        Basic      = false,
                        Satellite  = true,
                        StreetView = true
                    },
                    Scale = new Terratype.Providers.BingMapsV8.Control()
                    {
                        Enable = false
                    },
                    ZoomControl = new Terratype.Providers.BingMapsV8.Control()
                    {
                        Enable = true
                    },
                    Traffic = new Terratype.Providers.BingMapsV8.TrafficDefinition()
                    {
                        Enable = true,
                        Legend = true
                    },
                    ShowLabels = false
                };

                var model = new Terratype.Models.Model()
                {
                    Zoom  = rnd.Next(19) + 1,
                    Label = new Terratype.Labels.Standard()
                    {
                        Content = new HtmlString("<p>This is some text<p>")
                    },
                    Lookup   = "Paris, France",
                    Position = new Terratype.CoordinateSystems.Wgs84(RandomLatLng()),
                };

                //  Use private set to add properties to class
                PrivateObject accessor = new PrivateObject(model);
                accessor.SetProperty(nameof(Terratype.Models.Model.Provider), provider);
                accessor.SetProperty(nameof(Terratype.Models.Model.Icon), icon);

                var json = JsonConvert.SerializeObject(model);

                var model2 = new Terratype.Models.Model(json);

                model.ShouldBeEquivalentTo <Terratype.Models.Model>(model2);

                var json2 = JsonConvert.SerializeObject(model2);

                Assert.AreEqual(json, json2);
            }
        }
Exemple #8
0
        public void LeafletModel_ConvertToJsonAndBack_ShouldBeEqual()
        {
            foreach (var culture in Cultures)
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);

                var icon = new Terratype.Models.Icon()
                {
                    Id   = "test",
                    Url  = new Uri("http://mydomain.com/myfile.jpg"),
                    Size = new Terratype.Models.Icon.SizeDefinition()
                    {
                        Width  = 50,
                        Height = 66
                    },
                    Anchor = new Terratype.Models.Icon.AnchorDefinition()
                    {
                        Vertical   = 25,
                        Horizontal = 33
                    }
                };

                var provider = new Terratype.Providers.LeafletV1()
                {
                    MapSources = new Terratype.Providers.LeafletV1.MapSourceDefinition[] {
                        new Terratype.Providers.LeafletV1.MapSourceDefinition {
                            TileServer = new Terratype.Providers.LeafletV1.MapSourceDefinition.TileServerDefinition()
                            {
                                Id = "TileServerId1"
                            },
                            MinZoom = 0,
                            MaxZoom = 10
                        },
                        new Terratype.Providers.LeafletV1.MapSourceDefinition {
                            TileServer = new Terratype.Providers.LeafletV1.MapSourceDefinition.TileServerDefinition()
                            {
                                Id = "TileServerId2"
                            },
                            MinZoom = 11,
                            MaxZoom = 20,
                            Key     = "AAAABBBBCCCCDDDD"
                        }
                    },
                    ZoomControl = new Terratype.Providers.LeafletV1.ZoomControlDefinition()
                    {
                        Enable   = true,
                        Position = Terratype.Providers.LeafletV1.ControlPositions.BottomLeft
                    },
                };

                var model = new Terratype.Models.Model()
                {
                    Zoom  = rnd.Next(19) + 1,
                    Label = new Terratype.Labels.Standard()
                    {
                        Content = new HtmlString("<p>This is some text<p>")
                    },
                    Lookup   = "Paris, France",
                    Position = new Terratype.CoordinateSystems.Wgs84(RandomLatLng()),
                };

                //  Use private set to add properties to class
                PrivateObject accessor = new PrivateObject(model);
                accessor.SetProperty(nameof(Terratype.Models.Model.Provider), provider);
                accessor.SetProperty(nameof(Terratype.Models.Model.Icon), icon);

                var json = JsonConvert.SerializeObject(model);

                var model2 = new Terratype.Models.Model(json);

                model.ShouldBeEquivalentTo <Terratype.Models.Model>(model2);

                var json2 = JsonConvert.SerializeObject(model2);

                Assert.AreEqual(json, json2);
            }
        }
Exemple #9
0
        public void GMapsModel_ConvertToJsonAndBack_ShouldBeEqual()
        {
            foreach (var culture in Cultures)
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);

                var icon = new Terratype.Models.Icon()
                {
                    Id   = "test",
                    Url  = new Uri("http://mydomain.com/myfile.jpg"),
                    Size = new Terratype.Models.Icon.SizeDefinition()
                    {
                        Width  = 50,
                        Height = 66
                    },
                    Anchor = new Terratype.Models.Icon.AnchorDefinition()
                    {
                        Vertical   = 25,
                        Horizontal = 33
                    }
                };

                var provider = new Terratype.Providers.GoogleMapsV3()
                {
                    Variety = new Terratype.Providers.GoogleMapsV3.VarietyDefinition()
                    {
                        Selector = new Terratype.Providers.GoogleMapsV3.VarietyDefinition.SelectorDefinition()
                        {
                            Type     = Terratype.Providers.GoogleMapsV3.VarietyDefinition.SelectorType.Default,
                            Position = Terratype.Providers.GoogleMapsV3.ControlPositions.BottomRight
                        },
                        Basic     = true,
                        Satellite = false,
                        Terrain   = true
                    },
                    StreetView = new Terratype.Providers.GoogleMapsV3.Control()
                    {
                        Enable   = false,
                        Position = Terratype.Providers.GoogleMapsV3.ControlPositions.RightBottom
                    },
                    Fullscreen = new Terratype.Providers.GoogleMapsV3.Control()
                    {
                        Enable   = true,
                        Position = Terratype.Providers.GoogleMapsV3.ControlPositions.LeftCenter
                    },
                    Scale = new Terratype.Providers.GoogleMapsV3.Control()
                    {
                        Enable   = false,
                        Position = Terratype.Providers.GoogleMapsV3.ControlPositions.TopLeft
                    },
                    ZoomControl = new Terratype.Providers.GoogleMapsV3.Control()
                    {
                        Enable   = true,
                        Position = Terratype.Providers.GoogleMapsV3.ControlPositions.BottomLeft
                    },
                    Search = new Terratype.Providers.GoogleMapsV3.SearchDefinition()
                    {
                        Enable = Terratype.Providers.GoogleMapsV3.SearchDefinition.SearchStatus.Autocomplete,
                        Limit  = new Terratype.Providers.GoogleMapsV3.SearchDefinition.LimitDefinition()
                        {
                            Countries = new string[] { "France", "Germany", "Italy", "United Kingdom" }
                        }
                    }
                };
                PrivateObject providerAccessor = new PrivateObject(provider);
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.Version), "3");
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.ApiKey), "XXXAAABBBCC1234567890abcdefghijklmnopqrstuvwxyz");
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.ForceHttps), true);
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.Language), "en-gb");
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.PredefineStyling), "pretty");
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.ShowRoads), false);
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.ShowLandmarks), true);
                providerAccessor.SetProperty(nameof(Terratype.Providers.GoogleMapsV3.ShowLabels), false);


                var model = new Terratype.Models.Model()
                {
                    Zoom  = rnd.Next(19) + 1,
                    Label = new Terratype.Labels.Standard()
                    {
                        Content = new HtmlString("<p>This is some text<p>")
                    },
                    Lookup   = "Paris, France",
                    Position = new Terratype.CoordinateSystems.Wgs84(RandomLatLng()),
                };

                //  Use private set to add properties to class
                PrivateObject accessor = new PrivateObject(model);
                accessor.SetProperty(nameof(Terratype.Models.Model.Provider), provider);
                accessor.SetProperty(nameof(Terratype.Models.Model.Icon), icon);

                var json = JsonConvert.SerializeObject(model);

                var model2 = new Terratype.Models.Model(json);

                model.ShouldBeEquivalentTo <Terratype.Models.Model>(model2);

                var json2 = JsonConvert.SerializeObject(model2);

                Assert.AreEqual(json, json2);
            }
        }
Exemple #10
0
        public static IHtmlString Terratype(this HtmlHelper htmlHelper, Options options, Models.Model map, params Func <object, object>[] label)
        {
            if (options == null && map == null)
            {
                //  Nothing to do, as no map or options are present
                return(new HtmlString(""));
            }

            if (map == null && options.Provider == null)
            {
                throw new ArgumentNullException("No map provider declared");
            }

            if (options == null)
            {
                options = new Options()
                {
                    MapSetId = Counter,
                    Height   = DefaultHeight
                };
            }

            Models.Model merge = null;

            if (map == null)
            {
                merge = new Models.Model()
                {
                    Provider = options.Provider,
                    Position = options.Position
                };
                if (options.Zoom != null)
                {
                    merge.Zoom = (int)options.Zoom;
                }
            }
            else
            {
                merge = new Models.Model()
                {
                    Provider = map.Provider,
                    Position = map.Position,
                    Zoom     = map.Zoom,
                    Icon     = map.Icon
                };
                if (options.Provider != null)
                {
                    //  Merge providers, with options taking precedents
                    var mergeJson = JObject.FromObject(merge.Provider);
                    mergeJson.Merge(JObject.FromObject(options.Provider), new JsonMergeSettings {
                        MergeArrayHandling = MergeArrayHandling.Replace
                    });
                    merge.Provider = mergeJson.ToObject <Models.Provider>();
                }
            }

            var builder = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);

            using (var writer = new HtmlTextWriter(builder))
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Class, nameof(Terratype));
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                var labelId = nameof(Terratype) + Guid.NewGuid().ToString();
                merge.Provider.GetHtml(writer, options.MapSetId ?? Counter, merge, options.Height ?? DefaultHeight, options.Language, labelId);
                if (label != null)
                {
                    writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    writer.AddAttribute(HtmlTextWriterAttribute.Id, labelId);
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    foreach (var value in label)
                    {
                        writer.Write(value.DynamicInvoke(htmlHelper.ViewContext));
                    }
                    writer.RenderEndTag();
                    writer.RenderEndTag();
                }

                writer.RenderEndTag();
            }
            return(new HtmlString(builder.ToString()));
        }