{"version":3,"sources":["webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-id.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article.ts","webpack://@lemon8/web-seo/./client/utils/use-semantic-url-builder.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-active-to-current-article.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/replies-see-more/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-reply-list/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item-image/use-comment-image.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item-image/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-item/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-comments.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comments-see-more/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-translated.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-no-permission/assets/close-comment.svg","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/comment-no-permission/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/comment/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/components/article-info-bar/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/components/legacy-hashtag-item/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-fold.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/partial-article-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-sar/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/wap-article/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/gallery-author-section/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/atoms/current-video-article.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/atoms/end-recommend-show.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/atoms/replay-video.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-player/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-wrapper/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-content/video-content-footer/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-content/video-author/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/video-content/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/components/warning-label-section/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-related-post.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/components/end-recommend/index.tsx","webpack://@lemon8/web-seo/./client/utils/libra/video-cta-opt.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/article-video/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/large-image/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/original-post-banner/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/main/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/campaign/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-related-hashtag.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/related-topic/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/related-post/index.tsx","webpack://@lemon8/web-seo/./client/utils/libra/campaign-poster-remove.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/body/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-author.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-author-jsonld.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-video-jsonld.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-comments-jsonld.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/current-article-canonical.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/use-article-base-jsonld.ts","webpack://@lemon8/web-seo/./client/utils/escape-xml.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/json-ld/index.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-article-description.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-article-title.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/og.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/utils/use-article-keywords.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/tdk.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/preload.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/canonical.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/rebots.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/twitter.tsx","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/head/index.tsx","webpack://@lemon8/web-seo/client/routes/$user_link_name_.$article_id/route.ts","webpack://@lemon8/web-seo/./client/routes/$user_link_name_.$article_id/shared/atoms/related-post-carousel-show.ts","webpack://@lemon8/web-seo/./client/components/article-card/index.tsx","webpack://@lemon8/web-seo/./client/components/article-recommend-card/index.tsx","webpack://@lemon8/web-seo/./client/components/masonry/index.tsx","webpack://@lemon8/web-seo/./client/components/see-more-banner/index.tsx","webpack://@lemon8/web-seo/./client/utils/px-to-rem.ts","webpack://@lemon8/web-seo/./client/components/user-auth-icon/index.tsx","webpack://@lemon8/web-seo/./shared/utils/local-storage-util.ts"],"names":["$CurrentArticleId","atom","get","traffic","$PageLevelTraffic","pageType","EPageType","includes","console","log","Promise","resolve","pendingQueue","groupId","$CurrentArticle","currentArticleId","$ArticleDetail","$CurrentAvailableArticleOrNull","article","ArticleDetailUtil","$CurrentArticleAsAvailable","useSemanticUrlBuilder","region","useAtomValue","$Locale","enterHref","$RootTraffic","useCallback","path","originalRegion","url","URL","startsWith","warn","concat","protocol","host","useActiveToCurrentArticle","active","usePageActive","position","id","schemaOption","categoryId","ampExtra","enter_position","enter_page_click_id","articleClass","author","userId","EArticleClass","authorId","RepliesSeeMore","props","t","useTranslation","activeToCurrentArticle","isMobileUser","$IsMobileUser","comment","commentId","replyCount","hasMore","cursor","$ArticleCommentDetail","replyLoader","useRouteLoader","media_id","comment_id","offset","atomFamilies","$ArticleCommentDetailLoadmore","seeMoreObservedRef","useViewTracking","onView","window","Tea","current_page_module","ModuleType","current_position","ClickPosition","handleReadMoreClick","useReflowClick","defaultBehavior","load","reflowBehavior","clickEvent","state","jsx","Loading","variant","jsxs","ref","className","onClick","children","String","ShowMoreIcon","CommentReplyList","replies","map","reply","CommentItem","CommentContent","richContent","text","buildSemanticUrl","handleCommentRichContentClick","page_click_id","richContentArray","useMemo","length","sortedRichContent","_sortBy","end","richContentCursor","richContentEnd","res","push","substring","currentRich","start","type","ECommentRichContentCategory","rich","mentionUserId","mentionedUerHref","articleRegion","Link","to","IMAGE_MIN_DESIGN_WIDTH","useCommentImage","imageList","image","width","height","aspectRatio","_clamp","Math","max","src","alt","CommentImage","commentImage","activeToCurrentPage","handleClickImage","style","Image","CURRENT_PAGE_MODULE","formatTimeAgo","useTimeAgoFormatter","createTime","avatar","nickName","linkName","isPrimaryComment","CommentUtil","isReply","userCanonicalUrl","isAuthor","articleAuthorId","commentAuthorId","formattedCreatedTime","likeIconRef","commentAuthorObservedRef","handleClickUser","commentReplyRef","handleCommentReplyClick","handleClickLike","cls","Avatar","replace","HeartIcon","Boolean","$CurrentArticleComments","$ArticleComments","CommentsSeeMore","loader","$ArticleCommentsLoadmore","handleSeeMoreClick","$CurrentArticleTranslated","_path","_path2","_circle","_circle2","_circle3","_circle4","_path3","_extends","target","i","source","key","SvgCloseComment","CommentNoPermission","CloseComment","ArticleCommentsSection","formatNum","useNumFormatter","items","currentArticleTranslated","articleAvailable","commentCount","commentPermission","ECommentPermission","num","DivisibleStack","ArticleInfoSection","favoriteCount","diggCount","savedRef","handleSavedClick","diggRef","handleDiggClick","commentedRef","handleCommentedClick","Bookmark","Heart","EllipsisBubble","ArticleContent","navigate","useNavigate","title","content","isMobile","isBot","isInApp","$UserAgent","isRealUser","search","useSearchParams","handleAnchorClick","anchorType","customParams","event","preventDefault","poiId","hashtagId","mentionedId","is_cta","handleHashtagClick","pathName","handlePoiClick","handleMentionedClick","mentionedHref","handleLinkClick","data","cardType","href","open","Article","articleTitle","isSSR","__BUILD_TARGET__","isShow","countryRegion","onLinkClick","onHashtagClick","onPoiClick","onMentionedClick","filterXSS","LegacyHashtagItem","hashtag","name","$CurrentArticleFold","$CurrentArticleHeightComputed","PartialArticleContent","folded","setFolded","useScopedAtom","computed","setComputed","partialArticleRef","useRef","shortContent","formattedShortContent","useEffect","current","lineHeight","lineHeightInStr","getComputedStyle","scrollHeight","parseFloat","round","display","visibility","ArticleSarSection","relatedQuery","articleTranslated","kepUrl","kepQueryFormat","sarObservedRef","handleSarClick","ArticleEditTime","publishTime","modifyTime","timeAgo","des","sep","ArticlePOI","locationInfo","poiObservedRef","poiName","LegacyForumList","forumList","f","ArticleReadMoreBanner","setSimpleCTAModel","useSetAtom","$SimpleCTAModalShow","useScopedAtomValue","readMoreBtnRef","handleClickModalConfirm","currentPosition","body","handleClickConfirm","ChevronDownFill","PartialArticleLoading","ArticleContentSkeleton","WapArticleSection","translated","Fragment","GalleryAuthorSection","mainAuthorRef","followBtnObservedRef","authorHref","handleAuthorInfoClick","handleFollowClick","UserAuthIcon","authInfo","Button","size","ButtonSize","$CurrentVideoArticle","$EndRecommendShow","$ReplayVideo","handler","VideoPlayer","player","video","largeImage","setEndRecommendShow","useSetScopedAtom","isFirstPlay","setSimpleCTAModal","showPlay","setShowPlay","useState","localStorageKey","setLocalStorageKey","muted","setMuted","keyPrefix","videoClicked","setVideoReplayHandler","onVisibilitychange","_a","_b","document","visibilityState","pause","status","VideoStatus","addEventListener","removeEventListener","handlePlayEvent","handlePlayingEvent","handlePauseEvent","handleEndEvent","playerInst","dateToday","today","Date","getFullYear","getMonth","getDate","lastVideoVisitState","localStorage","getItem","useManualPlay","play","handleVideoClick","handlePlayClick","stopPropagation","setLocalStorageStatus","handleClickCancel","handleVolumeClicked","unmute","mute","videoReplayHandler","seek","SimpleVideo","videoSrc","posterSrc","autoPlay","PlayFill","SpeakerMutedFillIcon","SpeakerWaveFillIcon","VideoWrapper","VideoContentFooter","formattedTime","forum","maxWidth","VideoAuthor","userHref","videoAuthorObservedRef","handleButtonClick","marginLeft","light","LONG_READ_MORE_COUNTRY","VideoContent","maskHeight","setMaskHeight","articleFirstHeight","setArticleFirstHeight","contentRef","contentExpended","isLongReadMore","requestAnimationFrame","overflow","$article","querySelector","_el","$title","p","titleLineHeight","fontSize","titleFontSize","titleHeightStr","titleHeight","ceil","_fontSize","Number","isNaN","$content","callback","contentStyle","scrollTo","e","WarningLabelSection","illegalInfo","WarningLabel","$CurrentArticleRelatedPost","$ArticleRelatedPost","VideoEndRecommendSection","show","relatedPost","loadable","VideoEndRecommend","searchId","onClickReplay","$VideoCTAOpt","parameters","$ABTest","_get","$HitVideoCTAOpt","config","ArticleVideoSectionImpl","hitVideoCTAOpt","ArticleVideoSection","sessionStorage","imgUrl","oneLink","generateOneLink","pid","enter_page_id","enter_page_type","sendNotification","icon","requireInteraction","time","now","toString","ScopedProvider","atoms","atomsWithHydration","LargeImageSection","paddingBottom","OriginalPostBanner","originArticleHref","handleBannerClick","ArticleMainSections","store","useStore","currentArticle","isAvailable","articleRelatedPost","unavailableReason","NotFound","EArticleUnavailableReason","ENotFoundType","$CurrentGalleryArticle","ArticleGallery","enableIndexForRecommend","articleRelatedPosts","ArticleCampaignSection","campaigns","$CampaignBanner","campaignObservedRef","CampaignCarousel","$CurrentArticleRelatedHashtag","$ArticleRelatedHashtag","queryLengthFilter","str","ArticleRelatedTopicSection","relatedQueryInfos","sugWords","gptExtendWords","pageIndex","setPageIndex","PAGE_NUMBER","MAX_VALUE","words","longTailWords","highVolumeWords","relatedSEOWords","relatedQueries","slice","info","word","topicNameSet","Set","item","topicName","_uniq","filter","has","topics","handleClickSeeMore","topicSectionObservedRef","renderBottomText","SeeMoreBanner","onClickSeeMore","SeeMore","$CurrentPageModule","$CurrentPositionPrefix","ClickPositionPrefix","$CurrentModuleRank","SectionTitle","TopicCard","topic","topicId","ArticleRelatedPostSection","relatedPosts","bannerShow","setBannerShow","sectionObservedRef","search_id","$ArticleRelatedPostLoadmore","evenRelatedPosts","filteredPosts","masonryRef","postLayout","darkBackground","Masonry","columnCount","index","ArticleRecommendCard","pageModule","clickPosition","rank","loading","divider","ArticleCard","$CampaignPosterMoveDown","$HitCampaignPosterMoveDown","ArticleBody","hitCampaignPosterMoveDown","Suspense","fallback","ArticleBodySkeleton","ArticleRecommendSkeleton","$CurrentArticleAuthor","$UserDetail","$CurrentAvailableArticleAuthorOrNull","UserDetailUtil","useArticleAuthorJsonld","user","userRegion","useVideoJsonLD","authorJsonLd","abInfo","videoObject","creator","useCommentsJsonLD","comments","$CurrentArticleCanonical","canonicalRegion","Region","useArticleBaseJsonLD","canonicalUrl","escapeSpecialXmlCharacter","unescapeSpecialXmlCharacter","removeEscapedSpecialXmlCharacter","ArticleJsonLD","articleBaseJsonLD","authorJsonLD","videoJsonLD","commentJsonLD","articleJsonLd","_objectSpread","isTranslatedVersion","dangerouslySetInnerHTML","__html","JSON","stringify","BreadCrumbJsonLD","breadCrumbList","itemListElement","useArticleDescription","description","useArticleTitle","ArticleOpenGraph","imageMeta","property","endsWith","useArticleKeywords","result","ArticleTDK","keywords","join","ArticlePreload","preloadUrl","rel","as","ArticleCanonical","canonicalPathname","ArticleRobots","isOnlyFollow","ArticleTwitter","ArticleHead","links","cssLinks","buildMasterLoader","shouldRevalidate","args","currentParams","user_link_name","currentUserLinkName","article_id","nextParams","userLinkName","articleId","defaultShouldRevalidate","ArticlePage","RemixPage","constructor","arguments","Head","Body","$RelatedPostCarouselShow","RELATED_ARTICLE_CAROUSEL_HIDE_RANK","canonicalUri","articleLikes","imprId","isLCP","currentPageModule","prefix","setRelatedPostCarouselShow","posterImageList","temp","articleHref","handleClickArticle","_","bundle","ArticleClass","split","handleClickAuthor","articleCardRef","group_id","article_class","impr_id","isVideo","multi_images","fetchpriority","PlayIcon","buildInnerHtml","wrapper","cardObservedRef","coverUrl","onContextMenu","parseToNumber","val","useContainerRef","setCurrentRef","setRef","instance","forwardRef","childrenArray","Children","container","setContainer","containerHeight","setContainerHeight","floor","postLayoutQueue","useImperativeHandle","func","heightList","setHeightList","_range","orderList","setOrderList","o","doLayout","columnHeights","Array","fill","columnItems","childOrderList","child","min","_min","minIndex","findIndex","v","forEach","observer","ResizeObserver","observe","disconnect","maxHeight","_max","maxHeightIndex","indexOf","maxHeightCount","left","top","r","bottom","lastIndexOf","order","marginBottom","ChevronDownIcon","pxToRem","px","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_MARGIN_LEFT","showAuthSymbol","deleteOutdatedKeys","len","keyName","removeItem","storageKey","storageValue","setItem"],"mappings":"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","file":"routes/$user_link_name_.$article_id-c9e01f4ecd62507e9128.js","sourcesContent":["import { atom } from 'jotai';\nimport { $PageLevelTraffic } from 'shared/atoms';\nimport { EPageType, IArticlePageTraffic, IVideoPageTraffic } from 'shared/models';\nimport { pendingQueue } from '~/utils/pending-queue';\n\nexport const $CurrentArticleId = atom((get) => {\n const traffic = get($PageLevelTraffic);\n const { pageType } = traffic;\n\n if (![EPageType.article, EPageType.video].includes(pageType)) {\n console.log('>>>>>>>', 'get current article', 'return promise');\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw new Promise((resolve) => pendingQueue.push(resolve));\n }\n\n const articleTraffic = traffic as IArticlePageTraffic | IVideoPageTraffic;\n\n return articleTraffic.groupId;\n});\n","import { atom } from 'jotai';\nimport { $ArticleDetail } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\nimport { ArticleDetailUtil, IArticleDetail } from 'shared/models';\n\nexport const $CurrentArticle = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleDetail(currentArticleId));\n});\n\n/**\n * get null when current article is not available\n *\n * e.g. used for short circuit logic.\n */\nexport const $CurrentAvailableArticleOrNull = atom((get) => {\n const article = get($CurrentArticle);\n return ArticleDetailUtil.isArticleAvailable(article) ? article : null;\n});\n\n/**\n * force cast current article to IArticleDetail\n *\n * use this only when you are sure that current article is available to show\n */\nexport const $CurrentArticleAsAvailable = atom((get) => {\n return get($CurrentArticle) as IArticleDetail;\n});\n","import { useAtomValue } from 'jotai';\nimport { $Locale, $RootTraffic } from '@lemon8/web-app-shared/atom';\nimport { useCallback } from 'react';\n\ntype UseSemanticUrlBuilder = () => (path: string, originalRegion?: string) => string;\n\nexport const useSemanticUrlBuilder: UseSemanticUrlBuilder = () => {\n const { region } = useAtomValue($Locale);\n const { enterHref } = useAtomValue($RootTraffic);\n\n return useCallback(\n (path: string, originalRegion?: string) => {\n const url = new URL(enterHref);\n\n if (!path.startsWith('/')) {\n console.warn('path must start with /, path: %s', path);\n }\n\n return `${url.protocol}//${url.host}${path}?region=${originalRegion || region}`;\n },\n [region],\n );\n};\n","import { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil, EArticleClass } from 'shared/models';\nimport { ClickPosition } from '~/utils/click-position';\nimport { usePageActive } from '~/utils/active/use-page-active';\nimport { useCallback } from 'react';\n\nexport const useActiveToCurrentArticle = (): ((position: ClickPosition, id?: string) => void) => {\n const article = useAtomValue($CurrentArticle);\n\n const active = usePageActive();\n\n return useCallback((position, id) => {\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(article);\n\n if (!articleAvailable) {\n return active({\n schemaOption: {\n pageType: 'feed',\n categoryId: 0,\n },\n ampExtra: {\n enter_position: position,\n enter_page_click_id: id || null,\n },\n });\n }\n\n const {\n articleClass,\n groupId,\n author: { userId },\n } = article;\n\n active({\n schemaOption: {\n pageType: articleClass === EArticleClass.VIDEO ? 'video' : 'article',\n groupId,\n authorId: userId,\n },\n ampExtra: {\n enter_position: position,\n enter_page_click_id: id || null,\n },\n });\n }, []);\n};\n","import { FC, useCallback } from 'react';\nimport ShowMoreIcon from 'icon/chevron_down_fill.svg';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useTranslation } from 'react-i18next';\nimport { useAtomValue } from 'jotai';\nimport { $ArticleCommentDetail } from 'shared/atoms/article/article-comment-detail';\nimport { useRouteLoader } from '~/utils/use-route-loader';\nimport { $ArticleCommentDetailLoadmore } from 'shared/atoms/article/article-comment-detail-loadmore';\nimport { IPrimaryComment } from 'shared/models';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Loading } from '~/components/loading';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\ninterface IRepliesSeeMoreProps {\n comment: IPrimaryComment;\n}\n\nexport const RepliesSeeMore: FC = (props) => {\n const { t } = useTranslation();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const isMobileUser = useAtomValue($IsMobileUser);\n const { comment } = props;\n const { commentId, replyCount } = comment;\n const {\n author: { userId },\n } = useAtomValue($CurrentArticleAsAvailable);\n const { hasMore, cursor } = useAtomValue($ArticleCommentDetail(commentId));\n\n const replyLoader = useRouteLoader(\n 'comment-detail',\n {\n media_id: userId,\n comment_id: commentId,\n offset: cursor,\n },\n {\n atomFamilies: { $ArticleCommentDetailLoadmore },\n },\n );\n\n const seeMoreObservedRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.comment,\n current_position: ClickPosition.comment_reply_see_more,\n });\n }\n }, []),\n });\n\n const handleReadMoreClick = useReflowClick(\n {\n defaultBehavior: () => {\n replyLoader.load();\n },\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_reply_see_more);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_reply_see_more,\n }),\n },\n [activeToCurrentArticle, replyLoader],\n );\n\n if (!hasMore) {\n return null;\n }\n\n if (replyLoader.state === 'loading') {\n return ;\n }\n\n return (\n
\n
\n {`${t('seo_see_more_reply_comment')}(${String(replyCount - cursor)})`}\n \n
\n );\n};\n","import { FC } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $ArticleCommentDetail } from 'shared/atoms/article/article-comment-detail';\nimport { IPrimaryComment } from 'shared/models';\nimport { CommentItem } from '@article/body/comment/comment-item';\nimport { RepliesSeeMore } from '@article/body/comment/replies-see-more';\n\ninterface ICommentReplyListProps {\n comment: IPrimaryComment;\n}\n\nexport const CommentReplyList: FC = (props) => {\n const { comment } = props;\n const { commentId } = comment;\n const { replies } = useAtomValue($ArticleCommentDetail(commentId));\n\n return (\n
\n {replies.map((reply) => (\n \n ))}\n \n
\n );\n};\n","import { FC, JSX, useMemo } from 'react';\nimport _sortBy from 'lodash/sortBy';\nimport { ECommentRichContentCategory, IMentionUserRichContent, TComment } from 'shared/models';\nimport { Link } from '@remix-run/react';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { ClickPosition } from '~/utils/click-position';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useAtomValue } from 'jotai';\n\nimport './style.scss';\n\ninterface ICommentContentProps {\n comment: TComment;\n}\n\nexport const CommentContent: FC = (props) => {\n const { comment } = props;\n const { richContent, text } = comment;\n const article = useAtomValue($CurrentArticleAsAvailable);\n const buildSemanticUrl = useSemanticUrlBuilder();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const handleCommentRichContentClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_mentioned_user);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_mentioned_user,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const richContentArray = useMemo<(string | JSX.Element)[]>(() => {\n if (!richContent?.length) {\n return [];\n }\n\n const sortedRichContent = _sortBy(richContent, '.start');\n\n let cursor = 0;\n const end = text.length;\n\n let richContentCursor = 0;\n const richContentEnd = sortedRichContent.length;\n\n const res: (string | JSX.Element)[] = [];\n\n while (cursor < end) {\n if (richContentCursor < richContentEnd) {\n res.push(text.substring(cursor, end));\n cursor = end;\n break;\n }\n\n const currentRich = sortedRichContent[richContentCursor];\n\n if (cursor === currentRich.start) {\n const { start, length } = currentRich;\n if (currentRich.type === ECommentRichContentCategory.MENTION_USER) {\n const rich = currentRich as IMentionUserRichContent;\n const { mentionUserId } = rich;\n\n const mentionedUerHref = buildSemanticUrl(`/user/${mentionUserId}/share`, article.articleRegion);\n\n res.push(\n \n {text.substring(start, start + length)}\n ,\n );\n } else {\n res.push(text.substring(start, start + length));\n }\n\n richContentCursor += 1;\n cursor += length;\n } else {\n res.push(text.substring(cursor, currentRich.start));\n cursor = currentRich.start;\n }\n }\n\n return res;\n }, [handleCommentRichContentClick]);\n\n if (!richContent?.length) {\n return

{text}

;\n }\n\n return

