import { getOffsetRect, nextTick } from '@/uilts/help' import { listJoinNftGroup } from '@/http/nft'; import { getChromeStorage } from '@/uilts/chromeExtension.js' import { _setPublishContent, publishNFTTweetPost } from './twitter'; import { jumpTwitterDetailByAlert } from '@/logic/content/help/twitter.js' var ifShowNftGroup = false; var tempNftGroupPost = null; export const showNFTGroupIcon = () => { let urlInfo = new URL(window.location.href) let isTwitter = urlInfo.hostname === 'twitter.com' let toolElem = document.querySelector('div[data-testid="toolBar"]'); let isAppend = toolElem && toolElem.querySelector('#de-nft-group-enter'); let where = isTwitter && toolElem && !isAppend && ifShowNftGroup; if (where) { let oDiv = document.createElement(`div`); oDiv.id = 'de-nft-group-enter'; let oImg = document.createElement('img'); oImg.src = require("@/assets/img/icon-nft-group-entry.png"); oImg.className = 'addGroup'; oDiv.innerHTML = ` ${oImg.outerHTML} `; oDiv.addEventListener('click', (e) => { showNFTGroupList(e); e.stopPropagation(); }) toolElem.firstChild.appendChild(oDiv) } } export const showNFTGroupList = (e) => { let { top, left } = getOffsetRect(e.target); let oTop = top + e.target.offsetHeight + 10; // 居底判断 let wHeight = document.body.offsetHeight || document.body.clientHeight; if ((top + e.target.offsetHeight + 290) > wHeight) oTop = top - 290; let iframe = document.createElement('iframe'); iframe.src = chrome.runtime.getURL(`/iframe/nft-group.html`) iframe.style.cssText = 'border:medium none; width:315px; height:260px;'; let html = document.createElement('div'); html.id = 'de-nft-group-list'; html.innerHTML = `
${iframe.outerHTML}
`; document.body.appendChild(html); document.querySelector('.de-nft-group-mask').addEventListener('click', () => { hideNFTGroupList(); }) } export const hideNFTGroupList = () => { let dom = document.querySelector('#de-nft-group-list'); dom && document.body.removeChild(dom); } export const checkUserJoinGroup = (fn) => { getChromeStorage('userInfo', (res) => { // 如果登录 if (res) { listJoinNftGroup({ params: { pageNum: 1, pageSize: 1 } }).then(res => { let { data = [] } = res; if (data !== null && data.length > 0) { ifShowNftGroup = true; if (fn) fn() } }) } }) } export const clearPostContent = (fn) => { let edit = document.querySelector('div[contenteditable="true"]') let where = (edit.innerText === '\n') || (edit.innerText === '') if (where) { fn() } else { nextTick(() => { let inputEle = document.querySelector('div[contenteditable="true"]'); if (inputEle) { inputEle.focus(); } }, 20).then(() => { document.execCommand('selectAll'); document.execCommand('delete'); clearPostContent(fn) }) } } export const setPostContent = (res) => { nextTick(() => { let inputEle = document.querySelector('div[contenteditable="true"]'); if (inputEle) { inputEle.focus(); } }, 100).then(() => { _setPublishContent(res.srcContent); }) } export const setNFTGroupContent = (res) => { tempNftGroupPost = res; let dialogDiv = document.querySelectorAll('div[role="dialog"]'); if (dialogDiv.length === 0) { let bigBtn = document.querySelector('a[data-testid="SideNav_NewTweet_Button"]'); if (bigBtn) { bigBtn.click(); } else { let smallBtn = document.querySelector('a[href="/compose/tweet"]') smallBtn && smallBtn.click(); } } let edit = document.querySelector('div[contenteditable="true"]') let where = (edit.innerText === '\n') || (edit.innerText === '') if (where) { setPostContent(res) nextTick(() => { _addTweetButtonListen() }, 100) } else { clearPostContent(() => { let inputEle = document.querySelector('div[contenteditable="true"]'); if (inputEle) { inputEle.focus(); } setPostContent(res) nextTick(() => { _addTweetButtonListen() }, 100) }) } } export const elemAddEventListener = (elem, action, fn) => { if (elem) { elem.addEventListener(action, fn) } } export const addJoinedGroupList = () => { if(ifShowNftGroup) { let {pathname} = window.location; let iframe = document.createElement('iframe'); iframe.id = 'de-joined-group-list'; iframe.src = chrome.runtime.getURL('/iframe/joined-group-list.html'); iframe.style.cssText = `border: medium none;width: 350px;height: 120px;border-radius: 16px;margin-bottom: 16px` let iframeContent = document.getElementById('de-joined-group-list'); if (!iframeContent && pathname == '/home') { let sidebarColumn = document.querySelector('div[data-testid="sidebarColumn"]'); if(sidebarColumn) { let searchDom = sidebarColumn.querySelector('form[role="search"]'); if(searchDom) { let listWrapperDom = searchDom.parentElement.parentElement.parentElement.parentElement; if(listWrapperDom) { let listParent = listWrapperDom.parentElement; if(listParent) { listParent.insertBefore(iframe, listWrapperDom.nextElementSibling.nextElementSibling); } } } } } } }; export const setJoinedGroupIframeStyle = (params) => { let {height = '321px'} = params; let iframeContent = document.getElementById('de-joined-group-list'); if(iframeContent) { iframeContent.style.height = height; } } function _addTweetButtonListen() { let btn = document.querySelector('div[data-testid="tweetButton"]'); btn.removeEventListener('click', _postTweetContent); btn.addEventListener('click', _postTweetContent) } function _postTweetContent() { if (tempNftGroupPost && tempNftGroupPost.groupId) { publishNFTTweetPost(tempNftGroupPost) // 非首页处理 let jumpUrl = new URL(tempNftGroupPost['entryUrl'] || ''); let pathname = jumpUrl.pathname || ''; if (pathname !== '/home') { jumpTwitterDetailByAlert() } } }