|
@@ -4,7 +4,7 @@ import { discordAuthRedirectUri } from '@/http/configAPI'
|
|
|
import { reportSrcPublishEvent } from '@/http/publishApi'
|
|
|
import Report from "@/log-center/log"
|
|
|
import { fetchAddFinishEvent } from '@/logic/background/fetch/facebook';
|
|
|
-import { showNFTGroupIcon, hideNFTGroupList, checkUserJoinGroup, elemAddEventListener } from '@/logic/content/nft';
|
|
|
+import { showNFTGroupIcon, hideNFTGroupList, checkUserJoinGroup, elemAddEventListener, addJoinedGroupList } from '@/logic/content/nft';
|
|
|
|
|
|
let dom = {};
|
|
|
|
|
@@ -773,6 +773,8 @@ function initParseCard() {
|
|
|
changeQueueNum(-1)
|
|
|
showNFTCard()
|
|
|
initGroupTip()
|
|
|
+ addGroupTab();
|
|
|
+ addJoinedGroupList();
|
|
|
}, 1000)
|
|
|
} else if (inFacebook && inFacebookNode) {
|
|
|
clearInterval(timer)
|
|
@@ -822,8 +824,9 @@ export function init() {
|
|
|
checkUserJoinGroup();
|
|
|
renderDom();
|
|
|
checkTwitterTaskState();
|
|
|
- onBodyClick();
|
|
|
initBuyNFT();
|
|
|
+ addGroupTab();
|
|
|
+ addJoinedGroupList();
|
|
|
|
|
|
getChromeStorage("popupShowPublishDialog", (res) => {
|
|
|
console.log("popupShowPublishDialog", res);
|
|
@@ -1501,7 +1504,7 @@ export const appendPopupPage = (params = {}) => {
|
|
|
|
|
|
let showPopupPageFrom = '';
|
|
|
export const showPopupPage = (params = {}) => {
|
|
|
- let { path = '', from } = params;
|
|
|
+ let { path = '', from, showJoinGroupFinish = false } = params;
|
|
|
showPopupPageFrom = from;
|
|
|
hidePinTips();
|
|
|
hideNoticeBindTweet();
|
|
@@ -1517,9 +1520,12 @@ export const showPopupPage = (params = {}) => {
|
|
|
}
|
|
|
iframe.style.transform = 'translateX(-' + 395 + 'px)';
|
|
|
|
|
|
- chrome.runtime.sendMessage({
|
|
|
- actionType: "CONTENT_POPUP_PAGE_SHOW",
|
|
|
- data: {}
|
|
|
+ chrome.runtime.sendMessage({
|
|
|
+ actionType: "CONTENT_POPUP_PAGE_SHOW",
|
|
|
+ data: {
|
|
|
+ path,
|
|
|
+ showJoinGroupFinish,
|
|
|
+ }
|
|
|
}, () => { });
|
|
|
|
|
|
chrome.runtime.sendMessage({
|
|
@@ -1603,7 +1609,6 @@ const onBodyClick = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
export const setPopupConfByPopupPage = () => {
|
|
|
let iframe = document.getElementById('de-popup-page');
|
|
|
if (iframe) {
|
|
@@ -1634,10 +1639,308 @@ export const setPopupConfByPopupPage = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * Group Tab List Start
|
|
|
+ */
|
|
|
+
|
|
|
+const addGroupTab = () => {
|
|
|
+ let tabListDom = document.querySelector('div[role="tablist"]');
|
|
|
+ let groupItemTab = document.querySelector('#de-nav-tab-group');
|
|
|
+
|
|
|
+ let groupIcon = document.createElement('img');
|
|
|
+ groupIcon.id = 'de-group-tab-icon'
|
|
|
+ groupIcon.src = require("@/assets/img/icon-group-tab-item.png");
|
|
|
+ groupIcon.style.cssText = 'width:20px;height: 20px;margin-right:4px;';
|
|
|
+
|
|
|
+ let divNode = document.createElement('div');
|
|
|
+ divNode.style.cssText = 'display: flex; align-items: center';
|
|
|
+ divNode.appendChild(groupIcon);
|
|
|
+ divNode.appendChild(document.createTextNode('Group'));
|
|
|
+
|
|
|
+ if(tabListDom && !groupItemTab) {
|
|
|
+ let lineDom = document.createElement('div');
|
|
|
+ lineDom.id = 'de-tab-line';
|
|
|
+ lineDom.style.cssText = `border-radius: 9999px;
|
|
|
+ position: absolute;
|
|
|
+ bottom: 0px;
|
|
|
+ min-width: 56px;
|
|
|
+ align-self: center;
|
|
|
+ height: 4px;
|
|
|
+ background-color: rgb(29, 155, 240);
|
|
|
+ display: none`;
|
|
|
+
|
|
|
+ let groupTab = document.createElement('div');
|
|
|
+ groupTab.id = 'de-nav-tab-group';
|
|
|
+ groupTab.style.cssText = `z-index: 1;
|
|
|
+ position: relative;
|
|
|
+ display: flex;
|
|
|
+ min-width: 56px;
|
|
|
+ -webkit-box-pack: center;
|
|
|
+ justify-content: center;
|
|
|
+ -webkit-box-align: center;
|
|
|
+ align-items: center;
|
|
|
+ text-align: center;
|
|
|
+ padding: 0px 16px;
|
|
|
+ color: rgb(83, 100, 113);
|
|
|
+ font-weight: 700;
|
|
|
+ height: 53px;
|
|
|
+ cursor: pointer;
|
|
|
+ font: 500 15px / 20px TwitterChirp, -apple-system, "system-ui", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;`;
|
|
|
+
|
|
|
+ groupTab.appendChild(divNode);
|
|
|
+ groupTab.appendChild(lineDom);
|
|
|
+ tabListDom.appendChild(groupTab);
|
|
|
+
|
|
|
+ groupTab.addEventListener('mouseenter', function() {
|
|
|
+ groupTab.style.background = 'rgba(15, 20, 25, 0.1)'
|
|
|
+ });
|
|
|
+ groupTab.addEventListener('mouseleave', function() {
|
|
|
+ groupTab.style.background = 'none'
|
|
|
+ });
|
|
|
+
|
|
|
+ addGroupTabEventListener({groupTab});
|
|
|
+ }
|
|
|
+
|
|
|
+ addTweetTabEventListener({
|
|
|
+ tabListDom
|
|
|
+ });
|
|
|
+
|
|
|
+ addTabGroupContent();
|
|
|
+ checkNeedSelectGroupTab();
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 跳转到个人主页 检查是否需要选中 Group tab
|
|
|
+ */
|
|
|
+const checkNeedSelectGroupTab = () => {
|
|
|
+ if(window.location.pathname != '/home') {
|
|
|
+ setTimeout(() => {
|
|
|
+ const urlParams = new URLSearchParams(window.location.search);
|
|
|
+ const deTabVal = urlParams.get('deTabVal');
|
|
|
+ if (deTabVal == 'deGroupTab') {
|
|
|
+ selectGroupTab();
|
|
|
+ }
|
|
|
+ }, 500)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 选中 Group tab */
|
|
|
+const selectGroupTab = () => {
|
|
|
+ let groupTab = document.querySelector('#de-nav-tab-group');
|
|
|
+ if(groupTab) {
|
|
|
+ groupTab.click();
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * Group tab点击事件监听
|
|
|
+ */
|
|
|
+const addGroupTabEventListener = (params) => {
|
|
|
+ let {groupTab} = params;
|
|
|
+ groupTab.addEventListener('click', function() {
|
|
|
+ setGroupTabSelfStyle({groupColor: 'rgb(15, 20, 25)',
|
|
|
+ groupFontWeight: '700',
|
|
|
+ lineDisplay: 'block'});
|
|
|
+
|
|
|
+ setTweetActiveTabStyle({
|
|
|
+ color: 'rgb(83, 100, 113)',
|
|
|
+ display: 'none'});
|
|
|
+
|
|
|
+ setTabContentStyle({
|
|
|
+ tweetTabContentDisply: 'none',
|
|
|
+ iframeContentDisplay: 'block'});
|
|
|
+
|
|
|
+ refreshTabGroup();
|
|
|
+
|
|
|
+ window.addEventListener('scroll', addPageScrollEvent)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const addPageScrollEvent = () => {
|
|
|
+ let wrapperDom = document.querySelector('html');
|
|
|
+ let contentDom = document.querySelector('main[role="main"]');
|
|
|
+ let data = {
|
|
|
+ wrapperHeight: wrapperDom.offsetHeight,
|
|
|
+ wrapperScrollTop: wrapperDom.scrollTop,
|
|
|
+ contentHeight: contentDom.offsetHeight
|
|
|
+ }
|
|
|
+
|
|
|
+ chrome.runtime.sendMessage({ actionType: "CONTENT_GROUP_LIST_SCROLL",
|
|
|
+ data: data}, () => {});
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * twitter tab点击事件监听
|
|
|
+ */
|
|
|
+const addTweetTabEventListener = (params) => {
|
|
|
+ let {tabListDom} = params;
|
|
|
+ let groupItemTab = document.querySelector('#de-nav-tab-group');
|
|
|
+
|
|
|
+ if(tabListDom && groupItemTab) {
|
|
|
+ // 监听twitter tab点击事件
|
|
|
+ let tweetTabItem = tabListDom.querySelectorAll('div[role="presentation"]');
|
|
|
+ if(tweetTabItem.length) {
|
|
|
+ for(let i = 0; i < tweetTabItem.length; i++) {
|
|
|
+ let item = tweetTabItem[i];
|
|
|
+ item.addEventListener('click', function() {
|
|
|
+ window.removeEventListener('scroll', addPageScrollEvent);
|
|
|
+
|
|
|
+ setGroupTabSelfStyle({groupColor: 'rgb(83, 100, 113)',
|
|
|
+ groupFontWeight: '500',
|
|
|
+ lineDisplay: 'none'});
|
|
|
+
|
|
|
+ setTabContentStyle({
|
|
|
+ tweetTabContentDisply: 'block',
|
|
|
+ iframeContentDisplay: 'none'});
|
|
|
+
|
|
|
+ setTweetActiveTabStyle({
|
|
|
+ color: 'rgb(15, 20, 25)',
|
|
|
+ display: 'block'});
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 设置 Group Tab 样式
|
|
|
+ */
|
|
|
+const setGroupTabSelfStyle = (params = {}) => {
|
|
|
+ let {groupColor, groupFontWeight, lineDisplay} = params;
|
|
|
+ let groupTab = document.querySelector('#de-nav-tab-group');
|
|
|
+ groupTab.style.color = groupColor;
|
|
|
+ groupTab.style.fontWeight = groupFontWeight;
|
|
|
+
|
|
|
+ let lineDom = groupTab.querySelector('#de-tab-line');
|
|
|
+ if(lineDom) {
|
|
|
+ lineDom.style.display = lineDisplay;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 切换到 Group tab时 刷新列表
|
|
|
+ */
|
|
|
+const refreshTabGroup = () => {
|
|
|
+ chrome.runtime.sendMessage({ actionType: "CONTENT_REFRESH_TAB_GROUP_LIST",
|
|
|
+ data:{}}, () => { });
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * tab选中时设置 激活 的字体样式和选中条
|
|
|
+ */
|
|
|
+const setTweetActiveTabStyle = (params) => {
|
|
|
+ let {color, display} = params || {};
|
|
|
+ let tweetActiveTab = document.querySelector('a[aria-selected="true"]').querySelector('div');
|
|
|
+ tweetActiveTab.style.color = color;
|
|
|
+
|
|
|
+ let tweetTabLine = tweetActiveTab.querySelector('div');
|
|
|
+ if(tweetTabLine) {
|
|
|
+ tweetTabLine.style.display = display;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * 设置 tab 切换时 tab内容的样式(显示隐藏)
|
|
|
+ */
|
|
|
+const setTabContentStyle = (params) => {
|
|
|
+ let {tweetTabContentDisply, iframeContentDisplay} = params;
|
|
|
+ let tweetTabContent = getTweetTabContent();
|
|
|
+ if(tweetTabContent) {
|
|
|
+ if(tweetTabContentDisply == 'block') {
|
|
|
+ let {display} = tweetTabContent.style;
|
|
|
+ if(display == 'none') {
|
|
|
+ tweetTabContent.style.display = 'block';
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ tweetTabContent.style.display = tweetTabContentDisply;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ let iframeContent = document.getElementById('de-tab-group-content');
|
|
|
+
|
|
|
+ if(!iframeContent) {
|
|
|
+ addTabGroupContent();
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ iframeContent = document.getElementById('de-tab-group-content');
|
|
|
+ if(iframeContent) {
|
|
|
+ iframeContent.style.display = iframeContentDisplay;
|
|
|
+ }
|
|
|
+ })
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * 获取 twitter tab 下的内容
|
|
|
+ */
|
|
|
+const getTweetTabContent = () => {
|
|
|
+ let tweetTabContent = document.querySelector('[data-testid="primaryColumn"] [role="navigation"] + * > div[aria-label]:not([role="progressbar"])') || document.querySelector('div[data-testid="emptyState"]');
|
|
|
+ return tweetTabContent;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 注入 Group List 内容
|
|
|
+ */
|
|
|
+const addTabGroupContent = () => {
|
|
|
+ let params = {
|
|
|
+ windowLocation: window.location
|
|
|
+ }
|
|
|
+ let iframe = document.createElement('iframe');
|
|
|
+ iframe.id = 'de-tab-group-content';
|
|
|
+ iframe.src = chrome.runtime.getURL('/iframe/tab-group.html') + `?params=${JSON.stringify(params)}`;
|
|
|
+ iframe.style.cssText = `border: medium none; height: 500px;display: none`
|
|
|
+
|
|
|
+ let iframeContent = document.getElementById('de-tab-group-content');
|
|
|
+
|
|
|
+ let tweetTabContent = getTweetTabContent();
|
|
|
+ if (!iframeContent) {
|
|
|
+ if(tweetTabContent && tweetTabContent.parentElement) {
|
|
|
+ tweetTabContent.parentElement.appendChild(iframe);
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * 设置Tab Group Iframe 样式
|
|
|
+ */
|
|
|
+export const setTabGroupIframeStyle = (params) => {
|
|
|
+ let iframeContent = document.getElementById('de-tab-group-content');
|
|
|
+ iframeContent.style.height = document.querySelector('html').offsetHeight + 'px';
|
|
|
+}
|
|
|
+
|
|
|
+export const pageJumpHandler = (params) => {
|
|
|
+ let {url, name = '_self'} = params
|
|
|
+ window.open(url, name)
|
|
|
+}
|
|
|
+
|
|
|
+export const getTweetProfileNavTop = (params) => {
|
|
|
+ let top = document.querySelector('div[role="tablist"]').closest('nav').getBoundingClientRect().top;
|
|
|
+
|
|
|
+ chrome.runtime.sendMessage({ actionType: "CONTENT_SEND_GROUP_NAV_TOP", data: {
|
|
|
+ top,
|
|
|
+ scrollTop: params.scrollTop
|
|
|
+ } }, () => { })
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * Group Tab List End
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
export const loginSuccessHandle = () => {
|
|
|
// 检查是否漏出group图标
|
|
|
checkUserJoinGroup(() => {
|
|
|
showNFTGroupIcon()
|
|
|
addEventAction()
|
|
|
+ addJoinedGroupList();
|
|
|
})
|
|
|
}
|