From 7fb0386e59bca35c04a76d747c367ee7ffe25364 Mon Sep 17 00:00:00 2001 From: Deepak Kumar Yadav Date: Tue, 23 Dec 2025 11:14:57 -0500 Subject: [PATCH 1/2] feat: Add support to create Ghost Posts --- public/scripts/upload.js | 52 ++++++++++++++++++++++++++ src/index.js | 16 +++++++- views/thread.pug | 3 ++ views/upload.pug | 79 +++++++++++++++++++++++++++------------- 4 files changed, 124 insertions(+), 26 deletions(-) diff --git a/public/scripts/upload.js b/public/scripts/upload.js index 9c77a39..8cda39d 100644 --- a/public/scripts/upload.js +++ b/public/scripts/upload.js @@ -8,20 +8,24 @@ async function updateMediaType(attachmentsCount, attachmentListElem) { const mediaTypeElem = document.getElementById('media-type'); const spoilerMediaControl = document.querySelector('.spoiler-media-control'); + const ghostPostMediaControl = document.querySelector('.ghost-post-media-control'); let mediaTypeDesc; if (attachmentsCount === 0) { mediaTypeDesc = 'Text 📝'; spoilerMediaControl.style.display = 'none'; + ghostPostMediaControl.style.display = 'block'; } else if (attachmentsCount === 1) { const singleAttachmentType = attachmentListElem.querySelector('select').value; if (singleAttachmentType === 'Image') mediaTypeDesc = 'Image 🖼️'; else mediaTypeDesc = 'Video 🎬'; spoilerMediaControl.style.display = 'block'; + ghostPostMediaControl.style.display = 'none'; } else { mediaTypeDesc = 'Carousel 🎠'; spoilerMediaControl.style.display = 'block'; + ghostPostMediaControl.style.display = 'none'; } mediaTypeElem.innerText = mediaTypeDesc; @@ -72,10 +76,58 @@ document.addEventListener('DOMContentLoaded', async () => { const pollAttachmentOptions = document.getElementById( 'poll-attachment-options' ); + const ghostPostMediaControl = document.querySelector('.ghost-post-media-control'); if (pollAttachmentOptions.style.display === 'none') { pollAttachmentOptions.style.display = 'block'; + ghostPostMediaControl.style.display = 'none'; } else { pollAttachmentOptions.style.display = 'none'; + ghostPostMediaControl.style.display = 'block'; } }); + + const ghostPostCheckbox = document.querySelector('input[name="ghostPostMedia"]'); + const topicTagMediaControl = document.querySelector('.topic-tag-media-control'); + const linkAttachmentMediaControl = document.querySelector('.link-attachment-media-control'); + const attachImageMediaControl = document.querySelector('.attach-image-media-control'); + const replyMediaControl = document.querySelector('.reply-options-media-control'); + + const topicTagInput = document.getElementById('topic-tag'); + const linkAttachmentInput = document.getElementById('link-attachment'); + const replyControlSelect = document.getElementById('reply-control'); + const attachmentsList = document.getElementById('attachments-list'); + const pollAttachmentOptions = document.getElementById('poll-attachment-options'); + + if (ghostPostCheckbox) { + ghostPostCheckbox.addEventListener('change', async () => { + // When ghost post is checked, disable fields that are not relevant to ghost posts + if (ghostPostCheckbox.checked) { + topicTagMediaControl.style.display = 'none'; + linkAttachmentMediaControl.style.display = 'none'; + attachPollButton.style.display = 'none'; + attachImageMediaControl.style.display = 'none'; + replyMediaControl.style.display = 'none'; + + if (topicTagInput) topicTagInput.value = ''; + if (linkAttachmentInput) linkAttachmentInput.value = ''; + if (replyControlSelect) replyControlSelect.value = ''; + if (attachmentsList) attachmentsList.innerHTML = ''; + if (pollAttachmentOptions) { + pollAttachmentOptions.style.display = 'none'; + const pollInputs = pollAttachmentOptions.querySelectorAll('input[type="text"]'); + pollInputs.forEach(input => input.value = ''); + } + + await updateMediaType(0, null); + } + // When the checkbox is unchecked, enable all fields + if (!ghostPostCheckbox.checked) { + topicTagMediaControl.style.display = 'block'; + linkAttachmentMediaControl.style.display = 'block'; + attachPollButton.style.display = 'block'; + attachImageMediaControl.style.display = 'block'; + replyMediaControl.style.display = 'block'; + } + }); + } }); diff --git a/src/index.js b/src/index.js index 99cfe40..29836bb 100644 --- a/src/index.js +++ b/src/index.js @@ -62,6 +62,7 @@ const FIELD__USERNAME = 'username'; const FIELD__VIEWS = 'views'; const FIELD_IS_SPOILER_MEDIA = 'is_spoiler_media'; const FIELD_TEXT_ENTITES = 'text_entities'; +const FIELD_GHOST_POST_STATUS = 'ghost_post_status'; const MEDIA_TYPE__CAROUSEL = 'CAROUSEL'; const MEDIA_TYPE__IMAGE = 'IMAGE'; @@ -100,6 +101,7 @@ const PARAMS__TOPIC_TAG = 'topic_tag'; const PARAMS__USERNAME = 'username'; const PARAMS_IS_SPOILER_MEDIA = 'is_spoiler_media'; const PARAMS_TEXT_ENTITES = 'text_entities'; +const PARAMS_IS_GHOST_POST = 'is_ghost_post'; // Read variables from environment require('dotenv').config(); @@ -449,6 +451,7 @@ app.post('/upload', upload.array(), async (req, res) => { pollOptionD, quotePostId, spoilerMedia, + ghostPostMedia, } = req.body; const params = { @@ -479,6 +482,10 @@ app.post('/upload', upload.array(), async (req, res) => { params[PARAMS_IS_SPOILER_MEDIA] = true; } + if (ghostPostMedia) { + params[PARAMS_IS_GHOST_POST] = true; + } + if (pollOptionA && pollOptionB) { const pollAttachment = JSON.stringify({ option_a: pollOptionA, @@ -679,6 +686,7 @@ app.get('/threads/:threadId', loggedInUserChecker, async (req, res) => { FIELD__REPOSTED_POST, FIELD_IS_SPOILER_MEDIA, FIELD_TEXT_ENTITES, + FIELD_GHOST_POST_STATUS, ].join(','), }, req.session.access_token @@ -688,7 +696,7 @@ app.get('/threads/:threadId', loggedInUserChecker, async (req, res) => { const queryResponse = await axios.get(queryThreadUrl, { httpsAgent: agent, }); - const { poll_attachment, ...rest } = queryResponse.data; + const { poll_attachment, ghost_post_status, ...rest } = queryResponse.data; data = rest; if (poll_attachment) { @@ -697,6 +705,12 @@ app.get('/threads/:threadId', loggedInUserChecker, async (req, res) => { ...poll_attachment, }; } + + const is_ghost_post = ghost_post_status === 'ACTIVE'; + data = { + ...data, + is_ghost_post, + }; } catch (e) { console.error(e?.response?.data?.error?.message ?? e.message); } diff --git a/views/thread.pug b/views/thread.pug index 173265d..63a68d7 100644 --- a/views/thread.pug +++ b/views/thread.pug @@ -39,6 +39,9 @@ block content tr td Is Spoiler Media Post td #{is_spoiler_media} + tr + td Is Ghost Post + td #{is_ghost_post} tr td GIF URL td diff --git a/views/upload.pug b/views/upload.pug index 8397645..088d5f7 100644 --- a/views/upload.pug +++ b/views/upload.pug @@ -58,6 +58,16 @@ block content .spoiler-media-control { display: none; } + .ghost-post-media-control { + display: flex; + flex-direction: row; + align-items: center; + } + #ghost-post-img{ + width:25px; + height:25px; + margin-bottom: 0; + } if (replyToId !== undefined) p(style='color: gray') Replying to #{replyToId} @@ -67,37 +77,56 @@ block content | Text: textarea(placeholder='Start a thread...' id='text' name='text' autocomplete='off') br - | To attach an image or video, click the image below - div.attachments-area - img#attachments-button(src='/img/attachment.png') - div.attachment-controls - div#attachments-list.attachments - div.spoiler-media-control - label(for='spoilerMedia') - | Mark Media as Spoiler    - input(type='checkbox' name='spoilerMedia' value='true') - br - - label(for="reply-control") Who Can Reply - select#reply-control(name='replyControl' hint="Reply Control") - option(value="" selected) - option(value="everyone") Everyone - option(value="accounts_you_follow") Accounts You Follow - option(value="mentioned_only") Mentioned Only - option(value="parent_post_author_only") Parent Post Author Only - option(value="followers_only") Followers Only + div.attach-image-media-control + | To attach an image or video, click the image below + div.attachments-area + img#attachments-button(src='/img/attachment.png') + div.attachment-controls + div#attachments-list.attachments + div.spoiler-media-control + label(for='spoilerMedia') + | Mark Media as Spoiler    + input(type='checkbox' name='spoilerMedia' value='true') + br - label(for='topicTag') - | Topic Tag - input#topic-tag(type='text' name='topicTag' value='' maxlength='50') + div.reply-options-media-control + label(for="reply-control") Who Can Reply + br + select#reply-control(name='replyControl' hint="Reply Control") + option(value="" selected) + option(value="everyone") Everyone + option(value="accounts_you_follow") Accounts You Follow + option(value="mentioned_only") Mentioned Only + option(value="parent_post_author_only") Parent Post Author Only + option(value="followers_only") Followers Only + + div.topic-tag-media-control + label(for='topicTag') + | Topic Tag + br + input#topic-tag(type='text' name='topicTag' value='' maxlength='50') + br - label(for='linkAttachment') - | Link Attachment - input#link-attachment(type='text' name='linkAttachment' value='') + div.link-attachment-media-control + label(for='linkAttachment') + | Link Attachment + br + input#link-attachment(type='text' name='linkAttachment' value='') + br label(for="autoPublishText") input(type="checkbox" name="autoPublishText" id="autoPublishText") | Auto-Publish (only for text posts) + br + + br + div.ghost-post-media-control + input(type='checkbox' name='ghostPostMedia' value='true') + label(for='ghostPostMedia') + | Publish as GhostPost   + img#ghost-post-img(src='/img/ghost_post.png') + img#ghost-post-img(src='/img/ghost_post.png') + br button#poll-attachment-button(type='button' name='pollAttachment') Attach Poll 🗳️ div#poll-attachment-options(style='display:none') From 1ca2c1b08bf0b64ea01ed78089396e0c27172658 Mon Sep 17 00:00:00 2001 From: Deepak Kumar Yadav Date: Fri, 26 Dec 2025 09:20:09 -0500 Subject: [PATCH 2/2] add image, code comments --- public/img/ghost_post.png | Bin 0 -> 8687 bytes public/scripts/upload.js | 10 ++++------ views/upload.pug | 7 +++---- 3 files changed, 7 insertions(+), 10 deletions(-) create mode 100644 public/img/ghost_post.png diff --git a/public/img/ghost_post.png b/public/img/ghost_post.png new file mode 100644 index 0000000000000000000000000000000000000000..76bcb641a9408b6255e244c6085a385ec0cb4f74 GIT binary patch literal 8687 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 Pld+VzyjYp2LBRh5O#1cy literal 0 HcmV?d00001 diff --git a/public/scripts/upload.js b/public/scripts/upload.js index 8cda39d..cb766c6 100644 --- a/public/scripts/upload.js +++ b/public/scripts/upload.js @@ -90,7 +90,7 @@ document.addEventListener('DOMContentLoaded', async () => { const topicTagMediaControl = document.querySelector('.topic-tag-media-control'); const linkAttachmentMediaControl = document.querySelector('.link-attachment-media-control'); const attachImageMediaControl = document.querySelector('.attach-image-media-control'); - const replyMediaControl = document.querySelector('.reply-options-media-control'); + const replyOptionsMediaControl = document.querySelector('.reply-options-media-control'); const topicTagInput = document.getElementById('topic-tag'); const linkAttachmentInput = document.getElementById('link-attachment'); @@ -106,7 +106,7 @@ document.addEventListener('DOMContentLoaded', async () => { linkAttachmentMediaControl.style.display = 'none'; attachPollButton.style.display = 'none'; attachImageMediaControl.style.display = 'none'; - replyMediaControl.style.display = 'none'; + replyOptionsMediaControl.style.display = 'none'; if (topicTagInput) topicTagInput.value = ''; if (linkAttachmentInput) linkAttachmentInput.value = ''; @@ -119,14 +119,12 @@ document.addEventListener('DOMContentLoaded', async () => { } await updateMediaType(0, null); - } - // When the checkbox is unchecked, enable all fields - if (!ghostPostCheckbox.checked) { + } else { // When the checkbox is unchecked, enable all fields topicTagMediaControl.style.display = 'block'; linkAttachmentMediaControl.style.display = 'block'; attachPollButton.style.display = 'block'; attachImageMediaControl.style.display = 'block'; - replyMediaControl.style.display = 'block'; + replyOptionsMediaControl.style.display = 'block'; } }); } diff --git a/views/upload.pug b/views/upload.pug index 088d5f7..b6a0be3 100644 --- a/views/upload.pug +++ b/views/upload.pug @@ -64,8 +64,8 @@ block content align-items: center; } #ghost-post-img{ - width:25px; - height:25px; + width: 25px; + height: 25px; margin-bottom: 0; } @@ -123,8 +123,7 @@ block content div.ghost-post-media-control input(type='checkbox' name='ghostPostMedia' value='true') label(for='ghostPostMedia') - | Publish as GhostPost   - img#ghost-post-img(src='/img/ghost_post.png') + | Publish as Ghost Post   img#ghost-post-img(src='/img/ghost_post.png') br