Connect with us

Maine

Maine Rep. Laurel Libby's lawsuit over censure for trans athlete post goes to federal court

Published

on

Maine Rep. Laurel Libby's lawsuit over censure for trans athlete post goes to federal court


Maine state representative Laurel Libby’s lawsuit over her recent censure by the state legislature went to federal court on Friday for its first hearing in Rhode Island. U.S. District Court Judge Melissa DuBose is presiding over the case and will issue a ruling in response to Libby’s request for a preliminary injunction in the coming weeks.

DuBose was appointed by former President Joe Biden in early January. 

Libby is suing Maine House Speaker Ryan Fecteau and House of Representatives clerk Robert Hunt after the Democrat majority voted to censure her over a February social media post that identified a trans athlete who won a state pole vault competition. 

The premise of the censure was based on Libby’s post identifying a minor by name and in a photo. 

Advertisement

But Libby and her attorney, Patrick Strawbridge, claim that a censure against her violates her First Amendment rights and disenfranchises her more than 9,000 constituents. On Friday, they argued that the punishment was “extreme” and enters “unprecedented territory” by silencing an elected official.

CLICK HERE FOR MORE SPORTS COVERAGE ON FOXNEWS.COM 

Maine Assistant Attorneys General Jonathan Bolton and Kimberly Patwardhan, representing Fecteau and the state, defended the censure, arguing that decisions on voting, adopting rules, and punishing members are within the constitutional authority of the Maine House.

Libby told Fox News Digital that she feels “optimistic” coming out of the first hearing. 

“I think that our case is strong, and whether it is resolved now or at any step in the future, I feel that in the end we will prevail. I’m optimistic, certainly after today, and hopeful that the court is going to see the damage that is being done to our constituents,” Libby said. 

Advertisement

“What was notable to me was the AAG’s reliance on the legislature being above the law … they are almost entirely relying on legislative immunity.” 

Libby’s initial social media post thrust Maine into an ongoing conflict with the federal government over the state’s refusal to ban trans athletes from women’s sports. 

MAINE GIRL INVOLVED IN TRANS ATHLETE BATTLE REVEALS HOW STATE’S POLICIES HURT HER CHILDHOOD AND SPORTS CAREER

The state has refused to comply with President Donald Trump’s February executive order to ban trans athletes from girls and women’s sports, prompting immense federal pressure. Trump initially vowed to cut federal funding to the state if it refused to comply with the order during a Feb. 20 speech, days after Libby made her social media post. 

The U.S. Department of Agriculture announced on Wednesday a pause and an ongoing review of federal funding to Maine after the state refused to provide equal opportunities to women and girls in educational programs. 

Advertisement

The free speech group FIRE filed an amicus brief in support of Libby on Thursday the day before the first hearing. 

“If political majorities can impose draconian sanctions on political minorities, then no viewpoint is safe. That’s no way to uphold America’s robust commitment to free and open political speech, and that’s why the First Amendment forbids officials from retaliating against dissenting views,” FIRE supervising senior attorney JT Morris told Fox News Digital. 

All of Maine’s federal judges have recused themselves from the case. 

CLICK HERE TO GET THE FOX NEWS APP

Maine State Rep. Laurel Libby is sounding the alarm over the state’s defiance of President Donald Trump’s Executive Order demanding an end to biological males competing in women’s sports. (Getty/Maine House of Representatives)

Advertisement

The judges, John C. Nivison, John A. Woodcock, Lance E. Walker, Karen F. Wolf, Stacey D. Neumann and Nancy Torresen, signed recusal orders on Tuesday, shortly after the case was initially filed. No reason was provided for the judges’ recusal. The case has since been referred to the District of Rhode Island.

On March 20, Libby was permitted to speak and present 10 amendments during a vote of the state’s bi-annual budget. One of those amendments was not related to the budget, but was a proposal to keep trans athletes out of girls’ sports. 

However, when Libby did speak to present her amendments, multiple Democrats protested, instigating a debate with Republican representatives. Ultimately, Libby’s amendments were not even considered, and Democrats moved to have the amendments indefinitely postponed. 

Follow Fox News Digital’s sports coverage on X, and subscribe to the Fox News Sports Huddle newsletter.

Advertisement





Source link

Maine

The data center boom meets resistance in Maine as lawmakers pass a yearlong moratorium

Published

on

The data center boom meets resistance in Maine as lawmakers pass a yearlong moratorium


PORTLAND, Maine (AP) — Maine is set to impose the nation’s first statewide moratorium on energy-hungry data centers in a sign of growing political opposition to tech giants’ massive structures that have stoked fears about blackouts, rising electricity bills and voracious water needs.

