Connect with us

Maine

Maine resilience projects face yet another funding setback

Published

on




Just a month after the Trump administration cancelled a popular grant program and millions of dollars for local Maine climate resilience projects along with it, Maine municipal officials are facing yet another potential federal funding setback.

This time it’s the Hazard Mitigation and Grant Program that the administration is downsizing, according to POLITICO’s E&E News, a multi-billion dollar program that states have long used to protect vulnerable homes and infrastructure from floods and other disasters.

Administered by the Federal Emergency Management Agency, the program targets states hit by presidentially declared disasters (like a major storm or flood) and allocates federal funding for communities to rebuild with climate resilience in mind, aiming to limit vulnerability to future disasters. It covers infrastructure projects like elevating flood-prone homes or businesses, as well as municipal efforts to plan and enforce flood-smart development.

Advertisement

FEMA allocates funding to states based on the estimated cost of damages from a disaster. Maine was allocated a total of $15 million through the grant program after the December 2023 and January 2024 floods, according to the Maine Emergency Management Agency, and had until the end of this summer to finalize grant applications to spend it.

After the agency cancelled the popular Building Resilient Infrastructure and Communities grant in April, the hazard mitigation grant was seen as one of the last viable federal funding options for some of the 18 Maine resilience projects that lost their federal funds.

Now that both funding streams seem to be off the table, communities are running out of other funding sources and considering scaling back their projects.

The Kennebec Valley Council of Governments was spearheading a $2 million project that would have trained and hired code enforcement officers to provide part-time help for any community in 13 Maine counties that lacks a dedicated code enforcement office. 

When the council and five others across the state asked what their rural communities needed most from them, the overwhelming answer was code enforcement assistance, according to Jessie Cyr, the council’s economic and community development director.

Advertisement

“They had no resiliency efforts… no code enforcement, nobody that could guide anyone who was building,” Cyr told The Maine Monitor. “If you want to build along the Kennebec River, there’s shoreline zoning, but that’s it. There’s nobody to guide you and give you advice.”

The coalition’s application for roughly $1.6 million in federal BRIC funding was still under FEMA consideration at the time of the grant’s cancellation, Cyr said, but was nearing approval.

Without that funding, or the option to apply for hazard mitigation funds instead, the coalition will have to patch together smaller state grants to fund a scaled back version of the program that might only support Somerset County, which has the highest poverty rate of any Maine county.

Cyr said the process with FEMA has been frustrating, especially for the small rural communities that were banking on the code enforcement support to help them rebuild resiliently after recent flooding.

“The need isn’t going away. It’s actually getting worse,” she said. “We’ve had more flooding in the last three years than we’ve had since I’ve been here for the last forty years. We need a way to guide people coming in looking to build.”

Advertisement

Cyr isn’t the only Maine municipal official sounding the alarm after federal funding cuts. Down in York County, the initial optimism that emergency management director Arthur Cleaves had after BRIC’s cancellation last month has been clouded by narrowing funding opportunities and the encroaching hurricane season.

The county’s coastline was decimated after the January 2024 flooding, wiping out vast stretches of sand dunes and causing tens of millions of dollars in damages. Cleaves and the York County Emergency Management Agency were banking on $30 million in potential BRIC funding to restore and strengthen the dunes against future storms, using one of the few federal grants available to support projects of this size. 

Until a new funding source is secured and the dunes restored, Cleaves warns that another storm could inflict massive damage — even worse than the January 2024 storm. 

“Every month that goes by, we’re at greater risk,” Cleaves said. “So we’re trying to pull out all the steps that we can to find funding that will put something back in place.”

The county is preparing multiple applications for a more competitive FEMA grant, but it would only cover planning expenses. Aside from that and a couple other small federal opportunities, Cleaves said the county is largely limited to opportunities at the state level, like a $75 million bond measure for Maine resilience projects that was recently proposed by state Sen. Donna Bailey (D-York).

Advertisement

As a former FEMA official with decades of emergency management experience at the state and county levels, Cleaves has seen the federal agency at every angle and is keenly aware of the opportunities to improve its efficiency and cost-effectiveness.

What he doesn’t understand, however, is what good will come out of sinking vital FEMA programs that can protect communities like his from the next big storm.  

