{"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","isBot","$UserAgent","hitPostCommentCountExp","$HitPostCommentCountExp","commentItems","slice","commentCount","commentPermission","ECommentPermission","num","DivisibleStack","ArticleInfoSection","favoriteCount","diggCount","savedRef","handleSavedClick","diggRef","handleDiggClick","commentedRef","handleCommentedClick","Bookmark","Heart","EllipsisBubble","ArticleContent","navigate","useNavigate","title","content","isMobile","isInApp","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","click_position","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","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-660e9ad8ad01aeaff1eb.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';\nimport { $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { $HitPostCommentCountExp } from '~/utils/libra';\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 const { isBot } = useAtomValue($UserAgent);\n const hitPostCommentCountExp = useAtomValue($HitPostCommentCountExp);\n\n const commentItems = useMemo(() => {\n if (isBot && !hitPostCommentCountExp) {\n return items.slice(0, 10);\n } else {\n return items;\n }\n }, [items, isBot, hitPostCommentCountExp]);\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 {commentItems.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 click_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