The legislation arose in a state that isn’t necessarily a destination for the computer-stocked warehouses that power artificial intelligence, but a couple of proposals there generated intense community backlash and helped propel a measure quickly through the state’s Democratic-controlled Legislature. Lawmakers on Tuesday approved sending the bill to Gov. Janet Mills, a Democrat who is running for U.S. Senate.

It’s the latest sign that increasingly stiff opposition at the local level is gaining a foothold higher up the political ladder. Tech giants and the data centers they are building have high-level support from President Donald Trump’s administration and many governors, who see them as economic engines and essential for winning the artificial intelligence race with China, even as voters raise concerns about the enormous amount of power data centers use. Analysts also warn of the possibility of blackouts in the mid-Atlantic grid in the coming years.

Proposals to slap a moratorium on data centers have been introduced in at least a dozen states, but none have passed a legislative chamber.

Advertisement

Maine’s legislation would institute a moratorium for more than a year on data centers above a certain size, and create a special council to help towns vet potential projects. Mills has not said whether she will sign the bill.

“It’s not that there’s no place for data centers in Maine,” said Democratic Rep. Melanie Sachs, who sponsored the measure. “Frankly, the tradeoffs have not been shown to be of benefit to our ratepayers, water usage or community benefit in terms of economic activity.”

Why Maine?

Despite Maine’s relatively low profile among developers of massive data centers, called hyperscalers, supporters of the projects said the moratorium will still matter long into the future to all sorts of industries.

“It says that the state is willing to essentially put a blanket ban on you if it decides that you may be politically unfavorable,” said Dan Diorio of the Data Center Coalition, a trade association that includes tech companies and developers.

They said it could deter data center developers from going to Maine and deprive the state of a long-term economic development anchor that attracts other industries. It also means local builders and labor unions won’t develop the skills necessary to build the facilities and might leave them lagging behind other states, they said.

Advertisement

“We think that these data centers could bring good jobs, good opportunities to these regions,” said Montana Towers, a policy analyst with the free market Maine Policy Institute. “And a lot of these concerns about them are luddite in nature.”

Nonetheless, several communities in Maine have raised concerns about a lack of transparency in potential data center projects. The Maine moratorium is largely about getting those communities to have input in the development process, said Joe Oliva, a spokesperson for the Maine Broadband Coalition, which supported the moratorium.

“If this is going to come, we want to be in early and often on the conversation,” Oliva said.

Growing opposition

Since last summer, community opposition has become a serious concern for data center developers, with numerous municipalities defeating their proposals in planning and zoning board votes before packed rooms of angry residents.

A handful of counties and municipalities in the U.S. have imposed a moratorium, and some bills emerged in states where development is brisk such as Virginia, Michigan and Wisconsin.

Advertisement

Some bills died without action, like one in Georgia, a data center hotspot. Other states have explored other ways to rein in data centers, such as by imposing tougher standards around water and energy use, transparency and protection of ratepayers and communities.

In Ohio, residents are trying to bypass the Legislature and get a measure on the ballot in November that is designed to permanently ban hyperscale data centers. They’ll need to gather more than 400,000 voter signatures by July 1 in what is perhaps the strictest measure of any under consideration.

Public officials, developers and other interests could otherwise “make this state a virtually unbroken field of data centers,” said Austin Baurichter, a Cincinnati-area lawyer who is helping organize the effort.

In South Dakota, a one-year moratorium bill failed in a state Senate committee amid opposition from power plant owners and data center developers. The governor also opposed it, telling senators that such planning is best done at the local level and that a statewide moratorium holds back municipalities that want a data center.

The sponsor, Republican Sen. Taffy Howard, told senators that “citizens are asking for this” and that the opponents are all lobbyists, “billion-dollar corporations” and government officials.

Advertisement

“Are you going to listen to the people or the paid lobbyists?” she asked.

___

Levy reported from Harrisburg, Pennsylvania.

___

Follow Patrick Whittle on X at https://x.com/pxwhittle and Marc Levy at https://x.com/timelywriter

Advertisement



Source link

Continue Reading

Maine

Meet the 10 central Maine softball players to watch in 2026

Published

on

Meet the 10 central Maine softball players to watch in 2026


Monmouth Academy’s Riley Smith slides into home plate during the Mustangs’ 4-0 win over Madison on May 26, 2025, in Monmouth. (Andree Kehn/Staff Photographer)

Ashley Shores, Lawrence senior utility: Shores is the reigning Kennebec Valley Athletic Conference Class B Player of the Year. She can play first base, the outfield and pitch, but will likely spend the bulk of her season behind the plate, guiding freshman starter Alea Williams.

Bella Loubier, Winslow junior catcher: A KVAC Class B second-team selection last season, Loubier is the top returner on a team that coaches believe could be a surprise in Class C North. She will be the leader of a young but talented squad under coach Michael Savage.

