HomeHelpTrac

Changeset 15931 for trunk


Ignore:
Timestamp:
01/26/12 19:46:52 (4 months ago)
Author:
Alexander Trofimov
Message:

Popup - fix when popup is bigger than window + window resizing fix

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/inc/classes/BxDolTemplate.php

    r15897 r15931  
    312312            'functions.js', 
    313313            'jquery.dolPopup.js', 
     314            'jquery.ui.position.min.js', 
    314315        )); 
    315316 
  • trunk/inc/js/jquery.dolPopup.js

    r15922 r15931  
    1212            closeOnOuterClick: true, 
    1313            closeElement: '.bx-popup-element-close', // link to element which will close popup 
    14             position: 'centered', // | 'centered-absolute' | 'absolute' | 'fixed' | event | element,             
     14            position: 'centered', // | 'absolute' | 'fixed' | event | element, 
    1515            fog: {color: '#fff', opacity: .7}, // {color, opacity}, 
    1616            pointer: false, // {el:(string_id|jquery_object), align: (left|right|center)}, 
     
    5252        } 
    5353         
     54        $(window).on('resize.popupFog', function () { 
     55            $('#bx-popup-fog').css({ 
     56                width: $(window).width(), 
     57                height: $(window).height() 
     58            }); 
     59        }); 
     60 
    5461        return this.each(function() { 
    5562            var $el = $(this); 
     
    136143                return false; 
    137144 
     145            $(window).off('resize.popupWindow'); 
     146            $(window).off('resize.popupPointer'); 
     147            $(window).off('resize.popupFog'); 
     148 
    138149            o.onBeforeHide(); 
    139150 
     
    182193                });  
    183194 
     195                $(window).on('resize.popupPointer', function() { 
     196                    $el.position({ 
     197                        of: ePointAt, 
     198                        my: o.pointer.align + ' top', 
     199                        at: o.pointer.align + ' bottom', 
     200                        collision: 'flip none', 
     201                        offset: parseInt(aOffset[0]) + ' ' + parseInt(aOffset[1]) 
     202                    }); 
     203                }); 
     204 
    184205            } else if (o.position == 'fixed' || o.position == 'absolute') { 
     206 
    185207                $el.css({ 
    186208                    position: o.position, 
     
    188210                    top: o.top 
    189211                }); 
     212 
    190213            } else if (o.position == 'centered') { 
    191                 $el.setToCenter(); 
    192  
    193                 // attach window resize event 
    194                 $(window).resize(function() { 
    195                     $el.setToCenter(); 
    196                 }); 
    197             } else if (o.position == 'centered-absolute') { 
    198                 $el.setToCenter('absolute'); 
    199  
    200                 // attach window resize event 
    201                 $(window).resize(function() { 
    202                     $el.setToCenter('absolute'); 
    203                 }); 
     214 
     215                $el.position({ 
     216                    of: window, 
     217                    my: 'center center', 
     218                    at: 'center center', 
     219                    collision: 'none none' 
     220                }); 
     221 
     222                // attach window resize event                 
     223                $(window).on('resize.popupWindow', function() { 
     224                    $el.position({ 
     225                        of: window, 
     226                        my: 'center center', 
     227                        at: 'center center', 
     228                        collision: 'none none' 
     229                    }); 
     230                }); 
     231 
    204232            } else if (typeof o.position == 'object') { 
    205                 if ( o.position.originalEvent && Event.prototype.isPrototypeOf(o.position.originalEvent) ) { 
    206                     // event 
    207                     var e = o.position.originalEvent ? o.position : $.event.fix(o.position); 
    208                     var pos = getPositionData($el[0], e); 
    209  
    210                     $el.css({ 
    211                         position: 'absolute', 
    212                         left: pos.posX, 
    213                         top: pos.posY 
    214                     }); 
    215                 } else { 
    216                     var $p = $(o.position); 
    217                     //if ( $p.length && Node.prototype.isPrototypeOf($p[0]) ) { 
    218                     if ($p.length) { 
    219                         // DOM Node 
    220  
    221                         var pos = getCorrectedPosition($el, $p); 
    222                         $el.css({ 
    223                             position: 'absolute', 
    224                             left: pos.left, 
    225                             top: pos.top 
    226                         }); 
    227                     } 
    228                 } 
     233 
     234                $el.position({ 
     235                    of: o.position, 
     236                    my: 'center top', 
     237                    at: 'center bottom', 
     238                    collision: 'flip flip' 
     239                }); 
     240 
    229241            } 
    230  
    231242        }); 
    232243    }; 
    233244 
    234     $.fn.setToCenter = function(position) { 
    235         return this.each(function() { 
    236             var $el = $(this); 
    237  
    238             var iTop = 0; 
    239             var iLeft = 0; 
    240             if(!$.browser.opera) { 
    241                 iTop = ($(window).height() - $el.height()) / 2; 
    242                 iLeft = ($(window).width()  - $el.width()) / 2; 
    243             } 
    244             else { 
    245                 iTop = (parseInt(window.innerHeight) - $el.height()) / 2; 
    246                 iLeft = ($(window).width()  - $el.width()) / 2; 
    247             } 
    248  
    249             iLeft = (iLeft > 0) ? iLeft : 0; 
    250             iTop  = (iTop  > 0) ? iTop  : 0; 
    251  
    252             $el.css({ 
    253                 position: position || 'fixed', 
    254                 left: iLeft, 
    255                 top:  iTop 
    256             }); 
    257         }); 
    258     }; 
    259  
    260245})(jQuery); 
    261246 
    262 function getCorrectedPosition(el, p) { 
    263     var $el = $(el); // positioned element 
    264     var $p = $(p);   // positioning element 
    265  
    266     var pos = $p.offset(); 
    267     var elSize = { 
    268         width:  $el.width(), 
    269         height: $el.height() 
    270     }; 
    271  
    272     var elWinPos = { 
    273         left: pos.left - $(window).scrollLeft(), 
    274         top:  pos.top  - $(window).scrollTop() 
    275     }; 
    276     var winSize = { 
    277         width:  $(window).width(), 
    278         height: $(window).height() - 30 
    279     }; 
    280  
    281  
    282     if ((elWinPos.left + elSize.width)  > winSize.width) 
    283         pos.left = pos.left - elSize.width + $p.width(); 
    284  
    285     if ((elWinPos.top + elSize.height) > winSize.height) 
    286         pos.top = pos.top - elSize.height + $p.height(); 
    287  
    288     return pos; 
    289 } 
  • trunk/samples/popup.php

    r15922 r15931  
    3030$oTemplate->setPageHeader ("Sample popup"); 
    3131$oTemplate->setPageContent ('page_main_code', PageCompMainCode()); 
    32 $oTemplate->addJs('jquery.dolPopup.js'); 
    33 $oTemplate->addJs('jquery.ui.position.min.js'); 
    3432$oTemplate->getPageCode(); 
    3533 
  • trunk/studio/classes/BxDolStudioTemplate.php

    r15739 r15931  
    6969        $this->addJs(array( 
    7070            'jquery.js', 
    71             'jquery.dolPopup.js' 
     71            'jquery.dolPopup.js', 
     72            'jquery.ui.position.min.js', 
    7273        )); 
    7374    } 
  • trunk/studio/templates/base/scripts/BxBaseStudioFunctions.php

    r15791 r15931  
    104104        $oTemplate->setPageParams(array( 
    105105           'css_name' => array('forms.css', 'login.css'), 
    106            'js_name' => array('jquery.form.js', 'jquery.dolPopup.js', 'login.js'), 
     106           'js_name' => array('jquery.form.js', 'jquery.dolPopup.js', 'jquery.ui.position.min.js', 'login.js'), 
    107107           'header' => _t('_adm_page_cpt_login'), 
    108108        )); 
  • trunk/templates/base/scripts/BxBaseFunctions.php

    r15925 r15931  
    713713 
    714714            if ($sMenu) { 
    715  
    716                 $this->_oTemplate->addJs('jquery.dolPopup.js'); 
    717                 $this->_oTemplate->addJs('jquery.ui.position.min.js'); 
    718  
    719715                $sId = 'bx-menu-db-' . time() . rand(0, PHP_INT_MAX); 
    720716                $sCode .= '<div id="' . $sId . '" style="display:none;">' . BxTemplFunctions::getInstance()->transBox('<div class="bx-def-padding bx-def-color-bg-block">' . $sMenu . '</div>') . '</div>'; 
Note: See TracChangeset for help on using the changeset viewer.