38 lines · 1.4 KB · JavaScript
RawDownload
import $ from 'jquery';import {POST} from '../../modules/fetch.js'; export function initCompReactionSelector($parent) {  $parent.find(`.select-reaction .item.reaction, .comment-reaction-button`).on('click', async function (e) {    e.preventDefault();     if (this.classList.contains('disabled')) return;     const actionUrl = this.closest('[data-action-url]')?.getAttribute('data-action-url');    const reactionContent = this.getAttribute('data-reaction-content');    const hasReacted = this.closest('.comment')?.querySelector(`.ui.segment.reactions a[data-reaction-content="${reactionContent}"]`)?.getAttribute('data-has-reacted') === 'true';     const res = await POST(`${actionUrl}/${hasReacted ? 'unreact' : 'react'}`, {      data: new URLSearchParams({content: reactionContent}),    });     const data = await res.json();    if (data && (data.html || data.empty)) {      const $content = $(this).closest('.content');      let $react = $content.find('.segment.reactions');      if ((!data.empty || data.html === '') && $react.length > 0) {        $react.remove();      }      if (!data.empty) {        const $attachments = $content.find('.segment.bottom').first();        $react = $(data.html);        if ($attachments.length > 0) {          $react.insertBefore($attachments);        } else {          $react.appendTo($content);        }        $react.find('.dropdown').dropdown();        initCompReactionSelector($react);      }    }  });}