Connect with us

Maine

Letter: Compel Maine’s representatives to hold town halls

Published

on

Letter: Compel Maine’s representatives to hold town halls


Recent events have made it abundantly clear that the people we have democratically elected to act on our behalf in Congress, who are supposed to act in the best interests of the people of this state, are unwilling to face those very same people when they have made an unpopular decision.

I am not saying that our representatives should always do what is popular. There are times when tough decisions must be made, but part of their job is to go back to the Maine people and explain the reasoning behind their decisions. Neglecting to do so destroys voter trust in our leaders and in the office they hold. Trust cannot easily be repaired and without it democracy cannot function.

Rep. Golden and Sen. Collins have both refused to make themselves publicly accountable to the people they are supposed to represent. If our representatives will not make themselves meaningfully available to their constituents, then it becomes necessary for a law to force them to do so. Which is why Maine must pass legislation requiring that all officials elected to Congress must hold town hall meetings within a reasonable time frame, and held in such a manner that all the people they represent can have their voices heard.

Furthermore, a poll should be held at the end of these town hall meetings and if the elected representative cannot achieve more than a 50% approval rating then an immediate emergency election should be triggered in which they cannot participate.

Advertisement

Christopher Parelius
Portland

« Previous

Letter: Education in Maine must be about more than scores



Source link

Maine

Yoga for Good: Maine woman raising money through movement

Published

on

Yoga for Good: Maine woman raising money through movement


HELPED MORE THAN 300,000 VETERANS VISIT THE MEMORIALS BUILT IN THEIR HONOR. YOU MAY KNOW HER FROM HER POPULAR GOAT YOGA CLASSES… OR THE INSPIRING ‘YOGA FOR GOOD’ SERIES. ASHLEY FLOWERS’ WORK IS ALL ABOUT BRINGING PEOPLE TOGETHER. JAMIE AZULAY INTRODUCES US TO THIS WEEK’S COMMUNITY CHAMPION. THIS MAY LOOK LIKE A CLOTHING STORE – IT IS… BUT IT’S ALSO A MAKESHIFT YOGA STUDIO. TOAD AND CO IN PORTLAND IS ONE OF SEVERAL SPOTS YOU CAN FIND ASHLEY FLOWERS LEADING LOCAL YOGIS IN THEIR PRACTICE. “I THINK HEALTHY COMMUNITIES ARE WELL CONNECTED COMMUNITIES.” AND IT’S HERE ON DIAMOND STREET WHERE ASHLEY LEADS ‘YOGA FOR GOOD’ – DONATION-BASED CLASSES THAT SUPPORT LOCAL NON-PROFITS. “EXPERIENCING THAT SENSE OF JOY AND HAPPINESS AND PEACEFULNESS THAT YOGA BRINGS, AND KNOWING THAT YOU’RE ALL COMING TOGETHER TO DO SOMETHING GOOD FOR YOURSELVES AND THE WORLD, I THINK, IS REALLY POWERFUL.” IN 2 YEARS — 2-THOUSAND DOLLARS HAS BEEN RAISED FOR 9 NON-PROFITS… AND SHE’S ADDING MORE TO THE LINE-UP. THIS WEEK… IT WAS ALL ABOUT THE ADAPTIVE OUTDOOR EDUCATION CENTER AND THEIR MISSION TO PROVIDE RECREATION PROGRAMMING FOR PEOPLE WITH DIFFERENT ABILITIES. “IF YOU CAN BREATHE, YOU CAN DO YOGA. YOGA IS ACCESSIBLE TO EVERYONE.” “SHE ALWAYS HAS SUCH GREAT MESSAGES AS A PART OF BEING IN THE YOGA CLASS. IT’S NOT JUST COMING TO YOGA AND STRETCHING AND BREATHING, BUT ALSO WHAT CAN YOU GIVE BACK TO THE COMMUNITY AND HOW CAN WE WORK TOGETHER TO SUPPORT EACH OTHER?” COMMUNITY… AND MAKING THE WORLD A BETTER PLACE… IS WHAT ASHLEY SAYS YOGA IS ALL ABOUT. “IF YOU COULD HELP PEOPLE TO CULTIVATE A SENSE OF RESPECT FOR THEMSELVES, THEN MAYBE YOU COULD HAVE THAT SENSE OF RESPECT TO BUBBLE OUT INTO THE WORLD, AND HEAL THE WORLD

Advertisement

Yoga for Good: Maine woman raising money through movement

Updated: 11:49 AM EDT Apr 11, 2026

Editorial Standards

Advertisement