“There’s room for improvements, but to simply slash and cut arbitrarily?” Cleaves said. “Nobody seems to know exactly what the outcome will be in the end.”

This story was originally published by The Maine Monitor, a nonprofit civic news organization. To get regular coverage from The Monitor, sign up for a free Monitor newsletter here.   

Advertisement



Source link

Maine

‘Handyman special’ Quonset hut-style home hits market for under $300K in Maine

Published

on

‘Handyman special’ Quonset hut-style home hits market for under 0K in Maine


A partially finished Quonset hut-style home in Maine is seeking out an industrious buyer who can put the finishing touches on the one-of-a-kind property—and help it to fulfill its impressive potential.

While the dwelling might not be for everyone, particularly those lacking in “tools and imagination,” its very affordable $270,000 asking price will undoubtedly make it a prime target for those with the ability to see beyond what is currently little more than an empty shell.

“This striking Quonset hut-style residence offers a one-of-a-kind ‘handyman special,’ perfect for those looking to create a custom vacation getaway or a high-potential Airbnb,” the listing notes.

Located in Shapleigh in the heart of the state’s lake region, the unfinished abode is situated on a lush 11.79-acre parcel that is within walking distance of Square Pond and Mousam Lake—as well as an array of more metropolitan amenities.

Advertisement
Maine’s got a wild one! A partially finished Quonset hut home seeks a buyer with tools and imagination. Realtor.com

“Any owner will have multiple ponds and lakes at their fingertips in addition to countless hiking trails, all while being within an easy radius for shopping and convenience,” said listing agent Ezra Hodgson of The Zoeller Group at Keller Williams Coastal and Lakes & Mountains Realty.

While 75% of the construction is already complete, the remainder provides a “blank canvas” for the next buyer’s finishing touches, although they will first need to finish the installation of the electric, plumbing, and insulation before they can embark on creating their own aesthetic for the home.

“Septic and well are in, hooked up, and functional,” Hodgson notes. “Framing is almost completed. Custom white maple kitchen cabinets are already installed. A buyer will need to complete running electrical and plumbing, then insulation and drywall, and their finish work like fixtures, trim, decks, etc.”

The 1,792-square-foot “handyman special” boasts a distinctive exterior with arched metal design in keeping with the traditional quonset hut style, which was inspired by a military structure called the Nissen hut used by British forces during World War I.

After the war, the style was adopted by American troops stationed at the Quonset Point Naval Air Station in Rhode Island—from which the huts now take their name—who worked to advance the design, making it lighter, more flexible, and faster to build.

Advertisement

According to Innovation & Technology magazine, an estimated 170,000 quonset huts were built by the Americans during World War II, and when that conflict came to an end in 1945, the surplus structures were passed to civilians, who began using them as prefabricated vacation residences, storage units, and even guesthouses.

While they have since fallen out of style somewhat, the structures continue to be favored for their ease of construction—and their multifaceted design, which allows for all kinds of personalizations, much like the unfinished dwelling in Maine.


Interior view of an unfinished Quonset hut-style home with exposed wooden framing and a pile of lumber.
Quonset huts originated from WWI military structures, advanced by US troops in Rhode Island. Realtor.com

Inside, an open-concept floor plan features high ceilings, multiple sliding glass doors, and a loft area that could be transformed into a primary suite or additional living space.

The listing features several staged images that paint a stunning picture of what the home could look like, if someone is willing to invest in its completion.

Hodgson says its location and the “ability to finish it into exactly what a buyer wants” are some of the home’s most impressive features.

The 1,700-square-foot property is configured with four bedrooms and three bathrooms, although the construction process is not so far along that a future buyer couldn’t alter that layout.

Advertisement

“The interior framing is largely in place, showing a thoughtful layout that includes a kitchen area already equipped with quality solid wood cabinetry,” the listing notes.

“The bathroom is started with a vanity, toilet, and shower pan partially installed. A spacious loft area provides excellent potential for a primary suite or additional living space overlooking the main floor.”

Hodgson believes the next owner might be seeking “the perfect blueprint for their vacation home. They could be someone looking to get away from the hustle and bustle, and take advantage of the peace and quiet that the woods of Maine have to offer, or maybe it’s an investor who just found their perfect short-term rental opportunity.”