{richContentArray}

;\n};\n","import _clamp from 'lodash/clamp';\nimport { TComment } from 'shared/models';\n\ninterface ICommentImage {\n width: string;\n height: string;\n src: string;\n alt: string;\n}\n\nconst IMAGE_MIN_DESIGN_WIDTH = 96;\n\nexport const useCommentImage = (comment: TComment): ICommentImage | null => {\n const { imageList } = comment;\n if (!imageList?.length) {\n return null;\n }\n\n const image = imageList[0];\n const { width, height, url } = image;\n const aspectRatio = _clamp(width / height, 3 / 4, 4 / 3);\n\n return {\n width: `${(Math.max(aspectRatio, 1) * IMAGE_MIN_DESIGN_WIDTH * 16) / 375}rem`,\n height: `${(Math.max(1 / aspectRatio, 1) * IMAGE_MIN_DESIGN_WIDTH * 16) / 375}rem`,\n src: url,\n // TODO alt\n alt: '',\n };\n};\n","import { FC } from 'react';\nimport { Image } from '~/components/image';\nimport { TComment } from 'shared/models';\nimport { useCommentImage } from '@article/body/comment/comment-item-image/use-comment-image';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\n\nimport './style.scss';\n\ninterface ICommentImageProps {\n comment: TComment;\n}\n\nexport const CommentImage: FC = (props) => {\n const { comment } = props;\n const commentImage = useCommentImage(comment);\n const activeToCurrentPage = useActiveToCurrentArticle();\n\n if (!commentImage) {\n return null;\n }\n\n const { height, width, src, alt } = commentImage;\n\n const handleClickImage = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentPage(ClickPosition.comment_image);\n },\n defaultBehavior: () => {\n activeToCurrentPage(ClickPosition.comment_image);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_reply,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentPage, comment],\n );\n\n return (\n \n {alt}\n
\n );\n};\n","import { FC, useCallback, useMemo } from 'react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { Link } from '@remix-run/react';\nimport { useTranslation } from 'react-i18next';\nimport { CommentUtil, TComment } from 'shared/models';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useTimeAgoFormatter } from '~/utils/format';\nimport HeartIcon from 'icon/heart.svg';\nimport { CommentReplyList } from '@article/body/comment/comment-reply-list';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Avatar } from '~/components/avatar';\nimport { useAtomValue } from 'jotai';\nimport { CommentContent } from '../comment-item-content/index';\nimport cls from 'classnames';\nimport { CommentImage } from '../comment-item-image';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\ninterface CommentItemProps {\n comment: TComment;\n}\n\nconst CURRENT_PAGE_MODULE = ModuleType.comment;\n\nexport const CommentItem: FC = (props) => {\n const { t } = useTranslation();\n const formatTimeAgo = useTimeAgoFormatter();\n const buildSemanticUrl = useSemanticUrlBuilder();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const { comment } = props;\n const isMobileUser = useAtomValue($IsMobileUser);\n const article = useAtomValue($CurrentArticleAsAvailable);\n const { author, createTime } = comment;\n const { avatar, nickName, linkName } = author;\n const isPrimaryComment = CommentUtil.isPrimaryComment(comment);\n const isReply = CommentUtil.isReply(comment);\n\n const userCanonicalUrl = useMemo(() => {\n return buildSemanticUrl(`/${linkName}`, article.articleRegion);\n }, [linkName]);\n\n const isAuthor = useMemo(() => {\n const articleAuthorId = article.author.userId;\n const commentAuthorId = comment.author.userId;\n return articleAuthorId === commentAuthorId;\n }, [article, comment]);\n\n const formattedCreatedTime = useMemo(() => formatTimeAgo(createTime), [formatTimeAgo, createTime]);\n\n const likeIconRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.comment_like,\n });\n }, []),\n });\n\n const commentAuthorObservedRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.comment_author,\n });\n }\n }, [isMobileUser]),\n });\n\n const handleClickUser = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_author);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_author,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const commentReplyRef = useViewTracking({\n onView: useCallback(() => {\n if (isMobileUser) {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.comment_reply,\n });\n }\n }, [isMobileUser]),\n });\n\n const handleCommentReplyClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_reply);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_reply);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_reply,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const handleClickLike = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_like);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_like);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_like,\n page_click_id: comment.commentId,\n }),\n },\n [activeToCurrentArticle],\n );\n\n return (\n
\n
\n \n \n \n\n
\n \n {nickName}\n {isAuthor && {t('author')}}\n \n\n
\n \n \n
\n\n
\n
{formattedCreatedTime}
\n \n {t('seo_comment_reply')}\n \n
\n
\n\n
\n
\n \n
\n
\n
\n {\n // 一级评论渲染回复条数外露\n isPrimaryComment && Boolean(comment.replyCount) && \n }\n
\n );\n};\n","import { atom } from 'jotai';\nimport { $ArticleComments } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\n\nexport const $CurrentArticleComments = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleComments(currentArticleId));\n});\n","import { FC, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ShowMoreIcon from 'icon/chevron_down_fill.svg';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useRouteLoader } from '~/utils/use-route-loader';\nimport { $ArticleCommentsLoadmore } from 'shared/atoms';\nimport { Loading } from '~/components/loading';\nimport { $CurrentArticleComments } from '@article/shared/atoms/current-article-comments';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\n\nimport './style.scss';\n\nexport const CommentsSeeMore: FC = () => {\n const { t } = useTranslation();\n const {\n author: { userId },\n } = useAtomValue($CurrentArticleAsAvailable);\n const { hasMore, cursor } = useAtomValue($CurrentArticleComments);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const loader = useRouteLoader(\n 'comment-loadmore',\n {\n media_id: userId,\n offset: cursor,\n },\n {\n atomFamilies: { $ArticleCommentsLoadmore },\n },\n );\n\n const handleSeeMoreClick = useReflowClick(\n {\n defaultBehavior: () => {\n loader.load();\n },\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.comment_see_more);\n },\n clickEvent: () => ({\n current_position: ClickPosition.comment_see_more,\n }),\n },\n [activeToCurrentArticle, loader],\n );\n\n const seeMoreObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.comment,\n current_position: ClickPosition.comment_see_more,\n });\n }, []),\n });\n\n if (!hasMore) {\n return null;\n }\n\n if (loader.state === 'loading') {\n return ;\n }\n\n return (\n
\n

{t('seo_landing_cta_see_more_comments')}

\n\n \n
\n );\n};\n","import { atom } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ArticleDetailUtil } from 'shared/models';\n\nexport const $CurrentArticleTranslated = atom((get) => {\n const article = get($CurrentArticle);\n if (!ArticleDetailUtil.isArticleAvailable(article)) {\n return false;\n }\n\n const { region } = get($Locale);\n\n return ArticleDetailUtil.isTranslatedArticleToShow(article, region);\n});\n","var _path, _path2, _circle, _circle2, _circle3, _circle4, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgCloseComment(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 120,\n height: 96,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h120v96H0z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M37.88 35.75c8.789-10.011 18.368-12.205 26.58-10.916 8.323 1.306 15.34 6.212 18.759 10.536 1.033 1.317 2.501 4.306 3.426 8.132.918 3.799 1.257 8.248.204 12.476a.693.693 0 00.44.815c.384.139.76.297 1.127.475.535.26 1.201.011 1.345-.565 1.202-4.83.795-9.79-.2-13.906-.988-4.087-2.6-7.518-3.983-9.28l-.004-.005c-3.855-4.88-11.533-10.21-20.649-11.642-9.23-1.448-19.835 1.12-29.3 11.902l-.002.002c-3.792 4.336-5.586 8.752-6.018 13.012-.43 4.241.5 8.223 1.99 11.698 2.589 6.04 6.935 10.714 9.198 12.887.332.319.414.818.19 1.221-1.182 2.134-3.14 5.644-4.104 7.223-.113.186-.637 1.104.035 1.993.292.386.673.544.906.61.24.07.464.082.625.082.584 0 1.339-.192 2.044-.404 1.511-.454 3.632-1.274 5.8-2.169 4.032-1.663 8.417-3.663 9.85-4.322a.996.996 0 01.402-.09 71.855 71.855 0 007.58-.501c.532-.065.906-.545.888-1.081-.01-.268-.011-.533-.007-.796.012-.65-.548-1.187-1.194-1.107-2.315.285-4.846.455-7.612.489-.33.004-.684.072-1.025.229-.995.46-5.724 2.632-10.025 4.406-.576.238-1.14.467-1.684.682-.86.341-1.644-.58-1.191-1.389.77-1.374 1.48-2.66 1.9-3.42a2.526 2.526 0 00-.527-3.1c-1.703-1.536-6.585-6.31-9.29-12.624-1.346-3.139-2.13-6.603-1.764-10.214.364-3.593 1.876-7.435 5.29-11.34z\",\n fill: \"#BDBDBD\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 49.5,\n cy: 49.5,\n r: 3.5,\n fill: \"#BDBDBD\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 61.5,\n cy: 49.5,\n r: 3.5,\n fill: \"#BDBDBD\"\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 73.5,\n cy: 49.5,\n r: 3.5,\n fill: \"#BDBDBD\"\n })), _circle4 || (_circle4 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 80,\n cy: 71,\n r: 11.5,\n stroke: \"#BDBDBD\",\n strokeWidth: 3\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M72 63l16 16\",\n stroke: \"#BDBDBD\",\n strokeWidth: 3,\n strokeLinecap: \"round\"\n })));\n}\nexport default SvgCloseComment;","import { FC } from 'react';\nimport cls from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport CloseComment from './assets/close-comment.svg';\n\nimport './style.scss';\n\nexport const CommentNoPermission: FC = () => {\n const { t } = useTranslation();\n\n return (\n
\n

{t('comment')}

\n
\n
\n \n
\n

{t('postPrivacy_allowComments_offStatus_other')}

\n
\n
\n );\n};\n","import { useMemo, type FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { useNumFormatter } from '~/utils/format';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { CommentItem } from '@article/body/comment/comment-item';\nimport { CommentsSeeMore } from '@article/body/comment/comments-see-more';\nimport { $CurrentArticleComments } from '@article/shared/atoms/current-article-comments';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { ArticleDetailUtil, ECommentPermission } from 'shared/models';\nimport { CommentNoPermission } from '@article/body/comment/comment-no-permission';\n\nimport './style.scss';\n\nexport const ArticleCommentsSection: FC = () => {\n const { t } = useTranslation();\n const formatNum = useNumFormatter();\n const article = useAtomValue($CurrentArticle);\n const { items } = useAtomValue($CurrentArticleComments);\n const currentArticleTranslated = useAtomValue($CurrentArticleTranslated);\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(article);\n\n const ref = useViewTracking({\n onView: () => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.comment,\n });\n },\n });\n\n if (!articleAvailable) {\n return null;\n }\n\n if (currentArticleTranslated) {\n return null;\n }\n\n const { commentCount, commentPermission } = article;\n\n if (!commentCount) {\n return null;\n }\n\n if (commentPermission === ECommentPermission.Disable) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n

