pages-router.tsx 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. 'use client'
  2. import Head from 'next/head'
  3. import { useRouter } from 'next/router'
  4. export const DEFAULT_FAVICON_THEME_COLOR = '1E1E1E'
  5. export const DEFAULT_FAVICON_ROUTE = '/favicon'
  6. const MetaFaviconsPagesRouter = ({
  7. applicationName,
  8. route = DEFAULT_FAVICON_ROUTE,
  9. themeColor = DEFAULT_FAVICON_THEME_COLOR,
  10. includeRssXmlFeed = false,
  11. includeManifest = false,
  12. includeMsApplicationConfig = false,
  13. }: {
  14. applicationName: string
  15. // alternative route to use for the favicons
  16. route?: string
  17. // theme color for the browser
  18. themeColor?: string
  19. // include RSS feed
  20. includeRssXmlFeed?: boolean
  21. // include manifest.json
  22. includeManifest?: boolean
  23. // include browserconfig.xml
  24. includeMsApplicationConfig?: boolean
  25. }) => {
  26. const { basePath } = useRouter()
  27. return (
  28. <Head>
  29. {/* prettier-ignore */}
  30. <link rel="apple-touch-icon-precomposed" sizes="57x57" href={`${basePath}${route}/apple-icon-57x57.png`}/>
  31. {/* prettier-ignore */}
  32. <link rel="apple-touch-icon-precomposed" sizes="60x60" href={`${basePath}${route}/apple-icon-60x60.png`}/>
  33. {/* prettier-ignore */}
  34. <link rel="apple-touch-icon-precomposed" sizes="72x72" href={`${basePath}${route}/apple-icon-72x72.png`}/>
  35. {/* prettier-ignore */}
  36. <link rel="apple-touch-icon-precomposed" sizes="76x76" href={`${basePath}${route}/apple-icon-76x76.png`}/>
  37. {/* prettier-ignore */}
  38. <link rel="apple-touch-icon-precomposed" sizes="114x114" href={`${basePath}${route}/apple-icon-114x114.png`}/>
  39. {/* prettier-ignore */}
  40. <link rel="apple-touch-icon-precomposed" sizes="120x120" href={`${basePath}${route}/apple-icon-120x120.png`}/>
  41. {/* prettier-ignore */}
  42. <link rel="apple-touch-icon-precomposed" sizes="144x144" href={`${basePath}${route}/apple-icon-144x144.png`}/>
  43. {/* prettier-ignore */}
  44. <link rel="apple-touch-icon-precomposed" sizes="152x152" href={`${basePath}${route}/apple-icon-152x152.png`}/>
  45. {/* prettier-ignore */}
  46. <link rel="icon" type="image/png" href={`${basePath}${route}/favicon-16x16.png`} sizes="16x16"/>
  47. {/* prettier-ignore */}
  48. <link rel="icon" type="image/png" href={`${basePath}${route}/favicon-32x32.png`} sizes="32x32"/>
  49. {/* prettier-ignore */}
  50. <link rel="icon" type="image/png" href={`${basePath}${route}/favicon-48x48.png`} sizes="48x48"/>
  51. {/* prettier-ignore */}
  52. <link rel="icon" type="image/png" href={`${basePath}${route}/favicon-96x96.png`} sizes="96x96"/>
  53. {/* prettier-ignore */}
  54. <link rel="icon" type="image/png" href={`${basePath}${route}/favicon-128.png`} sizes="128x128"/>
  55. {/* prettier-ignore */}
  56. <link rel="icon" type="image/png" href={`${basePath}${route}/favicon-180x180.png`} sizes="180x180"/>
  57. {/* prettier-ignore */}
  58. <link rel="icon" type="image/png" href={`${basePath}${route}/favicon-196x196.png`} sizes="196x196"/>
  59. {/* prettier-ignore */}
  60. <meta name="application-name" content={applicationName ?? '&nbsp;'} />
  61. {/* prettier-ignore */}
  62. <meta name="msapplication-TileColor" content={`#${themeColor}`} />
  63. {/* prettier-ignore */}
  64. <meta name="msapplication-TileImage" content={`${basePath}${route}/mstile-144x144.png`} />
  65. {/* prettier-ignore */}
  66. <meta name="msapplication-square70x70logo" content={`${basePath}${route}/mstile-70x70.png`} />
  67. {/* prettier-ignore */}
  68. <meta name="msapplication-square150x150logo" content={`${basePath}${route}/mstile-150x150.png`} />
  69. {/* prettier-ignore */}
  70. <meta name="msapplication-wide310x150logo" content={`${basePath}${route}/mstile-310x150.png`} />
  71. {/* prettier-ignore */}
  72. <meta name="msapplication-square310x310logo" content={`${basePath}${route}/mstile-310x310.png`} />
  73. <meta name="theme-color" content={`#${themeColor}`} />
  74. <link rel="shortcut icon" href={`${basePath}${route}/favicon.ico`} />
  75. <link rel="icon" type="image/x-icon" href={`${basePath}${route}/favicon.ico`} />
  76. <link rel="apple-touch-icon" href={`${basePath}${route}/favicon.ico`} />
  77. {includeRssXmlFeed && (
  78. <link rel="alternate" type="application/rss+xml" href={`${basePath}/feed.xml`} />
  79. )}
  80. {includeManifest && <link rel="manifest" href={`${basePath}${route}/manifest.json`} />}
  81. {includeMsApplicationConfig && (
  82. <meta name="msapplication-config" content={`${basePath}${route}/browserconfig.xml`} />
  83. )}
  84. </Head>
  85. )
  86. }
  87. export default MetaFaviconsPagesRouter