PatsFans.com Menu
PatsFans.com - The Hub For New England Patriots Fans
PatsFans.com - The Hub For New England Patriots Fans

Patriots Articles & Archive

Our full article archive from over 25 years.

Patriots Articles & Archive | PatsFans.com

Our full article archive from over 25 years.

Showing 15,408 results (page 32 of 617)

TRANSCRIPT: Doug Marrone Press Conference 4/3

April 03, 2025 | Ian Logue

Here's what New England Patriots coach Doug Marrone had to say during his interview with reporters on Thursday.

TRANSCRIPT: Patriots Coach Ashton Grant 4/3

April 03, 2025 | Ian Logue

Here's what New England Patriots quarterbacks coach Ashton Grant had to say while speaking with reporters on Thursday 4/3.

TRANSCRIPT: Josh McDaniels First Press Conference With Local Media 4/3

April 03, 2025 | Ian Logue

Here's what New England Patriots offensive coordinator Josh McDaniels had to say during his press conference on Thursday with the local media.

MORSE: Patriots Make an Awful Trade of Joe Milton to Dallas

April 03, 2025 | Mark Morse

Eliot Wolf and Mike Vrabel traded 2nd Year QB Joe Milton and a 2025 7th Round pick #217 to the Dallas Cowboys for a 2025 Compensatory pick #171.  This may be a worse trade than the giveaway of Ladd McConkey last year for Ja'Lynn Polk and Javon Baker.

Patriots Trade Milton to Cowboys, Team Gets Puzzling Return on the Deal

April 03, 2025 | Ian Logue

There had been talks recently about teams inquiring about quarterback Joe Milton, and the Patriots ended up pulling the trigger on a deal for the former sixth-round pick on Thursday.

Interest In Patriots Milton Remains High Heading into Draft

April 02, 2025 | Ian Logue

With Drake Maye heading into his second season and newly signed veteran Josh Dobbs expected to potentially be his back-up, New England Patriots quarterback Joe Milton finds himself in an interesting spot this offseason.

Sanders' Stock Falling Could Drastically Alter Patriots Draft Plans

April 02, 2025 | Ian Logue

With the #4 overall selection heading into this upcoming 2025 NFL Draft, the New England Patriots are likely focused on trying to make sure they come out of it with a blue-chip impact player to take into next season. The only problem is, things are starting to shift at the top of the draft board and there may not be one there by the time they're ready to pick.

Vrabel Doesn't Consider Himself Part of Belichick's Coaching Tree

April 01, 2025 | Ian Logue

One thing feels pretty certain as first-year Patriots head coach Mike Vrabel begins his tenure here in New England. He's going to do things his way.  

Kraft: Team Set to Induct Parcells into Patriots Hall of Fame

April 01, 2025 | Ian Logue

Bill Parcells hasn't had much luck in recent years when it's come to seeing himself added to the New England Patriots Hall of Fame, but owner Robert Kraft announced on Tuesday that will soon change.

TRANSCRIPT: Eliot Wolf on 'Up & Adams' with Kay Adams 3/31

April 01, 2025 | Ian Logue

Here's what New England Patriots Executive Vice President of Player Personnel Eliot Wolf had to say during his interview with Kay Adams on Monday, March 31, 2025.

Kraft on Patriots Improvement: 'I Think We Have Some Real Talent'

April 01, 2025 | Ian Logue

The hope heading into this offseason for the New England Patriots was that they'd come out a little further ahead than they did a year ago. According to Patriots owner Robert Kraft, he believes they're certainly much better off this time around than they were at this time in 2024.

TRANSCRIPT: Robert Kraft at the League Meetings 4/1

April 01, 2025 | Ian Logue

Here's what New England Patriots owner Robert Kraft had to say on Tuesday down at the NFL League meetings during his press conference with reporters:

TRANSCRIPT: Eliot Wolf with Michael Felger 3/31

April 01, 2025 | Ian Logue

Here's what New England Patriots Executive Vice President of Player Personnel, Eliot Wolf, had to say during his interview with Mike Felger on Monday on 98.5 The Sports Hub.

MORSE: Patriots Mock Draft #4

April 01, 2025 | Mark Morse

The Draft is just 24 days away!  In my last Mock Draft, I had both Abdul Carter and Travis Hunter taken in the 1st three picks.  For this Mock Draft I am going to assume that Cam Ward is #1, Travis Hunter is #2 and the Giants shock everyone and take Sheddeur Sanders at #3.  The Giants signed Russell Wilson and Jameis Winston as a backup and if they chose to draft Sanders he would not have to start right away and learn the position of NFL QB.

Patriots 7-Round Mock Draft 3.0, Offense Gets A Playmaker

April 01, 2025 | Steve Balestrieri

Hunter is a potential generational talent at WR or CB. That’s how talented he is. This is a transformational type of pick for the Patriots.

TRANSCRIPT: Mike Vrabel With Michael Felger 3/31

March 31, 2025 | Ian Logue

Mike Vrabel sat down with Michael Felger of 98.5 The Sports Hub's Felger and Massarotti Monday morning, and here's the full transcript of New England Patriots head coach's interview.

TRANSCRIPT: Mike Vrabel Coach's Breakfast Press Conference Transcript 3/31

March 31, 2025 | Ian Logue

Here's what Mike Vrabel had to say during the 2025 NFL Coach's Breakfast Press Conference

Edelman Believes Rodgers' Antics Came From Former Teammate: "Let's Not Joke Around about It"

March 31, 2025 | Ian Logue

Former Patriots wideout Julian Edelman said during a recent segment with Colin Cowherd that he believes a previous teammate has likely impacted the type of antics we've seen from Aaron Rodgers in recent years.

Edelman Likes the Fire Diggs Brings to Patriots

March 31, 2025 | Ian Logue

Coming off a second 4-13 season, the New England Patriots certainly needed a little help to try and take a step forward heading into 2025, both from a culture and talent standpoint.

ESPN Analyst Apparently Not High on Patriots Drake Maye

March 31, 2025 | Ian Logue

One thing that's interesting coming off of last year's 4-13 New England Patriots season is that rookie quarterback Drake Maye didn't seem to get much exposure outside of this region. And ESPN's Stephen A. Smith doesn't seem to think much of him.

Diggs Gives Patriots 2nd Year WR Ja'Lynn Polk a Vote of Confidence

March 30, 2025 | Ian Logue

Following what appeared to be a promising start for New England Patriots wide receiver Ja'Lynn Polk, the former Washington receiver ended up with a disappointing rookie season.

Patriots News 3-30, How Vrable and Wolf Rebuilt The Team

March 30, 2025 | Steve Balestrieri

"That’s somebody ...creating a standard of what it is to play with speed and violence and physicality and effort and relentlessness." 

Diggs Admits Vrabel's Presence Impacted His Decision to Join Patriots

March 29, 2025 | Ian Logue

Diggs spoke to reporters for the first time and said that his knowledge of New England Patriots coach Mike Vrabel both as a coach and a player made this a destination he was interested in coming to, and it's part of the reason he's here.

TRANSCRIPT: Stefon Diggs First Patriots Press Conference 3/28

March 28, 2025 | Ian Logue

Here's what new Patriots wide receiver Stefon Diggs had to say during his first press conference as a member of the New England Patriots on Friday, March 28, 2025.

Top Flight Pass Rusher Set to Visit Patriots

March 28, 2025 | Ian Logue

It sounds like Penn State pass rush star Abdul Carter feels confident enough in where he'll be selected next month that he's not planning on wasting much of his time in the coming weeks.