Ashley Flowers started “Yoga for Good,” a donation-based class series in support of local nonprofits, in 2024. Since then, she’s raised $2,000 for nine organizations.Flowers said, “Experiencing that sense of joy and happiness and peacefulness that yoga brings, and knowing that you’re all coming together to do something good for yourselves and the world, I think, is really powerful.”Toad & Co hosts “Yoga for Good” in the back of their Portland clothing store. After class, they collect payment, which is a suggested $15 donation. However, attendees are encouraged to pay what they can. “I don’t ever want to turn someone away from yoga because money is an issue,” Flowers said. All proceeds go directly to the cause. The most recent class on April 10 was held in support of the Adaptive Outdoor Education Center. The AOEC is a nonprofit aimed at providing recreation programming for people with different abilities. Inclusivity is a priority in Flowers’ practice. “If you can breathe, you can do yoga,” she said. “Yoga is accessible to everyone.” The AOEC has been the beneficiary of five Yoga for Good classes. When asked about working with Flowers, the nonprofit’s program and development coordinator, Alessa Foley, said, “She always has such great messages as a part of being in the yoga class. It’s not just coming to yoga and stretching and breathing, but also what can you give back to the community, and how can we work together to support each other?”That’s what Flowers thinks yoga is all about. She said, “If you could help people to cultivate a sense of respect for themselves, then maybe you could have that sense of respect to bubble out into the world and heal the world.” When Flowers is not teaching at Toad & Co, you may find her leading goat yoga at Smiling Hill Farm, online classes, or workshops at other local farms. She feels operating without a brick-and-mortar studio is a good way to support her community by drawing people into local businesses. “I think healthy communities are well-connected communities,” she said. Flowers has already lined up the next five Yoga for Good classes, which will run through September. RSVPs can be made on her website. Fri. May 8 at 8 a.m. — Adaptive Outdoor Education CenterSat. June 13 at 9 a.m. — Dempsey CenterSat. July 11 at 11 a.m. — Impact HorseSat. August 8 at 9 a.m. — Dempsey Center Fri. Sept 11 at 8 a.m. — Sea Change Yoga

Ashley Flowers started “Yoga for Good,” a donation-based class series in support of local nonprofits, in 2024. Since then, she’s raised $2,000 for nine organizations.

Flowers said, “Experiencing that sense of joy and happiness and peacefulness that yoga brings, and knowing that you’re all coming together to do something good for yourselves and the world, I think, is really powerful.”

Advertisement

Toad & Co hosts “Yoga for Good” in the back of their Portland clothing store. After class, they collect payment, which is a suggested $15 donation. However, attendees are encouraged to pay what they can. “I don’t ever want to turn someone away from yoga because money is an issue,” Flowers said.

All proceeds go directly to the cause. The most recent class on April 10 was held in support of the Adaptive Outdoor Education Center. The AOEC is a nonprofit aimed at providing recreation programming for people with different abilities.

Inclusivity is a priority in Flowers’ practice. “If you can breathe, you can do yoga,” she said. “Yoga is accessible to everyone.”

Advertisement

The AOEC has been the beneficiary of five Yoga for Good classes. When asked about working with Flowers, the nonprofit’s program and development coordinator, Alessa Foley, said, “She always has such great messages as a part of being in the yoga class. It’s not just coming to yoga and stretching and breathing, but also what can you give back to the community, and how can we work together to support each other?”

That’s what Flowers thinks yoga is all about. She said, “If you could help people to cultivate a sense of respect for themselves, then maybe you could have that sense of respect to bubble out into the world and heal the world.”

When Flowers is not teaching at Toad & Co, you may find her leading goat yoga at Smiling Hill Farm, online classes, or workshops at other local farms. She feels operating without a brick-and-mortar studio is a good way to support her community by drawing people into local businesses.

“I think healthy communities are well-connected communities,” she said.

Flowers has already lined up the next five Yoga for Good classes, which will run through September. RSVPs can be made on her website.

Advertisement
  • Fri. May 8 at 8 a.m. — Adaptive Outdoor Education Center
  • Sat. June 13 at 9 a.m. — Dempsey Center
  • Sat. July 11 at 11 a.m. — Impact Horse
  • Sat. August 8 at 9 a.m. — Dempsey Center
  • Fri. Sept 11 at 8 a.m. — Sea Change Yoga



Source link

Continue Reading

Maine

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Published

on

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine


Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Advertisement

