ThinkGeo.com    |     Documentation    |     Premium Support

Limitations on popup in MarkerOverlay?

Hi,


I've built a custom marker class, as I wanted individual popups for each marker, and find that the "[#xxx#]" solution is too simple for my needs.


It works, but has some severe limitations.


Am I correct in assuming, that apostrophes (") are a no-go, and that HTML markup therefore must utilize "ticks" (') instead ?


I'm also trying to perform a postback, and have found working samples of this in other threads about the issue, but I'm having troubles in making it flexible.


E.g., I want to call a JavaScript function on my form with some strings arguments, embedded in an A html tag:



javascript:callMySub('This is the argument');

Unfortunately this is impossible, as the argument has spaces, and the ticks cannot be used.


Why is there such limitations on the markup I can use in marker popups ?


TIA


--


Lars



Hi Lars, 
  
 If you want to use individual popups, why not use the simplest way: 
  
 CloudPopup popup = new CloudPopup("id", new PointShape(0, 0), "contentHtml"); 
 Map1.Popups.Add(popup); 
  
 And the callMySub is our client side function or your own JS function? 
  
 Regards, 
  
 Don

Hi Don, 
  
 Simpler code, agreed, but does the parameter “contentHtml” allow for more flexible JavaScript than does my custom marker class ? I think not. 
  
 As I experience it, the limitation lies in the JavaScript being transmitted to the client, without proper escaping etc. If I include “forbidden” characters like “double ticks” ("), or "single ticks (’) around JS parameters, the JavaScript halts execution altogether. Not very stable. 
  
 I still (just) want to be able to call my own JavaScript function as shown above. 
  
 TIA 


 Lars,


 
Thanks for your questions! I'm not a web master in our team but for your question I think the contentHtml property of the popup object can meet your requirements completely, for your case, you think the parameter "contentHtml" cannot allow more flexible Javascript. Actually, it allows embed javascript, please see the following code snippet:
 
 protected void markerOverlay_Click(object sender, MarkerOverlayClickEventArgs e)
        {
            CloudPopup popup = new CloudPopup("Popup", clickPointShape, string.Empty, 150, 60);



            CygnusMap.Popups.Add(popup);



            popup.ContentHtml = GetPopupContent();
        }



        private string GetPopupContent()
        {
            string content;



            StringBuilder message = new StringBuilder();
            message.AppendFormat("Test");
            message.AppendFormat("{0}", string.Empty);
            message.AppendFormat("");
            message.AppendFormat("");
<span style="color: rgb(0, 0, 255); ">&#160; &#160; &#160; &#160; &#160; &#160; message.AppendFormat("<a href=javascript:" + ClientScript.GetPostBackEventReference(this.deleteMarker, clickPointShape.Id) + " &#160;id='btnHotel'>Delete</a> &#160; ", "");
            message.AppendFormat("");
            message.AppendFormat("");
<span style="color: rgb(0, 0, 255); ">&#160; &#160; &#160; &#160; &#160; &#160; message.AppendFormat("<a href=javascript:setQueryType('HOTEL');__doPostBack('spatialQuery','') &#160;id='btnHotel'>Hotel</a> &#160; ", "");
<span style="color: rgb(0, 0, 255); ">&#160; &#160; &#160; &#160; &#160; &#160; message.AppendFormat("<a href=javascript:setQueryType('HOSPITAL');__doPostBack('spatialQuery','') &#160;id='btnHospital'>Hospital</a> &#160; ", "");
            message.AppendFormat("");



            string messageInPopup = String.Format("{0}", message.ToString());



            content = messageInPopup;
            return content;
        }



  From the code snippet above, you can see it allows the flexible Javascript. That is just a code snippet and you can reference it and write your own Javascript code in the content HTML.


Thanks,


Scott,



Hi Scott, 
  
 Could you share the code again in code tags, it looks all mangled up, making it difficult to read :-S 
  
 Or are all the   html entities there on purpose to circumvent the problematic parsing ? 
  
 TIA 


Larse,


I cannot put the code in the code tag, it would cut the js code. I attached the sample code as txt file to you,


Thanks,


Scott,



002_001_sample111.txt (1.8 KB)

Hi Scott,


I think your code illustrates my point, as the A  tags in the code are scarecely valid html.


If you look at the "href" attribute, your code only works if no spaces are present in the complete attribute value, including the JS function arguments.


(code sample attached)


Is this not correct ? Is this not a limitation ?


 



mapsuite_js_problem.txt (703 Bytes)

Lars,


 
I tried the js parameter with spaces and it didn't work as expected, I think it is a limitation of the web edition, but I want to know why you always want to use spaces for the js parameter?  That's not a bug for the web edition and it is a good enhancement for us,  if you think that is a good addition to Map Suite, please feel free to suggest it on our enhancement tracker at:  
 
helpdesk.thinkgeo.com/EnhancementTracker
 
and see if the Map Suite community will give it any votes.
 
Thanks,
 
Scott,