{"version":3,"sources":["webpack://_N_E/./public/static/car-bg-l.png","webpack://_N_E/./components/view-image/constant.ts","webpack://_N_E/./components/view-image/decode.ts","webpack://_N_E/./components/view-image/utils.ts","webpack://_N_E/./components/view-image/image-zoom.tsx","webpack://_N_E/./components/view-image/index.tsx","webpack://_N_E/./public/static/user-loading.png","webpack://_N_E/./node_modules/core-js/modules/es.array.some.js","webpack://_N_E/./node_modules/core-js/modules/es.string.match.js","webpack://_N_E/./components/author/avatar.tsx","webpack://_N_E/./public/static/v-y.svg","webpack://_N_E/./public/static/dongchedi-logo.svg","webpack://_N_E/./components/view-image/style.ts"],"names":["module","exports","domainWhiteList","domainBlackList","decodeUri","originStr","origin","some","domain","includes","logger","warn","metrics","counter","url","split","objUrlRegex","test","matches","match","legacyUrlRegex0","legacyUrlRegex1","legacyUrlRegex2","legacyUrlRegex3","canUseWebp","document","elem","createElement","getContext","toDataURL","indexOf","getOptimizedImage","params","src","unoptimized","width","height","autoPixelRatio","applyHttpsImage","uri","domainList","Math","floor","random","length","getDomain","size","pixelRatio","window","devicePixelRatio","abs","getSize","ext","getExt","ImageZoom","zoomHeight","children","className","loadImg","restProps","styles","display","position","Object","assign","paddingBottom","style","userLoading","require","carLoading","Image","props","lazy","rootMargin","useTransition","hoverTransition","alt","cusDefaultImg","errorImg","isBase64","startsWith","isLazy","notUseWebp","useInView","threshold","triggerOnce","setRef","isIntersected","inView","imgStyle","visibility","realSrc","React","imgRef","retryTimesRef","undefined","setRefCallbck","ele","current","ref","classnames","onError","error","setAttribute","$","$some","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","target","proto","forced","callbackfn","this","arguments","fixRegExpWellKnownSymbolLogic","anObject","toLength","requireObjectCoercible","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","O","matcher","call","RegExp","String","res","done","value","rx","S","global","fullUnicode","unicode","lastIndex","result","A","n","matchStr","ugcUserLink","userId","content","href","isNewVersion","as","Avatar","onClick","avatar","userVerified","verifyType","username","stopClick","stopPropagation","preventClick","preventDefault","classNames","Fragment","borderRadius","imageStyles"],"mappings":"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","file":"static/chunks/dabefbff1e489a702ebbe3c380fb6c940cf109b5.8b7d07fb31e3eeea7b6b.js","sourcesContent":["module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/car-bg-l-689a3d2d87af79b668d1626c6fd9aad3.png\";","const domainWhiteList = [\n 'pstatp.com',\n 'byteimg.com',\n 'toutiaoimg.com',\n 'bytexservice.com',\n]\n\nconst domainBlackList = ['qlogo.cn', '58cdn.com.cn']\n\nlet domainList = [\n 'sf1-ttcdn-tos.pstatp.com',\n 'sf3-ttcdn-tos.pstatp.com',\n 'sf6-ttcdn-tos.pstatp.com',\n]\n/**\n * 增加域名白名单\n * @param list\n */\nexport function addDomainWhiteList(list: string[]) {\n domainWhiteList.push(...list)\n}\n/**\n * 获取域名白名单\n */\nexport function getDomainWhiteList() {\n return domainWhiteList\n}\n/**\n * 增加域名黑名单\n * @param list\n */\nexport function addDomainBlackList(list: string[]) {\n domainBlackList.push(...list)\n}\n/**\n * 获取域名黑名单\n */\nexport function getDomainBlackList() {\n return domainBlackList\n}\n\nexport function setDomainList(list: string[]) {\n domainList = list\n}\nexport function getDomainList() {\n return domainList\n}\n","import { logger, metrics } from 'lib/slardar-utils'\n\nimport { getDomainBlackList, getDomainWhiteList } from './constant'\n\n/* eslint-disable complexity */\nexport function decodeUri(originStr: string): string | null {\n let origin = originStr\n if (!origin) {\n return null\n }\n const blackList = getDomainBlackList()\n // 匹配到黑名单,不进行打点\n if (blackList.some((domain) => origin?.includes?.(`${domain}/`))) {\n return null\n }\n const whiteList = getDomainWhiteList()\n if (!whiteList.some((domain) => origin?.includes?.(`.${domain}/`))) {\n logger.warn(`[motor/pc/view-image] not in domain white list url=${origin}`)\n metrics.counter('tosUri.decode.ignore', { url: origin })\n return null\n }\n\n /* eslint-disable prefer-destructuring */\n origin = origin.split('?')[0]\n // 原格式,如:https://sf1-ttcdn-tos.pstatp.com/obj/developer-baas/baas/ttcqr5/de057af34f101a4e_1605090421476.png\n const objUrlRegex = /\\/obj\\/(.*)/\n\n if (objUrlRegex.test(origin)) {\n const matches = origin.match(objUrlRegex)\n if (matches?.[1]) {\n return matches[1]\n }\n }\n // 遗留的图片格式0,如:https://p3.pstatp.com/large/1bf6000409257e13550d\n const legacyUrlRegex0 = /\\/(?:origin|large|medium|thumb|img)\\/([0-9a-f]{9,})/\n if (legacyUrlRegex0.test(origin)) {\n const matches = origin.match(legacyUrlRegex0)\n if (matches?.[1]) {\n return `mosaic-legacy/${matches[1]}`\n }\n }\n // 遗留的图片格式,如:https://p3.pstatp.com/avatar/100x100/1dd5000048d6334c26b4.png\n const legacyUrlRegex1 = /\\d+x\\d+\\/([0-9a-f]{9,})/\n if (legacyUrlRegex1.test(origin)) {\n const matches = origin.match(legacyUrlRegex1)\n if (matches?.[1]) {\n return `mosaic-legacy/${matches[1]}`\n }\n }\n\n // 遗留的图片格式2,如:https://p7.pstatp.com/large/pgc-image/a8c9c8f743174b259f21915df49f19a7\n const legacyUrlRegex2 = /[a-z]+\\/([0-9a-z-]+)\\/([0-9a-f]{9,})/\n if (legacyUrlRegex2.test(origin)) {\n const matches = origin.match(legacyUrlRegex2)\n if (matches && matches[1] && matches[2]) {\n return `${matches[1]}/${matches[2]}`\n }\n }\n\n // 遗留图片格式3,'https://p7.pstatp.com/list/300x196/pgc-image/123432866b864bc295ac12102aaf395f'\n const legacyUrlRegex3 = /list\\/\\d+x\\d+\\/([0-9a-z-]+)\\/([0-9a-f]{9,})/\n if (legacyUrlRegex3.test(origin)) {\n const matches = origin.match(legacyUrlRegex3)\n if (matches && matches[1] && matches[2]) {\n return `${matches[1]}/${matches[2]}`\n }\n }\n\n // 常见的图片格式,如:https://p7.pstatp.com/large/pgc-image/a8c9c8f743174b259f21915df49f19a7\n const normalUrlRegex = /(?:img)\\/([0-9a-z-]+)\\/([0-9a-f]{9,})/\n const matches = origin.match(normalUrlRegex)\n if (matches && matches[1] && matches[2]) {\n return `${matches[1]}/${matches[2]}`\n }\n logger.warn(`[motor/pc/view-image] can not decode url=${origin}`)\n metrics.counter('tosUri.decode.miss', { url: origin })\n return null\n}\n","import { decodeUri } from './decode'\nimport applyHttpsImage from 'lib/apply-https-img'\n/**\n * 是否支持webp格式\n * @type {boolean}\n */\nconst canUseWebp = (() => {\n if (typeof document === 'undefined') {\n return false\n }\n const elem = document.createElement('canvas')\n if (elem && elem.getContext && elem.getContext('2d')) {\n return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0\n }\n return false\n})()\n\nfunction getDomain() {\n const domainList = [\n 'sf1-ttcdn-tos.pstatp.com',\n 'sf3-ttcdn-tos.pstatp.com',\n 'sf6-ttcdn-tos.pstatp.com',\n ]\n return domainList[Math.floor(Math.random() * domainList.length)]\n}\n\nfunction getSize(width = 0, height = 0, autoPixelRatio = false) {\n if (!width && !height) {\n return 'noop'\n }\n\n // 服务器端默认2倍大小,客户端根据实际的window?.devicePixelRatio\n if (autoPixelRatio) {\n let pixelRatio = 2\n if (typeof window !== 'undefined' && window?.devicePixelRatio) {\n pixelRatio = window?.devicePixelRatio\n }\n return `${Math.abs(width * pixelRatio)}x${Math.abs(height * pixelRatio)}`\n }\n return `${Math.abs(width)}x${Math.abs(height)}`\n}\n\nfunction getExt(src: string): string {\n if (canUseWebp) {\n return 'webp'\n }\n const matches = src.match(/(?:\\.)(\\w+)(?:\\?.*)?$/)\n if (!matches || !matches[1]) {\n return 'image'\n }\n\n if (!canUseWebp && matches[1] === 'webp') {\n return 'image'\n }\n\n return matches[1]\n}\n\ntype GenImgAttrsData = {\n src: string\n unoptimized: boolean\n width?: number\n height?: number\n autoPixelRatio?: boolean\n}\n\nexport function getOptimizedImage(params: GenImgAttrsData): string {\n const { src, unoptimized, width, height, autoPixelRatio } = params\n if (unoptimized) {\n return applyHttpsImage(src)\n }\n // 获取uri,如果不是tos地址,就不匹配\n const uri = decodeUri(src)\n if (!uri) {\n return applyHttpsImage(src)\n }\n\n const domain = getDomain()\n const size = getSize(width, height, autoPixelRatio)\n const ext = getExt(src)\n return `//${domain}/img/${uri}~${size}.${ext}`\n}\n","import React from 'react'\n\ninterface IProps {\n zoomHeight: string\n children: React.ReactNode\n className?: string\n loadImg?: boolean\n [key: string]: any\n}\n\nconst ImageZoom: React.FC = ({\n zoomHeight,\n children,\n className = '',\n loadImg = true,\n ...restProps\n}) => {\n const styles: any = {\n display: 'inline-block',\n position: 'relative',\n }\n\n if (zoomHeight) {\n Object.assign(styles, {\n paddingBottom: zoomHeight,\n width: '100%',\n })\n }\n\n return (\n \n {children}\n\n \n \n )\n}\n\nexport default ImageZoom\n","import * as React from 'react'\nimport classnames from 'classnames'\nimport { useInView } from 'react-intersection-observer'\nimport { getOptimizedImage } from './utils'\nimport { logger, metrics } from 'lib/slardar-utils'\nimport ImageStyles from './style'\nexport { default as ImageZoom } from './image-zoom'\n\n// 常用的一些图片\nexport const userLoading = require('static/user-loading.png')\nexport const carLoading = require('static/car-bg-l.png')\nexport const logoLoading = require('static/dongchedi-logo.svg')\n\nexport type ImageProps = {\n /**\n * 图片宽度\n */\n width: number\n /**\n * 图片高度\n */\n height: number\n /**\n * 图片资源地址\n */\n src: string\n /**\n * className\n */\n className?: string\n /**\n * alt\n */\n alt?: string\n /**\n * 是否懒加载\n */\n lazy?: boolean\n /**\n * 不使用图片格式优化,主要是webp\n * @default false\n */\n unoptimized?: boolean\n /**\n * 是否开启加载完毕后的动画,默认开启\n */\n useTransition?: boolean\n /**\n * hover动画\n */\n hoverTransition?: boolean\n /**\n * intersection observer的rootMargin\n * @default 0px 100px\n */\n rootMargin?: string\n /**\n * 自定义图片的行内样式\n */\n style?: React.CSSProperties\n /**\n * 自定义默认图片\n */\n cusDefaultImg?: string\n /**\n * 自定义错误图片\n */\n errorImg?: string\n /**\n * 是否自动适配 设备像素比 服务器端默认2倍,客户端根据实际的devicePixelRatio\n */\n autoPixelRatio?: boolean\n}\n\ntype ImgElementStyle = NonNullable\n\nconst classNamePrefix = 'motor-pc-image'\n\nconst defaultImg =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIvPg=='\n\nexport const Image: React.FC = (props) => {\n const {\n src,\n style,\n lazy = false,\n className,\n rootMargin = '500px 100px',\n unoptimized = false,\n useTransition = true,\n hoverTransition = false,\n width,\n height,\n alt = '',\n cusDefaultImg = defaultImg,\n errorImg,\n autoPixelRatio = false,\n } = props\n\n const isBase64 = src?.startsWith?.('data:')\n // 为data:时,不进行预加载和优化\n const isLazy = isBase64 ? false : lazy\n\n const notUseWebp = isBase64 ? true : unoptimized\n\n const [setRef, isIntersected] = useInView({\n rootMargin,\n threshold: 0,\n triggerOnce: true,\n })\n const inView = !isLazy || isIntersected\n\n let imgStyle: ImgElementStyle | undefined = {\n visibility: inView ? 'inherit' : 'hidden',\n }\n\n const realSrc = React.useMemo(() => {\n if (!inView) {\n // 不可见时,设置一个透明的背景图\n return cusDefaultImg\n }\n return src\n ? getOptimizedImage({\n src,\n unoptimized: notUseWebp,\n width,\n height,\n autoPixelRatio,\n })\n : cusDefaultImg\n }, [inView, src, width, height, notUseWebp, autoPixelRatio, cusDefaultImg])\n\n const imgRef = React.useRef(null)\n\n // 图片加载错误重试的次数\n const retryTimesRef = React.useRef(0)\n\n if (unoptimized) {\n imgStyle = undefined\n }\n\n const setRefCallbck = React.useCallback(\n (ele) => {\n imgRef.current = ele\n setRef(ele)\n },\n [setRef, imgRef]\n )\n React.useEffect(() => {\n retryTimesRef.current = 0\n }, [src, width, height, notUseWebp])\n return (\n {\n logger.error(\n `[motor-fe/pc/image onError] error message: src=${realSrc}`,\n {\n src,\n }\n )\n metrics.counter('motor-fe/pc.image.onerror', { realSrc, src })\n if (retryTimesRef.current > 0) {\n /* eslint-disable no-unused-expressions */\n imgRef.current?.setAttribute('src', errorImg || cusDefaultImg)\n return\n }\n retryTimesRef.current += 1\n if (src === realSrc) {\n /* eslint-disable no-unused-expressions */\n imgRef.current?.setAttribute('src', errorImg || cusDefaultImg)\n return\n }\n /* eslint-disable no-unused-expressions */\n imgRef.current?.setAttribute('src', src)\n }}\n />\n )\n}\n\nexport { ImageStyles }\n","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/user-loading-56fd747778e1578a5112cca26875b9e7.png\";","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('some');\n\n// `Array.prototype.some` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","import React, { CSSProperties, ReactElement } from 'react'\nimport { Image, userLoading } from 'Components/view-image'\nimport Link from 'next/link'\nimport classNames from 'classnames'\nimport { Wrapper } from 'lib/noop-wrapper'\nimport {\n preventDefault,\n stopPropagation,\n} from 'Components/new/community-card/interact'\nimport { isNewVersion } from 'Components/hooks/use-version'\n\nexport interface IUgcUserLinkParams {\n userId?: string\n target?: string\n}\n\nexport function ugcUserLink({\n userId,\n target = '_blank',\n}: IUgcUserLinkParams): Wrapper {\n return (content) => {\n return userId ? (\n \n {content}\n \n ) : (\n content\n )\n }\n}\n\nexport interface IProps {\n onClick?: () => void\n avatar?: string // 用户头像 url\n userId?: string // 用户id\n username?: string // 用户名\n userVerified?: boolean // 用户认证\n verifyType?: number // 用户认证类型\n size?: number\n style?: CSSProperties\n className?: string\n}\n\nconst Avatar: React.FC = ({\n onClick,\n avatar = '',\n userVerified = false,\n verifyType = 1,\n userId,\n username,\n size = 40,\n style,\n className,\n}) => {\n const stopClick = stopPropagation(onClick)\n const preventClick = preventDefault(stopClick)\n\n return (\n \n {ugcUserLink({ userId })(\n \n \n {userVerified ? (\n \n ) : null}\n \n )}\n \n \n ) as ReactElement\n}\n\nexport default Avatar\n","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/v-y-b9c03cb867f70f0036f2031e834b96ee.svg\";","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/dongchedi-logo-db4472fc50bcddce0766b6de60aec985.svg\";","import css from 'styled-jsx/css'\n\nconst imageStyles = css.global`\n .motor-pc-image {\n position: relative;\n display: inline-block;\n max-width: 100%;\n }\n .motor-pc-image-holder img {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n .motor-pc-image-auto img {\n max-width: 100%;\n }\n .motor-pc-image-fade {\n opacity: 0;\n transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1),\n transform 0.3s ease-in-out;\n }\n .motor-pc-image-in {\n opacity: 1;\n }\n\n .motor-pc-image-hover {\n transition: opacity 0.3s cubic-bezier(0.23, 1, 0.32, 1),\n transform 0.3s ease-in-out;\n }\n .motor-pc-image-hover:hover {\n transform: scale(1.1);\n }\n`\nexport default imageStyles\n"],"sourceRoot":""}