STUFF DONE. GO DOWN THERE AND KICK BUTT.” THE MAINE DEMOCRATIC PRIMARY IS SCHEDULED FOR JUNE NINTH. VETERANS OF THE 1988 PERSIAN GULF MINE STRIKE ARE NOW REUNITING HERE IN MAINE. THE BATH IRON WORKS BUILT SHIP SUFFERED MAJOR DAMAGE AFTER HITTING AN IRANIAN MINE ON APRIL 14 1988. TONIGHT CATE MCCUSKER SHARES THE HEROIC ACTIONS OF THE CREW AND THE BROTHERHOOD THAT REMAINS TODAY. TUESDAY MARKS 38 YEARS SINCE A SHIP BUILT BY BATH IRON WORKS DEFIED ALL ODDS – AND SURVIVED A DANGEROUS STRIKE IN THE PERSUAN GULF…THANKS TO THE BRAVE EFFORTS OF ITS CREW. “ON OUR WAY BACK THAT WAY FROM THE MINEFIELD, AND WE HIT ONE OF THE MINES.” WHILE ON A MISSION IN THE PERSIAN GULF – DURING THE IRAN-IRAQ WAR – THE USS SAMUEL B ROBERTS STRUCK AN IRANIAN MINE “I WAS FREAKING OUT, YOU KNOW, I’M 19. NEVER GOING TO GET MARRIED, NEVER GOING TO SEE MY FAMILY AGAIN.” THE DAMAGE WAS DRASTIC – LEAVING A MASSIVE HOLE IN THE HULL OF THE SHIP – BUT THE CREW JUMPED INTO ACTION… “OUR TRAINING KICKED IN AND EVERYBODY DID WHAT THEY HAD TO DO, WHATEVER THEIR JOB WAS. FOR ME PERSONALLY, I ONLY KIND OF HESITATED AT ONE TIME, WONDERING WHAT MY WIFE WAS THINKING AT THE TIME, AND I PUSHED THAT ASIDE AND THEN WENT TO WORK. MIRACULOUSLY – EVERYONE ON BOARD SURVIVED – AND ONLY TEN PEOPLE WERE INJURED… WE FOUGHT FIRES AND FLOODING FOR ABOUT FIVE HOURS OR BETTER. THE MINE BLAST HIT US ON THE PORT SIDE, BROKE THE KEEL OF THE SHIP AND CRACKED THE SUPERSTRUCTURE ALL THE WAY AROUND. YEARS LATER – THE GROUP FREQUENTLY REUNITES… FOREVER BONDED BY THE TRAUMA AND BROTHERHOOD OF THAT MOMENT. THIS TIME THEY’VE RETURNED TO BATH – WHERE THE USS SAMUEL ROBERTS WAS BUILT… ” EACH SHIP HAS A MOTTO. OURS WAS NO HIGHER HONOR.” THIS SHIP MEANS SO MUCH TO US. AND AS THE US IS CURRENTLY ENGAGED IN A WAR WITH IRAN – WHERE MEMBERS OF THE MILITARY ARE ALSO ENCOUNTERING DANGEROUS SITUATIONS IN THAT AREA OF THE WORLD… VETERANS OF THE 1988 PERSIAN GULF MINE STRIKE SAY…

Advertisement

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Updated: 10:31 PM EDT Apr 10, 2026

Editorial Standards

Advertisement

Veterans of the USS Samuel B Roberts are reuniting in Maine this weekend.Tuesday marks 38 years since the ship struck an Iranian mine in the Persian Gulf.“Our training kicked in, and everybody did what they had to do,” crewmember Brad Gutcher said. “We fought fires and flooding for about five hours. The mine blast hit us on the port side, broke the keel of the ship, and cracked the structure all the way around.”Everyone on board survived, and they now meet every few years for remembrance and camaraderie. This year, the reunion is held in Bath, as the USS Samuel B Roberts was built by Bath Iron Works.“Each ship has a motto. Ours was no higher honor,” crewmember Shane Deitert said. “This ship means so much to us.”

Veterans of the USS Samuel B Roberts are reuniting in Maine this weekend.

Tuesday marks 38 years since the ship struck an Iranian mine in the Persian Gulf.

Advertisement

“Our training kicked in, and everybody did what they had to do,” crewmember Brad Gutcher said. “We fought fires and flooding for about five hours. The mine blast hit us on the port side, broke the keel of the ship, and cracked the structure all the way around.”

Everyone on board survived, and they now meet every few years for remembrance and camaraderie. This year, the reunion is held in Bath, as the USS Samuel B Roberts was built by Bath Iron Works.

“Each ship has a motto. Ours was no higher honor,” crewmember Shane Deitert said. “This ship means so much to us.”

Advertisement
Advertisement

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

Advertisement

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

Advertisement

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

Advertisement

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

Advertisement

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

Advertisement

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

Advertisement

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

Advertisement

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

Advertisement

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

