Difference between revisions of "User talk:Ama Omega/archive/lsl hacks"

From Second Life Wiki
Jump to: navigation, search
(Blanked the page)
 
Line 1: Line 1:
Here is my quick hack of your code to allow forms to be submitted using the javascript trick.
 
  
<lsl>
 
string url; // Our base http-in url
 
integer r;  // Used for uniqueness in PrimMedia urls
 
integer page;  // The page number.
 
 
show(string html)
 
{
 
    html += "<span " + (string)((++r) % 10) + "/>";
 
 
    llSetPrimMediaParams(0,                  // Side to display the media on.
 
            [PRIM_MEDIA_AUTO_PLAY,TRUE,      // Show this page immediately
 
            PRIM_MEDIA_CURRENT_URL,html,    // The url if they hit 'home'
 
            PRIM_MEDIA_HOME_URL,html,      // The url currently showing
 
            PRIM_MEDIA_HEIGHT_PIXELS,512,  // Height/width of media texture will be
 
            PRIM_MEDIA_WIDTH_PIXELS,512]);  //  rounded up to nearest power of 2.
 
}
 
 
// This creates a data: url that will render the output of the http-in url
 
// given.
 
string build_url(string url)
 
{
 
    return "data:text/html,"
 
        + llEscapeURL("<html><head><script src='" + url
 
        + "' type='text/javascript'></script></head><body onload='init()'></body></html>");
 
}
 
 
// This wraps the html you want to display so that it will be shown from links
 
// made with build_url
 
string build_response(string body)
 
{
 
    return "function init() {document.getElementsByTagName('body')[0].innerHTML='" + body + "';}";
 
}
 
 
 
string replace_all(string src, string target, string replace)
 
{
 
    return llDumpList2String(llParseString2List(src,[target],[]),replace);
 
}
 
 
string get_query(key id, string name)
 
{
 
    string query = llGetHTTPHeader(id,"x-query-string");
 
    query = replace_all(query,"+"," ");
 
    query = llUnescapeURL(query);
 
    list q = llParseString2List(query,["=","&",";"],[]);
 
    integer i = llListFindList(q,[name]);
 
    if (i != -1)
 
    {
 
        return llList2String(q,i+1);
 
    }
 
 
    return "";
 
}
 
 
 
default
 
{
 
    state_entry()
 
    {
 
        llRequestURL();
 
        llOwnerSay("Ready");
 
    }
 
 
    http_request(key id, string method, string body)
 
    {
 
        if (method == URL_REQUEST_GRANTED)
 
        {
 
            url = body + "/";
 
 
            show(build_url(url + "page" + (string)(page)));
 
        }
 
        else if (method == "GET")
 
        {
 
            //Check for submited form value here
 
            string float_text=get_query(id,"text");
 
            if (float_text!="")
 
            {               
 
                llSetText(float_text,<1,1,0>,1);
 
                show(build_url(url + "page" + (string)(page)));
 
                llHTTPResponse(id,200,"Loading...");
 
                return;
 
            }     
 
           
 
            string path = llGetHTTPHeader(id,"x-path-info");
 
            string content = "<h1>path: " + path + "</h1>";
 
            page = (integer)llGetSubString(path,5,5);
 
            if (page > 0) content += "<a href=\"" + build_url(url + "page" + (string)(page - 1)) + "\">Previous</a> ";
 
            if (page < 9) content += "<a href=\"" + build_url(url + "page" + (string)(page + 1)) + "\">Next</a><br>";
 
            integer k;
 
            for(;k<10;++k)
 
            {
 
                if (k == page)
 
                    content += "<br>Page " + (string)k;
 
                else
 
                    content += "<br><a href=\"" + build_url(url + "page" + (string)(k)) + "\">Page " + (string)k + "</a>";
 
            }
 
            content += "<h1><form action=\""+url+"\" method=\"GET\">Floating Text:<input type=\"text\" name=\"text\"><br><input type=\"submit\" value=\"Set\"></form></h1>";
 
            content += "<br><br>This page is " + (string)(llStringLength(build_response(content)) + 37) + " bytes long.";
 
           
 
           
 
           
 
               
 
           
 
            llHTTPResponse(id,200,build_response(content));
 
           
 
           
 
        }
 
    }
 
}
 
</lsl>
 
 
In regards to needing to use llEscapeURL.
 
 
There are specific characters that must be encoded when included in a URL.  llEscapeURL encodes MORE than what is needed.
 
 
Specifically llEscapeURL only leaves [0-9a-zA-Z] as not encoded.
 
 
Other characters can be left not encoded as well - $-_.+!*'(),
 
 
See the following link for more information.
 
 
[http://www.blooberry.com/indexdot/html/topics/urlencoding.htm URL Encoding]
 
 
 
[[User:Thraxis Epsilon|Thraxis Epsilon]] 03:22, 31 August 2010 (UTC)
 

Latest revision as of 09:12, 6 May 2011