Changeset 65790 in spip-zone


Ignore:
Timestamp:
Sep 12, 2012, 7:50:11 AM (7 years ago)
Author:
cedric@…
Message:

Report de r65789 : mise a jour de la librairie colorbox

Location:
_core_/plugins/mediabox
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/mediabox/javascript/jquery.colorbox.js

    r49745 r65790  
    1 // ColorBox v1.3.17.1 - a full featured, light-weight, customizable lightbox based on jQuery 1.3+
    2 // Copyright (c) 2011 Jack Moore - jack@colorpowered.com
    3 // Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
     1// ColorBox v1.3.20.1 - jQuery lightbox plugin
     2// (c) 2011 Jack Moore - jacklmoore.com
     3// License: http://www.opensource.org/licenses/mit-license.php
    44// + minWidth&minHeight support
    55// + colorbox_class support
    66(function ($, document, window) {
    77        var
    8         // ColorBox Default Settings.   
    9         // See http://colorpowered.com/colorbox for details.
     8        // Default settings object.
     9        // See http://jacklmoore.com/colorbox for details.
    1010        defaults = {
    1111                transition: "elastic",
     
    3333                opacity: 0.9,
    3434                preloading: true,
     35
    3536                current: "image {current} of {total}",
    3637                previous: "previous",
    3738                next: "next",
    3839                close: "close",
     40                xhrError: "This content failed to load.",
     41                imgError: "This image failed to load.",
     42
    3943                open: false,
    4044                returnFocus: true,
     45                reposition: true,
    4146                loop: true,
    4247                slideshow: false,
     
    5055                onCleanup: false,
    5156                onClosed: false,
    52                 overlayClose: true,             
     57                overlayClose: true,
    5358                escKey: true,
    5459                arrowKey: true,
    55         top: false,
    56         bottom: false,
    57         left: false,
    58         right: false,
    59         fixed: false,
    60         data: false
     60                top: false,
     61                bottom: false,
     62                left: false,
     63                right: false,
     64                fixed: false,
     65                data: undefined
    6166        },
    6267       
     
    6570        colorbox_class = 'box_mediabox box_modalbox',
    6671        prefix = 'cbox',
     72        boxElement = prefix + 'Element',
    6773       
    68         // Events       
     74        // Events
    6975        event_open = prefix + '_open',
    7076        event_load = prefix + '_load',
     
    7581       
    7682        // Special Handling for IE
    77         isIE = $.browser.msie && !$.support.opacity, // Detects IE6,7,8.  IE9 supports opacity.  Feature detection alone gave a false positive on at least one phone browser and on some development versions of Chrome, hence the user-agent test.
    78         isIE6 = isIE && $.browser.version < 7,
     83        isIE = !$.support.opacity && !$.support.style, // IE7 & IE8
     84        isIE6 = isIE && !window.XMLHttpRequest, // IE6
    7985        event_ie6 = prefix + '_IE6',
    8086
     
    100106        $close,
    101107        $groupControls,
    102 
     108       
    103109        // Variables for cached values or use across multiple functions
    104         settings = {},
     110        settings,
    105111        interfaceHeight,
    106112        interfaceWidth,
     
    113119        active,
    114120        closing,
    115     handler,
    116     loadingTimer,
    117        
     121        loadingTimer,
    118122        publicMethod,
    119         boxElement = prefix + 'Element';
    120        
     123        div = "div",
     124        init;
     125
    121126        // ****************
    122127        // HELPER FUNCTIONS
    123128        // ****************
    124 
    125         // jQuery object generator to reduce code size
    126         function $div(id, cssText) {
    127                 var div = document.createElement('div');
     129       
     130        // Convience function for creating new jQuery objects
     131        function $tag(tag, id, css) {
     132                var element = document.createElement(tag);
     133
    128134                if (id) {
    129             div.id = prefix + id;
    130         }
    131                 div.style.cssText = cssText || '';
    132                 return $(div);
    133         }
    134 
    135         // Convert % values to pixels
     135                        element.id = prefix + id;
     136                }
     137
     138                if (css) {
     139                        element.style.cssText = css;
     140                }
     141
     142                return $(element);
     143        }
     144
     145        // Determine the next and previous members in a group.
     146        function getIndex(increment) {
     147                var
     148                max = $related.length,
     149                newIndex = (index + increment) % max;
     150               
     151                return (newIndex < 0) ? max + newIndex : newIndex;
     152        }
     153
     154        // Convert '%' and 'px' values to integers
    136155        function setSize(size, dimension) {
    137                 dimension = dimension === 'x' ? $window.width() : $window.height();
    138                 return (typeof size === 'string') ? Math.round((/%/.test(size) ? (dimension / 100) * parseInt(size, 10) : parseInt(size, 10))) : size;
     156                return Math.round((/%/.test(size) ? ((dimension === 'x' ? winWidth() : winHeight()) / 100) : 1) * parseInt(size, 10));
    139157        }
    140158       
     
    142160        // There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.
    143161        function isImage(url) {
    144                 return settings.photo || /\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i.test(url);
     162                return settings.photo || /\.(gif|png|jp(e|g|eg)|bmp|ico)((#|\?).*)?$/i.test(url);
    145163        }
    146164       
    147         // Assigns function results to their respective settings.  This allows functions to be used as values.
    148         function process(settings) {
    149                 for (var i in settings) {
    150                         if ($.isFunction(settings[i]) && i.substring(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
    151                             settings[i] = settings[i].call(element);
    152                         }
    153                 }
    154        
    155                 settings.rel = settings.rel || element.rel || 'nofollow';
     165        function winWidth() {
     166                // $(window).width() is incorrect for some mobile browsers, but
     167                // window.innerWidth is unsupported in IE8 and lower.
     168                return window.innerWidth || $window.width();
     169        }
     170
     171        function winHeight() {
     172                return window.innerHeight || $window.height();
     173        }
     174
     175        // Assigns function results to their respective properties
     176        function makeSettings() {
     177                var i,
     178                        data = $.data(element, colorbox);
     179               
     180                if (data == null) {
     181                        settings = $.extend({}, defaults);
     182                        if (console && console.log) {
     183                                console.log('Error: cboxElement missing settings object');
     184                        }
     185                } else {
     186                        settings = $.extend({}, data);
     187                }
     188               
     189                for (i in settings) {
     190                        if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
     191                                settings[i] = settings[i].call(element);
     192                        }
     193                }
     194               
     195                settings.rel = settings.rel || element.rel || $(element).data('rel') || 'nofollow';
    156196                settings.href = settings.href || $(element).attr('href');
    157197                settings.title = settings.title || element.title;
    158        
    159         if (typeof settings.href === "string") {
    160             settings.href = $.trim(settings.href);
    161         }
     198               
     199                if (typeof settings.href === "string") {
     200                        settings.href = $.trim(settings.href);
     201                }
    162202        }
    163203
    164204        function trigger(event, callback) {
     205                $.event.trigger(event);
    165206                if (callback) {
    166207                        callback.call(element);
    167208                }
    168                 $.event.trigger(event);
    169209        }
    170210
     
    185225                                        .unbind(click)
    186226                                        .bind(event_complete, function () {
    187                                                 if (index < $related.length - 1 || settings.loop) {
     227                                                if (settings.loop || $related[index + 1]) {
    188228                                                        timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
    189229                                                }
     
    202242                                        .text(settings.slideshowStart)
    203243                                        .unbind([event_complete, event_load, event_cleanup, click].join(' '))
    204                                         .one(click, start);
     244                                        .one(click, function () {
     245                                                publicMethod.next();
     246                                                start();
     247                                        });
    205248                                $box.removeClass(className + "on").addClass(className + "off");
    206249                        };
     
    212255                        }
    213256                } else {
    214             $box.removeClass(className + "off " + className + "on");
    215         }
    216         }
    217 
    218         function launch(elem) {
     257                        $box.removeClass(className + "off " + className + "on");
     258                }
     259        }
     260
     261        function launch(target) {
    219262                if (!closing) {
    220263                       
    221                         element = elem;
    222                        
    223                         process($.extend(settings, $.data(element, colorbox)));
     264                        element = target;
     265                       
     266                        makeSettings();
    224267                       
    225268                        $related = $(element);
     
    229272                        if (settings.rel !== 'nofollow') {
    230273                                $related = $('.' + boxElement).filter(function () {
    231                                         var relRelated = $.data(this, colorbox).rel || this.rel;
     274                                        var data = $.data(this, colorbox),
     275                                                relRelated;
     276
     277                                        if (data) {
     278                                                relRelated =  $(this).data('rel') || data.rel || this.rel;
     279                                        }
     280                                       
    232281                                        return (relRelated === settings.rel);
    233282                                });
     
    247296                               
    248297                                if (settings.returnFocus) {
    249                                         try {
    250                                                 element.blur();
    251                                                 $(element).one(event_closed, function () {
    252                                                         try {
    253                                                                 this.focus();
    254                                                         } catch (e) {
    255                                                                 // do nothing
    256                                                         }
    257                                                 });
    258                                         } catch (e) {
    259                                                 // do nothing
    260                                         }
     298                                        $(element).blur().one(event_closed, function () {
     299                                                $(this).focus();
     300                                        });
    261301                                }
    262302                               
     
    267307                                settings.w = setSize(settings.initialWidth, 'x');
    268308                                settings.h = setSize(settings.initialHeight, 'y');
    269                                 publicMethod.position(0);
     309                                publicMethod.position();
    270310                               
    271311                                if (isIE6) {
    272312                                        $window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () {
    273                                                 $overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});
     313                                                $overlay.css({width: winWidth(), height: winHeight(), top: $window.scrollTop(), left: $window.scrollLeft()});
    274314                                        }).trigger('resize.' + event_ie6);
    275315                                }
     
    285325                }
    286326        }
     327
     328        // ColorBox's markup needs to be added to the DOM prior to being called
     329        // so that the browser will go ahead and load the CSS background images.
     330        function appendHTML() {
     331                if (!$box && document.body) {
     332                        init = false;
     333
     334                        $window = $(window);
     335                        $box = $tag(div).attr({id: colorbox, 'class': (isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : '')+colorbox_class}).hide();
     336                        $overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide();
     337                        $loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic"));
     338                        $wrap = $tag(div, "Wrapper");
     339                        $content = $tag(div, "Content").append(
     340                                $loaded = $tag(div, "LoadedContent", 'width:0; height:0; overflow:hidden'),
     341                                $title = $tag(div, "Title"),
     342                                $current = $tag(div, "Current"),
     343                                $next = $tag(div, "Next"),
     344                                $prev = $tag(div, "Previous"),
     345                                $slideshow = $tag(div, "Slideshow").bind(event_open, slideshow),
     346                                $close = $tag(div, "Close")
     347                        );
     348                       
     349                        $wrap.append( // The 3x3 Grid that makes up ColorBox
     350                                $tag(div).append(
     351                                        $tag(div, "TopLeft"),
     352                                        $topBorder = $tag(div, "TopCenter"),
     353                                        $tag(div, "TopRight")
     354                                ),
     355                                $tag(div, false, 'clear:left').append(
     356                                        $leftBorder = $tag(div, "MiddleLeft"),
     357                                        $content,
     358                                        $rightBorder = $tag(div, "MiddleRight")
     359                                ),
     360                                $tag(div, false, 'clear:left').append(
     361                                        $tag(div, "BottomLeft"),
     362                                        $bottomBorder = $tag(div, "BottomCenter"),
     363                                        $tag(div, "BottomRight")
     364                                )
     365                        ).find('div div').css({'float': 'left'});
     366                       
     367                        $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
     368                       
     369                        $groupControls = $next.add($prev).add($current).add($slideshow);
     370
     371                        $(document.body).append($overlay, $box.append($wrap, $loadingBay));
     372                }
     373        }
     374
     375        // Add ColorBox's event bindings
     376        function addBindings() {
     377                if ($box) {
     378                        if (!init) {
     379                                init = true;
     380
     381                                // Cache values needed for size calculations
     382                                interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6
     383                                interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
     384                                loadedHeight = $loaded.outerHeight(true);
     385                                loadedWidth = $loaded.outerWidth(true);
     386                               
     387                                // Setting padding to remove the need to do size conversions during the animation step.
     388                                $box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth});
     389
     390                                // Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
     391                                $next.click(function () {
     392                                        publicMethod.next();
     393                                });
     394                                $prev.click(function () {
     395                                        publicMethod.prev();
     396                                });
     397                                $close.click(function () {
     398                                        publicMethod.close();
     399                                });
     400                                $overlay.click(function () {
     401                                        if (settings.overlayClose) {
     402                                                publicMethod.close();
     403                                        }
     404                                });
     405                               
     406                                // Key Bindings
     407                                $(document).bind('keydown.' + prefix, function (e) {
     408                                        var key = e.keyCode;
     409                                        if (open && settings.escKey && key === 27) {
     410                                                e.preventDefault();
     411                                                publicMethod.close();
     412                                        }
     413                                        if (open && settings.arrowKey && $related[1]) {
     414                                                if (key === 37) {
     415                                                        e.preventDefault();
     416                                                        $prev.click();
     417                                                } else if (key === 39) {
     418                                                        e.preventDefault();
     419                                                        $next.click();
     420                                                }
     421                                        }
     422                                });
     423
     424                                $('.' + boxElement, document).live('click', function (e) {
     425                                        // ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
     426                                        // See: http://jacklmoore.com/notes/click-events/
     427                                        if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) {
     428                                                e.preventDefault();
     429                                                launch(this);
     430                                        }
     431                                });
     432                        }
     433                        return true;
     434                }
     435                return false;
     436        }
     437
     438        // Don't do anything if ColorBox already exists.
     439        if ($.colorbox) {
     440                return;
     441        }
     442
     443        // Append the HTML when the DOM loads
     444        $(appendHTML);
     445
    287446
    288447        // ****************
     
    293452       
    294453        publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
    295                 var $this = this, autoOpen;
    296                
    297                 if (!$this[0] && $this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit.
    298                         return $this;
    299                 }
     454                var $this = this;
    300455               
    301456                options = options || {};
    302                
    303                 if (callback) {
    304                         options.onComplete = callback;
    305                 }
    306                
    307                 if (!$this[0] || $this.selector === undefined) { // detects $.colorbox() and $.fn.colorbox()
    308                         $this = $('<a/>');
    309                         options.open = true; // assume an immediate open
    310                 }
    311                
    312                 $this.each(function () {
    313                         $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
    314                         var eltclass = $(this).attr('class');
    315                         if (eltclass){
    316                                 if (eltclass.indexOf("boxWidth-")!==-1) {
    317                                         var w = eltclass.match(/boxWidth-([^\s'">]*)/);
    318                                         w = w[1].replace(/pc/,'%'); // % not allowed in html attribute ; use 100pc instead of 100%
    319                                         $.data(this, colorbox, $.extend($.data(this, colorbox),{width:w}));
    320                                 }
    321                                 if (eltclass.indexOf("boxHeight-")!==-1) {
    322                                         var h = eltclass.match(/boxHeight-([^\s'">]*)/);
    323                                         h = h[1].replace(/pc/,'%'); // % not allowed in html attribute ; use 100pc instead of 100%
    324                                         $.data(this, colorbox, $.extend($.data(this, colorbox),{height:h}));
    325                                 }
    326                                 if (eltclass.indexOf("boxIframe")!==-1) {
    327                                         $.data(this, colorbox, $.extend($.data(this, colorbox),{iframe:true}));
    328                                 }
    329                                 if (eltclass.indexOf("boxSlideshow_off")!==-1) {
    330                                         $.data(this, colorbox, $.extend($.data(this, colorbox),{slideshow:false}));
    331                                 }
    332                         }
    333                         $(this).addClass(boxElement);
    334                 });
    335                
    336                 autoOpen = options.open;
    337                
    338                 if ($.isFunction(autoOpen)) {
    339                         autoOpen = autoOpen.call($this);
    340                 }
    341                
    342                 if (autoOpen) {
    343                         launch($this[0]);
     457
     458                appendHTML();
     459
     460                if (addBindings()) {
     461                        if (!$this[0]) {
     462                                if ($this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit.
     463                                        return $this;
     464                                }
     465                                // if no selector was given (ie. $.colorbox()), create a temporary element to work with
     466                                $this = $('<a/>');
     467                                options.open = true; // assume an immediate open
     468                        }
     469                       
     470                        if (callback) {
     471                                options.onComplete = callback;
     472                        }
     473                       
     474                        $this.each(function () {
     475                                $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
     476                                var eltclass = $(this).attr('class');
     477                                if (eltclass){
     478                                        if (eltclass.indexOf("boxWidth-")!==-1) {
     479                                                var w = eltclass.match(/boxWidth-([^\s'">]*)/);
     480                                                w = w[1].replace(/pc/,'%'); // % not allowed in html attribute ; use 100pc instead of 100%
     481                                                $.data(this, colorbox, $.extend($.data(this, colorbox),{width:w}));
     482                                        }
     483                                        if (eltclass.indexOf("boxHeight-")!==-1) {
     484                                                var h = eltclass.match(/boxHeight-([^\s'">]*)/);
     485                                                h = h[1].replace(/pc/,'%'); // % not allowed in html attribute ; use 100pc instead of 100%
     486                                                $.data(this, colorbox, $.extend($.data(this, colorbox),{height:h}));
     487                                        }
     488                                        if (eltclass.indexOf("boxIframe")!==-1) {
     489                                                $.data(this, colorbox, $.extend($.data(this, colorbox),{iframe:true}));
     490                                        }
     491                                        if (eltclass.indexOf("boxSlideshow_off")!==-1) {
     492                                                $.data(this, colorbox, $.extend($.data(this, colorbox),{slideshow:false}));
     493                                        }
     494                                }
     495                        }).addClass(boxElement);
     496                       
     497                        if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
     498                                launch($this[0]);
     499                        }
    344500                }
    345501               
     
    347503        };
    348504
    349         // Initialize ColorBox: store common calculations, preload the interface graphics, append the html.
    350         // This preps colorbox for a speedy open when clicked, and lightens the burdon on the browser by only
    351         // having to run once, instead of each time colorbox is opened.
    352         publicMethod.init = function () {
    353                 // Create & Append jQuery Objects
    354                 $window = $(window);
    355                 $box = $div().attr({id: colorbox, 'class': (isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : '')+colorbox_class});
    356                 $overlay = $div("Overlay", isIE6 ? 'position:absolute' : '').hide();
    357                
    358                 $wrap = $div("Wrapper");
    359                 $content = $div("Content").append(
    360                         $loaded = $div("LoadedContent", 'width:0; height:0; overflow:hidden'),
    361                         $loadingOverlay = $div("LoadingOverlay").add($div("LoadingGraphic")),
    362                         $title = $div("Title"),
    363                         $current = $div("Current"),
    364                         $next = $div("Next"),
    365                         $prev = $div("Previous"),
    366                         $slideshow = $div("Slideshow").bind(event_open, slideshow),
    367                         $close = $div("Close")
    368                 );
    369                 $wrap.append( // The 3x3 Grid that makes up ColorBox
    370                         $div().append(
    371                                 $div("TopLeft"),
    372                                 $topBorder = $div("TopCenter"),
    373                                 $div("TopRight")
    374                         ),
    375                         $div(false, 'clear:left').append(
    376                                 $leftBorder = $div("MiddleLeft"),
    377                                 $content,
    378                                 $rightBorder = $div("MiddleRight")
    379                         ),
    380                         $div(false, 'clear:left').append(
    381                                 $div("BottomLeft"),
    382                                 $bottomBorder = $div("BottomCenter"),
    383                                 $div("BottomRight")
    384                         )
    385                 ).children().children().css({'float': 'left'});
    386                
    387                 $loadingBay = $div(false, 'position:absolute; width:9999px; visibility:hidden; display:none');
    388                
    389                 $('body').prepend($overlay, $box.append($wrap, $loadingBay));
    390                
    391                 $content.children()
    392                 .hover(function () {
    393                         $(this).addClass('hover');
    394                 }, function () {
    395                         $(this).removeClass('hover');
    396                 }).addClass('hover');
    397                
    398                 // Cache values needed for size calculations
    399                 interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6
    400                 interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
    401                 loadedHeight = $loaded.outerHeight(true);
    402                 loadedWidth = $loaded.outerWidth(true);
    403                
    404                 // Setting padding to remove the need to do size conversions during the animation step.
    405                 $box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth}).hide();
    406                
    407         // Setup button events.
    408         $next.click(function () {
    409             publicMethod.next();
    410         });
    411         $prev.click(function () {
    412             publicMethod.prev();
    413         });
    414         $close.click(function () {
    415             publicMethod.close();
    416         });
    417                
    418                 $groupControls = $next.add($prev).add($current).add($slideshow);
    419                
    420                 // Adding the 'hover' class allowed the browser to load the hover-state
    421                 // background graphics.  The class can now can be removed.
    422                 $content.children().removeClass('hover');
    423                
    424 
    425 
    426        
    427                 $overlay.click(function () {
    428                         if (settings.overlayClose) {
    429                                 publicMethod.close();
    430                         }
    431                 });
    432                
    433                 // Set Navigation Key Bindings
    434                 $(document).bind('keydown.' + prefix, function (e) {
    435             var key = e.keyCode;
    436                         if (open && settings.escKey && key === 27) {
    437                                 e.preventDefault();
    438                                 publicMethod.close();
    439                         }
    440                         if (open && settings.arrowKey && $related[1]) {
    441                                 if (key === 37) {
    442                                         e.preventDefault();
    443                                         $prev.click();
    444                                 } else if (key === 39) {
    445                                         e.preventDefault();
    446                                         $next.click();
    447                                 }
    448                         }
    449                 });
    450         };
    451        
    452         publicMethod.remove = function () {
    453                 $box.add($overlay).remove();
    454                 $('.' + boxElement).removeData(colorbox).removeClass(boxElement);
    455         };
    456 
    457505        publicMethod.position = function (speed, loadedCallback) {
    458         var animate_speed, top = 0, left = 0;
    459        
    460         // remove the modal so that it doesn't influence the document width/height       
    461         $box.hide();
    462        
    463         if (settings.fixed && !isIE6) {
    464             $box.css({position: 'fixed'});
    465         } else {
    466             top = $window.scrollTop();
    467             left = $window.scrollLeft();
    468             $box.css({position: 'absolute'});
    469         }
    470        
     506                var
     507                css,
     508                top = 0,
     509                left = 0,
     510                offset = $box.offset(),
     511                scrollTop,
     512                scrollLeft;
     513               
     514                $window.unbind('resize.' + prefix);
     515
     516                // remove the modal so that it doesn't influence the document width/height
     517                $box.css({top: -9e4, left: -9e4});
     518
     519                scrollTop = $window.scrollTop();
     520                scrollLeft = $window.scrollLeft();
     521
     522                if (settings.fixed && !isIE6) {
     523                        offset.top -= scrollTop;
     524                        offset.left -= scrollLeft;
     525                        $box.css({position: 'fixed'});
     526                } else {
     527                        top = scrollTop;
     528                        left = scrollLeft;
     529                        $box.css({position: 'absolute'});
     530                }
     531
    471532                // keeps the top and left positions within the browser's viewport.
    472         if (settings.right !== false) {
    473             left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
    474         } else if (settings.left !== false) {
    475             left += setSize(settings.left, 'x');
    476         } else {
    477             left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2;
    478         }
    479        
    480         if (settings.bottom !== false) {
    481             top += Math.max(document.documentElement.clientHeight - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
    482         } else if (settings.top !== false) {
    483             top += setSize(settings.top, 'y');
    484         } else {
    485             top += Math.max(document.documentElement.clientHeight - settings.h - loadedHeight - interfaceHeight, 0) / 2;
    486         }
    487        
    488         $box.show();
    489        
     533                if (settings.right !== false) {
     534                        left += Math.max(winWidth() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
     535                } else if (settings.left !== false) {
     536                        left += setSize(settings.left, 'x');
     537                } else {
     538                        left += Math.round(Math.max(winWidth() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
     539                }
     540               
     541                if (settings.bottom !== false) {
     542                        top += Math.max(winHeight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
     543                } else if (settings.top !== false) {
     544                        top += setSize(settings.top, 'y');
     545                } else {
     546                        top += Math.round(Math.max(winHeight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
     547                }
     548
     549                $box.css({top: offset.top, left: offset.left});
     550
    490551                // setting the speed to 0 to reduce the delay between same-sized content.
    491                 animate_speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed;
    492        
     552                speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
     553               
    493554                // this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
    494555                // but it has to be shrank down around the size of div#colorbox when it's done.  If not,
     
    497558               
    498559                function modalDimensions(that) {
    499                         // loading overlay height has to be explicitly set for IE6.
    500560                        $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;
    501                         $loadingOverlay[0].style.height = $loadingOverlay[1].style.height = $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;
    502                 }
    503                
    504                 $box.dequeue().animate({width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left}, {
    505                         duration: animate_speed,
     561                        $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;
     562                }
     563
     564                css = {width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left};
     565                if(speed===0){ // temporary workaround to side-step jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273)
     566                        $box.css(css);
     567                }
     568                $box.dequeue().animate(css, {
     569                        duration: speed,
    506570                        complete: function () {
    507571                                modalDimensions(this);
     
    513577                                $wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
    514578                               
     579                                if (settings.reposition) {
     580                                        setTimeout(function () {  // small delay before binding onresize due to an IE8 bug.
     581                                                $window.bind('resize.' + prefix, publicMethod.position);
     582                                        }, 1);
     583                                }
     584
    515585                                if (loadedCallback) {
    516586                                        loadedCallback();
     
    541611                                settings.h = setSize(options.innerHeight, 'y');
    542612                        }
    543                         if (!options.innerHeight && !options.height) {                         
    544                                 var $child = $loaded.wrapInner("<div style='overflow:auto'></div>").children(); // temporary wrapper to get an accurate estimate of just how high the total content should be.
    545                                 settings.h = $child.height();
    546                                 $child.replaceWith($child.children()); // ditch the temporary wrapper div used in height calculation
     613                        if (!options.innerHeight && !options.height) {
     614                                $loaded.css({height: "auto"});
     615                                settings.h = $loaded.height();
    547616                        }
    548617                        $loaded.css({height: settings.h});
     
    557626                }
    558627               
    559                 var speed = settings.transition === "none" ? 0 : settings.speed;
    560                
    561                 $window.unbind('resize.' + prefix);
     628                var callback, speed = settings.transition === "none" ? 0 : settings.speed;
     629               
    562630                $loaded.remove();
    563                 $loaded = $div('LoadedContent').html(object);
     631                $loaded = $tag(div, 'LoadedContent').append(object);
    564632               
    565633                function getWidth() {
     
    587655                //$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'});
    588656               
    589         $(photo).css({'float': 'none'});
    590        
     657                $(photo).css({'float': 'none'});
     658               
    591659                // Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay.
    592660                if (isIE6) {
     
    598666                }
    599667               
    600                 function setPosition(s) {
    601                         publicMethod.position(s, function () {
    602                                 var prev, prevSrc, next, nextSrc, total = $related.length, iframe, complete;
    603                                
    604                                 if (!open) {
    605                                         return;
    606                                 }
    607                                
    608                 function removeFilter() {
    609                     if (isIE) {
    610                         $box[0].style.removeAttribute('filter');
    611                     }
    612                 }
    613                
    614                                 complete = function () {
    615                     clearTimeout(loadingTimer);
    616                                         $loadingOverlay.hide();
    617                                         trigger(event_complete, settings.onComplete);
    618                                 };
    619                                
     668                callback = function () {
     669                        var preload,
     670                                i,
     671                                total = $related.length,
     672                                iframe,
     673                                frameBorder = 'frameBorder',
     674                                allowTransparency = 'allowTransparency',
     675                                complete,
     676                                src,
     677                                img,
     678                                data;
     679                       
     680                        if (!open) {
     681                                return;
     682                        }
     683                       
     684                        function removeFilter() {
    620685                                if (isIE) {
    621                                         //This fadeIn helps the bicubic resampling to kick-in.
    622                                         if (photo) {
    623                                                 $loaded.fadeIn(100);
    624                                         }
    625                                 }
    626                                
    627                                 $title.html(settings.title).add($loaded).show();
    628                                
    629                                 if (total > 1) { // handle grouping
    630                                         if (typeof settings.current === "string") {
    631                                                 $current.html(settings.current.replace(/\{current\}/, index + 1).replace(/\{total\}/, total)).show();
    632                                         }
    633                                        
    634                                         $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
    635                                         $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
    636                                        
    637                                         prev = index ? $related[index - 1] : $related[total - 1];
    638                                         next = index < total - 1 ? $related[index + 1] : $related[0];
    639                                        
    640                                         if (settings.slideshow) {
    641                                                 $slideshow.show();
    642                                         }
    643                                        
    644                                         // Preloads images within a rel group
    645                                         if (settings.preloading) {
    646                                                 nextSrc = $.data(next, colorbox).href || next.href;
    647                                                 prevSrc = $.data(prev, colorbox).href || prev.href;
     686                                        $box[0].style.removeAttribute('filter');
     687                                }
     688                        }
     689                       
     690                        complete = function () {
     691                                clearTimeout(loadingTimer);
     692                                // Detaching forces Andriod stock browser to redraw the area underneat the loading overlay.  Hiding alone isn't enough.
     693                                $loadingOverlay.detach().hide();
     694                                trigger(event_complete, settings.onComplete);
     695                        };
     696                       
     697                        if (isIE) {
     698                                //This fadeIn helps the bicubic resampling to kick-in.
     699                                if (photo) {
     700                                        $loaded.fadeIn(100);
     701                                }
     702                        }
     703                       
     704                        $title.html(settings.title).add($loaded).show();
     705                       
     706                        if (total > 1) { // handle grouping
     707                                if (typeof settings.current === "string") {
     708                                        $current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
     709                                }
     710                               
     711                                $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
     712                                $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
     713                               
     714                                if (settings.slideshow) {
     715                                        $slideshow.show();
     716                                }
     717                               
     718                                // Preloads images within a rel group
     719                                if (settings.preloading) {
     720                                        preload = [
     721                                                getIndex(-1),
     722                                                getIndex(1)
     723                                        ];
     724                                        while (i = $related[preload.pop()]) {
     725                                                data = $.data(i, colorbox);
    648726                                               
    649                                                 nextSrc = $.isFunction(nextSrc) ? nextSrc.call(next) : nextSrc;
    650                                                 prevSrc = $.isFunction(prevSrc) ? prevSrc.call(prev) : prevSrc;
    651                                                
    652                                                 if (isImage(nextSrc)) {
    653                                                         $('<img/>')[0].src = nextSrc;
     727                                                if (data && data.href) {
     728                                                        src = data.href;
     729                                                        if ($.isFunction(src)) {
     730                                                                src = src.call(i);
     731                                                        }
     732                                                } else {
     733                                                        src = i.href;
    654734                                                }
    655                                                
    656                                                 if (isImage(prevSrc)) {
    657                                                         $('<img/>')[0].src = prevSrc;
     735
     736                                                if (isImage(src)) {
     737                                                        img = new Image();
     738                                                        img.src = src;
    658739                                                }
    659740                                        }
     741                                }
     742                        } else {
     743                                $groupControls.hide();
     744                        }
     745                       
     746                        if (settings.iframe) {
     747                                iframe = $tag('iframe')[0];
     748                               
     749                                if (frameBorder in iframe) {
     750                                        iframe[frameBorder] = 0;
     751                                }
     752                                if (allowTransparency in iframe) {
     753                                        iframe[allowTransparency] = "true";
     754                                }
     755                                // give the iframe a unique name to prevent caching
     756                                iframe.name = prefix + (+new Date());
     757                                if (settings.fastIframe) {
     758                                        complete();
    660759                                } else {
    661                                         $groupControls.hide();
    662                                 }
    663                                
    664                                 if (settings.iframe) {
    665                                         iframe = $('<iframe/>').addClass(prefix + 'Iframe')[0];
    666                                        
    667                                         if (settings.fastIframe) {
    668                                                 complete();
    669                                         } else {
    670                                                 $(iframe).one('load', complete);
    671                                         }
    672                                         iframe.name = prefix + (+new Date());
    673                                         iframe.src = settings.href;
    674                                        
    675                                         if (!settings.scrolling) {
    676                                                 iframe.scrolling = "no";
    677                                         }
    678                                        
    679                                         if (isIE) {
    680                         iframe.frameBorder = 0;
    681                                                 iframe.allowTransparency = "true";
    682                                         }
    683                                        
    684                                         $(iframe).appendTo($loaded).one(event_purge, function () {
    685                                                 iframe.src = "//about:blank";
    686                                         });
    687                                 } else {
    688                                         complete();
    689                                 }
    690                                
    691                                 if (settings.transition === 'fade') {
    692                                         $box.fadeTo(speed, 1, removeFilter);
    693                                 } else {
    694                     removeFilter();
    695                                 }
    696                                
    697                                 $window.bind('resize.' + prefix, function () {
    698                                         publicMethod.position(0);
     760                                        $(iframe).one('load', complete);
     761                                }
     762                                iframe.src = settings.href;
     763                                if (!settings.scrolling) {
     764                                        iframe.scrolling = "no";
     765                                }
     766                                $(iframe).addClass(prefix + 'Iframe').appendTo($loaded).one(event_purge, function () {
     767                                        iframe.src = "//about:blank";
    699768                                });
    700                         });
    701                 }
     769                        } else {
     770                                complete();
     771                        }
     772                       
     773                        if (settings.transition === 'fade') {
     774                                $box.fadeTo(speed, 1, removeFilter);
     775                        } else {
     776                                removeFilter();
     777                        }
     778                };
    702779               
    703780                if (settings.transition === 'fade') {
    704781                        $box.fadeTo(speed, 0, function () {
    705                                 setPosition(0);
     782                                publicMethod.position(0, callback);
    706783                        });
    707784                } else {
    708                         setPosition(speed);
     785                        publicMethod.position(speed, callback);
    709786                }
    710787        };
     
    720797               
    721798                if (!launched) {
    722                         process($.extend(settings, $.data(element, colorbox)));
     799                        makeSettings();
    723800                }
    724801               
     
    762839                href = settings.href;
    763840               
    764         loadingTimer = setTimeout(function () {
    765             $loadingOverlay.show();
    766         }, 100);
    767        
     841                loadingTimer = setTimeout(function () {
     842                        $loadingOverlay.show().appendTo($content);
     843                }, 100);
     844               
    768845                if (settings.inline) {
    769846                        // Inserts an empty placeholder where inline content is being pulled from.
    770847                        // An event is bound to put inline content back when ColorBox closes or loads new content.
    771                         $div().hide().insertBefore($(href)[0]).one(event_purge, function () {
     848                        $tag(div).hide().insertBefore($(href)[0]).one(event_purge, function () {
    772849                                $(this).replaceWith($loaded.children());
    773850                        });
     
    784861                        .error(function () {
    785862                                settings.title = false;
    786                                 prep($div('Error').text('This image could not be loaded'));
     863                                prep($tag(div, 'Error').html(settings.imgError));
    787864                        })
    788865                        .load(function () {
     
    793870                                        setResize = function () {
    794871                                                photo.height -= photo.height * percent;
    795                                                 photo.width -= photo.width * percent;   
     872                                                photo.width -= photo.width * percent;
    796873                                        };
    797874                                        if (settings.mw && photo.width > settings.mw) {
     
    809886                                }
    810887                               
    811                                 if ($related[1] && (index < $related.length - 1 || settings.loop)) {
     888                                if ($related[1] && (settings.loop || $related[index + 1])) {
    812889                                        photo.style.cursor = 'pointer';
    813890                                        photo.onclick = function () {
    814                         publicMethod.next();
    815                     };
     891                                                publicMethod.next();
     892                                        };
    816893                                }
    817894                               
     
    830907                } else if (href) {
    831908                        $loadingBay.load(href, settings.data, function (data, status, xhr) {
    832                                 prep(status === 'error' ? $div('Error').text('Request unsuccessful: ' + xhr.statusText) : $(this).contents());
     909                                prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
    833910                        });
    834911                }
    835912        };
    836        
     913               
    837914        // Navigates to the next page/image in a set.
    838915        publicMethod.next = function () {
    839                 if (!active && $related[1] && (index < $related.length - 1 || settings.loop)) {
    840                         index = index < $related.length - 1 ? index + 1 : 0;
     916                if (!active && $related[1] && (settings.loop || $related[index + 1])) {
     917                        index = getIndex(1);
    841918                        publicMethod.load();
    842919                }
     
    844921       
    845922        publicMethod.prev = function () {
    846                 if (!active && $related[1] && (index || settings.loop)) {
    847                         index = index ? index - 1 : $related.length - 1;
     923                if (!active && $related[1] && (settings.loop || index)) {
     924                        index = getIndex(-1);
    848925                        publicMethod.load();
    849926                }
     
    865942                       
    866943                        $box.stop().fadeTo(300, 0, function () {
    867                  
     944                       
    868945                                $box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
    869946                               
     
    880957        };
    881958
     959        // Removes changes ColorBox made to the document, but does not remove the plugin
     960        // from jQuery.
     961        publicMethod.remove = function () {
     962                $([]).add($box).add($overlay).remove();
     963                $box = null;
     964                $('.' + boxElement)
     965                        .removeData(colorbox)
     966                        .removeClass(boxElement)
     967                        .die();
     968        };
     969
    882970        // A method for fetching the current element ColorBox is referencing.
    883971        // returns a jQuery object.
     
    887975
    888976        publicMethod.settings = defaults;
    889    
    890         // Bind the live event before DOM-ready for maximum performance in IE6 & 7.
    891     handler = function (e) {
    892         // checks to see if it was a non-left mouse-click and for clicks modified with ctrl, shift, or alt.
    893         if (!((e.button !== 0 && typeof e.button !== 'undefined') || e.ctrlKey || e.shiftKey || e.altKey)) {
    894             e.preventDefault();
    895             launch(this);
    896         }
    897     };
    898    
    899     if ($.fn.delegate) {
    900         $(document).delegate('.' + boxElement, 'click', handler);
    901     } else {
    902         $('.' + boxElement).live('click', handler);
    903     }
    904    
    905         // Initializes ColorBox when the DOM has loaded
    906         $(publicMethod.init);
    907977
    908978}(jQuery, document, this));
  • _core_/plugins/mediabox/paquet.xml

    r61426 r65790  
    22        prefix="mediabox"
    33        categorie="multimedia"
    4         version="0.8.1"
     4        version="0.8.2"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.