Advertisement

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

Advertisement

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

Loading more articles…



Source link

Advertisement
Continue Reading

Maine

Ailing Hearts of Pine return to Maine eager for home opener at raucous Fitzy

Published

on

Ailing Hearts of Pine return to Maine eager for home opener at raucous Fitzy


The Portland Hearts of Pine men’s pro soccer team practices at Fitzpatrick Stadium on Tuesday as they prepare for their home opener on Saturday. (Derek Davis/Staff Photographer)

When the Portland Hearts of Pine play their 2026 USL League One home opener Saturday at Fitzpatrick Stadium, it will be 28 days since they last scored a goal.

Maine’s professional men’s soccer team is in need of a boost from its fans, who came out in record-setting droves last season. Portland drew about 5,800 fans per match in 2025, tops in the USL League One. Hearts of Pine management expects to bring in over 6,000 per game in 2026 by expanding the standing-room-only sections.

“I’m really excited for the home opener. The whole atmosphere is spot-on,” said second-year midfielder Michel Poon-Angeron. “It feels like maybe 20,000 people at times.”

Advertisement

The Hearts are 1-1-1 in USL1 play and 11th in the 17-team league with four points after three matches. For the second consecutive season, their home opener (6 p.m., ESPN+) opponent is One Knoxville SC, the defending league champion. Knoxville (3-1-1) is in a first-place tie with FC Naples and Spokane Velocity, each with 10 points after five matches.

Starting with its 1-0 loss to amateur club Vermont Green in the U.S. Open Cup, Portland has been shut out in three consecutive matches.

A 0-0 tie across the country at AV Alta FC in California was an acceptable result, considering it was Portland’s third match in eight days.

A 1-0 loss without a shot on goal a week later at expansion side Sarasota Paradise?

Suffice to say it’s not the start the second-year franchise was imagining, particularly since it returned 13 players who had combined to score 34 of the team’s 51 goals in its inaugural 12-8-12 USL1 season.

Advertisement

Midfielder Ollie Wright, who led Portland with 13 overall goals (11 in league play) in 2025, said it’s far too soon to panic.

“We’re in a good place to kick on. Luckily, no one in the league has gotten off to a great start,” Wright said. “We (had) a weekend off to prepare and get guys back to 100% fitness, myself included. Goals have been a little bit hard to come by, but we were in a similar position last year and we found our form. So I think it’s just a matter of one or two going in and the floodgates will open.”

Portland Hearts of Pine coach Bobby Murphy gives directions to players during a drill at Fitzpatrick Stadium. (Brianna Soukup/Staff Photographer)

Nagging injuries to some players have limited coach Bobby Murphy’s ability to build a consistent lineup card. Twenty-two of Portland’s 26 players have made at least one start. Only five players have seen action in all four games — regular starting center back Kemali Green, returning midfield standouts Masashi Wada and Poon-Angeron, new left back Adam Armour, and new attacking midfielder Matteo Kidd.

Wright (hamstring) was one of five regular participants who did not make the trip to Sarasota. Center back Brecc Evans hasn’t played since the season opener. Midfielder Mikey Lopez was out with a one-game red-card suspension, and back Mo Mohamed (Somalia) and midfielder JayTee Kamara (Sierra Leone) — two key players who can generate offensive thrust from the right side — were away on international duties.

Advertisement

Poon-Angeron said the fervor and support at Fitzy also comes with a responsibility to perform. It’s something the 13 newcomers are learning. For many of them, the opportunity to play in front of massive crowds influenced their decision to sign with Portland. But they haven’t experienced it. Yet.

“What this group will learn, and a lot of the new guys will learn, is what it means to play for this club,” Poon-Angeron said. “It’s a huge honor. It’s a huge privilege. As you know this atmosphere is electric and you’ve got to represent.”

The Hearts started the season well, winning the season opener 3-1 against the New York Cosmos with goals from Wada, a returning all-USL1 first-team pick, and pro rookies Konstantinos Goergallides and Aboubacar Camara.

Murphy welcomed a two-week break between games. After a preseason schedule that included stints in Bermuda and South Carolina, coupled with three road league games, the club hadn’t been in Portland for longer than five days in two months, he said.

The additional training days at home provided the club an opportunity to regroup, heal up, and for Murphy to reinforce what his preferred attacking, pressuring style of play demands.

Advertisement

“We’ve struggled with just getting everybody together, and new guys really coming to terms with what it means to play for this club, the effort that’s required,” he said. “So I think that’s where we’re lacking a little bit. But we’ve had good days of training so hopefully we’ll be further down that path.”



Source link

Continue Reading

Trending