\n {t('comment_count_plural', { num: commentCount }).replace('%d', formatNum(commentCount))}\n

\n \n {items.map((comment) => (\n \n ))}\n \n \n
\n );\n};\n","import { FC, useCallback } from 'react';\nimport cls from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { useNumFormatter } from '~/utils/format';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '../../atoms/current-article';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport Bookmark from 'icon/bookmark.svg';\nimport Heart from 'icon/heart.svg';\nimport EllipsisBubble from 'icon/ellipsis_bubble.svg';\n\nimport './style.scss';\n\nconst CURRENT_PAGE_MODULE = ModuleType.main_content;\n\nexport const ArticleInfoSection: FC = () => {\n const { t } = useTranslation();\n const formatNum = useNumFormatter();\n const { favoriteCount, diggCount, commentCount } = useAtomValue($CurrentArticleAsAvailable);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const savedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: CURRENT_PAGE_MODULE,\n current_position: ClickPosition.main_favorite_icon,\n });\n }, []),\n });\n\n const handleSavedClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_favorite_icon);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_favorite_icon);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_favorite_icon,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const diggRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_like_icon,\n });\n }, []),\n });\n\n const handleDiggClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_like_icon);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_like_icon);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_like_icon,\n }),\n },\n [activeToCurrentArticle],\n );\n\n const commentedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_comment_icon,\n });\n }, []),\n });\n\n const handleCommentedClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_comment_icon);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_comment_icon);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_comment_icon,\n }),\n },\n [activeToCurrentArticle],\n );\n\n return (\n
\n
\n
\n \n {t('saved_text').replace('%d', formatNum(favoriteCount))}\n
\n\n
\n \n {Boolean(diggCount) && {formatNum(diggCount)}}\n
\n\n
\n \n {Boolean(commentCount) && {formatNum(commentCount)}}\n
\n
\n
\n );\n};\n","import { FC, RefObject, useCallback, useEffect } from 'react';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { Article } from '@sharee/article-transcode';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '~/routes/$user_link_name_.$article_id/shared/atoms/current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { useNavigate, useSearchParams } from '@remix-run/react';\nimport { EArticleClass } from 'shared/models';\nimport { filterXSS } from '@lemon8/web-app-shared/util';\n\nimport './style.scss';\n\ninterface IArticleContentProps {\n ref?: RefObject>;\n}\n\nexport const ArticleContent: FC = (props) => {\n const { ref } = props;\n const article = useAtomValue($CurrentArticleAsAvailable);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const navigate = useNavigate();\n const { title, content, groupId, articleClass, articleRegion } = article;\n\n const { isMobile, isBot, isInApp } = useAtomValue($UserAgent);\n const isRealUser = !isBot && isMobile && !isInApp;\n const [search] = useSearchParams();\n\n const handleAnchorClick = (\n position: ClickPosition,\n id: string,\n anchorType: string,\n customParams: Record,\n ) => {\n event?.preventDefault();\n let path = '';\n switch (anchorType) {\n case 'poiAnchor':\n case 'poiInContent':\n const { poiId = '' } = customParams;\n path = `/poi/${poiId}`;\n break;\n case 'hashtagInContent':\n const { hashtagId = '' } = customParams;\n path = `/topic/${hashtagId}`;\n break;\n case 'mentionedUser':\n const { mentionedId = '' } = customParams;\n path = `/user/${mentionedId}/share`;\n break;\n default:\n break;\n }\n window.Tea('wap_click', {\n current_position: position,\n is_cta: 1,\n page_click_id: id,\n });\n if (isRealUser) {\n activeToCurrentArticle(position, id);\n } else {\n navigate(`${path}?region=${articleRegion}`);\n }\n };\n\n const handleHashtagClick = useCallback(\n (pathName: string) => {\n const hashtagId = pathName.replace('/topic/', '');\n handleAnchorClick(ClickPosition.main_hashtag, hashtagId, 'hashtagInContent', { hashtagId });\n },\n [handleAnchorClick],\n );\n const handlePoiClick = useCallback(\n (pathName: string) => {\n const poiId = pathName.replace('/poi/', '');\n handleAnchorClick(ClickPosition.main_content_poi, poiId, 'poiInContent', { poiId });\n },\n [handleAnchorClick],\n );\n const handleMentionedClick = useCallback(\n (mentionedHref: string, mentionedId: string) => {\n handleAnchorClick(ClickPosition.main_content_mentioned_user, mentionedId, 'mentionedUser', { mentionedId });\n },\n [handleAnchorClick],\n );\n\n const handleLinkClick = useCallback(\n (data: any, cardType: string) => {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_inner_link,\n is_cta: 1,\n });\n // 点击跳转逻辑在 基类 中已经处理\n if (cardType === 'menuitem') {\n return;\n }\n // 控制文章内容中链接跳转,wap跳转,ug不跳转\n if (data && data.href) {\n window.open(data.href);\n }\n },\n [handleAnchorClick],\n );\n\n if (search.get('hide_article')) {\n return null;\n }\n\n return (\n
\n \n {article.articleClass === EArticleClass.ARTICLE ? content : filterXSS(content)}\n \n
\n );\n};\n","import { FC, useMemo } from 'react';\nimport { Link } from '@remix-run/react';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { ClickPosition } from '~/utils/click-position';\n\nimport './style.scss';\n\ninterface ILegacyHashtagItemProps {\n hashtag: {\n id: string;\n name: string;\n };\n}\n\nexport const LegacyHashtagItem: FC = (props) => {\n const { hashtag } = props;\n const buildSemanticUrl = useSemanticUrlBuilder();\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const to = useMemo(() => buildSemanticUrl(`/topic/${hashtag.id}`), []);\n\n const handleHashtagClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_hashtag,\n page_click_id: hashtag.id,\n }),\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_hashtag, hashtag.id);\n },\n },\n [activeToCurrentArticle],\n );\n\n return (\n \n #{hashtag.name}\n \n );\n};\n","import { atom } from 'jotai';\n\nexport const $CurrentArticleFold = atom(true);\n\nexport const $CurrentArticleHeightComputed = atom(false);\n","import { FC, useEffect, useMemo, useRef } from 'react';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { $CurrentArticleAsAvailable } from '~/routes/$user_link_name_.$article_id/shared/atoms/current-article';\nimport { useAtomValue } from 'jotai';\nimport {\n $CurrentArticleFold,\n $CurrentArticleHeightComputed,\n} from '~/routes/$user_link_name_.$article_id/shared/atoms/current-article-fold';\nimport { useScopedAtom } from '@lemon8/web-app-shared/ssr';\n\nimport './style.scss';\n\nexport const PartialArticleContent: FC = () => {\n const [folded, setFolded] = useScopedAtom($CurrentArticleFold);\n const [computed, setComputed] = useScopedAtom($CurrentArticleHeightComputed);\n const partialArticleRef = useRef(null);\n\n const article = useAtomValue($CurrentArticleAsAvailable);\n\n const { groupId, shortContent = '' } = article;\n\n const currentArticleTranslated = useAtomValue($CurrentArticleTranslated);\n\n const formattedShortContent = useMemo(() => {\n return shortContent.replace(/&(lt|gt|nbsp|amp|quot);/gi, '').replace(/\\s+/g, ' ');\n }, [shortContent, currentArticleTranslated]);\n\n useEffect(() => {\n if (partialArticleRef.current) {\n const { lineHeight: lineHeightInStr } = window.getComputedStyle(partialArticleRef.current);\n const { scrollHeight } = partialArticleRef.current;\n const lineHeight = parseFloat(lineHeightInStr);\n const lineCount = Math.round(scrollHeight / lineHeight);\n if (lineCount <= 3) {\n setFolded(false);\n }\n setComputed(true);\n }\n }, [groupId]);\n\n return (\n \n {formattedShortContent}\n \n );\n};\n","import { FC, useCallback, useMemo } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Link } from '@remix-run/react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { kepQueryFormat } from 'shared/utils/format/kep-formatter';\n\nimport './style.scss';\n\nexport const ArticleSarSection: FC = () => {\n const { t } = useTranslation();\n const { relatedQuery = '', articleRegion } = useAtomValue($CurrentArticleAsAvailable);\n const articleTranslated = useAtomValue($CurrentArticleTranslated);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const kepUrl = useMemo(() => `/discover/${kepQueryFormat(relatedQuery)}?region=${articleRegion}`, [relatedQuery]);\n\n const sarObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_position: ClickPosition.main_sar,\n });\n }, []),\n });\n\n const handleSarClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_sar);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_sar,\n page_click_id: kepQueryFormat(relatedQuery) || '',\n }),\n },\n [activeToCurrentArticle],\n );\n\n if (!relatedQuery || articleTranslated) {\n return null;\n }\n\n return (\n
\n \n
\n
\n
{t('search_sar_query')} ·
\n
{relatedQuery}
\n
\n
\n \n
\n );\n};\n","import { FC, useCallback } from 'react';\nimport { ArticleContent } from '@article/body/main/article-content';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useTranslation } from 'react-i18next';\nimport { useTimeAgoFormatter } from '~/utils/format';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { Link } from '@remix-run/react';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { LegacyHashtagItem } from '@article/shared/components/legacy-hashtag-item';\nimport ChevronDownFill from 'icon/chevron_down_fill.svg';\nimport { $CurrentArticleFold, $CurrentArticleHeightComputed } from '@article/shared/atoms/current-article-fold';\nimport cls from 'classnames';\nimport { PartialArticleContent } from '../partial-article-content/index';\nimport { $SimpleCTAModalShow } from '~/models/portal/simple-cta-modal';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { ArticleContentSkeleton } from '~/skeleton/article/component';\nimport { ArticleSarSection } from '../article-sar/index';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\nimport './poi.scss';\n\nconst ArticleEditTime: FC = () => {\n const { t } = useTranslation();\n const formatTimeAgo = useTimeAgoFormatter();\n const { publishTime, modifyTime } = useAtomValue($CurrentArticleAsAvailable);\n\n const timeAgo = formatTimeAgo(modifyTime || publishTime);\n // add description for re-edit;\n const des = (Boolean(modifyTime) && t('article_bottom_time')) || '';\n // add space for slash-formatted-time and re-edited article\n const sep = timeAgo.includes('/') && des ? ' ' : '';\n\n return (\n
\n
{`${timeAgo}${sep}${des}`}
\n
\n );\n};\n\nconst ArticlePOI: FC = () => {\n const { locationInfo, articleRegion } = useAtomValue($CurrentArticleAsAvailable);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const poiObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_position: ClickPosition.main_poi,\n });\n }, []),\n });\n\n const handlePoiClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_poi);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_poi,\n page_click_id: locationInfo?.poiId || '',\n }),\n },\n [activeToCurrentArticle],\n );\n\n if (!locationInfo) {\n return null;\n }\n\n const { poiId, poiName } = locationInfo;\n\n return (\n \n
\n
{poiName}
\n \n );\n};\n\nconst LegacyForumList: FC = () => {\n const { forumList } = useAtomValue($CurrentArticleAsAvailable);\n\n if (!forumList || !forumList.length) {\n return null;\n }\n\n return (\n
\n {forumList.map((f) => (\n \n ))}\n
\n );\n};\n\nconst ArticleReadMoreBanner: FC = () => {\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const setSimpleCTAModel = useSetAtom($SimpleCTAModalShow);\n const { t } = useTranslation();\n const computed = useScopedAtomValue($CurrentArticleHeightComputed);\n const folded = useScopedAtomValue($CurrentArticleFold);\n\n const readMoreBtnRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_position: ClickPosition.main_content_read_more,\n });\n }, []),\n });\n\n const handleClickModalConfirm = useReflowClick(\n {\n reflowBehavior: () => activeToCurrentArticle(ClickPosition.main_content_read_more_modal),\n defaultBehavior: () => activeToCurrentArticle(ClickPosition.main_content_read_more_modal),\n },\n [activeToCurrentArticle],\n );\n const handleReadMoreClick = useCallback(() => {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_content_read_more,\n });\n setSimpleCTAModel({\n currentPosition: ClickPosition.main_content_read_more_modal,\n body: t('seo_nextPic_modal_desc'),\n handleClickConfirm: handleClickModalConfirm,\n });\n }, [handleClickModalConfirm]);\n\n return (\n \n
\n
{t('read_more')}
\n
\n \n
\n
\n
\n );\n};\n\nconst PartialArticleLoading: FC = () => {\n const computed = useScopedAtomValue($CurrentArticleHeightComputed);\n const folded = useScopedAtomValue($CurrentArticleFold);\n return (\n \n \n \n );\n};\n\nexport const WapArticleSection: FC = () => {\n const { title } = useAtomValue($CurrentArticleAsAvailable);\n const translated = useAtomValue($CurrentArticleTranslated);\n const isMobileUser = useAtomValue($IsMobileUser);\n const folded = useScopedAtomValue($CurrentArticleFold);\n\n return (\n
\n {title &&

{title}

}\n {isMobileUser ? (\n <>\n
\n \n \n \n
\n \n \n \n \n ) : (\n <>\n \n {!translated && }\n {!translated && }\n \n )}\n \n \n
\n );\n};\n","import { Button, ButtonSize } from '@lemon8/design';\nimport { Link } from '@remix-run/react';\nimport { FC, useCallback, useMemo } from 'react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport { useTranslation } from 'react-i18next';\nimport { UserAuthIcon } from '~/components/user-auth-icon';\nimport { Avatar } from '~/components/avatar';\nimport { ModuleType } from '~/utils/module-type';\nimport { ClickPosition } from '~/utils/click-position';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\n\nimport './style.scss';\n\nexport const GalleryAuthorSection: FC = () => {\n const buildSemanticUrl = useSemanticUrlBuilder();\n const { t } = useTranslation();\n const article = useAtomValue($CurrentArticleAsAvailable);\n const { author } = article;\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const mainAuthorRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author,\n });\n }, []),\n });\n\n const followBtnObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author_follow_btn,\n });\n }, []),\n });\n\n const authorHref = useMemo(() => {\n const { linkName } = author;\n return buildSemanticUrl(`/${linkName}`, article.articleRegion);\n }, [author]);\n\n const handleAuthorInfoClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_author);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_author,\n page_click_id: author.userId,\n }),\n },\n [activeToCurrentArticle, author],\n );\n\n const handleFollowClick = useReflowClick(\n {\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_author_follow_btn);\n },\n defaultBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_author_follow_btn);\n },\n clickEvent: () => ({\n current_position: ClickPosition.main_author_follow_btn,\n page_click_id: author.userId,\n }),\n },\n [activeToCurrentArticle, author],\n );\n\n return (\n
\n
\n \n \n \n \n {author.nickName}\n \n \n
\n
\n
\n
\n );\n};\n","import { atom } from 'jotai';\nimport { IVideoArticleDetail } from 'shared/models';\n\nexport const $CurrentVideoArticle = atom({} as IVideoArticleDetail);\n","import { atom } from 'jotai';\n\nexport const $EndRecommendShow = atom(false);\n","import { atom } from 'jotai';\n\ntype ReplayVideo = {\n handler: () => void;\n};\n\nexport const $ReplayVideo = atom({\n handler: () => void 0,\n});\n","import { useScopedAtomValue, useSetScopedAtom } from '@lemon8/web-app-shared/ssr';\nimport { FC, SyntheticEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport SimpleVideo, { SimpleVideoForwardProps, VideoStatus } from '~/components/simple-video/index';\nimport { $CurrentVideoArticle, $EndRecommendShow, $ReplayVideo } from '@article/body/main/article-video/atoms';\nimport PlayFill from 'icon/play_fill.svg';\nimport SpeakerMutedFillIcon from 'icon/speaker_x_mark_fill.svg';\nimport SpeakerWaveFillIcon from 'icon/speaker_wave_2_fill.svg';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $SimpleCTAModalShow } from '~/models/portal/simple-cta-modal';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { setLocalStorageStatus } from 'shared/utils/local-storage-util';\n\nimport './style.scss';\n\nexport const VideoPlayer: FC = () => {\n const { t } = useTranslation();\n const isMobileUser = useAtomValue($IsMobileUser);\n const player = useRef(null);\n const { video, largeImage } = useScopedAtomValue($CurrentVideoArticle);\n const setEndRecommendShow = useSetScopedAtom($EndRecommendShow);\n const isFirstPlay = useRef(true);\n const setSimpleCTAModal = useSetAtom($SimpleCTAModalShow);\n const [showPlay, setShowPlay] = useState(false);\n const [localStorageKey, setLocalStorageKey] = useState('');\n const [muted, setMuted] = useState(true);\n const { isBot } = useAtomValue($UserAgent);\n const keyPrefix = 'seo_video_first_visit';\n const videoClicked = useRef(false);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const setVideoReplayHandler = useSetScopedAtom($ReplayVideo);\n\n useEffect(() => {\n const onVisibilitychange = () => {\n if (document.visibilityState === 'hidden') {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_pause_auto,\n });\n player.current?.pause();\n setShowPlay(true);\n } else {\n if (player.current?.status === VideoStatus.PLAYING && showPlay) {\n setShowPlay(false);\n }\n }\n };\n\n document.addEventListener('visibilitychange', onVisibilitychange);\n\n return () => {\n document.removeEventListener('visibilitychange', onVisibilitychange);\n };\n }, []);\n\n useEffect(() => {\n if (!player.current) {\n return;\n }\n\n const handlePlayEvent = () => {\n if (isFirstPlay.current) {\n console.log(isFirstPlay.current, 'isFirstPlay');\n window.Tea('wap_video_play');\n }\n isFirstPlay.current = false;\n setShowPlay(false);\n setEndRecommendShow(false);\n };\n\n const handlePlayingEvent = () => {\n setShowPlay(false);\n setEndRecommendShow(false);\n };\n\n const handlePauseEvent = () => {\n setShowPlay(true);\n };\n\n const handleEndEvent = () => {\n setEndRecommendShow(true);\n };\n\n const playerInst = player.current;\n\n playerInst.addEventListener('play', handlePlayEvent);\n playerInst.addEventListener('playing', handlePlayingEvent);\n playerInst.addEventListener('pause', handlePauseEvent);\n playerInst.addEventListener('ended', handleEndEvent);\n\n return () => {\n playerInst.removeEventListener('play', handlePlayEvent);\n playerInst.removeEventListener('playing', handlePlayingEvent);\n playerInst.removeEventListener('pause', handlePauseEvent);\n playerInst.removeEventListener('ended', handleEndEvent);\n };\n }, []);\n\n useEffect(() => {\n const dateToday = ((): string => {\n const today = new Date();\n const date = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;\n return date;\n })();\n const key = `${keyPrefix}_${dateToday}`;\n // first visit or clicks open last time, use manual play mode\n const lastVideoVisitState = window.localStorage.getItem(key) || '0';\n // '0' means first landing, '1' means user clicks cancel, '2' means click open last time\n const useManualPlay = isMobileUser && (lastVideoVisitState === '0' || lastVideoVisitState === '2');\n if (useManualPlay) {\n setShowPlay(useManualPlay);\n } else {\n player.current?.play();\n }\n setLocalStorageKey(key);\n }, []);\n\n const handleVideoClick = useCallback(() => {\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_pause_manual,\n });\n player.current?.pause();\n\n if (!videoClicked.current && isMobileUser) {\n setSimpleCTAModal({\n body: t('seo_stopVideo_modal_desc'),\n currentPosition: ClickPosition.main_video_pause_manual_modal,\n handleClickConfirm: () => {\n activeToCurrentArticle(ClickPosition.main_video_pause_manual_modal);\n },\n });\n\n videoClicked.current = true;\n }\n }, []);\n\n const handlePlayClick = useCallback(\n (event: SyntheticEvent) => {\n event.stopPropagation();\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_play,\n });\n\n const lastVideoVisitState = window.localStorage.getItem(localStorageKey) || '0';\n const useManualPlay = isMobileUser && (lastVideoVisitState === '0' || lastVideoVisitState === '2');\n\n if (useManualPlay) {\n setSimpleCTAModal({\n body: t('seo_stopVideo_modal_desc'),\n currentPosition: ClickPosition.main_video_play_modal,\n handleClickConfirm: () => {\n setLocalStorageStatus(keyPrefix, localStorageKey, '2');\n activeToCurrentArticle(ClickPosition.main_video_play_modal);\n },\n handleClickCancel() {\n setLocalStorageStatus(keyPrefix, localStorageKey, '1');\n player.current?.play();\n },\n });\n } else {\n player.current?.play();\n }\n },\n [localStorageKey, activeToCurrentArticle],\n );\n\n const handleVolumeClicked = useCallback(() => {\n if (player.current) {\n if (player.current.muted) {\n player.current.unmute();\n setMuted(false);\n } else {\n player.current.mute();\n setMuted(true);\n }\n }\n }, []);\n\n const videoReplayHandler = useCallback(() => {\n if (player.current) {\n player.current.seek(0);\n player.current.play();\n }\n }, [player]);\n\n useEffect(() => {\n setVideoReplayHandler({ handler: videoReplayHandler });\n }, [setVideoReplayHandler, videoReplayHandler]);\n\n return (\n <>\n \n\n {showPlay && (\n
\n \n
\n )}\n\n
\n {muted ? : }\n
\n \n );\n};\n","import { FC, PropsWithChildren } from 'react';\n\nimport './style.scss';\n\nexport const VideoWrapper: FC = (props) => {\n const { children } = props;\n\n return
{children}
;\n};\n","import { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { FC, useCallback } from 'react';\nimport { $CurrentVideoArticle } from '@article/body/main/article-video/atoms';\nimport { LegacyHashtagItem } from '@article/shared/components/legacy-hashtag-item';\nimport { useAtomValue } from 'jotai';\nimport { useTranslation } from 'react-i18next';\nimport { useTimeAgoFormatter } from '~/utils/format';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { Link } from '@remix-run/react';\nimport { useViewTracking } from '~/utils/use-view-tracking';\n\nimport './style.scss';\n\ninterface IVideoContentFooterProps {\n folded: boolean;\n}\n\nexport const VideoContentFooter: FC = (props) => {\n const { t } = useTranslation();\n const articleTranslated = useAtomValue($CurrentArticleTranslated);\n const { folded } = props;\n const formatTimeAgo = useTimeAgoFormatter();\n const { forumList, locationInfo, modifyTime, publishTime, articleRegion } = useScopedAtomValue($CurrentVideoArticle);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const timeAgo = formatTimeAgo(modifyTime || publishTime);\n // add description for re-edit;\n const des = (Boolean(modifyTime) && t('article_bottom_time')) || '';\n // add space for slash-formatted-time and re-edited article\n const sep = timeAgo.includes('/') && des ? ' ' : '';\n const formattedTime = `${timeAgo}${sep}${des}`;\n\n const poiObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_position: ClickPosition.main_poi,\n });\n }, []),\n });\n\n const handlePoiClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_poi,\n page_click_id: locationInfo?.poiId || '',\n }),\n reflowBehavior: () => {\n activeToCurrentArticle(ClickPosition.main_poi);\n },\n },\n [activeToCurrentArticle],\n );\n\n return (\n
\n {forumList && forumList.length > 0 && !articleTranslated && (\n
\n {forumList.map((forum) => (\n \n ))}\n
\n )}\n {locationInfo && !folded && !articleTranslated && (\n \n
\n
{locationInfo.poiName}
\n \n )}\n {!folded && (\n
\n
{formattedTime}
\n
{t('profile_fold')}
\n
\n )}\n
\n );\n};\n","import { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentVideoArticle } from '@article/body/main/article-video/atoms';\nimport { FC, useCallback } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { Link } from '@remix-run/react';\nimport { Avatar } from '~/components/avatar/index';\nimport { useSemanticUrlBuilder } from '~/utils/use-semantic-url-builder';\nimport useReflowClick from '~/utils/use-reflow-click';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { ClickPosition } from '~/utils/click-position';\nimport { UserAuthIcon } from '~/components/user-auth-icon';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { Button, ButtonSize } from '@lemon8/design';\nimport { useTranslation } from 'react-i18next';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\n\nimport './style.scss';\n\nexport const VideoAuthor: FC = () => {\n const { author } = useScopedAtomValue($CurrentVideoArticle);\n const { t } = useTranslation();\n\n const article = useAtomValue($CurrentArticleAsAvailable);\n\n const activeToCurrentArticle = useActiveToCurrentArticle();\n\n const buildSemanticUrl = useSemanticUrlBuilder();\n\n const userHref = buildSemanticUrl(`/${author.linkName}`, article.articleRegion);\n\n const videoAuthorObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author,\n });\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.main_content,\n current_position: ClickPosition.main_author_follow_btn,\n });\n }, []),\n });\n\n const handleAuthorInfoClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_author,\n page_click_id: author.userId,\n }),\n reflowBehavior: () => activeToCurrentArticle(ClickPosition.main_author, author.userId),\n },\n [],\n );\n\n const handleButtonClick = useReflowClick(\n {\n clickEvent: () => ({\n current_position: ClickPosition.main_author_follow_btn,\n page_click_id: author.userId,\n }),\n reflowBehavior: () => activeToCurrentArticle(ClickPosition.main_author_follow_btn, author.userId),\n defaultBehavior: () => activeToCurrentArticle(ClickPosition.main_author_follow_btn, author.userId),\n },\n [],\n );\n\n return (\n
\n \n \n \n
\n \n {author.nickName || '-'}\n \n \n
\n
\n );\n};\n","import { FC, SyntheticEvent, useEffect, useMemo, useRef, useState } from 'react';\nimport { ArticleContent } from '@article/body/main/article-content';\nimport cls from 'classnames';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { $CurrentVideoArticle } from '@article/body/main/article-video/atoms';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { $SimpleCTAModalShow } from '~/models/portal/simple-cta-modal';\nimport { useActiveToCurrentArticle } from '@article/shared/utils/use-active-to-current-article';\nimport { VideoContentFooter } from './video-content-footer/index';\nimport { VideoAuthor } from '@article/body/main/article-video/components/video-content/video-author';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\n\nimport './style.scss';\n\nexport const LONG_READ_MORE_COUNTRY = ['id'];\n\nexport const VideoContent: FC = () => {\n const article = useScopedAtomValue($CurrentVideoArticle);\n const { region } = useAtomValue($Locale);\n const { t } = useTranslation();\n const [folded, setFolded] = useState(true);\n const [maskHeight, setMaskHeight] = useState('0');\n const [articleFirstHeight, setArticleFirstHeight] = useState(0);\n const contentRef = useRef(null);\n const contentExpended = useRef(false);\n const setSimpleCTAModal = useSetAtom($SimpleCTAModalShow);\n const activeToCurrentArticle = useActiveToCurrentArticle();\n const isMobileUser = useAtomValue($IsMobileUser);\n\n // 判断是否是长read_more翻译国家\n const isLongReadMore = LONG_READ_MORE_COUNTRY.includes(region);\n\n const articleTitle = useMemo(() => {\n return article.title;\n }, [article, region]);\n\n useEffect(() => {\n if (!folded) {\n // 显示蒙板\n setMaskHeight('calc(100% + 1px)');\n }\n requestAnimationFrame(() => {\n if (contentRef.current) {\n contentRef.current.style.overflow = folded ? 'hidden' : 'scroll';\n if (folded) {\n setMaskHeight('0');\n }\n }\n });\n }, [folded]);\n\n useEffect(() => {\n if (contentRef.current) {\n contentRef.current.style.overflow = 'hidden';\n }\n const $article = contentRef.current?.querySelector('article');\n if ($article) {\n const _el = $article as HTMLDivElement;\n // 获取文字高度\n const $title = document.querySelector('h1.title');\n const p = _el.querySelector('p');\n\n if ($title) {\n // 文本行数\n const {\n lineHeight: titleLineHeight,\n fontSize: titleFontSize,\n height: titleHeightStr,\n } = window.getComputedStyle($title);\n\n // 获取行高\n const lineHeight =\n titleLineHeight === 'normal' ? parseFloat(titleFontSize) * 1.14 : parseFloat(titleLineHeight);\n\n // 获取元素高度\n const titleHeight = parseFloat(titleHeightStr);\n\n // 计算行数\n const lines = Math.ceil(titleHeight / lineHeight);\n\n if (lines >= 2) {\n setArticleFirstHeight(0);\n return;\n }\n }\n\n if (p) {\n const { lineHeight } = window.getComputedStyle(p);\n const _fontSize = parseFloat(lineHeight.replace('px', ''));\n\n if (!Number.isNaN(_fontSize)) {\n setArticleFirstHeight(Math.max(_fontSize, 0));\n }\n }\n }\n }, [contentRef, folded]);\n\n useEffect(() => {\n const $content = contentRef.current;\n if (!$content) {\n return;\n }\n const callback = () => {\n setFolded(true);\n };\n\n $content.addEventListener('click', callback);\n\n return () => {\n $content.removeEventListener('click', callback);\n };\n }, [contentRef, setFolded]);\n\n const contentStyle = folded\n ? {\n height: `${articleFirstHeight}px`,\n }\n : {};\n\n return (\n
\n {\n setFolded(true);\n if (contentRef.current) {\n contentRef.current.scrollTo(0, 0);\n }\n }}\n />\n
\n {\n if (!folded) {\n setFolded(true);\n if (contentRef.current) {\n contentRef.current.scrollTo(0, 0);\n }\n }\n }}\n >\n {folded && (\n {\n e.stopPropagation();\n setFolded(false);\n\n window.Tea('wap_click', {\n current_position: ClickPosition.main_video_see_more,\n });\n\n if (!contentExpended.current && isMobileUser) {\n setSimpleCTAModal({\n body: t('seo_stopVideo_modal_desc'),\n currentPosition: ClickPosition.main_video_see_more_modal,\n handleClickConfirm: () => activeToCurrentArticle(ClickPosition.main_video_see_more_modal),\n });\n contentExpended.current = true;\n }\n }}\n >\n {t('read_more')}\n
\n )}\n
\n \n

