Fehler bei der Bewertung von Galerie-Bildern behoben

This commit is contained in:
Carsten Götzinger 2014-11-11 08:34:59 +01:00
parent dd1558b954
commit 0bf343a285
4 changed files with 363 additions and 280 deletions

View File

@ -198,7 +198,7 @@ class RateItArticle extends RateItFrontend {
continue; continue;
} }
$this->addRatingForImage($arrRating, $arrGallery['id'], $objFile->id, $objFile->path); $this->addRatingForImage($arrRating, $arrGallery['id'], $objFiles->id, $objFile->path);
} }
// Folders // Folders
else { else {
@ -224,7 +224,7 @@ class RateItArticle extends RateItFrontend {
continue; continue;
} }
$this->addRatingForImage($arrRating, $arrGallery['id'], $objSubfiles->id, $objSubfiles->path); $this->addRatingForImage($arrRating, $arrGallery['id'], $objSubfiles->id, $objSubfiles->path);
} }
} }
} }

View File

@ -92,7 +92,7 @@ class tl_content_rateit extends rateit\DcaHelper {
continue; continue;
} }
$this->insertOrUpdateRatingItemGallery($dc, $type, $objFile->name, $objFile->id, ($dc->activeRecord->rateit_active ? '1' : '')); $this->insertOrUpdateRatingItemGallery($dc, $type, $objFile->name, $objFiles->id, ($dc->activeRecord->rateit_active ? '1' : ''));
} }
// Folders // Folders
else { else {
@ -131,7 +131,11 @@ class tl_content_rateit extends rateit\DcaHelper {
public function delete(\DC_Table $dc) { public function delete(\DC_Table $dc) {
if ($dc->activeRecord->type == "gallery") { if ($dc->activeRecord->type == "gallery") {
$objFiles = \FilesModel::findMultipleByUuids(deserialize($dc->activeRecord->multiSRC)); if (version_compare(VERSION, '3.2', '>=')) {
$objFiles = \FilesModel::findMultipleByUuids(deserialize($dc->activeRecord->multiSRC));
} else {
$objFiles = \FilesModel::findMultipleByIds(deserialize($dc->activeRecord->multiSRC));
}
// Get all images // Get all images
while ($objFiles->next()) { while ($objFiles->next()) {
@ -143,13 +147,17 @@ class tl_content_rateit extends rateit\DcaHelper {
continue; continue;
} }
$rkey = $dc->activeRecord->id.'_'.$objFile->id; $rkey = $dc->activeRecord->id.'_'.$objFiles->id;
$this->Database->prepare("DELETE FROM tl_rateit_items WHERE rkey=? and typ=?") $this->Database->prepare("DELETE FROM tl_rateit_items WHERE rkey=? and typ=?")
->execute($rkey, 'galpic'); ->execute($rkey, 'galpic');
} }
// Folders // Folders
else { else {
$objSubfiles = \FilesModel::findByPid($objFiles->uuid); if (version_compare(VERSION, '3.2', '>=')) {
$objSubfiles = \FilesModel::findByPid($objFiles->uuid);
} else {
$objSubfiles = \FilesModel::findByPid($objFiles->id);
}
if ($objSubfiles === null) { if ($objSubfiles === null) {
continue; continue;
@ -167,7 +175,7 @@ class tl_content_rateit extends rateit\DcaHelper {
continue; continue;
} }
$rkey = $dc->activeRecord->id.'_'.$objFile->id; $rkey = $dc->activeRecord->id.'_'.$objSubfiles->id;
$this->Database->prepare("DELETE FROM tl_rateit_items WHERE rkey=? and typ=?") $this->Database->prepare("DELETE FROM tl_rateit_items WHERE rkey=? and typ=?")
->execute($rkey, 'galpic'); ->execute($rkey, 'galpic');
} }

View File

@ -1,7 +1,7 @@
/*! /*!
Colorbox v1.4.31 - 2013-09-25 Colorbox v1.5.8 - 2014-04-15
jQuery lightbox and modal window plugin jQuery lightbox and modal window plugin
(c) 2013 Jack Moore - http://www.jacklmoore.com/colorbox (c) 2014 Jack Moore - http://www.jacklmoore.com/colorbox
license: http://www.opensource.org/licenses/mit-license.php license: http://www.opensource.org/licenses/mit-license.php
*/ */
(function ($, document, window) { (function ($, document, window) {
@ -29,9 +29,6 @@
maxHeight: false, maxHeight: false,
scalePhotos: true, scalePhotos: true,
scrolling: true, scrolling: true,
href: false,
title: false,
rel: false,
opacity: 0.9, opacity: 0.9,
preloading: true, preloading: true,
className: false, className: false,
@ -54,7 +51,7 @@
slideshowSpeed: 2500, slideshowSpeed: 2500,
slideshowStart: "start slideshow", slideshowStart: "start slideshow",
slideshowStop: "stop slideshow", slideshowStop: "stop slideshow",
photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp)((#|\?).*)?$/i, photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,
// alternate image paths for high-res displays // alternate image paths for high-res displays
retinaImage: false, retinaImage: false,
@ -78,9 +75,21 @@
onLoad: false, onLoad: false,
onComplete: false, onComplete: false,
onCleanup: false, onCleanup: false,
onClosed: false onClosed: false,
rel: function() {
return this.rel;
},
href: function() {
// using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container')
return $(this).attr('href');
},
title: function() {
return this.title;
}
}, },
// Abstracting the HTML and event identifiers for easy rebranding // Abstracting the HTML and event identifiers for easy rebranding
colorbox = 'colorbox', colorbox = 'colorbox',
prefix = 'cbox', prefix = 'cbox',
@ -120,7 +129,7 @@
$ratingHover, $ratingHover,
$ratingDescription, $ratingDescription,
$groupControls, $groupControls,
$events = $('<a/>'), $events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2
// Variables for cached values or use across multiple functions // Variables for cached values or use across multiple functions
settings, settings,
@ -128,7 +137,6 @@
interfaceWidth, interfaceWidth,
loadedHeight, loadedHeight,
loadedWidth, loadedWidth,
element,
index, index,
photo, photo,
open, open,
@ -137,7 +145,6 @@
loadingTimer, loadingTimer,
publicMethod, publicMethod,
div = "div", div = "div",
className,
requests = 0, requests = 0,
previousCSS = {}, previousCSS = {},
init; init;
@ -167,6 +174,38 @@
return window.innerHeight ? window.innerHeight : $(window).height(); return window.innerHeight ? window.innerHeight : $(window).height();
} }
function Settings(element, options) {
if (options !== Object(options)) {
options = {};
}
this.cache = {};
this.el = element;
this.value = function(key) {
var dataAttr;
if (this.cache[key] === undefined) {
dataAttr = $(this.el).attr('data-cbox-'+key);
if (dataAttr !== undefined) {
this.cache[key] = dataAttr;
} else if (options[key] !== undefined) {
this.cache[key] = options[key];
} else if (defaults[key] !== undefined) {
this.cache[key] = defaults[key];
}
}
return this.cache[key];
};
this.get = function(key) {
var value = this.value(key);
return $.isFunction(value) ? value.call(this.el, this) : value;
};
}
// Determine the next and previous members in a group. // Determine the next and previous members in a group.
function getIndex(increment) { function getIndex(increment) {
var var
@ -184,62 +223,55 @@
// Checks an href to see if it is a photo. // Checks an href to see if it is a photo.
// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex. // There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
function isImage(settings, url) { function isImage(settings, url) {
return settings.photo || settings.photoRegex.test(url); return settings.get('photo') || settings.get('photoRegex').test(url);
} }
function retinaUrl(settings, url) { function retinaUrl(settings, url) {
return settings.retinaUrl && window.devicePixelRatio > 1 ? url.replace(settings.photoRegex, settings.retinaSuffix) : url; return settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;
} }
function trapFocus(e) { function trapFocus(e) {
if ('contains' in $box[0] && !$box[0].contains(e.target)) { if ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {
e.stopPropagation(); e.stopPropagation();
$box.focus(); $box.focus();
} }
} }
// Assigns function results to their respective properties function setClass(str) {
function makeSettings() { if (setClass.str !== str) {
var i, $box.add($overlay).removeClass(setClass.str).addClass(str);
data = $.data(element, colorbox); setClass.str = str;
}
}
function getRelated(rel) {
index = 0;
if (data == null) { if (rel && rel !== false) {
settings = $.extend({}, defaults); $related = $('.' + boxElement).filter(function () {
if (console && console.log) { var options = $.data(this, colorbox);
console.log('Error: cboxElement missing settings object'); var settings = new Settings(this, options);
return (settings.get('rel') === rel);
});
index = $related.index(settings.el);
// Check direct calls to Colorbox.
if (index === -1) {
$related = $related.add(settings.el);
index = $related.length - 1;
} }
} else { } else {
settings = $.extend({}, data); $related = $(settings.el);
}
for (i in settings) {
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.
settings[i] = settings[i].call(element);
}
}
settings.rel = settings.rel || element.rel || $(element).data('rel') || 'nofollow';
settings.href = settings.href || $(element).attr('href');
settings.title = settings.title || element.title;
if (typeof settings.href === "string") {
settings.href = $.trim(settings.href);
} }
} }
function trigger(event, callback) { function trigger(event) {
// for external use // for external use
$(document).trigger(event); $(document).trigger(event);
// for internal use // for internal use
$events.trigger(event); $events.triggerHandler(event);
if ($.isFunction(callback)) {
callback.call(element);
}
} }
var slideshow = (function(){ var slideshow = (function(){
var active, var active,
className = prefix + "Slideshow_", className = prefix + "Slideshow_",
@ -251,15 +283,15 @@
} }
function set() { function set() {
if (settings.loop || $related[index + 1]) { if (settings.get('loop') || $related[index + 1]) {
clear(); clear();
timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed); timeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));
} }
} }
function start() { function start() {
$slideshow $slideshow
.html(settings.slideshowStop) .html(settings.get('slideshowStop'))
.unbind(click) .unbind(click)
.one(click, stop); .one(click, stop);
@ -278,7 +310,7 @@
.unbind(event_load, clear); .unbind(event_load, clear);
$slideshow $slideshow
.html(settings.slideshowStart) .html(settings.get('slideshowStart'))
.unbind(click) .unbind(click)
.one(click, function () { .one(click, function () {
publicMethod.next(); publicMethod.next();
@ -300,15 +332,15 @@
return function(){ return function(){
if (active) { if (active) {
if (!settings.slideshow) { if (!settings.get('slideshow')) {
$events.unbind(event_cleanup, reset); $events.unbind(event_cleanup, reset);
reset(); reset();
} }
} else { } else {
if (settings.slideshow && $related[1]) { if (settings.get('slideshow') && $related[1]) {
active = true; active = true;
$events.one(event_cleanup, reset); $events.one(event_cleanup, reset);
if (settings.slideshowAuto) { if (settings.get('slideshowAuto')) {
start(); start();
} else { } else {
stop(); stop();
@ -321,65 +353,26 @@
}()); }());
function launch(target) { function launch(element) {
var options;
if (!closing) { if (!closing) {
element = target;
makeSettings();
$related = $(element);
index = 0;
if (settings.rel !== 'nofollow') {
$related = $('.' + boxElement).filter(function () {
var data = $.data(this, colorbox),
relRelated;
if (data) { options = $(element).data('colorbox');
relRelated = $(this).data('rel') || data.rel || this.rel;
}
return (relRelated === settings.rel);
});
index = $related.index(element);
// Check direct calls to Colorbox.
if (index === -1) {
$related = $related.add(element);
index = $related.length - 1;
}
}
$overlay.css({
opacity: parseFloat(settings.opacity),
cursor: settings.overlayClose ? "pointer" : "auto",
visibility: 'visible'
}).show();
if (className) { settings = new Settings(element, options);
$box.add($overlay).removeClass(className);
} getRelated(settings.get('rel'));
if (settings.className) {
$box.add($overlay).addClass(settings.className);
}
className = settings.className;
if (settings.closeButton) {
$close.html(settings.close).appendTo($content);
} else {
$close.appendTo('<div/>');
}
if (!open) { if (!open) {
open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys. open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
setClass(settings.get('className'));
// Show colorbox so the sizes can be calculated in older versions of jQuery // Show colorbox so the sizes can be calculated in older versions of jQuery
$box.css({visibility:'hidden', display:'block'}); $box.css({visibility:'hidden', display:'block', opacity:''});
$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden'); $loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');
$content.css({width:'', height:''}).append($loaded); $content.css({width:'', height:''}).append($loaded);
// Cache values needed for size calculations // Cache values needed for size calculations
@ -389,18 +382,25 @@
loadedWidth = $loaded.outerWidth(true); loadedWidth = $loaded.outerWidth(true);
// Opens inital empty Colorbox prior to content being loaded. // Opens inital empty Colorbox prior to content being loaded.
settings.w = setSize(settings.initialWidth, 'x'); var initialWidth = setSize(settings.get('initialWidth'), 'x');
settings.h = setSize(settings.initialHeight, 'y'); var initialHeight = setSize(settings.get('initialHeight'), 'y');
var maxWidth = settings.get('maxWidth');
var maxHeight = settings.get('maxHeight');
settings.w = (maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth;
settings.h = (maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight;
$loaded.css({width:'', height:settings.h}); $loaded.css({width:'', height:settings.h});
publicMethod.position(); publicMethod.position();
trigger(event_open, settings.onOpen); trigger(event_open);
settings.get('onOpen');
$groupControls.add($title).hide(); $groupControls.add($title).hide();
$box.focus(); $box.focus();
if (settings.trapFocus) { if (settings.get('trapFocus')) {
// Confine focus to the modal // Confine focus to the modal
// Uses event capturing that is not supported in IE8- // Uses event capturing that is not supported in IE8-
if (document.addEventListener) { if (document.addEventListener) {
@ -414,12 +414,25 @@
} }
// Return focus on closing // Return focus on closing
if (settings.returnFocus) { if (settings.get('returnFocus')) {
$events.one(event_closed, function () { $events.one(event_closed, function () {
$(element).focus(); $(settings.el).focus();
}); });
} }
} }
$overlay.css({
opacity: parseFloat(settings.get('opacity')) || '',
cursor: settings.get('overlayClose') ? 'pointer' : '',
visibility: 'visible'
}).show();
if (settings.get('closeButton')) {
$close.html(settings.get('close')).appendTo($content);
} else {
$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4
}
load(); load();
} }
} }
@ -457,7 +470,7 @@
$next = $('<button type="button"/>').attr({id:prefix+'Next'}), $next = $('<button type="button"/>').attr({id:prefix+'Next'}),
$slideshow = $tag('button', "Slideshow"), $slideshow = $tag('button', "Slideshow"),
$loadingOverlay $loadingOverlay
).css({'margin-bottom': '20px'});; );
$close = $('<button type="button"/>').attr({id:prefix+'Close'}); $close = $('<button type="button"/>').attr({id:prefix+'Close'});
@ -479,7 +492,7 @@
) )
).find('div div').css({'float': 'left'}); ).find('div div').css({'float': 'left'});
$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none'); $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');
$groupControls = $next.add($prev).add($current).add($slideshow); $groupControls = $next.add($prev).add($current).add($slideshow);
@ -513,7 +526,7 @@
publicMethod.close(); publicMethod.close();
}); });
$overlay.click(function () { $overlay.click(function () {
if (settings.overlayClose) { if (settings.get('overlayClose')) {
publicMethod.close(); publicMethod.close();
} }
}); });
@ -521,11 +534,11 @@
// Key Bindings // Key Bindings
$(document).bind('keydown.' + prefix, function (e) { $(document).bind('keydown.' + prefix, function (e) {
var key = e.keyCode; var key = e.keyCode;
if (open && settings.escKey && key === 27) { if (open && settings.get('escKey') && key === 27) {
e.preventDefault(); e.preventDefault();
publicMethod.close(); publicMethod.close();
} }
if (open && settings.arrowKey && $related[1] && !e.altKey) { if (open && settings.get('arrowKey') && $related[1] && !e.altKey) {
if (key === 37) { if (key === 37) {
e.preventDefault(); e.preventDefault();
$prev.click(); $prev.click();
@ -567,34 +580,44 @@
// **************** // ****************
publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) { publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
var $this = this; var settings;
var $obj = this;
options = options || {}; options = options || {};
if ($.isFunction($obj)) { // assume a call to $.colorbox
$obj = $('<a/>');
options.open = true;
} else if (!$obj[0]) { // colorbox being applied to empty collection
return $obj;
}
if (!$obj[0]) { // colorbox being applied to empty collection
return $obj;
}
appendHTML(); appendHTML();
if (addBindings()) { if (addBindings()) {
if ($.isFunction($this)) { // assume a call to $.colorbox
$this = $('<a/>');
options.open = true;
} else if (!$this[0]) { // colorbox being applied to empty collection
return $this;
}
if (callback) { if (callback) {
options.onComplete = callback; options.onComplete = callback;
} }
$this.each(function () { $obj.each(function () {
$.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options)); var old = $.data(this, colorbox) || {};
$.data(this, colorbox, $.extend(old, options));
}).addClass(boxElement); }).addClass(boxElement);
settings = new Settings($obj[0], options);
if (($.isFunction(options.open) && options.open.call($this)) || options.open) { if (settings.get('open')) {
launch($this[0]); launch($obj[0]);
} }
} }
return $this; return $obj;
}; };
publicMethod.position = function (speed, loadedCallback) { publicMethod.position = function (speed, loadedCallback) {
@ -614,7 +637,7 @@
scrollTop = $window.scrollTop(); scrollTop = $window.scrollTop();
scrollLeft = $window.scrollLeft(); scrollLeft = $window.scrollLeft();
if (settings.fixed) { if (settings.get('fixed')) {
offset.top -= scrollTop; offset.top -= scrollTop;
offset.left -= scrollLeft; offset.left -= scrollLeft;
$box.css({position: 'fixed'}); $box.css({position: 'fixed'});
@ -625,18 +648,18 @@
} }
// keeps the top and left positions within the browser's viewport. // keeps the top and left positions within the browser's viewport.
if (settings.right !== false) { if (settings.get('right') !== false) {
left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0); left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);
} else if (settings.left !== false) { } else if (settings.get('left') !== false) {
left += setSize(settings.left, 'x'); left += setSize(settings.get('left'), 'x');
} else { } else {
left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2); left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
} }
if (settings.bottom !== false) { if (settings.get('bottom') !== false) {
top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0); top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);
} else if (settings.top !== false) { } else if (settings.get('top') !== false) {
top += setSize(settings.top, 'y'); top += setSize(settings.get('top'), 'y');
} else { } else {
top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2); top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
} }
@ -684,7 +707,7 @@
$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px"; $wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px"; $wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
if (settings.reposition) { if (settings.get('reposition')) {
setTimeout(function () { // small delay before binding onresize due to an IE8 bug. setTimeout(function () { // small delay before binding onresize due to an IE8 bug.
$window.bind('resize.' + prefix, publicMethod.position); $window.bind('resize.' + prefix, publicMethod.position);
}, 1); }, 1);
@ -734,7 +757,7 @@
$loaded.scrollTop(scrolltop); $loaded.scrollTop(scrolltop);
} }
publicMethod.position(settings.transition === "none" ? 0 : settings.speed); publicMethod.position(settings.get('transition') === "none" ? 0 : settings.get('speed'));
} }
}; };
@ -743,9 +766,9 @@
return; return;
} }
var callback, speed = settings.transition === "none" ? 0 : settings.speed; var callback, speed = settings.get('transition') === "none" ? 0 : settings.get('speed');
$loaded.empty().remove(); // Using empty first may prevent some IE7 issues. $loaded.remove();
$loaded = $tag(div, 'LoadedContent').append(object); $loaded = $tag(div, 'LoadedContent').append(object);
@ -789,7 +812,7 @@
$loaded.hide() $loaded.hide()
.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations. .appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
.css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'}) .css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})
.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height. .css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
.prependTo($content); .prependTo($content);
@ -799,18 +822,18 @@
$(photo).css({'float': 'none'}); $(photo).css({'float': 'none'});
setClass(settings.get('className'));
callback = function () { callback = function () {
var total = $related.length, var total = $related.length,
iframe, iframe,
frameBorder = 'frameBorder',
allowTransparency = 'allowTransparency',
complete; complete;
if (!open) { if (!open) {
return; return;
} }
function removeFilter() { // Needed for IE7 & IE8 in versions of jQuery prior to 1.7.2 function removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2
if ($.support.opacity === false) { if ($.support.opacity === false) {
$box[0].style.removeAttribute('filter'); $box[0].style.removeAttribute('filter');
} }
@ -819,41 +842,34 @@
complete = function () { complete = function () {
clearTimeout(loadingTimer); clearTimeout(loadingTimer);
$loadingOverlay.hide(); $loadingOverlay.hide();
trigger(event_complete, settings.onComplete); trigger(event_complete);
settings.get('onComplete');
}; };
$title.html(settings.title).add($loaded).show(); $title.html(settings.get('title')).show();
$loaded.show();
if (total > 1) { // handle grouping if (total > 1) { // handle grouping
if (typeof settings.current === "string") { if (typeof settings.get('current') === "string") {
$current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show(); $current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();
} }
$next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next); $next[(settings.get('loop') || index < total - 1) ? "show" : "hide"]().html(settings.get('next'));
$prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous); $prev[(settings.get('loop') || index) ? "show" : "hide"]().html(settings.get('previous'));
slideshow(); slideshow();
// Preloads images within a rel group // Preloads images within a rel group
if (settings.preloading) { if (settings.get('preloading')) {
$.each([getIndex(-1), getIndex(1)], function(){ $.each([getIndex(-1), getIndex(1)], function(){
var src, var img,
img,
i = $related[this], i = $related[this],
data = $.data(i, colorbox); settings = new Settings(i, $.data(i, colorbox)),
src = settings.get('href');
if (data && data.href) { if (src && isImage(settings, src)) {
src = data.href; src = retinaUrl(settings, src);
if ($.isFunction(src)) {
src = src.call(i);
}
} else {
src = $(i).attr('href');
}
if (src && isImage(data, src)) {
src = retinaUrl(data, src);
img = document.createElement('img'); img = document.createElement('img');
img.src = src; img.src = src;
} }
@ -863,29 +879,27 @@
$groupControls.hide(); $groupControls.hide();
} }
if (settings.iframe) { if (settings.get('iframe')) {
iframe = $tag('iframe')[0]; iframe = document.createElement('iframe');
if (frameBorder in iframe) { if ('frameBorder' in iframe) {
iframe[frameBorder] = 0; iframe.frameBorder = 0;
} }
if (allowTransparency in iframe) { if ('allowTransparency' in iframe) {
iframe[allowTransparency] = "true"; iframe.allowTransparency = "true";
} }
if (!settings.scrolling) { if (!settings.get('scrolling')) {
iframe.scrolling = "no"; iframe.scrolling = "no";
} }
$(iframe) $(iframe)
.attr({ .attr({
src: settings.href, src: settings.get('href'),
name: (new Date()).getTime(), // give the iframe a unique name to prevent caching name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
'class': prefix + 'Iframe', 'class': prefix + 'Iframe',
allowFullScreen : true, // allow HTML5 video to go fullscreen allowFullScreen : true // allow HTML5 video to go fullscreen
webkitAllowFullScreen : true,
mozallowfullscreen : true
}) })
.one('load', complete) .one('load', complete)
.appendTo($loaded); .appendTo($loaded);
@ -894,21 +908,21 @@
iframe.src = "//about:blank"; iframe.src = "//about:blank";
}); });
if (settings.fastIframe) { if (settings.get('fastIframe')) {
$(iframe).trigger('load'); $(iframe).trigger('load');
} }
} else { } else {
complete(); complete();
} }
if (settings.transition === 'fade') { if (settings.get('transition') === 'fade') {
$box.fadeTo(speed, 1, removeFilter); $box.fadeTo(speed, 1, removeFilter);
} else { } else {
removeFilter(); removeFilter();
} }
}; };
if (settings.transition === 'fade') { if (settings.get('transition') === 'fade') {
$box.fadeTo(speed, 0, function () { $box.fadeTo(speed, 0, function () {
publicMethod.position(0, callback); publicMethod.position(0, callback);
}); });
@ -924,21 +938,17 @@
photo = false; photo = false;
element = $related[index];
makeSettings();
trigger(event_purge); trigger(event_purge);
trigger(event_load);
settings.get('onLoad');
trigger(event_load, settings.onLoad); settings.h = settings.get('height') ?
setSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :
settings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');
settings.h = settings.height ? settings.w = settings.get('width') ?
setSize(settings.height, 'y') - loadedHeight - interfaceHeight : setSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :
settings.innerHeight && setSize(settings.innerHeight, 'y'); settings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');
settings.w = settings.width ?
setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
settings.innerWidth && setSize(settings.innerWidth, 'x');
// Sets the minimum dimensions for use in image scaling // Sets the minimum dimensions for use in image scaling
settings.mw = settings.w; settings.mw = settings.w;
@ -946,22 +956,22 @@
// Re-evaluate the minimum width and height based on maxWidth and maxHeight values. // Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead. // If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
if (settings.maxWidth) { if (settings.get('maxWidth')) {
settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth; settings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;
settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw; settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
} }
if (settings.maxHeight) { if (settings.get('maxHeight')) {
settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight; settings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;
settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh; settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
} }
href = settings.href; href = settings.get('href');
loadingTimer = setTimeout(function () { loadingTimer = setTimeout(function () {
$loadingOverlay.show(); $loadingOverlay.show();
}, 100); }, 100);
if (settings.inline) { if (settings.get('inline')) {
// Inserts an empty placeholder where inline content is being pulled from. // Inserts an empty placeholder where inline content is being pulled from.
// An event is bound to put inline content back when Colorbox closes or loads new content. // An event is bound to put inline content back when Colorbox closes or loads new content.
$inline = $tag(div).hide().insertBefore($(href)[0]); $inline = $tag(div).hide().insertBefore($(href)[0]);
@ -971,84 +981,83 @@
}); });
prep($(href)); prep($(href));
} else if (settings.iframe) { } else if (settings.get('iframe')) {
// IFrame element won't be added to the DOM until it is ready to be displayed, // IFrame element won't be added to the DOM until it is ready to be displayed,
// to avoid problems with DOM-ready JS that might be trying to run in that iframe. // to avoid problems with DOM-ready JS that might be trying to run in that iframe.
prep(" "); prep(" ");
} else if (settings.html) { } else if (settings.get('html')) {
prep(settings.html); prep(settings.get('html'));
} else if (isImage(settings, href)) { } else if (isImage(settings, href)) {
href = retinaUrl(settings, href); href = retinaUrl(settings, href);
photo = document.createElement('img'); photo = new Image();
$(photo) $(photo)
.addClass(prefix + 'Photo') .addClass(prefix + 'Photo')
.bind('error',function () { .bind('error',function () {
settings.title = false; prep($tag(div, 'Error').html(settings.get('imgError')));
prep($tag(div, 'Error').html(settings.imgError));
}) })
.one('load', function () { .one('load', function () {
var percent;
if (request !== requests) { if (request !== requests) {
return; return;
} }
$.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){ // A small pause because some browsers will occassionaly report a
var attr = $(element).attr(val) || $(element).attr('data-'+val); // img.width and img.height of zero immediately after the img.onload fires
if (attr) { setTimeout(function(){
photo.setAttribute(val, attr); var percent;
$.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){
var attr = $(settings.el).attr(val) || $(settings.el).attr('data-'+val);
if (attr) {
photo.setAttribute(val, attr);
}
});
if (settings.get('retinaImage') && window.devicePixelRatio > 1) {
photo.height = photo.height / window.devicePixelRatio;
photo.width = photo.width / window.devicePixelRatio;
} }
});
if (settings.retinaImage && window.devicePixelRatio > 1) { if (settings.get('scalePhotos')) {
photo.height = photo.height / window.devicePixelRatio; setResize = function () {
photo.width = photo.width / window.devicePixelRatio; photo.height -= photo.height * percent;
} photo.width -= photo.width * percent;
};
if (settings.scalePhotos) { if (settings.mw && photo.width > settings.mw) {
setResize = function () { percent = (photo.width - settings.mw) / photo.width;
photo.height -= photo.height * percent; setResize();
photo.width -= photo.width * percent; }
}; if (settings.mh && photo.height > settings.mh) {
if (settings.mw && photo.width > settings.mw) { percent = (photo.height - settings.mh) / photo.height;
percent = (photo.width - settings.mw) / photo.width; setResize();
setResize(); }
} }
if (settings.mh && photo.height > settings.mh) {
percent = (photo.height - settings.mh) / photo.height; if (settings.h) {
setResize(); photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
}
if ($related[1] && (settings.get('loop') || $related[index + 1])) {
photo.style.cursor = 'pointer';
photo.onclick = function () {
publicMethod.next();
};
} }
}
if (settings.h) {
photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
}
if ($related[1] && (settings.loop || $related[index + 1])) {
photo.style.cursor = 'pointer';
photo.onclick = function () {
publicMethod.next();
};
}
photo.style.width = photo.width + 'px'; photo.style.width = photo.width + 'px';
photo.style.height = photo.height + 'px'; photo.style.height = photo.height + 'px';
setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
prep(photo); prep(photo);
}, 1); }, 1);
}); });
setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise. photo.src = href;
photo.src = href;
}, 1);
} else if (href) { } else if (href) {
$loadingBay.load(href, settings.data, function (data, status) { $loadingBay.load(href, settings.get('data'), function (data, status) {
if (request === requests) { if (request === requests) {
prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents()); prep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());
} }
}); });
} }
@ -1056,14 +1065,14 @@
// Navigates to the next page/image in a set. // Navigates to the next page/image in a set.
publicMethod.next = function () { publicMethod.next = function () {
if (!active && $related[1] && (settings.loop || $related[index + 1])) { if (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {
index = getIndex(1); index = getIndex(1);
launch($related[index]); launch($related[index]);
} }
}; };
publicMethod.prev = function () { publicMethod.prev = function () {
if (!active && $related[1] && (settings.loop || index)) { if (!active && $related[1] && (settings.get('loop') || index)) {
index = getIndex(-1); index = getIndex(-1);
launch($related[index]); launch($related[index]);
} }
@ -1074,26 +1083,22 @@
if (open && !closing) { if (open && !closing) {
closing = true; closing = true;
open = false; open = false;
trigger(event_cleanup);
trigger(event_cleanup, settings.onCleanup); settings.get('onCleanup');
$window.unbind('.' + prefix); $window.unbind('.' + prefix);
$overlay.fadeTo(settings.get('fadeOut') || 0, 0);
$overlay.fadeTo(settings.fadeOut || 0, 0); $box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {
$box.hide();
$box.stop().fadeTo(settings.fadeOut || 0, 0, function () { $overlay.hide();
$box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
trigger(event_purge); trigger(event_purge);
$loaded.remove();
$loaded.empty().remove(); // Using empty first may prevent some IE7 issues.
setTimeout(function () { setTimeout(function () {
closing = false; closing = false;
trigger(event_closed, settings.onClosed); trigger(event_closed);
settings.get('onClosed');
}, 1); }, 1);
}); });
} }
@ -1119,9 +1124,9 @@
// A method for fetching the current element Colorbox is referencing. // A method for fetching the current element Colorbox is referencing.
// returns a jQuery object. // returns a jQuery object.
publicMethod.element = function () { publicMethod.element = function () {
return $(element); return $(settings.el);
}; };
publicMethod.settings = defaults; publicMethod.settings = defaults;
}(jQuery, document, window)); }(jQuery, document, window));

File diff suppressed because one or more lines are too long