You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Udo Schnurpfeil (JIRA)" <de...@myfaces.apache.org> on 2014/04/24 16:11:18 UTC

[jira] [Commented] (TOBAGO-1388) Wandering popup

    [ https://issues.apache.org/jira/browse/TOBAGO-1388?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13979759#comment-13979759 ] 

Udo Schnurpfeil commented on TOBAGO-1388:
-----------------------------------------

It seems to use position() instead of offset() resolves the problem. I've commited the change to the trunk.

> Wandering popup
> ---------------
>
>                 Key: TOBAGO-1388
>                 URL: https://issues.apache.org/jira/browse/TOBAGO-1388
>             Project: MyFaces Tobago
>          Issue Type: Bug
>    Affects Versions: 2.0.0-beta-1
>         Environment: Custom Theme
>            Reporter: Bernhard Stadler
>            Assignee: Udo Schnurpfeil
>         Attachments: PopupTestModel.java, popuptabletest.xhtml
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> I have a tc:page containing a tc:popup with a tc:sheet inside. For the sheet, paging is enabled. I'll attach an example.
> Every time the page is changed, the popup changes its position for some amount. 
> We have a custom theme and I was able to isolate the following definitions in our tobago.css file which lay open the problem:
> {code}
> .tobago-page {
>     border: 1px solid #EEEEEE;
>     width: 90%;
>     height: 99%;
>     // ...
> }
> {code}
> Each of these lines alone causes some amount of popup movement. Removing all of them makes the problem disappear.
> I also was able to isolate the JavaScript code where the actual repositioning happens: tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-utils.js Tobago.Utils.keepElementInVisibleArea line 98f (SVN trunk):
> {code}
> /**
>  * fix position, when the element it is outside of the current page
>  * @param elements is an jQuery Array of elements to be fixed.
>  */
> Tobago.Utils.keepElementInVisibleArea = function(elements) {
>   elements.each(function() {
>     var element = jQuery(this);
>     var page = jQuery(".tobago-page-content:first");
>     var left = element.offset().left;
>     var top = element.offset().top;
>     // fix menu position, when it is outside of the current page
>     left = Math.max(0, Math.min(left, page.outerWidth() - element.outerWidth()));
>     top = Math.max(0, Math.min(top, page.outerHeight() - element.outerHeight()));
>     element.css('left', left);
>     element.css('top', top);
>   });
> };
> {code}
> The "left" and "top" variables are not changed by the max/min assignment, but because of (both!) the border and the changed width of the tobago-page class, element.offset().left and element.offset().top seem to return a different value than actually needed. Even the following code causes the same behavior:
> {code}
> Tobago.Utils.keepElementInVisibleArea = function(elements) {
>   elements.each(function() {
>     var element = jQuery(this);
>     element.css('left', element.offset().left);
>     element.css('top', element.offset().top);
>   });
> };
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)