103 lines
2.4 KiB
JavaScript
103 lines
2.4 KiB
JavaScript
|
|
var IFRAME_NS = 'iframe',
|
|
_emptyPage = '//about:blank',
|
|
|
|
_fixIframeBugs = function(isShowing) {
|
|
if(mfp.currTemplate[IFRAME_NS]) {
|
|
var el = mfp.currTemplate[IFRAME_NS].find('iframe');
|
|
if(el.length) {
|
|
// reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
|
|
if(!isShowing) {
|
|
el[0].src = _emptyPage;
|
|
}
|
|
|
|
// IE8 black screen bug fix
|
|
if(mfp.isIE8) {
|
|
el.css('display', isShowing ? 'block' : 'none');
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
$.magnificPopup.registerModule(IFRAME_NS, {
|
|
|
|
options: {
|
|
markup: '<div class="mfp-iframe-scaler">'+
|
|
'<div class="mfp-close"></div>'+
|
|
'<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
|
|
'</div>',
|
|
|
|
srcAction: 'iframe_src',
|
|
|
|
// we don't care and support only one default type of URL by default
|
|
patterns: {
|
|
youtube: {
|
|
index: 'youtube.com',
|
|
id: 'v=',
|
|
src: '//www.youtube.com/embed/%id%?autoplay=1'
|
|
},
|
|
vimeo: {
|
|
index: 'vimeo.com/',
|
|
id: '/',
|
|
src: '//player.vimeo.com/video/%id%?autoplay=1'
|
|
},
|
|
gmaps: {
|
|
index: '//maps.google.',
|
|
src: '%id%&output=embed'
|
|
}
|
|
}
|
|
},
|
|
|
|
proto: {
|
|
initIframe: function() {
|
|
mfp.types.push(IFRAME_NS);
|
|
|
|
_mfpOn('BeforeChange', function(e, prevType, newType) {
|
|
if(prevType !== newType) {
|
|
if(prevType === IFRAME_NS) {
|
|
_fixIframeBugs(); // iframe if removed
|
|
} else if(newType === IFRAME_NS) {
|
|
_fixIframeBugs(true); // iframe is showing
|
|
}
|
|
}// else {
|
|
// iframe source is switched, don't do anything
|
|
//}
|
|
});
|
|
|
|
_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
|
|
_fixIframeBugs();
|
|
});
|
|
},
|
|
|
|
getIframe: function(item, template) {
|
|
var embedSrc = item.src;
|
|
var iframeSt = mfp.st.iframe;
|
|
|
|
$.each(iframeSt.patterns, function() {
|
|
if(embedSrc.indexOf( this.index ) > -1) {
|
|
if(this.id) {
|
|
if(typeof this.id === 'string') {
|
|
embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
|
|
} else {
|
|
embedSrc = this.id.call( this, embedSrc );
|
|
}
|
|
}
|
|
embedSrc = this.src.replace('%id%', embedSrc );
|
|
return false; // break;
|
|
}
|
|
});
|
|
|
|
var dataObj = {};
|
|
if(iframeSt.srcAction) {
|
|
dataObj[iframeSt.srcAction] = embedSrc;
|
|
}
|
|
mfp._parseMarkup(template, dataObj, item);
|
|
|
|
mfp.updateStatus('ready');
|
|
|
|
return template;
|
|
}
|
|
}
|
|
});
|
|
|