You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Armin Bauer <ar...@amiando.com> on 2009/03/12 00:28:42 UTC

wicket <-> opensocial integration (with example code)

Hi everyone,

we are currently working on an opensocial application based on wicket. 
Currently it is not possible to use the ajax functionality of wicket in 
an opensocial app.

opensocial is based on iframes which run your html / js in a seperate 
domain. If you build a widget for myspace.com for example, your html 
will run in msappspace.com which will prevent ajax call due to cross 
domain browser security. Luckily there is a opensocial method 
"gadgets.io.makeRequest" to pull xml content from your backend which is 
proxied through the opensocial container and basically works like an 
ajax request.

so i created a bridge which replaces the XHR of wicket-ajax.js with an 
implementation based on makeRequest. Without further ado:

<script type="text/javascript">

Wicket.Ajax.createTransport = function() {
    return {

        open: function(method, url, async) {
            this.url = url;
        },

        setRequestHeader: function(key, value) {

        },
       
        send: function(body) {
            var req_params = new Object();
            req_params[gadgets.io.RequestParameters.CONTENT_TYPE] = 
gadgets.io.ContentType.TEXT;
            var req = gadgets.io.makeRequest("http://your.server.com" + 
this.url + "&" + body, this.callback.bind(this), req_params);
        },
       
        callback: function(data) {
            this.responseText = data.text;
            this.status = 200;
            this.readyState = 4;
            this.onreadystatechange();
        },
       
        getResponseHeader: function(key) {
            return null;
        },
       
        abort: function() {
       
        }
   
    };
}

</script>

By including this script below your wicket-ajax script in the opensocial 
app you can use finally use ajax functionality directly on the canvas. 
It should work completely transparent so no changes in your wicket code 
should be required. Developing / porting wicket code to opensocial apps 
should be a lot easier now :)

Note that this example does not support error handling, headers, 
aborting and GET request also do not work completely. Adding this 
functionality should be easy however. Feel free to use / modify / 
publish the code as you like.

Best Regards,
Armin

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: wicket <-> opensocial integration (with example code)

Posted by Martin Funk <ma...@googlemail.com>.
I'd even ask for one step further.
How about creating some quickstart with this and add it to wicketstuff.
Not quite sure, maybe this <script> could be turned into a reusable  
HeaderContributor.

mf
Am 12.03.2009 um 03:23 schrieb Igor Vaynberg:

> Armin, maybe you should put this on our wiki page. threads like this
> tend to get lost easily in all the traffic.
>
> -igor
>
> On Wed, Mar 11, 2009 at 4:28 PM, Armin Bauer  
> <ar...@amiando.com> wrote:
>> Hi everyone,
>>
>> we are currently working on an opensocial application based on  
>> wicket.
>> Currently it is not possible to use the ajax functionality of  
>> wicket in an
>> opensocial app.
>>
>> opensocial is based on iframes which run your html / js in a seperate
>> domain. If you build a widget for myspace.com for example, your  
>> html will
>> run in msappspace.com which will prevent ajax call due to cross  
>> domain
>> browser security. Luckily there is a opensocial method
>> "gadgets.io.makeRequest" to pull xml content from your backend  
>> which is
>> proxied through the opensocial container and basically works like  
>> an ajax
>> request.
>>
>> so i created a bridge which replaces the XHR of wicket-ajax.js with  
>> an
>> implementation based on makeRequest. Without further ado:
>>
>> <script type="text/javascript">
>>
>> Wicket.Ajax.createTransport = function() {
>>   return {
>>
>>       open: function(method, url, async) {
>>           this.url = url;
>>       },
>>
>>       setRequestHeader: function(key, value) {
>>
>>       },
>>             send: function(body) {
>>           var req_params = new Object();
>>           req_params[gadgets.io.RequestParameters.CONTENT_TYPE] =
>> gadgets.io.ContentType.TEXT;
>>           var req = gadgets.io.makeRequest("http://your.server.com" +
>> this.url + "&" + body, this.callback.bind(this), req_params);
>>       },
>>             callback: function(data) {
>>           this.responseText = data.text;
>>           this.status = 200;
>>           this.readyState = 4;
>>           this.onreadystatechange();
>>       },
>>             getResponseHeader: function(key) {
>>           return null;
>>       },
>>             abort: function() {
>>             }
>>     };
>> }
>>
>> </script>
>>
>> By including this script below your wicket-ajax script in the  
>> opensocial app
>> you can use finally use ajax functionality directly on the canvas.  
>> It should
>> work completely transparent so no changes in your wicket code  
>> should be
>> required. Developing / porting wicket code to opensocial apps  
>> should be a
>> lot easier now :)
>>
>> Note that this example does not support error handling, headers,  
>> aborting
>> and GET request also do not work completely. Adding this  
>> functionality
>> should be easy however. Feel free to use / modify / publish the  
>> code as you
>> like.
>>
>> Best Regards,
>> Armin
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: wicket <-> opensocial integration (with example code)

Posted by Igor Vaynberg <ig...@gmail.com>.
Armin, maybe you should put this on our wiki page. threads like this
tend to get lost easily in all the traffic.

-igor

On Wed, Mar 11, 2009 at 4:28 PM, Armin Bauer <ar...@amiando.com> wrote:
> Hi everyone,
>
> we are currently working on an opensocial application based on wicket.
> Currently it is not possible to use the ajax functionality of wicket in an
> opensocial app.
>
> opensocial is based on iframes which run your html / js in a seperate
> domain. If you build a widget for myspace.com for example, your html will
> run in msappspace.com which will prevent ajax call due to cross domain
> browser security. Luckily there is a opensocial method
> "gadgets.io.makeRequest" to pull xml content from your backend which is
> proxied through the opensocial container and basically works like an ajax
> request.
>
> so i created a bridge which replaces the XHR of wicket-ajax.js with an
> implementation based on makeRequest. Without further ado:
>
> <script type="text/javascript">
>
> Wicket.Ajax.createTransport = function() {
>   return {
>
>       open: function(method, url, async) {
>           this.url = url;
>       },
>
>       setRequestHeader: function(key, value) {
>
>       },
>             send: function(body) {
>           var req_params = new Object();
>           req_params[gadgets.io.RequestParameters.CONTENT_TYPE] =
> gadgets.io.ContentType.TEXT;
>           var req = gadgets.io.makeRequest("http://your.server.com" +
> this.url + "&" + body, this.callback.bind(this), req_params);
>       },
>             callback: function(data) {
>           this.responseText = data.text;
>           this.status = 200;
>           this.readyState = 4;
>           this.onreadystatechange();
>       },
>             getResponseHeader: function(key) {
>           return null;
>       },
>             abort: function() {
>             }
>     };
> }
>
> </script>
>
> By including this script below your wicket-ajax script in the opensocial app
> you can use finally use ajax functionality directly on the canvas. It should
> work completely transparent so no changes in your wicket code should be
> required. Developing / porting wicket code to opensocial apps should be a
> lot easier now :)
>
> Note that this example does not support error handling, headers, aborting
> and GET request also do not work completely. Adding this functionality
> should be easy however. Feel free to use / modify / publish the code as you
> like.
>
> Best Regards,
> Armin
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org