The spacious property also has a storage shed for tools and outdoor gear, and connects to a series of recreation trails at the end of the driveway.

The sale also includes shared rights to a private beach on Square Pond, however Hodgson notes that any additional plans should only be carried out with the necessary due diligence.

Advertisement

“We would encourage any buyer to do their due diligence with the town of Shapleigh when determining if the property could be subdivided and subsequently built on,” Hodgson added.



Source link

Continue Reading

Maine

Restoring Order: Why Maine Needs a “Crime Fighter”as Governor

Published

on

Restoring Order: Why Maine Needs a “Crime Fighter”as Governor


By Senator Scott Cyrway

For decades, I have walked the beat, patrolled our roads, and worked within our halls of justice to keep Maine families safe. From my early days as a deputy sheriff in Kennebec County to my time in the State Senate, my guiding star has always been the rule of law.

But today, I look at our state and see a growing shadow. Maine is in real trouble, and if we do not act decisively, the safety and security we once took for granted will become a relic of the past.

We are currently facing a convergence of crises: an unchecked drug epidemic, a rise in organized crime, and a legal system that too often prioritizes the comfort of the offender over the protection of the victim. Our law enforcement officers are being asked to do more with less, facing recruitment shortages and a political climate that often feels more hostile than supportive. Maine doesn’t just need a manager in the governor’s office; we need a proven crime fighter. That is why I am proudly endorsing Bobby Charles for governor.

Advertisement

A Career Built on Justice

My endorsement isn’t based on political convenience; it’s based on a shared lifetime of service. My own career has been defined by the front lines—serving as one of Kennebec County’s most decorated deputies, receiving the Valor and Life Saving awards, and spending years as a D.A.R.E. coordinator to keep our kids off drugs. I know what professional, effective law enforcement looks like.

Bobby Charles doesn’t just talk about “law and order”—he has lived it at the highest levels. Bobby served as the Assistant Secretary of State for International Narcotics and Law Enforcement Affairs. He led the fight against global drug cartels and worked as chief counsel in the U.S. House of Representatives, overseeing national security and criminal justice. He understands the mechanics of crime from the street level to the federal level.

The Stakes for Maine

The statistics are sobering. While Maine remains a beautiful place to live, our small towns are being hollowed out by fentanyl, and we are now being targeted by sophisticated international crime syndicates. We are seeing hundreds of illegal, Chinese-owned marijuana houses popping up in our quiet neighborhoods, bringing with them a wave of foreign money laundering and a direct slap in the face to our sovereignty.

Advertisement

Bobby Charles has made a clear, no-nonsense promise: he will increase the law enforcement presence across all 16 counties and ensure that federal and state authorities are working together, not at cross-purposes, to shut these cartels down. He is the only candidate with the background to dismantle the trafficking networks that treat our state like an open market.

As I’ve often said, “Maine is at a crossroads where the safety of our citizens must come before the politics of the day.” We cannot afford to experiment with leadership. We need a governor who has stared down criminals and understands the weight of a badge.

Bobby Charles is a man of integrity, experience, and action. He is the crime fighter Maine needs to restore the peace and ensure that our state remains the safest place in the nation to raise a family. Join me in supporting a leader who will always have the backs of those who wear the uniform.

Scott Cyrway is a Republican State Senator from Albion and a former Kennebec County Deputy Sheriff.

Advertisement



Source link

Continue Reading

Maine

Maine Mariners clinch home ice for first round of playoffs

Published

on

Maine Mariners clinch home ice for first round of playoffs


Maine Mariners clinch home ice for first round of playoffs

Advertisement

NA

Advertisement

Maine Mariners clinch home ice for first round of playoffs

Updated: 10:38 PM EDT Apr 11, 2026

Editorial Standards

Advertisement

The Maine Mariners will have home ice in the first round of the ECHL Playoffs. Games 1 and 2 in Portland will be on April 24th and 25th at 6:00pm.

The Maine Mariners will have home ice in the first round of the ECHL Playoffs. Games 1 and 2 in Portland will be on April 24th and 25th at 6:00pm.

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

Trending