소스 검색

[edit] bug fix

A\An 2 년 전
부모
커밋
56c1c38c01

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 0
src/assets/svg/icon-giveaways-notice.svg


+ 9 - 1
src/entry/content.js

@@ -14,7 +14,9 @@ import {
     changeQueueNum,
     replyHandle,
     noticeBindTweet,
-    hideNoticeBindTweet
+    hideNoticeBindTweet,
+    getTweetAuthorByDom,
+    facebookReplyTweet
 } from "@/logic/content/twitter.js";
 
 import {
@@ -52,6 +54,12 @@ window.onmessage = (res) => {
             case "IFRAME_CLOSE_BIND_TWEET":
                 hideNoticeBindTweet();
                 break;
+            case "IFRAME_RED_PACKET_GET_TWEET_AUTHOR":
+                getTweetAuthorByDom(res.data.data || {});
+                break;
+            case "IFRAME_RED_PACKET_CHECK_FACEBOOK_REPLY":
+                facebookReplyTweet(res.data.data || {});
+                break;
             // case "IFRAME_DO_TASK":
             //     findTweetByIdDoTask(res.data.task_data, res.data.task_type)
             //     break

+ 13 - 7
src/logic/content/ParseCard.js

@@ -65,6 +65,7 @@ class ParseCard {
     parseFaceBookParmas(dom_card) {
         let tweet_Id = ''
         let short_url = ''
+        let tweet_author = '';
         let a_arr = dom_card.querySelectorAll('a[role="link"]') || []
         a_arr = Array.from(a_arr).reverse()
         for (let i in a_arr) {
@@ -76,12 +77,17 @@ class ParseCard {
                 if (faceJumpUrl !== 'null') {
                     let urlArr = new URL(faceJumpUrl);
                     let searchArr = new URLSearchParams(urlArr.search);
+                    let deUrlParams =  searchArr.get('deUrlParams') || '{}';
+                    deUrlParams = JSON.parse(deUrlParams);
                     if (!tweet_Id) {
-                        tweet_Id = searchArr.get('tweetId')
+                        tweet_Id = deUrlParams.tweetId;
                     }
                     if (!short_url) {
                         short_url = faceJumpUrl
                     }
+                    if (!tweet_author) {
+                        tweet_author = deUrlParams.fullName;
+                    }
                 }
             } else {
                 if (a_arr[i].href.indexOf('denetme.net') > 0 && !tweet_Id) {
@@ -97,7 +103,7 @@ class ParseCard {
                 break
             }
         }
-        return { tweet_Id, short_url, dom_card }
+        return { tweet_Id, short_url, dom_card, tweet_author }
     }
     hideCard() {
         if (dom.querySelector('iframe')) {
@@ -181,10 +187,10 @@ class ParseCard {
         return _array
     }
 
-    createIframe(post_Id, tweet_Id, if_center = false) {
+    createIframe({post_Id, tweet_Id, tweet_author}, if_center = false) {
         let _iframe = document.createElement('iframe')
         _iframe.id = post_Id
-        _iframe.src = chrome.runtime.getURL('/iframe/red-packet.html') + `?postId=${post_Id}&tweetId=${tweet_Id}`;
+        _iframe.src = chrome.runtime.getURL('/iframe/red-packet.html') + `?postId=${post_Id}&tweetId=${tweet_Id}&tweet_author=${tweet_author}&window_origin=${window.location.origin}`;
         _iframe.style.cssText = 'border:medium none; width:375px; min-height:500px;'
         if (if_center) {
             _iframe.style.cssText = 'border:medium none; width:375px; min-height:500px; display:block; margin:auto;'
@@ -279,11 +285,11 @@ class ParseCard {
             // 渲染时长:${(new Date().getTime() - time) / 1000}s
             // `
             // dom.parentElement.appendChild(div)
-            dom.appendChild(this.createIframe(post_Id, tweet_Id))
+            dom.appendChild(this.createIframe({post_Id, tweet_Id}))
         }
 
     }
-    replaceFacebookPacket({ dom_card, tweet_Id, short_url }) {
+    replaceFacebookPacket({ dom_card, tweet_Id, short_url, tweet_author }) {
         if (!dom_card || !dom_card.parentElement) {
             return
         }
@@ -299,7 +305,7 @@ class ParseCard {
             let originUrl = new URL(short_url);
             let post_Id = originUrl.pathname.slice(1);
 
-            dom.appendChild(this.createIframe(post_Id, tweet_Id, true))
+            dom.appendChild(this.createIframe({post_Id, tweet_Id, tweet_author}, true))
         }
     }
 }

+ 1 - 1
src/logic/content/facebook.js

@@ -21,7 +21,7 @@ export function initFacebookContent() {
  */
 function injectShareCode() {
     const {href, pathname} = window.location;
-    if(!(href.indexOf('facebook.com') > -1 && pathname.indexOf('dialog/share'))) {
+    if(!(href.indexOf('facebook.com') > -1 && pathname.indexOf('dialog/share') > -1)) {
         return;
     }
 

+ 46 - 3
src/logic/content/twitter.js

@@ -88,7 +88,7 @@ export function showTwitterPublishDialogHandler(publishRes) {
         srcContent: publishRes.srcContent
     })
     _setPublishContent(publishRes.srcContent);
-    _publishTweetEvent(publishRes.postId, bindTwitterArtMethod);
+    _publishTweetEvent(publishRes, bindTwitterArtMethod);
 }
 
 export function showPinTips() {
@@ -157,7 +157,7 @@ let bindTwitterArt = {
  * 监听dialog内点击原生发布按钮事件
  * @private
  */
-function _publishTweetEvent(contentStr, cb) {
+function _publishTweetEvent(params, cb) {
     setTimeout(() => {
         let publishTweetBtn;
         let dialog = document.querySelector('div[role="dialog"]');
@@ -170,12 +170,20 @@ function _publishTweetEvent(contentStr, cb) {
 
         publishTweetBtn && publishTweetBtn.addEventListener('click', function () {
             bindTwitterArt.needBind = true;
-            bindTwitterArt.postId = contentStr;
+            bindTwitterArt.postId = params.postId;
+            checkIsShowReSend(dialog, params);
             cb && cb()
         });
     }, 800)
 }
 
+function checkIsShowReSend(dom, params) {
+    let str = dom.querySelector('div[data-contents="true"]').innerHTML;
+    if(str.indexOf('#DeNet') < 0 || str.indexOf(params.postId) < 0) {
+        noticeBindTweet({postId: params.postId, taskLuckdropId: ''});
+    }
+}
+
 /**
  * 在输入推文区插入deNet按钮
  * @param parent
@@ -712,6 +720,21 @@ export function init() {
     });
 }
 
+export function facebookReplyTweet(params) {
+    if(window.location.origin.indexOf('twitter.com')) {
+        const urlParams = new URLSearchParams(window.location.search);
+        const actionType = urlParams.get('actionType');
+        let deReplyParams = urlParams.get('deReplyParams') || '{}';
+        deReplyParams = JSON.parse(deReplyParams);
+        if (actionType == 'denetFacebookToTwitterReply') {
+            if(params.postId == deReplyParams.postId) {
+                let iframe = document.getElementById(params.postId);
+                iframe.contentWindow.postMessage({ actionType: 'CONTENT_RED_PACKET_FACEBOOK_REPLY', data: deReplyParams }, '*');
+            }
+        }
+    }
+}
+
 export function replyHandle(params) {
     let iframe = window.parent.document.getElementById(params.postId);
     let replyBtn = iframe.parentNode.parentNode.querySelector('div[data-testid="reply"]') || 
@@ -860,4 +883,24 @@ export function checkTwitterTaskState() {
             }
         }
     }, 1000)
+}
+
+export function getTweetAuthorByDom(params) {
+    let iframe = document.getElementById(params.postId);
+    let fullNameDom;
+    let pathNameArr = window.location.pathname.split('/');
+    if(pathNameArr.length >= 2 && pathNameArr[pathNameArr.length - 2] == 'status') {
+        fullNameDom = iframe.parentNode.parentNode.parentNode.parentNode.querySelector('a[role=link]');
+    } else {
+        fullNameDom = iframe.parentNode.parentNode.parentNode.querySelector('a[role=link]');
+    }
+    if(fullNameDom)  {
+        let arr = fullNameDom.href.split('/');
+        if(arr.length) {
+            let fullName = arr[arr.length-1];
+            if(fullName) {
+                iframe.contentWindow.postMessage({ actionType: 'CONTENT_RED_PACKET_GET_TWEET_AUTHOR', data: {fullName} }, '*');
+            }
+        }
+    }
 }

+ 4 - 3
src/view/iframe/bind-tweet/bind-tweet.vue

@@ -9,7 +9,7 @@
         </div>
         <div class="button-wrapper">
             <div class="re-send" @click="seSend">Resend</div>
-            <div class="terminate" @click="terminate">Terminate for a refund</div>
+            <div class="terminate" v-if="submitData.taskLuckdropId"  @click="terminate">Terminate for a refund</div>
         </div>
     </div>
 </template>
@@ -22,7 +22,9 @@ import { getChromeStorage } from '@/uilts/chromeExtension.js'
 import { getQueryString } from '@/uilts/help.js'
 import { terminatedLuckdrop } from "@/http/redPacket";
 
-let submitData = ref({});
+let submitData = ref({
+    taskLuckdropId: ''
+});
 
 const close = () => {
     window.parent.postMessage({ actionType: "IFRAME_CLOSE_BIND_TWEET",  data: {
@@ -44,7 +46,6 @@ const seSend = async () => {
 }
 
 const terminate = () => {
-    console.log(' submitData.value ',  submitData.value.taskLuckdropId )
     terminatedLuckdrop({
         params: {
             luckdropId: submitData.value.taskLuckdropId

+ 15 - 10
src/view/iframe/publish/give-dialog.vue

@@ -166,10 +166,12 @@
                                 <div>
                                     Tasks
                                 </div>
-                                <div>
+                                <!-- <div>
                                     <el-dropdown trigger="click">
-                                        <img src="@/assets/svg/icon-add-task.svg" class="icon-add-task">
-                                        <template #dropdown v-if="formList.some(item => !item.show)">
+                                        <img src="@/assets/svg/icon-add-task.svg" 
+                                            class="icon-add-task"
+                                            v-show="formList.some(item => !item.show)">
+                                        <template #dropdown>
                                             <el-dropdown-menu>
                                                 <div  v-for="(item, key) in formList" :key="key"
                                                      @click="clickDropdown(item, key)">
@@ -181,7 +183,7 @@
                                             </el-dropdown-menu>
                                         </template>
                                     </el-dropdown>
-                                </div>
+                                </div> -->
                             </div>
 
                             <!-- 转推、like、关注 -->
@@ -190,7 +192,8 @@
                                     v-for="(item, index) in formList"
                                     :key="index"
                                 >
-                                    <div v-if="item.show"  class="form-item">
+                                    <div v-if="item.show"  class="form-item"    
+                                        :class="{ 'border-hide': formList.length - 1 == index }">
                                         <div class="item-left">
                                             <div class="label">
                                                 <img
@@ -232,12 +235,13 @@
                                         
                                         <div>
                                             <el-switch
+                                                v-if="item.type > 3"
                                                 v-model="item.checked"
                                                 @change="formSwitchChange($event, item, index)"
                                             />
-                                            <img src="@/assets/svg/icon-task-close.svg" 
+                                            <!-- <img src="@/assets/svg/icon-task-close.svg" 
                                                 class="icon-task-close"
-                                                @click="hideTask(item, index)">
+                                                @click="hideTask(item, index)"> -->
                                         </div>
                                         <!-- 
                                             v-if="item.type == 2 || item.type == 3 || item.type == 7 || item.type == 8 || item.type == 9"
@@ -584,7 +588,7 @@ let formList = reactive([
         show: true
     },
     {
-        label: "Retweet",
+        label: "Retweet & Like",
         icon: require("@/assets/svg/icon-task-twitter.svg"),
         nodeType: "div",
         type: 3,
@@ -597,7 +601,7 @@ let formList = reactive([
         nodeType: "div",
         type: 2,
         checked: true,
-        show: true
+        show: false
     },
     {
         label: "Comment and tag 3 friends",
@@ -1215,6 +1219,7 @@ const hideTask = (params, index) => {
 
 const clickDropdown = (params, index) => {
     formList[index]['show'] = true;
+    formList[index]['checked'] = true;
 }
 
 const closeDiscordTask = (val, params, index) => {
@@ -1935,7 +1940,7 @@ onMounted(() => {
                                 cursor: pointer;
                             }
                         }
-                        .form-item:last-child {
+                        .border-hide {
                             border-bottom: none !important;
                         }
                     }

+ 60 - 6
src/view/iframe/red-packet/red-packet.vue

@@ -407,6 +407,9 @@ let state = reactive({
     reply: false
   }
 })
+
+let fullName = '';
+
 function clickRetry() {
   init()
 }
@@ -543,11 +546,17 @@ async function clickReply(params) {
       return
     }
 
-    window.parent.postMessage({ actionType: "IFRAME_RED_PACKET_REPLY_CLICK",  data: {
+    let replyData = {
       postId: state.postId,
       type: params.type,
       taskLuckdropId: state.detail.taskLuckdropId
-    }}, "*");
+    }
+    if(state.window_origin.indexOf('facebook.com') > -1) {
+      let url = `https://twitter.com/${state.tweet_author}/status/${state.tweetId}?actionType=denetFacebookToTwitterReply&deReplyParams=${JSON.stringify(replyData)}`
+      window.open(url)
+    } else {
+        window.parent.postMessage({ actionType: "IFRAME_RED_PACKET_REPLY_CLICK",  data: replyData}, "*");
+    }
 }
 
 /**
@@ -559,8 +568,14 @@ async function clickRepostFacebook(params) {
       return
     }
 
+    let deUrlParams = {
+      fullName,
+      tweetId: state.tweetId
+    }
+    let href = `${state.postRedirectUrl}?deUrlParams=${JSON.stringify(deUrlParams)}`;
+    console.log(href);
     let shareUrlparams = {
-      href: state.postRedirectUrl + '?tweetId=' + state.tweetId, 
+      href, 
       type: params.type,
       taskLuckdropId: state.detail.taskLuckdropId
     }
@@ -923,14 +938,18 @@ function init(initParams) {
 
       // 判断推特id,绑定逻辑
       state.srcContentId = res.data.srcContentId
-      if (!state.srcContentId) {
-        if(type != 'reSetBindTwtterId') {
+
+      if(!res.data.srcContentId) {
+        if(type == 'reSetBindTwtterId') {
           // 显示提示
           window.parent.postMessage({ actionType: "IFRAME_RED_PACKET_SHOW_BIND_TWEET_NOTICE",  data: {
             postId: state.postId,
             taskLuckdropId: JSON.parse(res.data.postBizData).taskLuckdropId
           }}, "*");
         }
+      }
+
+      if (!state.srcContentId) {
         reSetBindTwtterId(res.data)
         return
       }
@@ -971,6 +990,12 @@ function initTaskDetail() {
                 state.done.join_discord = res.data[i].finished
                 discordAuthorizeRequired = res.data[i].discordAuthorizeRequired
                 break
+              case 8:
+                state.done.repost_facebook = res.data[i].finished;
+                break;
+              case 9:
+                state.done.reply = res.data[i].finished;
+                break;
             }
           }
         } else {
@@ -1048,12 +1073,35 @@ onMounted(() => {
   state.process_mode = process.env.NODE_ENV
   state.postId = getQueryString('postId')
   state.tweetId = getQueryString('tweetId')
+  state.tweet_author = getQueryString('tweet_author');
+  state.window_origin = getQueryString('window_origin');
+
+  getTweetAuthor();
+  checkFacebookReply();
+
   init()
   // state.loading_show = true
   // state.status = 'opened'
   // state.close_status = '没有领到钱'
 })
 
+function getTweetAuthor() {
+  if(state.window_origin.indexOf('twitter.com') > -1) {
+    window.parent.postMessage({ actionType: "IFRAME_RED_PACKET_GET_TWEET_AUTHOR",  data: {
+      postId: state.postId,
+      taskLuckdropId: state.detail.taskLuckdropId
+    }}, "*");
+  }
+}
+
+function checkFacebookReply() {
+  console.log('checkFacebookReply')
+  if(state.window_origin.indexOf('twitter.com') > -1) {
+    window.parent.postMessage({ actionType: "IFRAME_RED_PACKET_CHECK_FACEBOOK_REPLY",  data: {
+      postId: state.postId
+    }}, "*");
+  }
+}
 
 // 点击领取
 function clickOpenRedPacket() {
@@ -1398,6 +1446,12 @@ function onWindowMessage() {
             state.done.reply = true;
             state.done.reply_red = false;
             break;
+          case 'CONTENT_RED_PACKET_GET_TWEET_AUTHOR':
+            fullName = event.data.data.fullName
+            break;
+          case 'CONTENT_RED_PACKET_FACEBOOK_REPLY':
+            clickReply(event.data.data)
+            break;
         }
       }
   });
@@ -2072,7 +2126,7 @@ body {
             flex: 1;
             margin-left: 10px;
             font-weight: 500;
-            font-size: 16px;
+            font-size: 15px;
             letter-spacing: 0.3px;
             color: #000000;
           }

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.