With half their case already dismissed, a group of plaintiffs vying to stop the City of Boston’s public-private plan to rehab White Stadium for a pro soccer team made a last-minute motion near the end of trial to try to enhance their legal claims.
The late motion aims to provide a layer of insurance to the plaintiffs’ remaining major claim, by way of a legal theory purportedly backed by state law that gives 10 taxpayers the ability, through the court, to block the type of project the city and Boston Unity Soccer Partners are pursuing with their plan to rebuild the stadium on public parkland.
While 20 neighbors of Franklin Park’s White Stadium joined the Emerald Necklace Conservancy in filing last year’s lawsuit, not all of them were homeowners who pay property taxes. The motion adds to their legal challenge, that the proposed for-profit stadium would illegally privatize protected public land, by ensuring that the plaintiffs include 10 “taxable inhabitants of the City of Boston.”
“Under this statute, this court ‘shall have jurisdiction in equity, upon petition of not less than ten taxable inhabitants of the city or town in which such common or park is located, to restrain the erection of a building on a common or park in violation of this section,’” the motion filed Wednesday by Attorneys Alan Lipkind and Nicholas Allen states.
Advertisement
The motion asserts that the city is violating state statute by erecting a more than 600,000 square-foot building on designated public parkland without legislative approval, and by raising funds for the roughly $200 million project.
That legal argument forms the basis of the plaintiffs’ remaining case, which is that the public-private plan violates Article 97 of the state constitution, which voters approved in 1972 and requires two-thirds approval from the state Legislature for other uses for land and easements taken or acquired for conservation purposes. The city and BUSP deny the privatization claim.
The plaintiffs’ motion “to conform their pleadings to the evidence presented at trial,” drew backlash from attorneys for the City of Boston, who argued that the last-minute legal maneuver should not be allowed by Suffolk Superior Court Judge Matthew Nestor.
An attorney for the city, when the motion was introduced at the trial Wednesday, described it as “extremely prejudicial to us,” given that the plaintiffs were seeking to “add claims in the middle of a trial” that the city’s legal team had not had a chance to review nor prepare evidence for.
Lipkind responded by saying there “no new claims” introduced by the motion.
Advertisement
“It’s just another tool to give the court a legal theory to rely on,” Lipkind said.
A city attorney also sought to convince Nestor to disallow the motion by arguing that it was “futile,” given that the city is only paying for its half of the project, there’s “nothing illegal” about the city spending city funds to build a school building and sports stadium, and Boston Public Schools will retain ownership of White Stadium after it’s rebuilt.
The city’s legal team also argued that the proposed use fits under the “works of beauty and public utility” for Boston residents category that the municipality was authorized to use Franklin Park for, when it was purchased by a public charitable trust in 1947 for the purpose of establishing a stadium there.
The plaintiffs’ half of the case arguing that the trust, the George Robert White Fund, does not allow for “joint undertakings” such as what the city and Boston Unity is proposing, was thrown out by Nestor on the eve of trial Monday.
In this instance, Nestor, who ruled in favor of the city on all pre-trial motions, opted to allow the plaintiffs’ last-minute motion on Wednesday. He had also rejected the city and BUSP’s motion to dismiss the plaintiffs’ claims a day earlier, allowing the trial to continue.
Advertisement
Nestor said that while it’s “always good to bring claims before” a trial, the law is clear that there’s nothing barring a new claim in a civil case … “even though it’s late, really late.”
“But it’s not too uncommon,” Nestor said. “I will allow the motion.”
The matter came up again at the end of the day’s trial session, when Gary Ronan, an attorney for the city, told Nestor that the city’s legal team needed more time “to address the amended complaint.”
Nestor, who had said earlier that he would allow the defendants the ability to address the amended claim by introducing new evidence or a new witness, said that he wouldn’t allow much more time, given that he was looking to wrap up the trial with closing statements on Thursday.
“You know what the theory is so nothing from here on out should be a surprise,” Nestor said. “If there’s anything in the written amended complaint that creates something different, I’ll certainly reconsider it.”
Advertisement
The second day of trial revolved around the city’s witnesses, two city officials who were involved in what they described as an extensive review and design process for the White Stadium rehab and a BPS athletics official who spoke of how he felt the plan would bring much-needed improvements to the run-down 76-year-old facility.
While Nestor ruled against allowing the plaintiffs’ pre-trial motion to bring forward public drinking concerns with the plan, he opted on Wednesday to allow their attorneys to raise the issue of state statute not allowing alcohol on school property.
Nestor, after a city attorney objected, said the city’s legal team opened that door when questioning a witness about permitted events at the stadium, which BPS owns and would share use of with the National Women’s Soccer League expansion team.
The city’s contention that its prior classification of Franklin Park as being protected by Article 97 — a key point of contention in the plaintiffs’ case — was due to a mapping mistake by a retired Parks Department employee was raised again during testimony by Interim Parks Commissioner Liza Meyer.
The issue, regarding classification in city open space plans that go back “decades,” was first raised Tuesday in opening statements by the plaintiffs’ and city’s attorneys.
Advertisement
Day 3 of the high-stakes trial, which will determine the fate of the controversial plan championed by Mayor Michelle Wu, will convene at 9 a.m. Thursday. Wu’s opponent in the mayoral race, Josh Kraft, has called for a pause on the project until the litigation is resolved.
Jessica Johnson of Biddeford will run her fourth Boston Marathon next week. (Courtesy of Jessica Johnson)
Running the storied Boston Marathon is probably every runner’s dream. But for Jessica Johnson, a Biddeford resident and Massabesic Middle School teacher, it wasn’t an overwhelming desire that prompted her. It was boredom.
“I was bored during COVID,” she said. “I was just bored, so I laced up my sneakers, and off I went.”
The other reason, and one of her biggest motivators for running marathons, is her mother, who died of brain cancer in 2002.
Advertisement
All of Johnson’s races have been in her honor.
This year, Johnson is running in partnership with Dana Farber Cancer Institute raising money for cancer research.
“My mom would’ve been my biggest cheerleader,” she said. “I always think of my mom.”
Johnson’s mom often shows up in mysterious ways on marathon courses. Two years ago, Johnson got very sick on the Boston Marathon course.
“I don’t know what happened,” she said. “I probably shouldn’t have kept going, but I did.”
Advertisement
At Mile 15, Johnson stopped at a bus that was there to pick up runners who needed to step away from the course.
She asked her mom for a sign to keep going.
“Her favorite song came on the bus radio,” Johnson said. “I finished the race for her.”
Johnson started running at the end of 2021, and by 2022, she qualified for her first half marathon. Since then, she has completed marathons across the country, including three Boston Marathons.
Johnson’s young daughters meet her at the finish line each year. (Courtesy of Jessica Johnson)
Next week, on April 20, she will run the Boston Marathon for the fourth time on its 130th anniversary, alongside 30,000 fellow runners.
Advertisement
Founded in 1897, the Boston Marathon is one of the pinnacles of racing for marathon runners. It was one of the first to allow women to compete, and the first to feature a wheelchair division.
Each year, over 500,000 spectators line up along the course to cheer on runners — from Hopkinton, to Natick, to Newton and finally, the finish line in Boston’s Copley Square, where Johnson’s daughters will be waiting for her.
Johnson’s daughters have motivated her to finish the race every time, she said.
“I’m always looking to set an example of what hard work does,” Johnson said. “But it’s also about body positivity. I work really hard to get out there, and that’s what I want to show them.”
Each year, Johnson runs the marathon in honor of her mother, who passed away from brain cancer. (Courtesy of Jessica Johnson)
Johnson also runs to honor others who have lost their lives to cancer. Year after year, she asks her community who they would like to honor, and writes their names on her arms.
Advertisement
“Why not find a way to honor other people’s memories too?” she said.
While each of her marathons has been powerful and uplifting, next week’s race will be her last.
She hopes to run a different marathon each spring, something she can’t do while running in Boston.
“I want a personal record on this one. That will give me closure,” she said. “I’m going to go out with a bang.”
Johnson is still fundraising for the race, and donations can be made through her Venmo, @RunForResearch. All proceeds will benefit Dana Farber Cancer Institute.
DORCHESTER, MASS. (WHDH) – A man was rushed to the hospital after a crash between a car and a scooter in Dorchester, according to Boston police.
Police responded to Aspinwall Road at approximately 8:51 p.m. for a report of a motor vehicle accident. Officers said they found one victim hurt on scene. He was taken to the hospital with life-threatening injuries.
People who live in the area said the intersection sees a lot of scooter traffic in the warmer months of the year.
“It’s a little bit dangerous, especially when it gets warm because people are riding mopeds and riding bikes and stuff, and they do tricks,” said one woman who lives in the area. “It’s just a big intersection where cars are coming from every different way and you never know what’s going to happen.”
Advertisement
The crash is under investigation.
This is a developing news story; stay with 7NEWS on-air and online for the latest details.
(Copyright (c) 2026 Sunbeam Television. All Rights Reserved. This material may not be published, broadcast, rewritten, or redistributed.)
Join our Newsletter for the latest news right to your inbox
One Boston Day 2026: How to volunteer, take part across Boston
Advertisement
HE’S NOW BEING CHARGED WITH ARMED ROBBERY. WE’RE COMING UP ON 637 AND WE ARE ALMOST THERE. A WEEK FROM TODAY, THOUSANDS OF RUNNERS WILL TURN ONTO BOYLSTON STREET AND CROSS THE FINISH LINE OF THE BOSTON MARATHON AND BOSTON AND THE BAY ARE KICKING OFF A WHOLE WEEK OF EVENTS BEFORE THE BIG DAY. STARTING WEDNESDAY, THE LINES ARE PAINTED PENDING GOOD WEATHER. THE WORK ON THE STARTING LINE BEGINS THAT DAY IN HOPKINTON. WORK ON THE FINISH LINE IN BACK BAY SHOULD BEGIN ON THURSDAY. SO EXCITING. ON WEDNESDAY IT WILL MARK ONE BOSTON DAY. OF COURSE, THAT’S THE DAY WE HONOR HOW THE CITY CAME TOGETHER IN THE DAYS FOLLOWING THE BOSTON MARATHON BOMBING. YOU ARE ASKED TO SHARE ACTS OF KINDNESS ALL DAY LONG. FINALLY, EVERYTHING MARATHON RELATED COMES TOGETHER ON FRIDAY WITH THE BOSTON MARATHON FAN EXPO. LIKE PREVIOUS YEARS, THAT WILL BE AT THE HYNES CONVENTION CENTER. FOR INFORMATION ON ALL THE EVENTS THIS WEEK, YOU CAN KEEP AN EYE ON WCVB.COM AND OUR MOBILE APP. THAT IS A THRILLING MOMENT WHEN YOU GO TO PICK UP YOUR NUMBER. IT WON’T BE LONG NOW. THE 130TH BOSTON MARATHON ON MONDAY, APRIL 20TH, WCVB.
Advertisement
One Boston Day 2026: How to volunteer, take part across Boston
Updated: 2:17 PM EDT Apr 13, 2026
Editorial Standards ⓘ
Advertisement
Residents and visitors are encouraged to share acts of kindness marking One Boston Day on Wednesday, honoring how the city came together in the days after the Boston Marathon bombing, 13 years ago. The day will also include the annual memorials along Boylston Street. “I hope everyone will join their neighbors today in honoring those we lost and celebrating the love that makes Boston a home for everyone,” Mayor Michelle Wu wrote in a statement. “As spring arrives in Boston each year, we are reminded of the hope and spirit of our city,” said Bill Richard, who created a foundation in honor of his son, Martin, who was killed in the bombing.How to get involvedThe city of Boston and partner organizations are offering several ways for people to participate in One Boston Day and related events, according to the city:Volunteer projects citywide: City departments will host service opportunities on April 15 and in the days leading up to Marathon Monday.Neighborhood cleanup: A youth and family cleanup is scheduled for Saturday, April 18, at 9 a.m. at Franklin Park Playstead, organized by the Mayor’s Office of Civic Organizing. Volunteers are asked to register ahead of time. Free ‘Stop the Bleed’ training: Virtual sessions will be held April 15 at noon and 6 p.m. to teach lifesaving bleeding control techniques, offered by the Stepping Strong Center at Brigham and Women’s Hospital. Acts of kindness: Residents are encouraged to perform individual acts of kindness in their neighborhoods throughout the day and week.
BOSTON —
Residents and visitors are encouraged to share acts of kindness marking One Boston Day on Wednesday, honoring how the city came together in the days after the Boston Marathon bombing, 13 years ago.
Advertisement
The day will also include the annual memorials along Boylston Street.
“I hope everyone will join their neighbors today in honoring those we lost and celebrating the love that makes Boston a home for everyone,” Mayor Michelle Wu wrote in a statement.
“As spring arrives in Boston each year, we are reminded of the hope and spirit of our city,” said Bill Richard, who created a foundation in honor of his son, Martin, who was killed in the bombing.
Advertisement
How to get involved
The city of Boston and partner organizations are offering several ways for people to participate in One Boston Day and related events, according to the city:
Volunteer projects citywide: City departments will host service opportunities on April 15 and in the days leading up to Marathon Monday.
Neighborhood cleanup: A youth and family cleanup is scheduled for Saturday, April 18, at 9 a.m. at Franklin Park Playstead, organized by the Mayor’s Office of Civic Organizing. Volunteers are asked to register ahead of time.
Free ‘Stop the Bleed’ training: Virtual sessions will be held April 15 at noon and 6 p.m. to teach lifesaving bleeding control techniques, offered by the Stepping Strong Center at Brigham and Women’s Hospital.
Acts of kindness: Residents are encouraged to perform individual acts of kindness in their neighborhoods throughout the day and week.
`;
}
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’);
});
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) {}
var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;
Advertisement
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.wcvb.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wcvb.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 || ”;
Advertisement
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’);
}
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);
}
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);
for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex
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’);
});
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.wcvb.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wcvb.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);
}
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