1. Finally created 24-25 sprint, is a bit full compared to previous but my time 
estimates might be a little on the high side. We'll see.

2. I just realized I hadn't explained how the iframe removal stuff works, might 
be interesting so you can understand how things interact. Code is in 
openerp.base.js, not big (60 lines) and concepts are easy but might be a bit 
dense.

Let's take the two parts:
* Forms
Looks out for "onsubmit" events on form elements *unless form has a target 
attribute* [1], and when find one submit via xhr (using jquery-form plugin so 
it also works for e.g. file uploads) and load response in #appContent div. This 
is why to submit form via javascript after modification use 
jQuery(form).submit() so it triggers all events, not just `form.submit()` 
(alternatively, don't stop native submit event maybe)

* Links
Looks out for "onclic" on links, pretty similar to forms except ignores not 
just target but also if link has no `href` or if `href` starts with `#` or 
`javascript:` so it ignores links with only javascript handler[2]

A big difference from forms is that links call `openLink(string url, optional 
function afterLoad)` to do the opening. if no #appContent, openLink uses 
window.location.assign(), if #appContent loads content via xhr and then calls 
afterLoad().

If you want to open URLs in app content area from javascript, use openLink (not 
e.g. window.location.href = url). If you want to popup, in HTML best is link 
with href and right target (e.g. _blank), in javascript 
openobject.tools.openWindow is still available.

3. Might have noted that now when clicking on links and stuff waitbox sometimes 
appears (is when takes too long). On that front, expanded openerp.ui.WaitBox 
API a bit:
* Waitbox now available everywhere, can create one where you want/need
* If want to display waitbox only if some event takes too long (common), use 
method `WaitBox.showAfter(milliseconds delay)`, creates internal timer to call 
show(), can be called repeatedly on same waitbox (later invocation will cancel 
new one, so if call 3 times in a row only last will be used)
* clearTimeout to clear timeout set by showAfter, should *not* be used because
* hide() hides the waitbox if it is displayed, and cancels waitbox timer (from 
showAfter) if there is one

So use case is:

    var waitBox = openerp.ui.WaitBox();
    waitBox.showAfter(2000); // use named constant for clarity here, magic 
numbers are bad
    startOperationWhichCanTakeLongTimeAndTakesCallbackForEnd(function () {
        waitBox.hide();
    });

that way if operation is actually short never displays waitbox, otherwise 
erases it when operation is done. In fact is almost exactly what is done with 
form xhr:

    waitBox.showAfter(FORM_WAIT_NO_ACTIVITY);
    form.ajaxSubmit({
        complete: function (xhr) {
            app.html(xhr.responseText);
            waitBox.hide();
        }
    });

That should probably be in some documentation for development of web client, 
along with a bunch of other stuff...

Anyway if you have any question about that, or sprint, don't hesitate asking or 
if you have anything to say, do also.

Xavier

[1] If form has target, idea is programmer does want result in e.g. a popup, or 
whole page, or whatever, so don't touch/xhr it
[2] Event handers like that in HTML and links with no actual URL are not very 
good though, we should try to improve so people can e.g. middle-click on links 
to open in new tab
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-web
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-web
More help   : https://help.launchpad.net/ListHelp

Reply via email to