I'm pretty sure that you need an entry point to compile a module. My abstract method approach should do it for you.
The "obfuscated" code is just javascript which I explained to you how to load. As for the drag and drop, just search up drag & drop on GWT - I'm pretty sure there's support for it. On Fri, Mar 13, 2009 at 12:38 AM, Rosh PR <[email protected]> wrote: > Hi Matías & Vitali > You are right about the Pointers > a) Know what plugins exists, a registry of plugins > b) Attach them into a panel, listen events and useful stuff > > We have exactly followed the same approach as you have mentioned for > installing the > plugin into a directory & setting up a file with the list of plugins > installed. > > But some of the issues I'm facing are > * getting to compile a plugin without any entrypoint to Javascript. > * Then the second biggest issue is getting the obfuscated code loaded > by the framework. > * Even if i manage to load it using some of the options you have > mentioned, The plugins should be able to interact > be able to interact between them selfs like drag an object from one > plugin and drop it in to another. > > Are totally unaware of most of options mentioned by Vitali. I shall give it > a try. If you guys have any thing more > solid and you feel it will work, Let me know about it. > > I think GWt should be coming up with some way we can load there Obfuscated > code dynamically. > > Thanks a lot guys. > > > On Fri, Mar 13, 2009 at 1:00 AM, Vitali Lovich <[email protected]> wrote: > >> Oh, and the RootPanel way of dynamically adding the plugin's javascript >> will probably only work in onModuleLoad. The DOM approach I gave should >> work at any time (i.e. as a response to user action). >> >> >> On Thu, Mar 12, 2009 at 3:21 PM, Vitali Lovich <[email protected]> wrote: >> >>> Uggh - sorry. Gmail decided to send the message for me. I've completed >>> the class below. >>> >>> Anyways, plugins would extend PluginEntry. Again, your GWT would be >>> reponsible for actually injecting the plugin javascript into your page. Not >>> sure what the GWT-preferred way would be, but in theory (I haven't tried >>> this out), you might be able to do a RootPanel.get().add(new HTML("<script >>> src='plugin/to/load'/>")), although I'd test it first (I highly doubt this >>> would work). >>> >>> A more explicit approach might be: >>> >>> Document dom = Document.get(); >>> Element head = dom.getElementsByTagName("head").getItem(0); >>> Element pluginScript = dom.createElement("script"); >>> pluginScript.setPropertyString("src", "plugin.js"); >>> pluginScript.setPropertyString("type", "text/javascript"); >>> Document.appendChild(head, pluginScript); >>> >>> This should work (assuming the browser supports loading scripts added >>> dynamically to the head element). I'd recommend testing this on several >>> browsers - I'm not sure which support it (although I suspect all of the >>> major ones). >>> >>> Good luck. >>> >>> On Thu, Mar 12, 2009 at 3:03 PM, Vitali Lovich <[email protected]>wrote: >>> >>>> Well, one thing you can do is have the EntryPoint, and just tell plugin >>>> developers that they have to attach to some particular div element in a >>>> particular way, as opposed to the traditional root (i.e. >>>> RootPanel.get("plugin-name-div")). >>>> >>>> Then the user can request certain plugins to be added in which your GWT >>>> code should create the div's for those plugins and load their scripts. >>>> >>>> Hope this helps you get started. Also, I would recommend staying away >>>> from JSNI if you're not doing something that is absolutely not supported >>>> within the GWT framework. >>>> >>>> Just as an extension to the Java approach below, I would prefer >>>> something like: >>>> >>>> public abstract class PluginEntry implements EntryPoint >>>> { >>>> String name; >>>> >>>> publc PluginEntry(String pluginName) >>>> { >>>> name = pluginName; >>>> } >>>> >>>> public final void onModuleEntry() >>>> { >>> >>> RootPanel pluginPanel = RootPanel.get("plugins-location"); >>> >>>> pluginPanel.add(new HTML("<div id='" + name + "'></div>")); >>> >>> onPluginEntry(RootPanel.get(name)); >>> >>>> } >>>> >>>> protected abstract void onPluginEntry(RootPanel pluginPanel); >>> >>> } >>>> >>>> On Thu, Mar 12, 2009 at 2:13 PM, Matías Costa <[email protected]>wrote: >>>> >>>>> On Thu, Mar 12, 2009 at 5:40 PM, Rosh PR <[email protected]> wrote: >>>>> >>>>>> One of the problems I'm facing over here is how will i compile a >>>>>> small set of gwt code with out any EntryPoint and use the >>>>>> generated *javascript* from the framework. I know we can compile >>>>>> without the Entrypoint but the main problem I'm facing is compiling >>>>>> code to javascript instead of java classes and loading it to the >>>>>> framework which will have to use these JS and display the plugin >>>>>> widget on the framework console on runtime. >>>>>> >>>>> >>>>> Interesting problem. >>>>> >>>>> This is going to need some kind of infraestructure and policy. I am >>>>> just thinking out loud waiting more experienced people point problems and >>>>> what can work. To start you need two things: >>>>> >>>>> a) Know what plugins exists, a registry of plugins >>>>> b) Attach them into a panel, listen events and useful stuff >>>>> >>>>> To install the plugins you can drop them in folder. To know what exists >>>>> you can do it manually, setting up a file and fetching it from the client >>>>> side. To do it automatically you can do it server side and >>>>> rpc-serialize'it >>>>> to client side. >>>>> >>>>> To load them the main problem is obfuscated code. I imagine you can't >>>>> mix up source comming from different optimizer executions. Let's suposse >>>>> we >>>>> can. Then if we know the plugin main object name, we can construct a jsni >>>>> method to forge a call to the pluing initializer function, with the panel >>>>> id >>>>> to be attached. >>>>> >>>>> native void initPlugin(String objectName, String panelId) /*-{ >>>>> var method = "@"+objectName+"::doInit(Ljava/lang/String;)"; >>>>> eval( method+"('"+panelId+"');" ); >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> }-*/; >>>>> >>>>> That should give to the plugin the ability to put itself into the panel >>>>> and call whatever container hooks needs. >>>>> >>>>> Another way is doing plugin static iniatilazation self injection: >>>>> >>>>> class CoolPlugin extends Plugin { >>>>> static { >>>>> Application.staticSomething.register(new CoolPlugin()); >>>>> } >>>>> >>>>> So the application can take further actions... >>>>> >>>>> >>>>> >>>>> >>>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---
