diff --git a/public/js/admin/blog-validation.js b/public/js/admin/blog-validation.js
index 737c1773..df0494f4 100644
--- a/public/js/admin/blog-validation.js
+++ b/public/js/admin/blog-validation.js
@@ -221,7 +221,8 @@ async function loadValidationArticles() {
${!isStandalone ? `
@@ -843,6 +844,41 @@ let currentSubmissionArticleId = null;
let currentSubmissionId = null;
let currentArticleData = null;
+/**
+ * Open modal for standalone submission package (no blog post)
+ */
+async function openStandaloneSubmissionModal(submissionId) {
+ const modal = document.getElementById('manage-submission-modal');
+ if (!modal) {
+ createEnhancedSubmissionModal();
+ }
+
+ try {
+ // Load submission data directly
+ const response = await apiCall(`/api/submissions/${submissionId}`);
+ if (!response.ok) throw new Error('Failed to load submission data');
+
+ const submissionResponse = await response.json();
+ currentSubmission = submissionResponse.data || submissionResponse;
+
+ // No article for standalone submissions
+ currentArticle = null;
+
+ // Update modal title
+ document.getElementById('modal-title').textContent = `Submission Package: ${currentSubmission.title}`;
+
+ // Show modal
+ document.getElementById('manage-submission-modal').classList.remove('hidden');
+
+ // Load overview tab
+ switchTab('overview');
+
+ } catch (error) {
+ console.error('Error loading standalone submission:', error);
+ alert('Failed to load submission package. Please try again.');
+ }
+}
+
/**
* Initialize Manage Submission button handlers
*/
@@ -852,7 +888,15 @@ function initManageSubmissionHandlers() {
if (e.target.classList.contains('manage-submission')) {
const articleId = e.target.dataset.articleId;
const submissionId = e.target.dataset.submissionId;
- openManageSubmissionModal(articleId, submissionId || null);
+ const isStandalone = e.target.dataset.isStandalone === 'true';
+
+ if (isStandalone) {
+ // For standalone submissions, open with submission ID only
+ openStandaloneSubmissionModal(articleId);
+ } else {
+ // For blog-linked submissions, open with article ID
+ openManageSubmissionModal(articleId, submissionId || null);
+ }
}
});
}
diff --git a/public/js/admin/submission-modal-enhanced.js b/public/js/admin/submission-modal-enhanced.js
index 08ea8f7e..28ae8d9e 100644
--- a/public/js/admin/submission-modal-enhanced.js
+++ b/public/js/admin/submission-modal-enhanced.js
@@ -224,7 +224,11 @@ function renderOverviewTab() {
const submission = currentSubmission || {};
const article = currentArticle;
- const wordCount = article.content ? article.content.split(/\s+/).length : 0;
+ // Handle standalone submissions (no article)
+ const isStandalone = !article;
+ const title = isStandalone ? submission.title : article.title;
+ const subtitle = isStandalone ? '' : (article.subtitle || '');
+ const wordCount = isStandalone ? (submission.wordCount || 0) : (article.content ? article.content.split(/\s+/).length : 0);
const publicationName = submission.publicationName || 'Not assigned';
const status = submission.status || 'draft';
@@ -235,26 +239,48 @@ function renderOverviewTab() {
if (submission.documents?.authorBio?.versions?.length > 0) completionScore += 25;
if (submission.publicationId) completionScore += 25;
- const excerptText = article.excerpt || (article.content?.substring(0, 300) + '...') || 'No content available';
- const publishedDate = article.published_at ? new Date(article.published_at).toLocaleDateString() : 'N/A';
+ // Get content/excerpt - for standalone, use document content if available
+ let excerptText = 'No content available';
+ if (isStandalone) {
+ const mainArticle = submission.documents?.mainArticle?.versions?.[0];
+ if (mainArticle?.content) {
+ excerptText = mainArticle.content.substring(0, 300) + '...';
+ }
+ } else {
+ excerptText = article.excerpt || (article.content?.substring(0, 300) + '...') || 'No content available';
+ }
+
+ const publishedDate = isStandalone
+ ? (submission.submittedAt ? new Date(submission.submittedAt).toLocaleDateString() : 'Not submitted')
+ : (article.published_at ? new Date(article.published_at).toLocaleDateString() : 'N/A');
return `
-
+ ${isStandalone ? `
+
+
+
+ 📦 Standalone Submission Package
+ This is a direct submission without an associated blog post
+
+
+ ` : ''}
+
+
-
Article Preview
+
${isStandalone ? 'Submission' : 'Article'} Preview
-
${escapeHtml(article.title)}
-
- ${escapeHtml(article.subtitle || '')}
-
+
${escapeHtml(title)}
+ ${subtitle ? `
+ ${escapeHtml(subtitle)}
+
` : ''}
${escapeHtml(excerptText)}
Word Count: ${wordCount.toLocaleString()}
- Published: ${publishedDate}
+ ${isStandalone ? 'Submitted' : 'Published'}: ${publishedDate}