Hallie Coots, Nokomis junior utility: Coots was asked to wear many different hats as a sophomore for a young Warriors team, included time as both a pitcher and a catcher. She handled the duties well, earning KVAC B second-team honors. Now a junior, she’ll be a trusted veteran voice who will, once again, be asked to handle a variety of duties.

Advertisement

Kelsie Dunn, Erskine Academy junior pitcher: A KVAC Class B second-team selection last year, Dunn helped lead the Eagles to a Class B quarterfinal appearance. She’ll once again be the leader in the circle for a team that enters the new season with most of last season’s roster intact, creating higher expectations.

Lilly Clark, Erskine Academy senior shortstop: A multi-sport athlete, Clark is a captain who will be counted on to help the Eagles take another step forward. She was a KVAC Class B first-team selection last year.

Lydia Jones, Skowhegan senior infielder: A longtime starter for the River Hawks, Jones was a KVAC Class A second-team selection last season, helping guide a young roster to the North playoffs. She’ll again be relied on to guide a young but more experienced team.

Maddie Provost, Lawrence senior infielder: The Miss Maine Basketball and Varsity Maine Girls Basketball Player of the Year who will continue her career on the hardwood at Division I Holy Cross next season, Provost decided to wrap up her high school athletic career on the diamond, although she hadn’t played softball since middle school. Coach Joey Marcoux believes Provost will start the season at third base. Her athleticism and speed will be an immediate asset in the lineup.

Molly Takatsu, Gardiner sophomore infielder/pitcher: Takatsu produced quickly as a freshman last season and was rewarded with KVAC Class B second-team honors. She’ll be one of the top returning players for a team that once again carries three strong pitchers and will be fast on defense and on the basepaths.

Advertisement

Raegan King, Nokomis senior shortstop/center fielder: A strong athlete who will continue her softball career at Husson University, King has been a long-time contributor to the Warriors’ lineup with her bat, speed and positional flexibility. She’s the top returner for a squad that should make another strong run in the Class B North playoffs. She earned KVAC Class B first-team honors last season.

Riley Smith, Monmouth Academy senior outfielder: A Mountain Valley Conference first-team selection last season, Smith is an experienced outfielder who is an asset both at the plate and in the field. She’ll be a key contributor for the Mustangs, who should be a contender in the Class C South playoffs.



Source link

Advertisement
Continue Reading

Maine

Program doubles enrollment, expands to more Maine schools

Published

on

Program doubles enrollment, expands to more Maine schools


Central Maine Power is expanding its Union Trade Internship Program in 2026, increasing opportunities for Maine high school students to gain hands-on experience in the electric utility industry.

Advertisement

A sign for Central Maine Power, a subsidiary of Avangrid

Advertisement

CMP expands union trade internship program for Maine students

Advertisement

Central Maine Power is expanding its Union Trade Internship Program in 2026, increasing opportunities for Maine high school students to gain hands-on experience in the electric utility industry.

WMTW logo

Updated: 11:47 AM EDT Apr 14, 2026

Editorial Standards

Advertisement

Central Maine Power is expanding its Union Trade Internship Program in 2026, increasing opportunities for Maine high school students to gain hands-on experience in the electric utility industry.Now in its second year, the 10-week paid program will double enrollment, expand to additional schools in central and southern Maine, and broaden training to include both line and substation operations. The program will serve 10 students ages 16 and older, selected through a competitive recruitment and interview process in partnership with participating schools.The internship runs from June to August and includes classroom instruction at CMP’s training center in Farmingdale, along with supervised field experience alongside union crews. Students will learn foundational skills such as pole climbing, bucket truck operation, breaker and transformer maintenance, and the safe use of tools and protective equipment. Participants will not work on live electrical wires.The program is aimed at strengthening the workforce pipeline for skilled trades while giving students early exposure to careers in the energy sector and supporting partnerships between CMP and Maine schools.

Central Maine Power is expanding its Union Trade Internship Program in 2026, increasing opportunities for Maine high school students to gain hands-on experience in the electric utility industry.

Now in its second year, the 10-week paid program will double enrollment, expand to additional schools in central and southern Maine, and broaden training to include both line and substation operations. The program will serve 10 students ages 16 and older, selected through a competitive recruitment and interview process in partnership with participating schools.

Advertisement

The internship runs from June to August and includes classroom instruction at CMP’s training center in Farmingdale, along with supervised field experience alongside union crews. Students will learn foundational skills such as pole climbing, bucket truck operation, breaker and transformer maintenance, and the safe use of tools and protective equipment. Participants will not work on live electrical wires.

The program is aimed at strengthening the workforce pipeline for skilled trades while giving students early exposure to careers in the energy sector and supporting partnerships between CMP and Maine schools.

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’);

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

Advertisement

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.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);
}
}
}
}

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);
}

Advertisement

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);

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’);
});

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’, ‘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);
}
}
}
}

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

Loading more articles…



Source link

Continue Reading
Advertisement

Trending