Porter Airlines is improving service between Toronto and Quebec, adding daily round-trip service between Pearson and Jean Lesage airports starting May 17.

This new route is planned to be seasonal and will ultimately remain in place until October 26th. Departures are daily from Toronto at 9:00 a.m. and from Quebec at 11:20 a.m.

The service is in addition to existing connections already provided between Quebec and Toronto’s Billy Bishop Airport, and will allow travelers to connect to and from Western Canada destinations such as Vancouver, Calgary, Edmonton and Winnipeg. You can benefit from connectivity.

(function () {
var slotName = “ad65e5ff4c63458-adSlotLppos”;
var dimensions = (“fluid”,(634,125),(634,150),(634,180),(634,200),(634,634),(634,400),(640,360),(640,480),(728,200));
var positionName = null;
var pageBlock = “text”;
const IS_MOBILE = window.innerWidth {
if (googleIframe.contentWindow === e.source){
if(e.data.nbArticles) {
let title = document.createElement(“div”)
let nbArticles = document.createElement(“div”)
title.innerHTML = “Série commanditée”
nbArticles.innerHTML = e.data.nbArticles + ” articles”
let header = document.createElement(“div”)
header.classList.add(“adSpotBlock__slotInnerHeader”)
header.appendChild(title)
header.appendChild(nbArticles)
slotInner.prepend(header)
}
}
})
}

function setUpPanorama() {
console.debug(‘Ads: Panorama Ad detected for ‘ + slotName);
let slotInner = document.getElementById(slotName);
slotInner.parentElement.style.width=”100%”;
let iframeWrapper = slotInner.firstElementChild
iframeWrapper.classList.add(‘panorama__wrapper’)
if (IS_MOBILE){
makeFullWidth(slotInner)
iframeWrapper.classList.add(‘panorama__wrapper–mobile’)
}
else{
iframeWrapper.classList.add(‘panorama__wrapper–default’)
if(pageBlock===”body”){
makeFullWidth(slotInner)
}
}
setupPanoramaIframe(iframeWrapper)

function makeFullWidth(slotInner){
let parentContainerElement = slotInner.closest(“.homeHeadlinesRow__adWrapper”)||slotInner.closest(“.homeRow__adWrapper”)||slotInner.closest(“.homeRow”)
if (!parentContainerElement){
parentContainerElement = slotInner.closest(“.adsWrapper”)
parentContainerElement.classList.add(“panorama–article”);
}else{
parentContainerElement.classList.add(“panorama–default”);
}
}

function setupPanoramaIframe(iframeWrapper){
let googleIframe = iframeWrapper.firstElementChild;
googleIframe.style.height = “100%”
window.addEventListener(‘message’, (e)=> {
if (googleIframe.contentWindow === e.source){
if(e.data.sideMarginBackgroundColor) {
iframeWrapper.style.backgroundColor = e.data.sideMarginBackgroundColor;
}
if(e.data.foregroundUrl){
createForeground(iframeWrapper,e.data.foregroundUrl,e.data.foregroundPosition,”img”)
}
if(e.data.foregroundHtmlUrl){
createForeground(iframeWrapper,e.data.foregroundHtmlUrl,e.data.foregroundPosition,”iframe”)
}
if(e.data.backgroundImgUrl){
createBackground(iframeWrapper,e.data.backgroundImgUrl,e.data.backgroundColor,”img”)
}
if(e.data.backgroundHtmlUrl){
createBackground(iframeWrapper,e.data.backgroundHtmlUrl,e.data.backgroundColor,”iframe”)
}
}
});
}

function createBackground(iframeWrapper,backgroundUrl,backgroundColor,backgroundElementType){
let backgroundElement = createBackgroundElement(backgroundUrl,backgroundElementType)
let backgroundWrapper = createBackgroundWrapper(backgroundColor)
let backgroundClipper = createBackgroundClipper()

backgroundWrapper.appendChild(backgroundElement)
backgroundClipper.appendChild(backgroundWrapper)
iframeWrapper.appendChild(backgroundClipper)

alignBackgroundToAdWrapper(backgroundWrapper, iframeWrapper)
let widthCache = window.innerWidth
window.addEventListener(“resize”,()=>{
if (window.innerWidth!==widthCache){
widthCache=window.innerWidth;
alignBackgroundToAdWrapper(backgroundWrapper, iframeWrapper)
}
})
}

function createForeground(iframeWrapper,foregroundUrl,foregroundPosition,type){
let foreground = document.createElement(type)
foreground.classList.add(“panorama__foregroundImg”)
switch (foregroundPosition){
case “top”:
foreground.style.alignSelf=”flex-start”
break;
case “center”:
foreground.style.alignSelf=”center”
break;
case “bottom”:
foreground.style.alignSelf=”flex-end”
break;
}
if (type===”iframe”){
foreground.style.height=”100%”
}
foreground.src = foregroundUrl
iframeWrapper.appendChild(foreground)
}

function createBackgroundElement(backgroundUrl, type) {
let backgroundElement = document.createElement(type);
backgroundElement.setAttribute(“src”,backgroundUrl);
backgroundElement.classList.add(“panorama__backgroundElement”);

if (“img” === type) {
backgroundElement.classList.add(“panorama__backgroundElement–img”);
}

return backgroundElement;
}

function createBackgroundWrapper(backgroundColor){
let backgroundWrapper = document.createElement(“div”)
backgroundWrapper.classList.add(‘panorama__backgroundWrapper’)
backgroundWrapper.style.backgroundColor=backgroundColor;
switch (pageBlock){
case “body”:
backgroundWrapper.classList.add(‘panorama__backgroundWrapper–homepage’)
break;
case “text”:
backgroundWrapper.classList.add(‘panorama__backgroundWrapper–article’)
break;
default:
backgroundWrapper.classList.add(‘panorama__backgroundWrapper–default’)
break;
}
return backgroundWrapper;
}

function createBackgroundClipper(){
let backgroundClipper = document.createElement(“div”)
backgroundClipper.classList.add(‘panorama__backgroundClipper’)
return backgroundClipper
}

function alignBackgroundToAdWrapper(backgroundToResize, sourceWrapper){
backgroundToResize.style.width = sourceWrapper.clientWidth+”px”;
if(pageBlock!==”body”) {
backgroundToResize.style(‘left’) = sourceWrapper.getBoundingClientRect().left+”px”;
}
}
}

LPAds.registerSpotReceived(slotName, function (slotData) {
if (slotData) {
if (LPAds.isProductGalleryAd(slotData.creativeTemplateId)) {
setUpProductGalleryAd();
} else if (LPAds.isNativeAd(slotData.creativeTemplateId)) {
setUpNativeAd();
} else if (LPAds.isNativeAdXtra(slotData.creativeTemplateId)) {
setUpNativeAdXtra();
}
}
});
LPAds.registerSpotRenderEnded(slotName, function(slotData) {
if (slotData) {
if (LPAds.isPanorama(slotData.creativeTemplateId)) {
setUpPanorama();
}else if (LPAds.isNativeAdSerieXtra(slotData.creativeTemplateId)) {
setUpNativeAdSerieXtra();
}
}
});

LPAds.displayAdSpot(slotName);
})()