(function() { document.addEventListener('DOMContentLoaded', function() { var mediaBtn = document.getElementById('pfeai-media-button'); if (mediaBtn) { mediaBtn.addEventListener('click', function(e) { e.preventDefault(); if (window.PFEditorialAI) { PFEditorialAI.togglePanel(); } }); } }); if (typeof tinymce === 'undefined') { return; } tinymce.create('tinymce.plugins.PFEditorialAI', { init: function(editor, url) { editor.on('init', function() { PFEditorialAI.createPanel(editor); PFEditorialAI.bindTooltipEvents(); PFEditorialAI.preloadSavedData(); }); }, getInfo: function() { return { longname: 'PF Editorial AI', author: 'PatsFans + AI', version: '5.6.2' }; } }); tinymce.PluginManager.add('pfeai_plugin', tinymce.plugins.PFEditorialAI); window.PFEditorialAI = { panelCreated: false, panelEl: null, loadingEl: null, analysisEl: null, titlesEl: null, ideasEl: null, transcriptEl: null, socialEl: null, savedEl: null, factsEl: null, linksEl: null, isMinimized: false, // Cache window tracking cacheWindowStart: null, cacheWindowTimer: null, cacheWindowDuration: 4 * 60 * 1000, // 4 minutes tasksInWindow: 0, escapeHtml: function(str) { if (str === null || str === undefined) return ''; return String(str) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); }, escapeAttr: function(str) { if (str === null || str === undefined) return ''; return String(str) .replace(/&/g, '&') .replace(/"/g, '"') .replace(/'/g, ''') .replace(//g, '>'); }, startCacheWindow: function(fromCache) { var self = this; if (fromCache) return; this.tasksInWindow++; this.cacheWindowStart = Date.now(); if (this.cacheWindowTimer) { clearInterval(this.cacheWindowTimer); } this.updateCacheIndicator(); this.cacheWindowTimer = setInterval(function() { self.updateCacheIndicator(); }, 1000); }, updateCacheIndicator: function() { var indicator = document.getElementById('pfeai-cache-indicator'); if (!indicator) return; if (!this.cacheWindowStart) { indicator.style.display = 'none'; return; } var elapsed = Date.now() - this.cacheWindowStart; var remaining = this.cacheWindowDuration - elapsed; if (remaining <= 0) { indicator.style.display = 'none'; this.cacheWindowStart = null; this.tasksInWindow = 0; if (this.cacheWindowTimer) { clearInterval(this.cacheWindowTimer); this.cacheWindowTimer = null; } return; } indicator.style.display = 'block'; var minutes = Math.floor(remaining / 60000); var seconds = Math.floor((remaining % 60000) / 1000); var timeStr = minutes + ':' + (seconds < 10 ? '0' : '') + seconds; var savingsText = this.tasksInWindow > 1 ? ' · ' + (this.tasksInWindow - 1) + ' task' + (this.tasksInWindow > 2 ? 's' : '') + ' cached' : ''; indicator.innerHTML = '⚡ Cache active: ' + timeStr + ' remaining' + savingsText + '
Run more tasks now to save tokens'; }, getProvider: function() { var select = document.getElementById('pfeai-provider-select'); return select ? select.value : 'gemini'; }, getSafeContent: function(editor) { try { if (editor && !editor.isHidden()) return editor.getContent({ format: 'raw' }); var textArea = document.getElementById('content'); return textArea ? textArea.value : ''; } catch (e) { return ''; } }, getSafeText: function(editor) { try { if (editor && !editor.isHidden()) return editor.getContent({ format: 'text' }); var textArea = document.getElementById('content'); return textArea ? textArea.value : ''; } catch (e) { return ''; } }, createPanel: function(editor) { if (this.panelCreated) return; var style = document.createElement('style'); style.innerHTML = 'body.pfeai-panel-open #wpbody-content { margin-right: 360px !important; transition: margin-right 0.3s ease; } body.pfeai-panel-open .pfeai-panel { right: 0; box-shadow: -2px 0 5px rgba(0,0,0,0.1); }'; document.head.appendChild(style); var panel = document.createElement('div'); panel.id = 'pfeai-panel'; var html = ''; html += '
'; html += '
'; html += '
'; html += '
'; html += ' '; html += '
'; html += '
PF Editorial AI
'; html += '
'; html += ' '; html += '
'; html += '
'; html += '
'; html += '
'; html += ' '; html += ' '; html += '
'; html += '
'; html += '
Click to expand
'; html += '
'; html += ' '; html += '
'; html += '
'; if (PFEAI.saved_data.clipboard) { html += '
'; html += ''; html += ''; html += '
'; } html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; if (PFEAI.saved_data.ideas && PFEAI.saved_data.ideas.ideas) { html += '
'; html += ''; html += ''; html += '
'; } else { html += ' '; } html += ' '; html += '
'; html += '
'; html += ' '; html += '
'; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; if (PFEAI.saved_data.clipboard) { html += ' '; } html += '
'; html += '
'; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += ' '; html += '
'; html += '
'; html += '
'; panel.innerHTML = html; document.body.appendChild(panel); this.panelEl = panel; this.loadingEl = panel.querySelector('.pfeai-loading'); this.analysisEl = { highlights: panel.querySelector('.pfeai-tab-content[data-tab="highlights"]'), suggestions: panel.querySelector('.pfeai-tab-content[data-tab="suggestions"]'), gaps: panel.querySelector('.pfeai-tab-content[data-tab="gaps"]') }; this.titlesEl = panel.querySelector('.pfeai-tab-content[data-tab="titles"]'); this.seoEl = panel.querySelector('.pfeai-tab-content[data-tab="seo"]'); this.ideasEl = panel.querySelector('.pfeai-tab-content[data-tab="ideas"]'); this.transcriptEl = panel.querySelector('.pfeai-tab-content[data-tab="transcript"]'); this.socialEl = panel.querySelector('.pfeai-tab-content[data-tab="social"]'); this.savedEl = panel.querySelector('.pfeai-tab-content[data-tab="saved"]'); this.factsEl = panel.querySelector('.pfeai-tab-content[data-tab="facts"]'); this.linksEl = panel.querySelector('.pfeai-tab-content[data-tab="links"]'); this.faqEl = panel.querySelector('.pfeai-tab-content[data-tab="faq"]'); var self = this; panel.querySelector('.pfeai-faq-btn').addEventListener('click', function() { self.runFAQ(editor); }); panel.querySelector('#btn-internal-links').addEventListener('click', function() { var btnText = this.innerText; if (btnText.indexOf('View Links') !== -1) { self.showResults('links'); } else { self.runInternalLinks(editor); } }); panel.querySelector('#btn-search').addEventListener('click', function() { self.showResults('search'); }); panel.querySelector('.pfeai-close').addEventListener('click', function(e) { e.stopPropagation(); self.togglePanel(false); }); panel.querySelector('.pfeai-minimize-btn').addEventListener('click', function(e) { e.stopPropagation(); self.toggleMinimize(); }); panel.querySelector('.pfeai-back-btn').addEventListener('click', function(e) { e.stopPropagation(); self.showMenu(); }); var viewSavedBtn = document.getElementById('btn-view-saved'); if (viewSavedBtn) { viewSavedBtn.addEventListener('click', function() { self.showResults('saved'); }); } var clearSavedBtn = document.getElementById('btn-clear-saved'); if (clearSavedBtn) { clearSavedBtn.addEventListener('click', function() { if (confirm('Are you sure you want to clear your saved draft? This cannot be undone.')) { self.clearClipboard(); } }); } panel.querySelector('#btn-scan').addEventListener('click', function() { var btnText = this.innerText; if (btnText.indexOf('View Analysis') !== -1) { self.showResults('highlights'); } else { self.runAnalysis(editor); } }); var btnFactCheck = panel.querySelector('#btn-fact-check'); if (btnFactCheck) { btnFactCheck.addEventListener('click', function() { var btnText = this.innerText; if (btnText.indexOf('View Fact Check') !== -1) { self.showResults('facts'); } else { self.runFactCheck(editor); } }); } panel.querySelector('#btn-social').addEventListener('click', function() { var btnText = this.innerText; if (btnText.indexOf('View Social') !== -1) { self.showResults('social'); } else { self.runSocialPack(editor); } }); panel.querySelector('#btn-transcript').addEventListener('click', function() { var btnText = this.innerText; if (btnText.indexOf('View Transcript') !== -1) { self.showResults('transcript'); } else { self.runTranscriptScan(editor); } }); panel.querySelector('#btn-titles').addEventListener('click', function() { var btnText = this.innerText; if (btnText.indexOf('View Titles') !== -1) { self.showResults('titles'); } else { self.runTitles(editor); } }); panel.querySelector('#btn-ideas').addEventListener('click', function() { var btnText = this.innerText; if (btnText.indexOf('View Topics') !== -1) { self.showResults('ideas'); } else { self.runArticleIdeas(editor); } }); var clearIdeasBtn = panel.querySelector('#btn-clear-ideas'); if (clearIdeasBtn) { clearIdeasBtn.addEventListener('click', function() { if (confirm('Clear cached Topic Ideas? This will reset the Topics tab.')) { self.clearIdeasCache(); } }); } panel.querySelector('.pfeai-tagline-btn').addEventListener('click', function() { self.runTagline(editor); }); panel.querySelector('.pfeai-tags-btn').addEventListener('click', function() { self.runTagSuggestions(editor); }); panel.querySelector('.pfeai-meta-btn').addEventListener('click', function() { self.runMetaDescFromMenu(editor); }); panel.querySelectorAll('.pfeai-tab').forEach(function(btn) { btn.addEventListener('click', function() { self.switchTab(this.getAttribute('data-tab')); }); }); this.panelCreated = true; }, runSocialPack: function(editor, forceRefresh) { var self = this; var contentHtml = this.getSafeContent(editor); var title = (document.getElementById('title') || {}).value || ''; if (!title) { alert('Please enter a title.'); return; } this.showResults('social'); this.setLoading(true); fetch(PFEAI.rest_url + 'social-pack?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ content: contentHtml, title: title, post_id: PFEAI.post_id, provider: this.getProvider(), force_refresh: forceRefresh || false }) }) .then(function(r){return r.json()}).then(function(json){ self.setLoading(false); if(json.tweets) { self.renderSocialPack(json); var timestamp = json.generated_at || Date.now()/1000; self.setCachedState('btn-social', 'View Social Posts', 'social', timestamp, json.from_cache); self.startCacheWindow(json.from_cache); } else if (json.code) { self.socialEl.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; } }).catch(function(e) { self.setLoading(false); console.error(e); }); }, renderSocialPack: function(data) { var self = this; this.socialEl.innerHTML = '

Social Posts

'; (data.tweets || []).forEach(function(t, idx) { self.createSocialCard('Twitter / X ('+(idx+1)+')', t, self.socialEl); }); if (data.facebook) self.createSocialCard('Facebook', data.facebook, self.socialEl); if (data.meta_desc) self.createSocialCard('Meta Description (SEO)', data.meta_desc, self.socialEl); }, createSocialCard: function(label, text, container) { var card = document.createElement('div'); card.className = 'pfeai-card'; card.style.background = '#f5f5f5'; var labelEl = document.createElement('strong'); labelEl.textContent = label; card.appendChild(labelEl); var textEl = document.createElement('p'); textEl.style.fontSize = '12px'; textEl.style.marginBottom = '5px'; textEl.textContent = text; card.appendChild(textEl); var copyBtn = document.createElement('button'); copyBtn.className = 'button button-small'; copyBtn.textContent = 'Copy'; copyBtn.onclick = function() { navigator.clipboard.writeText(text); copyBtn.textContent = 'Copied!'; setTimeout(function(){ copyBtn.textContent = 'Copy'; }, 1500); }; card.appendChild(copyBtn); container.appendChild(card); }, runAnalysis: function(editor, forceRefresh) { var self = this; var contentHtml = this.getSafeContent(editor); var title = (document.getElementById('title') || {}).value || ''; if (!title) { alert('Please enter a title.'); return; } this.showResults('highlights'); this.setLoading(true); fetch(PFEAI.rest_url + 'analyze?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ content: contentHtml, title: title, post_id: PFEAI.post_id, provider: this.getProvider(), force_refresh: forceRefresh || false }) }) .then(function(r){return r.json()}).then(function(json){ self.setLoading(false); if(json.highlights) { self.renderAnalysis(json); var timestamp = json.generated_at || Date.now()/1000; self.setCachedState('btn-scan', 'View Analysis Results', 'highlights', timestamp, json.from_cache); self.startCacheWindow(json.from_cache); } else if (json.code) { self.analysisEl.highlights.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; } }).catch(function(e) { self.setLoading(false); console.error(e); }); }, runTitles: function(editor, forceRefresh) { var self = this; var contentHtml = this.getSafeContent(editor); var title = (document.getElementById('title') || {}).value || ''; this.showResults('titles'); this.setLoading(true); fetch(PFEAI.rest_url + 'seo-titles?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ content: contentHtml, title: title, post_id: PFEAI.post_id, provider: this.getProvider(), force_refresh: forceRefresh || false }) }) .then(function(r){return r.json()}).then(function(json){ self.setLoading(false); if(json.titles) { self.renderTitles(json); var timestamp = json.generated_at || Date.now()/1000; self.setCachedState('btn-titles', 'View Titles', 'titles', timestamp, json.from_cache); self.startCacheWindow(json.from_cache); } else if (json.code) { self.titlesEl.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; } }); }, runTranscriptScan: function(editor, forceRefresh) { var self = this; var contentText = this.getSafeText(editor); if (contentText.length < 50) { alert('Please paste transcript.'); return; } this.showResults('transcript'); this.setLoading(true); fetch(PFEAI.rest_url + 'transcript-scan?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ content: contentText, post_id: PFEAI.post_id, provider: this.getProvider(), force_refresh: forceRefresh || false }) }) .then(function(r){return r.json()}) .then(function(json){ self.setLoading(false); var suggestions = null; if (json.suggestions && Array.isArray(json.suggestions)) { suggestions = json.suggestions; } else if (json.title && json.context) { suggestions = [json]; } if (suggestions && suggestions.length > 0) { self.renderTranscriptSuggestions(suggestions, contentText); var timestamp = json.generated_at || Date.now()/1000; self.setCachedState('btn-transcript', 'View Transcript Results', 'transcript', timestamp, json.from_cache); self.startCacheWindow(json.from_cache); } else if (json.code) { self.transcriptEl.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; } else { self.transcriptEl.innerHTML = '

Unexpected response format. Please click "Rescan" to refresh.

'; } }) .catch(function(err) { self.setLoading(false); self.transcriptEl.innerHTML = '

Request failed: ' + self.escapeHtml(err.message) + '

'; }); }, runTranscriptOutline: function(title, content, clickedCard) { var self = this; var resDiv = document.getElementById('pfeai-transcript-result'); resDiv.innerHTML = '

Generating outline...

This may take up to 30 seconds for longer transcripts.

'; if (!title || !content || content.length < 50) { resDiv.innerHTML = '

Error: Invalid title or transcript content.

'; return; } var controller = new AbortController(); var timeoutId = setTimeout(function() { controller.abort(); }, 180000); fetch(PFEAI.rest_url + 'transcript-outline?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ selected_title: title, content: content, provider: this.getProvider() }), signal: controller.signal }) .then(function(r) { clearTimeout(timeoutId); if (!r.ok) throw new Error('Server returned status ' + r.status); return r.json(); }) .then(function(json) { if (json.code) { resDiv.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; return; } if (json.blurb) { self.renderTranscriptOutlineResult(json, title); } else { resDiv.innerHTML = '

AI response was incomplete. Please try again.

'; } }) .catch(function(err) { clearTimeout(timeoutId); var errorMsg = err.name === 'AbortError' ? 'Request timed out.' : err.message; resDiv.innerHTML = '

' + self.escapeHtml(errorMsg) + '

'; }); }, runArticleIdeas: function(editor, forceRefresh) { var self = this; var title = (document.getElementById('title') || {}).value || ''; var contentText = this.getSafeText(editor).trim(); if (!forceRefresh && (title.length > 0 || contentText.length > 5)) { alert('To generate fresh Topic Inspiration, please clear the Title and Content editor first.'); return; } this.showResults('ideas'); this.setLoading(true); var fetchIdeas = function() { fetch(PFEAI.rest_url + 'article-ideas?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ title: '', post_id: PFEAI.post_id, provider: self.getProvider(), force_refresh: forceRefresh || false }) }) .then(function(r){return r.json()}).then(function(json){ self.setLoading(false); if(json.ideas) { self.renderIdeasInteractive(json); self.setCachedState('btn-ideas', 'View Topics', 'ideas', Date.now()/1000); } else if (json.code) { self.ideasEl.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; } }).catch(function(e) { self.setLoading(false); console.error(e); }); }; if (forceRefresh) { fetch(PFEAI.rest_url + 'clear-ideas-cache?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ post_id: PFEAI.post_id }) }) .then(function() { fetchIdeas(); }) .catch(function() { fetchIdeas(); }); } else { fetchIdeas(); } }, runIdeaOutline: function(title, context) { var self = this; var resDiv = document.getElementById('pfeai-idea-result'); if(!resDiv) return; resDiv.innerHTML = '

Drafting outline...

This may take up to 30 seconds.

'; var controller = new AbortController(); var timeoutId = setTimeout(function() { controller.abort(); }, 180000); fetch(PFEAI.rest_url + 'idea-outline?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ idea_title: title, context: context, provider: this.getProvider() }), signal: controller.signal }) .then(function(r) { clearTimeout(timeoutId); if (!r.ok) throw new Error('Server returned status ' + r.status); return r.json(); }) .then(function(json) { if (json.code) { resDiv.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; return; } if(json.blurb) { self.renderIdeaOutlineResult(json, title); } else { resDiv.innerHTML = '

AI response was incomplete. Please try again.

'; } }) .catch(function(err) { clearTimeout(timeoutId); var errorMsg = err.name === 'AbortError' ? 'Request timed out. Please try again.' : err.message; resDiv.innerHTML = '

' + self.escapeHtml(errorMsg) + '

'; }); }, runTagline: function(editor) { var self = this; var c = this.getSafeContent(editor); var t = (document.getElementById('title') || {}).value || ''; if (!t) { alert('Enter title first'); return; } var btn = this.panelEl.querySelector('.pfeai-tagline-btn'); var originalText = btn ? btn.textContent : ''; if (btn) { btn.disabled = true; btn.innerHTML = ' Thinking...'; } fetch(PFEAI.rest_url + 'generate-tagline?_t=' + Date.now(), { method: 'POST', headers: {'Content-Type':'application/json','X-WP-Nonce':PFEAI.nonce}, body:JSON.stringify({content:c, title:t, provider: this.getProvider()}) }) .then(function(r){ return r.json(); }) .then(function(j){ if (btn) { btn.disabled = false; btn.textContent = originalText; } if(j.tagline) { document.getElementById('pftwt_tagline').value = j.tagline; self.startCacheWindow(false); } else if (j.code) { alert('Error: ' + j.message); } else { alert('No tagline was generated. Please try again.'); } }) .catch(function(e) { if (btn) { btn.disabled = false; btn.textContent = originalText; } alert('Error: ' + e.message); }); }, runTagSuggestions: function(editor) { var self = this; var c = this.getSafeContent(editor); var t = (document.getElementById('title') || {}).value || ''; if (!c || c.length < 50) { alert('Please add more content before generating tags.'); return; } var btn = this.panelEl.querySelector('.pfeai-tags-btn'); var originalText = btn ? btn.textContent : ''; if (btn) { btn.disabled = true; btn.innerHTML = ' Thinking...'; } fetch(PFEAI.rest_url + 'suggest-tags?_t=' + Date.now(), { method: 'POST', headers: {'Content-Type':'application/json','X-WP-Nonce':PFEAI.nonce}, body:JSON.stringify({content:c, title:t, provider: this.getProvider()}) }) .then(function(r){ return r.json(); }) .then(function(j){ if (btn) { btn.disabled = false; btn.textContent = originalText; } if (j.code) { alert('Error generating tags: ' + (j.message || j.code)); return; } if(j.tags && j.tags.length > 0 && jQuery) { var $ = jQuery; var tagsAdded = 0; var tagBox = $('#post_tag'); if (window.tagBox && typeof window.tagBox.flushTags === 'function') { var $input = $('#new-tag-post_tag'); j.tags.forEach(function(tag) { $input.val(tag); window.tagBox.flushTags(tagBox, false, 1); tagsAdded++; }); } else { var $input = $('#new-tag-post_tag'); var $addBtn = $('#post_tag .tagadd'); j.tags.forEach(function(tag, index) { setTimeout(function() { $input.val(tag); $addBtn.trigger('click'); var e = $.Event('keypress'); e.which = 13; $input.trigger(e); tagsAdded++; if (index === j.tags.length - 1) { setTimeout(function() { if (window.tagBox && typeof window.tagBox.get === 'function') { window.tagBox.get('post_tag'); } }, 100); } }, index * 50); }); } self.startCacheWindow(false); if (btn) { btn.textContent = 'Added ' + j.tags.length + ' tags!'; setTimeout(function() { btn.textContent = originalText; }, 2000); } } else { alert('No tags were generated. Please try again.'); } }) .catch(function(e) { if (btn) { btn.disabled = false; btn.textContent = originalText; } alert('Error: ' + e.message); }); }, runMetaDescFromMenu: function(editor) { var self = this; var title = (document.getElementById('title') || {}).value || ''; var content = this.getSafeContent(editor); if (!title && !content) { alert('Please add a title or content first.'); return; } var btn = this.panelEl.querySelector('.pfeai-meta-btn'); var originalText = btn ? btn.textContent : ''; if (btn) { btn.disabled = true; btn.innerHTML = ' Thinking...'; } fetch(PFEAI.rest_url + 'generate-meta-desc?_t=' + Date.now(), { method: 'POST', headers: {'Content-Type':'application/json','X-WP-Nonce':PFEAI.nonce}, body: JSON.stringify({content: content, title: title, provider: this.getProvider()}) }) .then(function(r){return r.json()}) .then(function(j){ if (btn) { btn.disabled = false; btn.textContent = originalText; } if(j.meta_description) { self.showResults('seo'); var textarea = document.getElementById('pfeai-meta-description'); if (textarea) { textarea.value = j.meta_description; self.updateSerpPreview(); } self.startCacheWindow(false); if (btn) { btn.textContent = 'Generated!'; setTimeout(function() { btn.textContent = originalText; }, 2000); } } else if (j.code) { alert('Error: ' + j.message); } else { alert('No meta description was generated.'); } }) .catch(function(e) { if (btn) { btn.disabled = false; btn.textContent = originalText; } alert('Error: ' + e.message); }); }, runMetaDescription: function() { var self = this; var title = (document.getElementById('title') || {}).value || ''; var content = this.getSafeContent(tinymce.activeEditor); if (!title && !content) { alert('Please add a title or content first.'); return; } var btn = document.getElementById('pfeai-generate-meta-btn'); if (btn) { btn.textContent = 'Generating...'; btn.disabled = true; } fetch(PFEAI.rest_url + 'generate-meta-desc?_t=' + Date.now(), { method: 'POST', headers: {'Content-Type':'application/json','X-WP-Nonce':PFEAI.nonce}, body: JSON.stringify({content: content, title: title, provider: this.getProvider()}) }) .then(function(r){return r.json()}) .then(function(j){ if (btn) { btn.innerHTML = '✨ Generate New Meta Description'; btn.disabled = false; } if(j.meta_description) { var textarea = document.getElementById('pfeai-meta-description'); if (textarea) { textarea.value = j.meta_description; self.updateSerpPreview(); } self.startCacheWindow(false); } else if (j.code) { alert('Error: ' + j.message); } }) .catch(function(e) { if (btn) { btn.innerHTML = '✨ Generate New Meta Description'; btn.disabled = false; } }); }, runFAQ: function(editor) { var self = this; var c = this.getSafeContent(editor); var t = (document.getElementById('title') || {}).value || ''; if (!c || c.length < 100) { alert('Please write or paste the article content first so the AI can generate accurate FAQs.'); return; } this.showResults('faq'); this.setLoading(true); fetch(PFEAI.rest_url + 'generate-faq?_t=' + Date.now(), { method: 'POST', headers: {'Content-Type':'application/json','X-WP-Nonce':PFEAI.nonce}, body: JSON.stringify({content: c, title: t, provider: this.getProvider()}) }) .then(function(r){ return r.json(); }) .then(function(j){ self.setLoading(false); if(j.faq && j.faq.length > 0) { self.renderFAQ(j.faq, editor); self.startCacheWindow(false); } else if (j.code) { self.faqEl.innerHTML = '

Error: ' + self.escapeHtml(j.message) + '

'; } else { self.faqEl.innerHTML = '

Failed to generate FAQ. Please try again.

'; } }) .catch(function(e) { self.setLoading(false); self.faqEl.innerHTML = '

Error: ' + self.escapeHtml(e.message) + '

'; }); }, renderFAQ: function(faqData, editor) { var self = this; if (!this.faqEl) return; this.faqEl.innerHTML = ''; var header = document.createElement('h4'); header.style.margin = '0 0 10px 0'; header.textContent = 'Review & Edit FAQ'; this.faqEl.appendChild(header); var instruction = document.createElement('p'); instruction.style.fontSize = '11px'; instruction.style.color = '#666'; instruction.textContent = 'Review your FAQs below. Clicking the button will send them down to the "Article FAQ & Schema" box at the bottom of your post screen. Remember to click the WordPress Update/Publish button to save them!'; this.faqEl.appendChild(instruction); var faqContainer = document.createElement('div'); faqContainer.id = 'pfeai-faq-inputs-container'; faqData.forEach(function(item, index) { var box = document.createElement('div'); box.style.background = '#fff'; box.style.padding = '10px'; box.style.marginBottom = '10px'; box.style.border = '1px solid #ddd'; box.style.borderRadius = '4px'; var qLabel = document.createElement('strong'); qLabel.style.fontSize = '11px'; qLabel.textContent = 'Question ' + (index + 1); box.appendChild(qLabel); var qInput = document.createElement('input'); qInput.type = 'text'; qInput.className = 'pfeai-faq-q'; qInput.style.width = '100%'; qInput.style.marginBottom = '8px'; qInput.value = item.question || ''; box.appendChild(qInput); var aLabel = document.createElement('strong'); aLabel.style.fontSize = '11px'; aLabel.textContent = 'Answer ' + (index + 1); box.appendChild(aLabel); var aInput = document.createElement('textarea'); aInput.className = 'pfeai-faq-a'; aInput.style.width = '100%'; aInput.style.height = '50px'; aInput.style.fontSize = '12px'; aInput.value = item.answer || ''; box.appendChild(aInput); faqContainer.appendChild(box); }); this.faqEl.appendChild(faqContainer); var insertBtn = document.createElement('button'); insertBtn.type = 'button'; insertBtn.className = 'button button-primary'; insertBtn.style.width = '100%'; insertBtn.innerHTML = '↓ Send to FAQ Meta Box'; insertBtn.onclick = function() { var qInputs = faqContainer.querySelectorAll('.pfeai-faq-q'); var aInputs = faqContainer.querySelectorAll('.pfeai-faq-a'); var transferCount = 0; for (var i = 0; i < qInputs.length; i++) { var qText = qInputs[i].value.trim(); var aText = aInputs[i].value.trim(); var metaQ = document.getElementById('pfeai_meta_q_' + i); var metaA = document.getElementById('pfeai_meta_a_' + i); if (metaQ && metaA) { metaQ.value = qText; metaA.value = aText; if (qText && aText) transferCount++; } } if (transferCount === 0) { alert('Could not locate the FAQ Meta Box on the screen. Please ensure "Article FAQ & Schema" is checked in your Screen Options at the top right.'); return; } insertBtn.innerHTML = '✓ Sent to Meta Box!'; setTimeout(function() { insertBtn.innerHTML = '↓ Send to FAQ Meta Box'; }, 2000); }; this.faqEl.appendChild(insertBtn); }, updateSerpPreview: function(selectedTitle) { var titleEl = document.getElementById('pfeai-serp-title'); var descEl = document.getElementById('pfeai-serp-desc'); var charCount = document.getElementById('pfeai-meta-char-count'); var titleCharNote = document.getElementById('pfeai-title-char-note'); var metaTextarea = document.getElementById('pfeai-meta-description'); if (selectedTitle && titleEl) { titleEl.textContent = selectedTitle; if (selectedTitle.length > 60) { titleEl.textContent = selectedTitle.substring(0, 57) + '...'; } } if (titleCharNote && titleEl) { var currentTitle = selectedTitle || titleEl.textContent; if (currentTitle === '(Select a title above)') currentTitle = ''; var titleLen = currentTitle.length; var titleColor = titleLen <= 60 ? '#2e7d32' : '#c62828'; titleCharNote.innerHTML = 'Title: ' + titleLen + '/60 chars ' + (titleLen <= 60 ? '✓' : '(may be truncated)'); } if (metaTextarea && descEl) { var desc = metaTextarea.value; if (desc) { descEl.textContent = desc.length > 155 ? desc.substring(0, 152) + '...' : desc; } else { descEl.textContent = '(Enter a meta description above)'; } } if (metaTextarea && charCount) { var len = metaTextarea.value.length; var color = '#666'; var status = ''; if (len === 0) { color = '#666'; } else if (len < 120) { color = '#e65100'; status = ' (too short)'; } else if (len >= 120 && len <= 155) { color = '#2e7d32'; status = ' ✓ optimal'; } else if (len > 155 && len <= 160) { color = '#e65100'; status = ' (slightly long)'; } else { color = '#c62828'; status = ' (will be truncated)'; } charCount.innerHTML = '' + len + ' / 155 characters' + status + ''; } }, saveToClipboard: function(title, html, redirectToNew) { fetch(PFEAI.rest_url + 'save-clipboard?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ title: title, content: html }) }) .then(function(){ if (redirectToNew) { window.open('/patriots/blog/wp-admin/post-new.php', '_blank'); } else { alert('Saved! You can now access this draft in the "Saved" tab on any new post.'); location.reload(); } }); }, clearClipboard: function() { fetch(PFEAI.rest_url + 'clear-clipboard?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce } }) .then(function(r) { return r.json(); }) .then(function(json) { if (json.success) { alert('Saved draft cleared.'); location.reload(); } }) .catch(function(e) { console.error(e); }); }, clearIdeasCache: function() { fetch(PFEAI.rest_url + 'clear-ideas-cache?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ post_id: PFEAI.post_id }) }) .then(function(r) { return r.json(); }) .then(function(json) { if (json.success) { alert('Topics cache cleared.'); location.reload(); } }) .catch(function(e) { console.error(e); }); }, togglePanel: function(forceState) { if (!this.panelEl) return; var open = this.panelEl.classList.contains('pfeai-open'); var shouldOpen = (typeof forceState === 'boolean') ? forceState : !open; if (shouldOpen) { this.panelEl.classList.add('pfeai-open'); document.body.classList.add('pfeai-panel-open'); this.updateTranscriptVisibility(); if (this.isMinimized) document.body.classList.add('pfeai-panel-minimized'); else document.body.classList.remove('pfeai-panel-minimized'); } else { this.panelEl.classList.remove('pfeai-open'); document.body.classList.remove('pfeai-panel-open'); } }, showMenu: function() { this.panelEl.classList.remove('pfeai-show-results'); }, showResults: function(activeTab) { this.panelEl.classList.add('pfeai-show-results'); if (activeTab) this.switchTab(activeTab); }, updateTranscriptVisibility: function() { var isTranscript = false; var labels = document.querySelectorAll('.categorychecklist label'); for (var i = 0; i < labels.length; i++) { if (labels[i].innerText.indexOf('Patriots Transcripts') !== -1) { var input = labels[i].querySelector('input[type="checkbox"]'); if (input && input.checked) isTranscript = true; } } var btn = document.getElementById('btn-transcript'); var tab = document.getElementById('tab-transcript'); if (isTranscript) { if (btn) btn.style.display = 'block'; if (tab) tab.style.display = 'inline-block'; } else { if (btn) btn.style.display = 'none'; if (tab) tab.style.display = 'none'; } }, preloadSavedData: function() { if (!PFEAI.saved_data) return; if (PFEAI.saved_data.transcript && PFEAI.saved_data.transcript.suggestions) { this.renderTranscriptSuggestions(PFEAI.saved_data.transcript.suggestions, ''); this.setCachedState('btn-transcript', 'View Transcript Results', 'transcript', PFEAI.saved_data.transcript.generated_at); } if (PFEAI.saved_data.analysis && PFEAI.saved_data.analysis.highlights) { this.renderAnalysis(PFEAI.saved_data.analysis); this.setCachedState('btn-scan', 'View Analysis Results', 'highlights', PFEAI.saved_data.analysis.generated_at); } if (PFEAI.saved_data.titles && PFEAI.saved_data.titles.titles) { this.renderTitles(PFEAI.saved_data.titles); this.setCachedState('btn-titles', 'View Titles', 'titles', PFEAI.saved_data.titles.generated_at); } if (PFEAI.saved_data.ideas && PFEAI.saved_data.ideas.ideas) { this.renderIdeasInteractive(PFEAI.saved_data.ideas); this.setCachedState('btn-ideas', 'View Topics', 'ideas', PFEAI.saved_data.ideas.generated_at); } if (PFEAI.saved_data.social && PFEAI.saved_data.social.tweets) { this.renderSocialPack(PFEAI.saved_data.social); this.setCachedState('btn-social', 'View Social Posts', 'social', PFEAI.saved_data.social.generated_at); } if (PFEAI.saved_data.clipboard && this.savedEl) { this.renderSavedDraft(PFEAI.saved_data.clipboard); } if (PFEAI.saved_data.fact_check && PFEAI.saved_data.fact_check.factChecks) { this.renderFacts(PFEAI.saved_data.fact_check.factChecks); this.setCachedState('btn-fact-check', 'View Fact Check', 'facts', PFEAI.saved_data.fact_check.generated_at); } if (PFEAI.saved_data.links && PFEAI.saved_data.links.links) { this.renderInternalLinks(PFEAI.saved_data.links, null); this.setCachedState('btn-internal-links', '\uD83D\uDD17 View Links', 'links', PFEAI.saved_data.links.generated_at); } this.renderSeoTab(); this.renderGSCPanel(); }, setCachedState: function(btnId, newText, tabName, timestamp) { var btn = document.getElementById(btnId); if (btn) { if (btnId === 'btn-transcript' || btnId === 'btn-ideas' || btnId === 'btn-social') { btn.innerHTML = '' + this.escapeHtml(newText) + '
(Click to see saved)'; } else { btn.textContent = newText; } } var container = this.panelEl.querySelector('.pfeai-tab-content[data-tab="' + tabName + '"]'); if (container) { var existingHeader = container.querySelector('.pfeai-cache-header'); if (existingHeader) existingHeader.remove(); var dateStr = timestamp ? new Date(timestamp * 1000).toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}) : ''; var header = document.createElement('div'); header.className = 'pfeai-cache-header'; header.style.background = '#e1f5fe'; header.style.padding = '8px'; header.style.marginBottom = '10px'; header.style.display = 'flex'; header.style.justifyContent = 'space-between'; header.style.alignItems = 'center'; header.style.borderRadius = '4px'; var savedSpan = document.createElement('span'); savedSpan.style.fontSize = '11px'; savedSpan.style.color = '#0277bd'; savedSpan.textContent = 'Saved ' + dateStr; header.appendChild(savedSpan); var rescanBtn = document.createElement('button'); rescanBtn.className = 'button button-small'; rescanBtn.textContent = 'Rescan / Start Over'; (function(name) { rescanBtn.onclick = function() { if (name === 'highlights') window.PFEditorialAI.runAnalysis(tinymce.activeEditor, true); if (name === 'transcript') window.PFEditorialAI.runTranscriptScan(tinymce.activeEditor, true); if (name === 'titles') window.PFEditorialAI.runTitles(tinymce.activeEditor, true); if (name === 'ideas') window.PFEditorialAI.runArticleIdeas(tinymce.activeEditor, true); if (name === 'social') window.PFEditorialAI.runSocialPack(tinymce.activeEditor, true); if (name === 'facts') window.PFEditorialAI.runFactCheck(tinymce.activeEditor, true); if (name === 'links') window.PFEditorialAI.runInternalLinks(tinymce.activeEditor, true); }; })(tabName); header.appendChild(rescanBtn); container.insertBefore(header, container.firstChild); } }, renderAnalysis: function(data) { var self = this; var hEl = this.analysisEl.highlights; hEl.innerHTML = ''; (data.highlights || []).forEach(function(h) { var c = document.createElement('div'); c.className = 'pfeai-card'; var typeEl = document.createElement('strong'); typeEl.textContent = (h.type || '').toUpperCase(); c.appendChild(typeEl); var msgEl = document.createElement('p'); msgEl.textContent = h.message || ''; c.appendChild(msgEl); var quoteEl = document.createElement('div'); quoteEl.className = 'pfeai-card-quote'; quoteEl.textContent = '"' + (h.quote || '') + '"'; c.appendChild(quoteEl); var suggEl = document.createElement('div'); suggEl.className = 'pfeai-card-suggestion'; suggEl.textContent = h.suggestion || ''; c.appendChild(suggEl); hEl.appendChild(c); }); var sEl = this.analysisEl.suggestions; sEl.innerHTML = ''; var ulS = document.createElement('ul'); ulS.className = 'pfeai-list'; (data.summarySuggestions || []).forEach(function(s){ var li = document.createElement('li'); li.textContent = s; ulS.appendChild(li); }); sEl.appendChild(ulS); var gEl = this.analysisEl.gaps; gEl.innerHTML = ''; var ulG = document.createElement('ul'); ulG.className = 'pfeai-list'; (data.contentGaps || []).forEach(function(g){ var li = document.createElement('li'); li.textContent = g; ulG.appendChild(li); }); gEl.appendChild(ulG); }, runFactCheck: function(editor, forceRefresh) { var self = this; var contentHtml = this.getSafeContent(editor); var title = (document.getElementById('title') || {}).value || ''; if (!title) { alert('Please enter a title.'); return; } this.showResults('facts'); this.setLoading(true); fetch(PFEAI.rest_url + 'fact-check?_t=' + Date.now(), { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': PFEAI.nonce }, body: JSON.stringify({ content: contentHtml, title: title, post_id: PFEAI.post_id, provider: this.getProvider(), force_refresh: forceRefresh || false }) }) .then(function(r){return r.json()}).then(function(json){ self.setLoading(false); if(json.factChecks) { self.renderFacts(json.factChecks); var timestamp = json.generated_at || Date.now()/1000; self.setCachedState('btn-fact-check', 'View Fact Check', 'facts', timestamp, json.from_cache); self.startCacheWindow(json.from_cache); } else if (json.code) { self.factsEl.innerHTML = '

Error: ' + self.escapeHtml(json.message) + '

'; } }).catch(function(e) { self.setLoading(false); console.error(e); }); }, renderFacts: function(checks) { var self = this; var fEl = self.factsEl; if (!fEl) return; fEl.innerHTML = ''; checks = checks || []; var factsHeading = document.createElement('h4'); factsHeading.style.margin = '0 0 4px 0'; factsHeading.style.color = '#1A2635'; factsHeading.textContent = 'Stats & Data Verification'; fEl.appendChild(factsHeading); var factsNote = document.createElement('p'); factsNote.style.fontSize = '11px'; factsNote.style.color = '#666'; factsNote.style.margin = '0 0 12px 0'; factsNote.textContent = 'AI-reviewed claims found in the article. Always cross-check flagged items before publishing.'; fEl.appendChild(factsNote); if (checks.length === 0) { var noFacts = document.createElement('p'); noFacts.style.color = '#666'; noFacts.style.fontSize = '13px'; noFacts.textContent = 'No specific stats or data claims detected in this article.'; fEl.appendChild(noFacts); } else { var counts = { 'Likely Accurate': 0, 'Needs Verification': 0, 'Potentially Incorrect': 0, 'May Be Outdated': 0 }; checks.forEach(function(fc) { if (counts[fc.verdict] !== undefined) counts[fc.verdict]++; }); var badgeRow = document.createElement('div'); badgeRow.style.cssText = 'display:flex; flex-wrap:wrap; gap:6px; margin-bottom:12px;'; var badgeDefs = [ { key: 'Likely Accurate', bg: '#e8f5e9', color: '#2e7d32', icon: '✓' }, { key: 'Needs Verification', bg: '#fff8e1', color: '#f57c00', icon: '⚠' }, { key: 'May Be Outdated', bg: '#e3f2fd', color: '#1565c0', icon: '📅' }, { key: 'Potentially Incorrect', bg: '#ffebee', color: '#c62828', icon: '✗' } ]; badgeDefs.forEach(function(bd) { if (!counts[bd.key]) return; var badge = document.createElement('span'); badge.style.cssText = 'background:' + bd.bg + '; color:' + bd.color + '; border:1px solid ' + bd.color + '; border-radius:12px; padding:2px 8px; font-size:11px; font-weight:700;'; badge.textContent = bd.icon + ' ' + counts[bd.key] + ' ' + bd.key; badgeRow.appendChild(badge); }); fEl.appendChild(badgeRow); var styleMap = { 'Likely Accurate': { border: '#4caf50', bg: '#f9fbe7', tagBg: '#e8f5e9', tagColor: '#2e7d32', icon: '✓' }, 'Needs Verification': { border: '#ff9800', bg: '#fffde7', tagBg: '#fff3e0', tagColor: '#e65100', icon: '⚠' }, 'May Be Outdated': { border: '#2196f3', bg: '#e8f4fd', tagBg: '#e3f2fd', tagColor: '#1565c0', icon: '📅' }, 'Potentially Incorrect': { border: '#f44336', bg: '#fff5f5', tagBg: '#ffebee', tagColor: '#c62828', icon: '✗' } }; checks.forEach(function(fc) { var verdict = fc.verdict || 'Needs Verification'; var s = styleMap[verdict] || styleMap['Needs Verification']; var card = document.createElement('div'); card.className = 'pfeai-fact-card'; card.style.cssText = 'background:' + s.bg + '; border-left:4px solid ' + s.border + '; border-radius:3px; padding:8px 10px; margin-bottom:8px;'; var tag = document.createElement('span'); tag.style.cssText = 'display:inline-block; background:' + s.tagBg + '; color:' + s.tagColor + '; border:1px solid ' + s.border + '; border-radius:10px; padding:1px 7px; font-size:10px; font-weight:700; margin-bottom:5px;'; tag.textContent = s.icon + ' ' + verdict; card.appendChild(tag); var statEl = document.createElement('div'); statEl.style.cssText = 'font-size:13px; font-weight:600; color:#1A2635; font-style:italic; margin-bottom:4px;'; statEl.textContent = '\u201c' + (fc.stat || '') + '\u201d'; card.appendChild(statEl); var noteEl = document.createElement('div'); noteEl.style.cssText = 'font-size:12px; color:#444; line-height:1.4;'; noteEl.textContent = fc.note || ''; card.appendChild(noteEl); fEl.appendChild(card); }); } var flagged = checks.filter(function(fc) { return fc.verdict === 'Needs Verification' || fc.verdict === 'Potentially Incorrect' || fc.verdict === 'May Be Outdated'; }).length; var factsTab = self.panelEl ? self.panelEl.querySelector('.pfeai-tab[data-tab="facts"]') : null; if (factsTab) { factsTab.innerHTML = flagged > 0 ? '🔍 Facts ' + flagged + '' : '🔍 Facts ✓'; } }, renderTitles: function(data) { var self = this; this.titlesEl.innerHTML = ''; (data.titles || []).forEach(function(t) { var c = document.createElement('div'); c.className = 'pfeai-title-card'; c.style.display = 'flex'; c.style.flexDirection = 'column'; c.style.gap = '8px'; var td = document.createElement('div'); td.className = 'pfeai-title-text'; td.textContent = t.title; c.appendChild(td); var sr = document.createElement('div'); sr.className = 'pfeai-score-row'; var ctrSpan = document.createElement('span'); ctrSpan.innerHTML = 'CTR: ' + parseInt(t.ctr_score || 0, 10) + ''; sr.appendChild(ctrSpan); var discSpan = document.createElement('span'); discSpan.innerHTML = 'Disc: ' + parseInt(t.discover_score || 0, 10) + ''; sr.appendChild(discSpan); c.appendChild(sr); var btn = document.createElement('button'); btn.className = 'button button-small'; btn.textContent = 'Use This Title'; btn.style.alignSelf = 'flex-start'; (function(titleText) { btn.onclick = function() { var wt = document.getElementById('title'); if(wt) { wt.value = titleText; wt.focus(); var pt = document.getElementById('title-prompt-text'); if(pt) pt.classList.add('screen-reader-text'); btn.textContent = 'Updated!'; setTimeout(function(){ btn.textContent = 'Use This Title'; }, 2000); } self.updateSerpPreview(titleText); }; })(t.title); c.appendChild(btn); self.titlesEl.appendChild(c); }); }, renderSeoTab: function() { var self = this; if (!this.seoEl) return; this.seoEl.innerHTML = ''; var currentTitle = (document.getElementById('title') || {}).value || ''; var serpHeader = document.createElement('h4'); serpHeader.style.margin = '0 0 15px 0'; serpHeader.style.color = '#1A2635'; serpHeader.textContent = 'SEO Meta Description'; this.seoEl.appendChild(serpHeader); var generateBtn = document.createElement('button'); generateBtn.type = 'button'; generateBtn.className = 'button button-primary'; generateBtn.id = 'pfeai-generate-meta-btn'; generateBtn.innerHTML = '✨ Generate New Meta Description'; generateBtn.style.marginBottom = '15px'; generateBtn.style.width = '100%'; generateBtn.onclick = function() { self.runMetaDescription(); }; this.seoEl.appendChild(generateBtn); var metaTextarea = document.createElement('textarea'); metaTextarea.id = 'pfeai-meta-description'; metaTextarea.style.width = '100%'; metaTextarea.style.height = '80px'; metaTextarea.style.fontSize = '12px'; metaTextarea.style.marginBottom = '5px'; metaTextarea.placeholder = 'Enter or generate a meta description (150-155 characters ideal)...'; metaTextarea.oninput = function() { self.updateSerpPreview(); }; this.seoEl.appendChild(metaTextarea); var charCount = document.createElement('div'); charCount.id = 'pfeai-meta-char-count'; charCount.style.fontSize = '11px'; charCount.style.marginBottom = '10px'; charCount.style.color = '#666'; charCount.textContent = '0 / 155 characters'; this.seoEl.appendChild(charCount); var insertExcerptBtn = document.createElement('button'); insertExcerptBtn.type = 'button'; insertExcerptBtn.className = 'button'; insertExcerptBtn.id = 'pfeai-insert-excerpt-btn'; insertExcerptBtn.innerHTML = '→ Transfer to Article Excerpt Block'; insertExcerptBtn.style.marginBottom = '20px'; insertExcerptBtn.style.width = '100%'; insertExcerptBtn.onclick = function() { var metaTextarea = document.getElementById('pfeai-meta-description'); var excerptBox = document.getElementById('excerpt'); if (!metaTextarea || !metaTextarea.value.trim()) { alert('Please generate or enter a meta description first.'); return; } if (excerptBox) { excerptBox.value = metaTextarea.value; insertExcerptBtn.innerHTML = '✓ Inserted!'; setTimeout(function() { insertExcerptBtn.innerHTML = '→ Insert into Excerpt'; }, 2000); } else { alert('Excerpt box not found. Make sure the Excerpt panel is enabled in Screen Options.'); } }; this.seoEl.appendChild(insertExcerptBtn); var previewLabel = document.createElement('div'); previewLabel.style.fontSize = '11px'; previewLabel.style.color = '#666'; previewLabel.style.marginBottom = '5px'; previewLabel.textContent = 'Google Search Preview:'; this.seoEl.appendChild(previewLabel); var serpPreview = document.createElement('div'); serpPreview.id = 'pfeai-serp-preview'; serpPreview.style.background = '#fff'; serpPreview.style.border = '1px solid #ddd'; serpPreview.style.borderRadius = '8px'; serpPreview.style.padding = '12px'; serpPreview.style.fontFamily = 'Arial, sans-serif'; var serpTitle = document.createElement('div'); serpTitle.id = 'pfeai-serp-title'; serpTitle.style.color = '#1a0dab'; serpTitle.style.fontSize = '18px'; serpTitle.style.lineHeight = '1.3'; serpTitle.style.marginBottom = '3px'; serpTitle.style.cursor = 'pointer'; serpTitle.textContent = currentTitle || '(No title set)'; serpPreview.appendChild(serpTitle); var serpUrl = document.createElement('div'); serpUrl.style.color = '#006621'; serpUrl.style.fontSize = '13px'; serpUrl.style.marginBottom = '3px'; serpUrl.innerHTML = 'www.patsfans.com › patriots › blog'; serpPreview.appendChild(serpUrl); var serpDesc = document.createElement('div'); serpDesc.id = 'pfeai-serp-desc'; serpDesc.style.color = '#545454'; serpDesc.style.fontSize = '13px'; serpDesc.style.lineHeight = '1.4'; serpDesc.textContent = '(Enter a meta description above)'; serpPreview.appendChild(serpDesc); this.seoEl.appendChild(serpPreview); var titleCharNote = document.createElement('div'); titleCharNote.id = 'pfeai-title-char-note'; titleCharNote.style.fontSize = '10px'; titleCharNote.style.color = '#666'; titleCharNote.style.marginTop = '8px'; this.seoEl.appendChild(titleCharNote); this.updateSerpPreview(currentTitle); }, renderTranscriptSuggestions: function(suggestions, contentText) { var self = this; this.transcriptEl.innerHTML = ''; var h3 = document.createElement('h3'); h3.textContent = 'Suggested Angles'; this.transcriptEl.appendChild(h3); var p = document.createElement('p'); p.style.fontSize = '11px'; p.style.marginBottom = '10px'; p.textContent = 'Click to generate outline.'; this.transcriptEl.appendChild(p); suggestions.forEach(function(item) { var c = document.createElement('div'); c.className = 'pfeai-card pfeai-clickable'; c.style.cursor = 'pointer'; c.style.borderLeftColor = '#e67e22'; var h = document.createElement('h4'); h.style.margin = '0 0 4px 0'; h.style.color = '#d35400'; h.textContent = item.title; c.appendChild(h); var pEl = document.createElement('p'); pEl.style.fontSize = '12px'; pEl.textContent = item.context; c.appendChild(pEl); if (item.ctr_score || item.discover_score) { var sr = document.createElement('div'); sr.className = 'pfeai-score-row'; sr.style.marginTop = '6px'; sr.style.borderTop = '1px solid #eee'; sr.style.paddingTop = '4px'; sr.innerHTML = 'CTR: ' + parseInt(item.ctr_score || 0, 10) + 'Disc: ' + parseInt(item.discover_score || 0, 10) + ''; c.appendChild(sr); } (function(title, content) { c.addEventListener('click', function() { self.runTranscriptOutline(title, content, c); }); })(item.title, contentText); self.transcriptEl.appendChild(c); }); var rd = document.createElement('div'); rd.id = 'pfeai-transcript-result'; rd.style.marginTop = '15px'; rd.style.borderTop = '1px solid #ccc'; rd.style.paddingTop = '10px'; this.transcriptEl.appendChild(rd); }, renderTranscriptOutlineResult: function(data, title) { var self = this; var resDiv = document.getElementById('pfeai-transcript-result'); var container = document.createElement('div'); container.style.background = '#fff'; container.style.padding = '10px'; container.style.border = '1px solid #ddd'; container.style.marginTop = '10px'; var h3 = document.createElement('h3'); h3.style.marginTop = '0'; h3.textContent = title; container.appendChild(h3); var blurbLabel = document.createElement('strong'); blurbLabel.textContent = 'Blurb:'; container.appendChild(blurbLabel); var blurbP = document.createElement('p'); blurbP.textContent = data.blurb || ''; container.appendChild(blurbP); if (data.key_quotes && data.key_quotes.length > 0) { var quotesDiv = document.createElement('div'); quotesDiv.style.marginTop = '12px'; quotesDiv.style.marginBottom = '12px'; quotesDiv.style.padding = '10px'; quotesDiv.style.background = '#fff8e1'; quotesDiv.style.borderLeft = '4px solid #ffc107'; quotesDiv.style.borderRadius = '4px'; var quotesLabel = document.createElement('strong'); quotesLabel.style.display = 'block'; quotesLabel.style.marginBottom = '8px'; quotesLabel.style.color = '#f57c00'; quotesLabel.innerHTML = '💬 Key Quotes:'; quotesDiv.appendChild(quotesLabel); var quotesList = document.createElement('ul'); quotesList.style.margin = '0'; quotesList.style.paddingLeft = '0'; quotesList.style.listStyleType = 'none'; (data.key_quotes || []).forEach(function(quote) { var li = document.createElement('li'); li.style.marginBottom = '10px'; li.style.fontSize = '12px'; li.style.fontStyle = 'italic'; li.style.color = '#333'; li.style.paddingLeft = '20px'; li.style.position = 'relative'; li.style.lineHeight = '1.4'; var openQuote = document.createElement('span'); openQuote.style.position = 'absolute'; openQuote.style.left = '0'; openQuote.style.top = '0'; openQuote.style.color = '#ffc107'; openQuote.style.fontSize = '16px'; openQuote.style.fontWeight = 'bold'; openQuote.style.fontStyle = 'normal'; openQuote.innerHTML = '“'; li.appendChild(openQuote); var quoteText = document.createElement('span'); quoteText.textContent = quote; li.appendChild(quoteText); var closeQuote = document.createElement('span'); closeQuote.style.color = '#ffc107'; closeQuote.style.fontSize = '16px'; closeQuote.style.fontWeight = 'bold'; closeQuote.style.fontStyle = 'normal'; closeQuote.innerHTML = '”'; li.appendChild(closeQuote); quotesList.appendChild(li); }); quotesDiv.appendChild(quotesList); var copyQuotesBtn = document.createElement('button'); copyQuotesBtn.type = 'button'; copyQuotesBtn.className = 'button button-small'; copyQuotesBtn.style.marginTop = '8px'; copyQuotesBtn.style.background = '#fff3e0'; copyQuotesBtn.style.color = '#e65100'; copyQuotesBtn.style.borderColor = '#ffb74d'; copyQuotesBtn.textContent = 'Copy All Quotes'; copyQuotesBtn.onclick = function() { var allQuotes = (data.key_quotes || []).map(function(q) { return '"' + q + '"'; }).join('\n\n'); navigator.clipboard.writeText(allQuotes); copyQuotesBtn.textContent = 'Copied!'; setTimeout(function() { copyQuotesBtn.textContent = 'Copy All Quotes'; }, 1500); }; quotesDiv.appendChild(copyQuotesBtn); container.appendChild(quotesDiv); } if (data.draft_paragraphs && data.draft_paragraphs.length > 0) { var draftsDiv = document.createElement('div'); draftsDiv.style.marginTop = '12px'; draftsDiv.style.marginBottom = '12px'; draftsDiv.style.padding = '10px'; draftsDiv.style.background = '#e3f2fd'; draftsDiv.style.borderLeft = '4px solid #2196f3'; draftsDiv.style.borderRadius = '4px'; var draftsLabel = document.createElement('strong'); draftsLabel.style.display = 'block'; draftsLabel.style.marginBottom = '8px'; draftsLabel.style.color = '#1565c0'; draftsLabel.innerHTML = '✍ Draft Paragraphs:'; draftsDiv.appendChild(draftsLabel); var paragraphLabels = ['Opening', 'Quote/Context', 'Analysis']; (data.draft_paragraphs || []).forEach(function(para, idx) { var paraContainer = document.createElement('div'); paraContainer.style.marginBottom = '12px'; paraContainer.style.padding = '8px'; paraContainer.style.background = '#fff'; paraContainer.style.borderRadius = '4px'; paraContainer.style.border = '1px solid #bbdefb'; var paraLabel = document.createElement('div'); paraLabel.style.fontSize = '10px'; paraLabel.style.color = '#1976d2'; paraLabel.style.marginBottom = '4px'; paraLabel.style.fontWeight = 'bold'; paraLabel.textContent = (paragraphLabels[idx] || 'Paragraph ' + (idx + 1)) + ':'; paraContainer.appendChild(paraLabel); var paraText = document.createElement('p'); paraText.style.margin = '0'; paraText.style.fontSize = '12px'; paraText.style.lineHeight = '1.5'; paraText.style.color = '#333'; paraText.textContent = para; paraContainer.appendChild(paraText); var copyParaBtn = document.createElement('button'); copyParaBtn.type = 'button'; copyParaBtn.className = 'button button-small'; copyParaBtn.style.marginTop = '6px'; copyParaBtn.style.fontSize = '10px'; copyParaBtn.textContent = 'Copy'; (function(text, btn) { btn.onclick = function() { navigator.clipboard.writeText(text); btn.textContent = 'Copied!'; setTimeout(function() { btn.textContent = 'Copy'; }, 1500); }; })(para, copyParaBtn); paraContainer.appendChild(copyParaBtn); draftsDiv.appendChild(paraContainer); }); var insertDraftsBtn = document.createElement('button'); insertDraftsBtn.type = 'button'; insertDraftsBtn.className = 'button button-small button-primary'; insertDraftsBtn.style.marginTop = '8px'; insertDraftsBtn.style.marginRight = '8px'; insertDraftsBtn.textContent = 'Insert All Drafts into Editor'; insertDraftsBtn.onclick = function() { if(typeof tinymce !== 'undefined' && tinymce.activeEditor) { var html = (data.draft_paragraphs || []).map(function(p) { return '

' + self.escapeHtml(p) + '

'; }).join('\n'); tinymce.activeEditor.insertContent(html); insertDraftsBtn.textContent = 'Inserted!'; setTimeout(function() { insertDraftsBtn.textContent = 'Insert All Drafts into Editor'; }, 1500); } }; draftsDiv.appendChild(insertDraftsBtn); var copyDraftsBtn = document.createElement('button'); copyDraftsBtn.type = 'button'; copyDraftsBtn.className = 'button button-small'; copyDraftsBtn.style.marginTop = '8px'; copyDraftsBtn.textContent = 'Copy All Drafts'; copyDraftsBtn.onclick = function() { var allDrafts = (data.draft_paragraphs || []).join('\n\n'); navigator.clipboard.writeText(allDrafts); copyDraftsBtn.textContent = 'Copied!'; setTimeout(function() { copyDraftsBtn.textContent = 'Copy All Drafts'; }, 1500); }; draftsDiv.appendChild(copyDraftsBtn); container.appendChild(draftsDiv); } var kpLabel = document.createElement('strong'); kpLabel.textContent = 'Key Points:'; container.appendChild(kpLabel); var kpList = document.createElement('ul'); kpList.className = 'pfeai-list'; (data.key_points || []).forEach(function(pt) { var li = document.createElement('li'); li.textContent = pt; kpList.appendChild(li); }); container.appendChild(kpList); var sparkDiv = document.createElement('div'); sparkDiv.style.marginTop = '10px'; sparkDiv.style.borderTop = '1px solid #eee'; sparkDiv.style.paddingTop = '10px'; var sparkLabel = document.createElement('strong'); sparkLabel.textContent = 'Spark Sentences:'; sparkDiv.appendChild(sparkLabel); var sparkText = (data.spark_sentences || []).join('\n\n'); var textarea = document.createElement('textarea'); textarea.id = 'pfeai-spark-text'; textarea.style.width = '100%'; textarea.style.height = '100px'; textarea.style.fontSize = '12px'; textarea.style.marginTop = '5px'; textarea.value = sparkText; sparkDiv.appendChild(textarea); var btnDiv = document.createElement('div'); btnDiv.style.marginTop = '8px'; btnDiv.style.display = 'flex'; btnDiv.style.gap = '10px'; var insertBtn = document.createElement('button'); insertBtn.type = 'button'; insertBtn.className = 'button button-small button-primary'; insertBtn.id = 'pfeai-insert-spark'; insertBtn.textContent = 'Insert into Editor'; btnDiv.appendChild(insertBtn); var saveBtn = document.createElement('button'); saveBtn.type = 'button'; saveBtn.className = 'button button-small'; saveBtn.style.background = '#e8f5e9'; saveBtn.style.color = '#2e7d32'; saveBtn.style.borderColor = '#66bb6a'; saveBtn.id = 'pfeai-save-clipboard'; saveBtn.innerHTML = '📝 Start New Post →'; btnDiv.appendChild(saveBtn); sparkDiv.appendChild(btnDiv); container.appendChild(sparkDiv); resDiv.innerHTML = ''; resDiv.appendChild(container); resDiv.scrollIntoView({behavior:'smooth'}); insertBtn.onclick = function(){ var wt = document.getElementById('title'); if(wt) { wt.value = title; wt.focus(); var pt = document.getElementById('title-prompt-text'); if(pt) pt.classList.add('screen-reader-text'); } if(typeof tinymce !== 'undefined' && tinymce.activeEditor) { var t = document.getElementById('pfeai-spark-text').value; tinymce.activeEditor.insertContent('

' + self.escapeHtml(t).replace(/\n\n/g, '

') + '

'); } }; saveBtn.onclick = function(){ var fullHTML = ''; if(data.blurb) fullHTML += '

Blurb: ' + self.escapeHtml(data.blurb) + '

'; if(data.key_quotes && data.key_quotes.length) { fullHTML += '

Key Quotes:

'; } if(data.draft_paragraphs && data.draft_paragraphs.length) { fullHTML += '

Draft Paragraphs:

'; data.draft_paragraphs.forEach(function(p){ fullHTML += '

' + self.escapeHtml(p) + '

'; }); } if(data.key_points && data.key_points.length) { fullHTML += '

Key Points:

'; } var sparkVal = document.getElementById('pfeai-spark-text').value; fullHTML += '

' + self.escapeHtml(sparkVal).replace(/\n\n/g, '

') + '

'; self.saveToClipboard(title, fullHTML, true); }; }, renderIdeasInteractive: function(data) { var self = this; this.ideasEl.innerHTML = ''; var h3 = document.createElement('h3'); h3.textContent = 'Topic Inspiration'; this.ideasEl.appendChild(h3); var p = document.createElement('p'); p.style.fontSize = '11px'; p.style.marginBottom = '10px'; p.textContent = 'Click a topic to generate an outline.'; this.ideasEl.appendChild(p); (data.ideas || []).forEach(function(i) { var c = document.createElement('div'); c.className = 'pfeai-card pfeai-clickable'; c.style.cursor = 'pointer'; c.style.borderLeftColor = '#8e44ad'; var h = document.createElement('h4'); h.style.margin = '0 0 4px 0'; h.style.color = '#8e44ad'; h.textContent = i.title; c.appendChild(h); var pEl = document.createElement('p'); pEl.style.fontSize = '12px'; pEl.textContent = i.context || i.angle || ''; c.appendChild(pEl); var sr = document.createElement('div'); sr.className = 'pfeai-score-row'; sr.style.marginTop = '6px'; sr.style.borderTop = '1px solid #eee'; sr.style.paddingTop = '4px'; sr.innerHTML = 'Trend: ' + parseInt(i.trend_score || i.ctr_score || 0, 10) + 'Disc: ' + parseInt(i.discover_score || 0, 10) + ''; c.appendChild(sr); (function(title, context) { c.addEventListener('click', function() { self.runIdeaOutline(title, context); }); })(i.title, i.context); self.ideasEl.appendChild(c); }); var rd = document.createElement('div'); rd.id = 'pfeai-idea-result'; rd.style.marginTop = '15px'; rd.style.borderTop = '1px solid #ccc'; rd.style.paddingTop = '10px'; this.ideasEl.appendChild(rd); }, renderIdeaOutlineResult: function(data, title) { var self = this; var resDiv = document.getElementById('pfeai-idea-result'); var container = document.createElement('div'); container.style.background = '#fff'; container.style.padding = '10px'; container.style.border = '1px solid #ddd'; container.style.marginTop = '10px'; var h3 = document.createElement('h3'); h3.style.marginTop = '0'; h3.style.color = '#8e44ad'; h3.textContent = title; container.appendChild(h3); var blurbLabel = document.createElement('strong'); blurbLabel.textContent = 'Blurb:'; container.appendChild(blurbLabel); var blurbP = document.createElement('p'); blurbP.textContent = data.blurb || ''; container.appendChild(blurbP); if (data.draft_paragraphs && data.draft_paragraphs.length > 0) { var draftsDiv = document.createElement('div'); draftsDiv.style.marginTop = '12px'; draftsDiv.style.marginBottom = '12px'; draftsDiv.style.padding = '10px'; draftsDiv.style.background = '#f3e5f5'; draftsDiv.style.borderLeft = '4px solid #9c27b0'; draftsDiv.style.borderRadius = '4px'; var draftsLabel = document.createElement('strong'); draftsLabel.style.display = 'block'; draftsLabel.style.marginBottom = '8px'; draftsLabel.style.color = '#7b1fa2'; draftsLabel.innerHTML = '✍ Draft Paragraphs:'; draftsDiv.appendChild(draftsLabel); var paragraphLabels = ['Opening', 'Middle/Analysis', 'Context/Closing']; (data.draft_paragraphs || []).forEach(function(para, idx) { var paraContainer = document.createElement('div'); paraContainer.style.marginBottom = '12px'; paraContainer.style.padding = '8px'; paraContainer.style.background = '#fff'; paraContainer.style.borderRadius = '4px'; paraContainer.style.border = '1px solid #e1bee7'; var paraLabel = document.createElement('div'); paraLabel.style.fontSize = '10px'; paraLabel.style.color = '#8e44ad'; paraLabel.style.marginBottom = '4px'; paraLabel.style.fontWeight = 'bold'; paraLabel.textContent = (paragraphLabels[idx] || 'Paragraph ' + (idx + 1)) + ':'; paraContainer.appendChild(paraLabel); var paraText = document.createElement('p'); paraText.style.margin = '0'; paraText.style.fontSize = '12px'; paraText.style.lineHeight = '1.5'; paraText.style.color = '#333'; paraText.textContent = para; paraContainer.appendChild(paraText); var copyParaBtn = document.createElement('button'); copyParaBtn.type = 'button'; copyParaBtn.className = 'button button-small'; copyParaBtn.style.marginTop = '6px'; copyParaBtn.style.fontSize = '10px'; copyParaBtn.textContent = 'Copy'; (function(text, btn) { btn.onclick = function() { navigator.clipboard.writeText(text); btn.textContent = 'Copied!'; setTimeout(function() { btn.textContent = 'Copy'; }, 1500); }; })(para, copyParaBtn); paraContainer.appendChild(copyParaBtn); draftsDiv.appendChild(paraContainer); }); var insertDraftsBtn = document.createElement('button'); insertDraftsBtn.type = 'button'; insertDraftsBtn.className = 'button button-small button-primary'; insertDraftsBtn.style.marginTop = '8px'; insertDraftsBtn.style.marginRight = '8px'; insertDraftsBtn.textContent = 'Insert All Drafts into Editor'; insertDraftsBtn.onclick = function() { if(typeof tinymce !== 'undefined' && tinymce.activeEditor) { var html = (data.draft_paragraphs || []).map(function(p) { return '

' + self.escapeHtml(p) + '

'; }).join('\n'); tinymce.activeEditor.insertContent(html); insertDraftsBtn.textContent = 'Inserted!'; setTimeout(function() { insertDraftsBtn.textContent = 'Insert All Drafts into Editor'; }, 1500); } }; draftsDiv.appendChild(insertDraftsBtn); var copyDraftsBtn = document.createElement('button'); copyDraftsBtn.type = 'button'; copyDraftsBtn.className = 'button button-small'; copyDraftsBtn.style.marginTop = '8px'; copyDraftsBtn.textContent = 'Copy All Drafts'; copyDraftsBtn.onclick = function() { var allDrafts = (data.draft_paragraphs || []).join('\n\n'); navigator.clipboard.writeText(allDrafts); copyDraftsBtn.textContent = 'Copied!'; setTimeout(function() { copyDraftsBtn.textContent = 'Copy All Drafts'; }, 1500); }; draftsDiv.appendChild(copyDraftsBtn); container.appendChild(draftsDiv); } var kpLabel = document.createElement('strong'); kpLabel.textContent = 'Key Points:'; container.appendChild(kpLabel); var kpList = document.createElement('ul'); kpList.className = 'pfeai-list'; (data.key_points || []).forEach(function(pt) { var li = document.createElement('li'); li.textContent = pt; kpList.appendChild(li); }); container.appendChild(kpList); var sparkDiv = document.createElement('div'); sparkDiv.style.marginTop = '10px'; sparkDiv.style.borderTop = '1px solid #eee'; sparkDiv.style.paddingTop = '10px'; var sparkLabel = document.createElement('strong'); sparkLabel.textContent = 'Spark Sentences:'; sparkDiv.appendChild(sparkLabel); var sparkText = (data.spark_sentences || []).join('\n\n'); var textarea = document.createElement('textarea'); textarea.id = 'pfeai-idea-spark-text'; textarea.style.width = '100%'; textarea.style.height = '100px'; textarea.style.fontSize = '12px'; textarea.style.marginTop = '5px'; textarea.value = sparkText; sparkDiv.appendChild(textarea); var btnDiv = document.createElement('div'); btnDiv.style.marginTop = '8px'; btnDiv.style.display = 'flex'; btnDiv.style.gap = '10px'; var insertBtn = document.createElement('button'); insertBtn.type = 'button'; insertBtn.className = 'button button-small button-primary'; insertBtn.id = 'pfeai-insert-idea-spark'; insertBtn.textContent = 'Insert into Editor'; btnDiv.appendChild(insertBtn); var saveBtn = document.createElement('button'); saveBtn.type = 'button'; saveBtn.className = 'button button-small'; saveBtn.style.background = '#e8f5e9'; saveBtn.style.color = '#2e7d32'; saveBtn.style.borderColor = '#66bb6a'; saveBtn.id = 'pfeai-save-idea-clipboard'; saveBtn.innerHTML = '📝 Start New Post →'; btnDiv.appendChild(saveBtn); sparkDiv.appendChild(btnDiv); container.appendChild(sparkDiv); resDiv.innerHTML = ''; resDiv.appendChild(container); resDiv.scrollIntoView({behavior:'smooth'}); insertBtn.onclick = function(){ var wt = document.getElementById('title'); if(wt) { wt.value = title; wt.focus(); var pt = document.getElementById('title-prompt-text'); if(pt) pt.classList.add('screen-reader-text'); } if(typeof tinymce !== 'undefined' && tinymce.activeEditor) { var t = document.getElementById('pfeai-idea-spark-text').value; tinymce.activeEditor.insertContent('

' + self.escapeHtml(t).replace(/\n\n/g, '

') + '

'); } }; saveBtn.onclick = function(){ var fullHTML = ''; if(data.blurb) fullHTML += '

Blurb: ' + self.escapeHtml(data.blurb) + '

'; if(data.draft_paragraphs && data.draft_paragraphs.length) { fullHTML += '

Draft Paragraphs:

'; data.draft_paragraphs.forEach(function(p){ fullHTML += '

' + self.escapeHtml(p) + '

'; }); } if(data.key_points && data.key_points.length) { fullHTML += '

Key Points:

'; } var sparkVal = document.getElementById('pfeai-idea-spark-text').value; fullHTML += '

' + self.escapeHtml(sparkVal).replace(/\n\n/g, '

') + '

'; self.saveToClipboard(title, fullHTML, true); }; }, renderSavedDraft: function(clip) { var self = this; if(!this.savedEl) return; var cleanText = (clip.content || '') .replace(/