{articleTitle}

\n
\n
\n \n \n
\n
\n
\n );\n};\n","import { FC } from 'react';\nimport { WarningLabel } from '~/components/warning-label';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\n\nexport const WarningLabelSection: FC = () => {\n const { illegalInfo } = useAtomValue($CurrentArticleAsAvailable);\n\n return ;\n};\n","import { atom } from 'jotai';\nimport { $ArticleRelatedPost } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\n\nexport const $CurrentArticleRelatedPost = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleRelatedPost(currentArticleId));\n});\n","import { useScopedAtomValue } from '@lemon8/web-app-shared/ssr';\nimport { FC } from 'react';\nimport { VideoEndRecommend } from '~/components/video-end-recommend';\nimport { $CurrentVideoArticle, $EndRecommendShow, $ReplayVideo } from '@article/body/main/article-video/atoms';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleRelatedPost } from '@article/shared/atoms/current-article-related-post';\nimport { loadable } from 'jotai/utils';\n\nexport const VideoEndRecommendSection: FC = () => {\n const article = useScopedAtomValue($CurrentVideoArticle);\n const show = useScopedAtomValue($EndRecommendShow);\n const relatedPost = useAtomValue(loadable($CurrentArticleRelatedPost));\n const { handler } = useScopedAtomValue($ReplayVideo);\n\n return (\n handler()}\n />\n );\n};\n","import { $ABTest, $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { Atom, atom } from 'jotai';\nimport _get from 'lodash/get';\n\n/**\n * 0: control group\n * 1: Video article style align with Gallery\n */\nexport const $VideoCTAOpt: Atom = atom((get) => {\n const { parameters } = get($ABTest);\n if (__BUILD_TYPE__ === 'local_dev') {\n return 1;\n }\n return _get(parameters, ['seo_web', 'lemon8.video_cta_opt'], 0);\n});\n\nexport const $HitVideoCTAOpt: Atom = atom((get) => {\n const config = get($VideoCTAOpt);\n const { isBot } = get($UserAgent);\n return !isBot && config === 1;\n});\n","import { FC, useEffect } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { IVideoArticleDetail } from 'shared/models';\nimport { ScopedProvider } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentVideoArticle, $EndRecommendShow, $ReplayVideo } from './atoms';\nimport { VideoPlayer } from './components/video-player';\nimport { VideoWrapper } from './components/video-wrapper';\nimport { VideoContent } from './components/video-content';\nimport { WarningLabelSection } from '@article/shared/components/warning-label-section';\nimport { VideoEndRecommendSection } from '@article/body/main/article-video/components/end-recommend';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { sendNotification } from '~/utils/pwa/notification';\nimport { ClickPosition } from '~/utils/click-position';\nimport { generateOneLink } from '~/utils/active';\nimport { $HitVideoCTAOpt } from '~/utils/libra/video-cta-opt';\n\nconst ArticleVideoSectionImpl: FC = () => {\n const hitVideoCTAOpt = useAtomValue($HitVideoCTAOpt);\n return (\n
\n \n \n {!hitVideoCTAOpt && }\n \n \n \n
\n );\n};\n\nexport const ArticleVideoSection: FC = () => {\n const article = useAtomValue($CurrentArticle) as IVideoArticleDetail;\n const { title, shortContent, largeImage, groupId } = article;\n const { isBot } = useAtomValue($UserAgent);\n\n useEffect(() => {\n /** 含有is_notification'说明本次发送过了 */\n if (!sessionStorage.getItem('is_notification') && !isBot) {\n const imgUrl = largeImage && largeImage.url;\n const oneLink = generateOneLink({\n pid: 'website_seo_notification',\n schemaOption: { pageType: 'video', groupId },\n ampExtra: {\n enter_position: ClickPosition.pwa_notification_banner,\n enter_page_id: groupId,\n enter_page_type: 'video',\n },\n });\n\n sendNotification(title, {\n body: shortContent,\n icon: 'https://p16-va.lemon8cdn.com/tos-maliva-p-0000/5d8e5f313d1b470799f8450327ec6dee~tplv-tej9nj120t-scaling:120:0:q75.jpeg',\n requireInteraction: true,\n image: imgUrl,\n data: {\n time: new Date(Date.now()).toString(),\n url: oneLink,\n },\n });\n }\n }, []);\n\n return (\n \n \n \n );\n};\n","import { FC } from 'react';\nimport { Image } from '~/components/image';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { IRichArticleDetail } from 'shared/models';\nimport { useTranslation } from 'react-i18next';\n\nimport './style.scss';\n\nexport const LargeImageSection: FC = () => {\n const { t } = useTranslation();\n const { largeImage, title } = useAtomValue($CurrentArticle) as IRichArticleDetail;\n const { width, height, url } = largeImage;\n\n const alt = t('own_picture').replace('%s', title);\n\n return (\n
\n
\n {alt}\n
\n
\n );\n};\n","import { FC, useCallback, useMemo } from 'react';\nimport { ClickPosition } from '~/utils/click-position';\nimport { useTranslation } from 'react-i18next';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleAsAvailable } from '@article/shared/atoms/current-article';\nimport { Link } from '@remix-run/react';\nimport { $CurrentArticleTranslated } from '@article/shared/atoms/current-article-translated';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\n\nimport './style.scss';\n\nexport const OriginalPostBanner: FC = () => {\n const { t } = useTranslation();\n const currentArticleTranslated = useAtomValue($CurrentArticleTranslated);\n const { isBot } = useAtomValue($UserAgent);\n\n const {\n groupId,\n articleRegion,\n author: { linkName },\n } = useAtomValue($CurrentArticleAsAvailable);\n\n const originArticleHref = useMemo(() => `/${linkName}/${groupId}?region=${articleRegion}`, []);\n\n const handleBannerClick = useCallback(() => {\n window.Tea('wap_click', {\n current_position: ClickPosition.original_post_banner,\n is_cta: 1,\n });\n }, []);\n\n if (!currentArticleTranslated || isBot) {\n return null;\n }\n\n return (\n
\n

\n {t('seo_banner_desc_autoTranslated_eng')}\n \n {t('seo_banner_btn_view_originalPost')}\n \n

\n
\n );\n};\n","import { FC } from 'react';\nimport { useAtomValue, useStore } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleInfoSection } from '@article/shared/components/article-info-bar';\nimport {\n ArticleDetailUtil,\n EArticleClass,\n EArticleUnavailableReason,\n IGalleryArticleDetail,\n IVideoArticleDetail,\n} from 'shared/models';\nimport { WapArticleSection } from '@article/body/main/wap-article';\nimport { GalleryAuthorSection } from './gallery-author-section';\nimport { ArticleGallery } from '~/components/article-gallery';\nimport { ArticleVideoSection } from '@article/body/main/article-video';\nimport { LargeImageSection } from '@article/body/main/large-image';\nimport { OriginalPostBanner } from './original-post-banner/index';\nimport { ENotFoundType, NotFound } from '~/components/not-found';\nimport { $CurrentArticleRelatedPost } from '@article/shared/atoms/current-article-related-post';\nimport { ScopedProvider } from '@lemon8/web-app-shared/ssr';\nimport { $CurrentArticleFold, $CurrentArticleHeightComputed } from '../../shared/atoms/current-article-fold';\nimport { $CurrentGalleryArticle } from '~/components/article-gallery/atoms';\nimport { $CurrentVideoArticle } from './article-video/atoms';\nimport { $HitVideoCTAOpt } from '~/utils/libra/video-cta-opt';\n\nexport const ArticleMainSections: FC = () => {\n const store = useStore();\n const currentArticle = useAtomValue($CurrentArticle);\n const isAvailable = ArticleDetailUtil.isArticleAvailable(currentArticle);\n const articleRelatedPost = store.get($CurrentArticleRelatedPost);\n\n if (!isAvailable) {\n const { unavailableReason } = currentArticle;\n return (\n \n );\n }\n\n const { articleClass } = currentArticle;\n\n if (articleClass === EArticleClass.GALLERY) {\n const article = useAtomValue($CurrentArticle) as IGalleryArticleDetail;\n return (\n <>\n \n \n \n \n \n \n \n \n );\n }\n\n if (articleClass === EArticleClass.VIDEO) {\n const article = useAtomValue($CurrentArticle) as IVideoArticleDetail;\n const hitVideoCTAOpt = useAtomValue($HitVideoCTAOpt);\n return hitVideoCTAOpt ? (\n \n \n \n \n \n \n \n ) : (\n <>\n \n \n \n \n );\n }\n\n return (\n <>\n \n \n \n \n \n \n );\n};\n","import { FC, useCallback } from 'react';\nimport { CampaignCarousel } from '~/components/campaign-carousel';\nimport { ClickPosition } from '~/utils/click-position';\nimport { ModuleType } from '~/utils/module-type';\nimport { $CampaignBanner } from 'shared/atoms/common/campaign-banner';\nimport { useAtomValue } from 'jotai';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil } from 'shared/models';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\n\nimport './style.scss';\n\nexport const ArticleCampaignSection: FC = () => {\n const campaigns = useAtomValue($CampaignBanner);\n const article = useAtomValue($CurrentArticle);\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(article);\n const { region } = useAtomValue($Locale);\n\n const campaignObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_cta_show', {\n current_page_module: ModuleType.activity_banner,\n current_position: ClickPosition.activity_banner,\n });\n }, []),\n });\n\n if (!campaigns.length || (articleAvailable && ArticleDetailUtil.isTranslatedArticleToShow(article, region))) {\n return null;\n }\n\n return (\n
\n \n
\n );\n};\n","import { atom } from 'jotai';\nimport { $ArticleRelatedHashtag } from 'shared/atoms';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\n\nexport const $CurrentArticleRelatedHashtag = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n return get($ArticleRelatedHashtag(currentArticleId));\n});\n","import { FC, useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SectionTitle from '~/components/section-title/index';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleRelatedHashtag } from '@article/shared/atoms/current-article-related-hashtag';\nimport _uniq from 'lodash/uniq';\nimport { $Locale, $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { TopicCard } from '~/components/topic-card';\nimport { SeeMore } from '~/components/see-more';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { ModuleType } from '~/utils/module-type';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { ScopedProvider } from '@lemon8/web-app-shared/ssr';\nimport { ArticleDetailUtil } from 'shared/models';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { ClickPositionPrefix } from '~/utils/click-position';\nimport { $CurrentModuleRank } from '~/models/current-module-rank';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\nimport { SeeMoreBanner } from '~/components/see-more-banner';\n\nimport './style.scss';\n\nconst queryLengthFilter = (region: string) => {\n if (region === 'jp') {\n return (str: string) => str.length <= 30;\n } else if (region === 'th') {\n return (str: string) => str.length <= 100;\n } else {\n return (str: string) => str.length <= 60;\n }\n};\n\nexport const ArticleRelatedTopicSection: FC = () => {\n const { t } = useTranslation();\n\n const { region } = useAtomValue($Locale);\n const { isBot } = useAtomValue($UserAgent);\n const isMobileUser = useAtomValue($IsMobileUser);\n const currentArticle = useAtomValue($CurrentArticle);\n const articleAvailable = ArticleDetailUtil.isArticleAvailable(currentArticle);\n const relatedQueryInfos = articleAvailable ? currentArticle.relatedQueryInfos : [];\n const { items, sugWords, gptExtendWords } = useAtomValue($CurrentArticleRelatedHashtag);\n const [pageIndex, setPageIndex] = useState(0);\n const PAGE_NUMBER = isBot ? Number.MAX_VALUE : 10;\n\n const words = useMemo(() => {\n const { longTailWords, highVolumeWords, relatedSEOWords } = gptExtendWords;\n\n const relatedQueries: string[] = relatedQueryInfos.slice(1).map((info) => info.word);\n\n const topicNameSet = new Set(items.map((item) => item.topicName));\n\n return _uniq([...relatedQueries, ...relatedSEOWords, ...longTailWords, ...highVolumeWords, ...sugWords])\n .filter((str) => !topicNameSet.has(str))\n .filter(queryLengthFilter(region));\n }, [gptExtendWords, relatedQueryInfos, items]);\n\n const topics = useMemo(() => [...items, ...words], [items, words]);\n\n const handleClickSeeMore = useCallback(() => {\n setPageIndex((p) => p + 1);\n }, []);\n\n const topicSectionObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.related_topic,\n });\n }, []),\n });\n\n const renderBottomText = (): JSX.Element | null => {\n if (topics.length > (pageIndex + 1) * PAGE_NUMBER) {\n if (isMobileUser) {\n return (\n
\n \n
\n );\n } else {\n return ;\n }\n } else {\n return null;\n }\n };\n\n if (\n topics.length === 0 ||\n (articleAvailable && ArticleDetailUtil.isTranslatedArticleToShow(currentArticle, region))\n ) {\n return null;\n }\n\n return (\n \n );\n};\n","import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport SectionTitle from '~/components/section-title/index';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleRelatedPost } from '@article/shared/atoms/current-article-related-post';\nimport { useViewTracking } from '~/utils/use-view-tracking';\nimport { SeeMore } from '~/components/see-more';\nimport { SeeMoreBanner } from '~/components/see-more-banner';\nimport { ArticleCard } from '~/components/article-card';\nimport { $ArticleRelatedPostLoadmore } from 'shared/atoms';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { $CurrentPageModule } from '~/models/current-page-module';\nimport { ModuleType } from '~/utils/module-type';\nimport { ScopedProvider, useRouteLoader } from '@lemon8/web-app-shared/ssr';\nimport { DivisibleStack } from '~/components/divisible-stack';\nimport { $CurrentPositionPrefix } from '~/models/current-position-prefix';\nimport { ClickPosition, ClickPositionPrefix } from '~/utils/click-position';\nimport { Masonry, MasonryRef } from '~/components/masonry';\nimport ArticleRecommendCard from '~/components/article-recommend-card';\nimport { $IsMobileUser } from '~/utils/is-mobile-user';\nimport cls from 'classnames';\n\nimport './style.scss';\n\nexport const ArticleRelatedPostSection: FC = () => {\n const { t } = useTranslation();\n\n const { groupId } = useAtomValue($CurrentArticle);\n\n const isMobileUser = useAtomValue($IsMobileUser);\n\n const relatedPosts = useAtomValue($CurrentArticleRelatedPost);\n\n const [bannerShow, setBannerShow] = useState(true);\n\n const sectionObservedRef = useViewTracking({\n onView: useCallback(() => {\n window.Tea('wap_module_show', {\n current_page_module: ModuleType.related_article,\n });\n }, []),\n });\n\n const loader = useRouteLoader(\n 'related-post-loadmore',\n {\n search_id: relatedPosts.searchId,\n offset: relatedPosts.cursor,\n },\n {\n atomFamilies: {\n $ArticleRelatedPostLoadmore,\n },\n },\n );\n\n const handleClickSeeMore = (): void => loader.load();\n\n const evenRelatedPosts = useMemo(() => {\n const filteredPosts = relatedPosts.items.filter((item) => item.groupId !== groupId);\n return filteredPosts.length % 2 === 0 ? filteredPosts : filteredPosts.slice(0, -1);\n }, [relatedPosts]);\n\n const masonryRef = useRef(null);\n\n useEffect(() => {\n if (loader.state === 'idle') {\n masonryRef.current?.postLayout(() => {\n // change banner show state after masonry completes layout\n setBannerShow(true);\n });\n } else {\n setBannerShow(false);\n }\n }, [loader.state]);\n\n if (relatedPosts.items.length === 0) {\n return null;\n }\n\n return (\n \n );\n};\n","import { $ABTest } from '@lemon8/web-app-shared/atom';\nimport { Atom, atom } from 'jotai';\nimport _get from 'lodash/get';\n\n/**\n * 0: control group\n * 1: move campaign poster down to bottom of page\n */\nexport const $CampaignPosterMoveDown: Atom = atom((get) => {\n const { parameters } = get($ABTest);\n if (__BUILD_TYPE__ === 'local_dev') {\n return 1;\n }\n return _get(parameters, ['seo_web', 'lemon8.campaign_poster_move'], 0);\n});\n\nexport const $HitCampaignPosterMoveDown: Atom = atom((get) => {\n const config = get($CampaignPosterMoveDown);\n return config === 1;\n});\n","import { FC, Suspense } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { ArticleCommentsSection } from './comment';\nimport { ArticleMainSections } from './main';\nimport { ArticleCampaignSection } from './campaign';\nimport { ArticleRelatedTopicSection } from './related-topic';\nimport { ArticleRelatedPostSection } from './related-post';\nimport { ArticleBodySkeleton, ArticleRecommendSkeleton } from '~/skeleton/article';\nimport { $HitCampaignPosterMoveDown } from '~/utils/libra/campaign-poster-remove';\n\nexport const ArticleBody: FC = () => {\n const hitCampaignPosterMoveDown = useAtomValue($HitCampaignPosterMoveDown);\n\n return (\n <>\n \n }>\n \n {!hitCampaignPosterMoveDown && }\n }>\n \n \n \n {hitCampaignPosterMoveDown && }\n \n \n );\n};\n","import { atom } from 'jotai';\nimport { $CurrentArticleId } from '@article/shared/atoms/current-article-id';\nimport { $ArticleDetail, $UserDetail } from 'shared/atoms';\nimport { ArticleDetailUtil, IUserDetail, UserDetailUtil } from 'shared/models';\n\nexport const $CurrentArticleAuthor = atom((get) => {\n const currentArticleId = get($CurrentArticleId);\n const article = get($ArticleDetail(currentArticleId));\n if (!ArticleDetailUtil.isArticleAvailable(article)) {\n return null;\n }\n\n const {\n author: { userId },\n } = article;\n\n return get($UserDetail(userId));\n});\n\nexport const $CurrentAvailableArticleAuthorOrNull = atom>(async (get) => {\n const author = await get($CurrentArticleAuthor);\n\n if (!author || !UserDetailUtil.isUserAvailable(author)) {\n return null;\n }\n\n return author;\n});\n","import { Person } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { $CurrentAvailableArticleAuthorOrNull } from '@article/shared/atoms/current-article-author';\nimport { UserDetailUtil } from 'shared/models';\nimport { Region } from '@lemon8/web-app-shared/i18n';\n\nexport const useArticleAuthorJsonld = (): Person | null => {\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n const author = useAtomValue($CurrentAvailableArticleAuthorOrNull);\n\n if (!article || !author) {\n return null;\n }\n\n return UserDetailUtil.JsonLD.getPersonJsonLD({ user: author, userRegion: article.articleRegion as Region });\n};\n","import { VideoObject } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticle } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil, EArticleClass, IVideoArticleDetail } from 'shared/models';\nimport { useArticleAuthorJsonld } from '@article/head/json-ld/use-author-jsonld';\nimport { useTranslation } from 'react-i18next';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\n\nexport const useVideoJsonLD = (): VideoObject | null => {\n const article = useAtomValue($CurrentArticle) as IVideoArticleDetail;\n const { t } = useTranslation();\n const { region } = useAtomValue($Locale);\n const authorJsonLd = useArticleAuthorJsonld();\n const abInfo = {};\n\n if (!ArticleDetailUtil.isArticleAvailable(article) || article.articleClass !== EArticleClass.VIDEO) {\n return null;\n }\n\n const videoObject = ArticleDetailUtil.JsonLD.getVideoObjectJsonLD({ article, region, t, abInfo });\n if (authorJsonLd) {\n videoObject.creator = authorJsonLd;\n }\n\n return videoObject;\n};\n","import { Comment } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentArticleComments } from '@article/shared/atoms/current-article-comments';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { CommentUtil } from 'shared/models';\nimport { Region } from '@lemon8/web-app-shared/i18n';\n\nexport const useCommentsJsonLD = (): Comment[] | null => {\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n const { items } = useAtomValue($CurrentArticleComments);\n\n if (!article) {\n return null;\n }\n\n return CommentUtil.JsonLd.getCommentsJsonLd({ comments: items, region: article.articleRegion as Region });\n};\n","import { atom } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { ArticleDetailUtil } from 'shared/models';\nimport { $Locale, $RootTraffic } from '@lemon8/web-app-shared/atom';\nimport { Region } from '@lemon8/web-app-shared/i18n';\n\nexport const $CurrentArticleCanonical = atom((get) => {\n const article = get($CurrentAvailableArticleOrNull);\n const { region } = get($Locale);\n const { enterHref: href } = get($RootTraffic);\n\n if (!article) {\n return null;\n }\n\n const url = new URL(href);\n\n const translatedArticleToShow = ArticleDetailUtil.isTranslatedArticleToShow(article, region);\n\n const canonicalRegion = translatedArticleToShow ? Region.us : article.articleRegion;\n\n return `${url.protocol}//${url.host}/${article.author.linkName}/${article.groupId}?region=${canonicalRegion}`;\n});\n","import { SocialMediaPosting } from 'schema-dts';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { $CurrentArticleCanonical } from '@article/shared/atoms/current-article-canonical';\nimport { useTranslation } from 'react-i18next';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ArticleDetailUtil } from 'shared/models';\n\nexport const useArticleBaseJsonLD = (): SocialMediaPosting | null => {\n const { t } = useTranslation();\n const { region } = useAtomValue($Locale);\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n const canonicalUrl = useAtomValue($CurrentArticleCanonical);\n const abInfo = {};\n\n if (!article || !canonicalUrl) {\n return null;\n }\n\n return ArticleDetailUtil.JsonLD.getSocialMediaJsonLD({\n article,\n region,\n t,\n abInfo,\n });\n};\n","/**\n * xml 中特殊字符过滤\n * 参考 https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap#sitemap-encoding-guidelines\n */\nexport const escapeSpecialXmlCharacter = (content: string): string =>\n content\n .replace(/&/g, '&')\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n .replace(/>/g, '>')\n .replace(/\n content\n .replace(/&/g, '&')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/>/g, '>')\n .replace(/</g, '<');\n\nexport const removeEscapedSpecialXmlCharacter = (content: string): string =>\n content.replace(/&(lt|gt|nbsp|amp|quot);/gi, '');\n","import { BreadcrumbList, SocialMediaPosting, WithContext } from 'schema-dts';\nimport { useVideoJsonLD } from '@article/head/json-ld/use-video-jsonld';\nimport { useCommentsJsonLD } from '@article/head/json-ld/use-comments-jsonld';\nimport { useArticleAuthorJsonld } from '@article/head/json-ld/use-author-jsonld';\nimport { useArticleBaseJsonLD } from '@article/head/json-ld/use-article-base-jsonld';\nimport { FC, useMemo } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { $CurrentAvailableArticleOrNull } from '@article/shared/atoms/current-article';\nimport { $Locale } from '@lemon8/web-app-shared/atom';\nimport { ArticleDetailUtil, EArticleClass } from 'shared/models';\nimport { useTranslation } from 'react-i18next';\nimport { removeEscapedSpecialXmlCharacter } from '~/utils/escape-xml';\n\nexport const ArticleJsonLD: FC = () => {\n const articleBaseJsonLD = useArticleBaseJsonLD();\n const authorJsonLD = useArticleAuthorJsonld();\n const videoJsonLD = useVideoJsonLD();\n const commentJsonLD = useCommentsJsonLD();\n const article = useAtomValue($CurrentAvailableArticleOrNull);\n\n if (!articleBaseJsonLD) {\n return null;\n }\n\n const articleJsonLd: WithContext = {\n '@context': 'https://schema.org',\n ...articleBaseJsonLD,\n };\n\n if (authorJsonLD) {\n articleJsonLd.author = authorJsonLD;\n }\n\n if (commentJsonLD && article && !article.isTranslatedVersion) {\n articleJsonLd.comment = commentJsonLD;\n }\n\n if (videoJsonLD) {\n articleJsonLd.video = videoJsonLD;\n }\n\n return