import { getOffsetRect, nextTick } from '@/uilts/help' import { listJoinNftGroup } from '@/http/nft'; import { getChromeStorage } from '@/uilts/chromeExtension.js' import { _setPublishContent, publishNFTTweetPost, bindTwitterArt, bindTwitterArtMethod } from './twitter'; import { jumpTwitterDetailByAlert } from '@/logic/content/help/twitter.js' import Report from "@/log-center/log" var ifShowNftGroup = false; var tempNftGroupPost = null; var groupImgNoSelect = require("@/assets/img/icon-nft-group-entry.png"); var groupImgSelect = require("@/assets/img/icon-nft-group-select.png"); 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 = groupImgNoSelect; oImg.className = 'addGroup'; oDiv.innerHTML = ` ${oImg.outerHTML} `; oDiv.addEventListener('click', (e) => { showNFTGroupList(e); e.stopPropagation(); // report Report.reportLog({ pageSource: Report.pageSource.mainPage, businessType: Report.businessType.buttonClick, objectType: Report.objectType.buttonSecond }, { type: 2 }); }) toolElem.firstChild.appendChild(oDiv) // report Report.reportLog({ pageSource: Report.pageSource.mainPage, businessType: Report.businessType.buttonView, objectType: Report.objectType.buttonSecond }, { type: 2 }); } } export const showNFTGroupList = (e) => { let rectObject = e.target.getBoundingClientRect(); let { top, left, height } = rectObject; let oTop = top + height + 10; // 居底判断 let wHeight = document.body.offsetHeight || document.body.clientHeight; if ((top + height + 290) > wHeight) oTop = top - 290; let iframe = document.createElement('iframe'); iframe.src = 'chrome-extension://omadcdhfdfhbklafpaddghnjimpfemgh' + (`/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(); } setGroupIconStatus(); }, 100).then(() => { _setPublishContent(res.srcContent + ' '); }) } export const endPostContent = () => { return new Promise((resolve) => { let inputEle = document.querySelector('div[contenteditable="true"]'); let range = document.createRange(); range.selectNodeContents(inputEle); range.collapse(false); let sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); resolve() }) } 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 { endPostContent().then(() => { 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.removeEventListener(action, fn) 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-extension://omadcdhfdfhbklafpaddghnjimpfemgh' + ('/iframe/joined-group-list.html'); iframe.style.cssText = `border: medium none;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; } } export function setGroupIconStatus() { let editElem = document.querySelector('div[contenteditable="true"]'); let main_observer = new MutationObserver(() => { let groupImg = document.querySelector('#de-nft-group-enter'); let innerText = editElem.innerText || ''; if (groupImg && innerText) { let where = innerText.indexOf('#DNFT') !== -1 && innerText.indexOf('nft_group') !== -1; if (where) { groupImg.querySelector('.addGroup').src = groupImgSelect; } else { groupImg.querySelector('.addGroup').src = groupImgNoSelect; } } }); main_observer.observe(editElem, { attributes: false, childList: true, subtree: true }) } 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) bindTwitterArt.needBind = true; bindTwitterArt.postId = tempNftGroupPost.postId; bindTwitterArtMethod(); // 非首页处理 let homeTag = document.querySelectorAll('div[data-testid="toolBar"]'); if (homeTag.length === 1) { jumpTwitterDetailByAlert() } } }