diff --git a/assets/images/sponsors/juspay/juspay-200.png b/assets/images/sponsors/juspay/juspay-200.png new file mode 100644 index 00000000..2bba13a6 Binary files /dev/null and b/assets/images/sponsors/juspay/juspay-200.png differ diff --git a/assets/images/sponsors/juspay/juspay-400.png b/assets/images/sponsors/juspay/juspay-400.png new file mode 100644 index 00000000..6d7cd220 Binary files /dev/null and b/assets/images/sponsors/juspay/juspay-400.png differ diff --git a/assets/images/sponsors/juspay/juspay-683.png b/assets/images/sponsors/juspay/juspay-683.png new file mode 100644 index 00000000..532b19a0 Binary files /dev/null and b/assets/images/sponsors/juspay/juspay-683.png differ diff --git a/assets/images/sponsors/mercury/mercury-200.png b/assets/images/sponsors/mercury/mercury-200.png new file mode 100644 index 00000000..461a923a Binary files /dev/null and b/assets/images/sponsors/mercury/mercury-200.png differ diff --git a/assets/images/sponsors/mercury/mercury-400.png b/assets/images/sponsors/mercury/mercury-400.png new file mode 100644 index 00000000..f58c408f Binary files /dev/null and b/assets/images/sponsors/mercury/mercury-400.png differ diff --git a/assets/images/sponsors/mercury/mercury-683.png b/assets/images/sponsors/mercury/mercury-683.png new file mode 100644 index 00000000..fc2a255d Binary files /dev/null and b/assets/images/sponsors/mercury/mercury-683.png differ diff --git a/assets/images/sponsors/mercury/mercury.png b/assets/images/sponsors/mercury/mercury.png deleted file mode 100644 index 3c540033..00000000 Binary files a/assets/images/sponsors/mercury/mercury.png and /dev/null differ diff --git a/assets/images/sponsors/standard-chartered/scb-200.png b/assets/images/sponsors/standard-chartered/scb-200.png new file mode 100644 index 00000000..db8c82fd Binary files /dev/null and b/assets/images/sponsors/standard-chartered/scb-200.png differ diff --git a/assets/images/sponsors/standard-chartered/scb-400.png b/assets/images/sponsors/standard-chartered/scb-400.png new file mode 100644 index 00000000..3165ee5d Binary files /dev/null and b/assets/images/sponsors/standard-chartered/scb-400.png differ diff --git a/assets/images/sponsors/standard-chartered/scb-683.png b/assets/images/sponsors/standard-chartered/scb-683.png new file mode 100644 index 00000000..a375ee8a Binary files /dev/null and b/assets/images/sponsors/standard-chartered/scb-683.png differ diff --git a/assets/images/sponsors/standard-chartered/scb-logo.png b/assets/images/sponsors/standard-chartered/scb-logo.png deleted file mode 100644 index ee4771f0..00000000 Binary files a/assets/images/sponsors/standard-chartered/scb-logo.png and /dev/null differ diff --git a/assets/images/sponsors/tripshot/tripshot-200.png b/assets/images/sponsors/tripshot/tripshot-200.png new file mode 100644 index 00000000..708c07ac Binary files /dev/null and b/assets/images/sponsors/tripshot/tripshot-200.png differ diff --git a/assets/images/sponsors/tripshot/tripshot-400.png b/assets/images/sponsors/tripshot/tripshot-400.png new file mode 100644 index 00000000..1f2cbaeb Binary files /dev/null and b/assets/images/sponsors/tripshot/tripshot-400.png differ diff --git a/assets/images/sponsors/tripshot/tripshot-683.png b/assets/images/sponsors/tripshot/tripshot-683.png new file mode 100644 index 00000000..7fbcd5f8 Binary files /dev/null and b/assets/images/sponsors/tripshot/tripshot-683.png differ diff --git a/donations/sponsors/juspay.markdown b/donations/sponsors/juspay.markdown index 96eb0c4c..0b4422bd 100644 --- a/donations/sponsors/juspay.markdown +++ b/donations/sponsors/juspay.markdown @@ -1,6 +1,7 @@ --- title: Juspay -logo: /assets/images/sponsors/juspay/juspay_logo.png +logo: /assets/images/sponsors/juspay/juspay-683.png +srcset: /assets/images/sponsors/juspay/juspay-200.png 200w, /assets/images/sponsors/juspay/juspay-400.png 400w, /assets/images/sponsors/juspay/juspay-683.png 683w externalUrl: https://juspay.in level: Gold careersUrl: https://juspay.in/careers diff --git a/donations/sponsors/mercury.markdown b/donations/sponsors/mercury.markdown index 66d4df17..faa8eb7c 100644 --- a/donations/sponsors/mercury.markdown +++ b/donations/sponsors/mercury.markdown @@ -1,6 +1,7 @@ --- title: Mercury -logo: /assets/images/sponsors/mercury/mercury.png +logo: /assets/images/sponsors/mercury/mercury-683.png +srcset: /assets/images/sponsors/mercury/mercury-200.png 200w, /assets/images/sponsors/mercury/mercury-400.png 400w, /assets/images/sponsors/mercury/mercury-683.png 683w externalUrl: https://mercury.com/ level: Gold careersUrl: https://mercury.com/jobs diff --git a/donations/sponsors/standard-chartered.markdown b/donations/sponsors/standard-chartered.markdown index 161d95d5..b904116a 100644 --- a/donations/sponsors/standard-chartered.markdown +++ b/donations/sponsors/standard-chartered.markdown @@ -1,6 +1,7 @@ --- title: Standard Chartered -logo: /assets/images/sponsors/standard-chartered/scb-logo.png +logo: /assets/images/sponsors/standard-chartered/scb-683.png +srcset: /assets/images/sponsors/standard-chartered/scb-200.png 200w, /assets/images/sponsors/standard-chartered/scb-400.png 400w, /assets/images/sponsors/standard-chartered/scb-683.png 683w externalUrl: https://www.sc.com/en/ level: Gold careersUrl: https://www.sc.com/en/global-careers/ diff --git a/donations/sponsors/tripshot.markdown b/donations/sponsors/tripshot.markdown index 8a7f3f03..d9eb6533 100644 --- a/donations/sponsors/tripshot.markdown +++ b/donations/sponsors/tripshot.markdown @@ -1,6 +1,7 @@ --- title: TripShot -logo: /assets/images/sponsors/tripshot/Tripshot_Logo_RGB.png +logo: /assets/images/sponsors/tripshot/tripshot-683.png +srcset: /assets/images/sponsors/tripshot/tripshot-200.png 200w, /assets/images/sponsors/tripshot/tripshot-400.png 400w, /assets/images/sponsors/tripshot/tripshot-683.png 683w externalUrl: https://tripshot.com/ level: Bronze careersUrl: https://tripshot.com/careers diff --git a/haskell-foundation.cabal b/haskell-foundation.cabal index 3004ffdb..459bd056 100644 --- a/haskell-foundation.cabal +++ b/haskell-foundation.cabal @@ -6,6 +6,7 @@ cabal-version: 2.0 executable site main-is: site.hs build-depends: base == 4.* + , bytestring , hakyll ^>= 4.14 || ^>= 4.15 || ^>= 4.16 , monadlist , pandoc >=2.11 && <3.8 diff --git a/site.hs b/site.hs index c333f5f1..a4cd910b 100644 --- a/site.hs +++ b/site.hs @@ -5,6 +5,7 @@ import Control.Monad (filterM, guard) import Control.Monad.ListM (sortByM) +import qualified Data.ByteString as BS import Data.List (sortOn, isPrefixOf) import Data.Maybe (fromMaybe, isJust) import Data.Ord (Down (..)) @@ -28,6 +29,7 @@ import Text.Pandoc as Pandoc ( runPure, writePlain, ) +import Text.Pandoc.ImageSize (ImageSize (pxX, pxY), imageSize) import Debug.Trace (trace) @@ -102,6 +104,7 @@ main = hakyllWith config $ do -- sponsors -------------------------------------------------------------------------------------------- match "donations/sponsors/*.markdown" $ compile pandocCompiler + match "assets/images/sponsors/**" $ version logoBytes $ compile getResourceLBS -- in-kind donations ----------------------------------------------------------------------------------- create ["donations/index.html"] $ do @@ -508,9 +511,9 @@ or use the passed in Maybe title, if it is a Just, or "No title" if not. boilerPlateCtx :: Maybe String -> [Item String] -> Context String boilerPlateCtx mtitle sponsors = mconcat - [ listField "golds" defaultContext (ofMetadataField "level" "Gold" sponsors) - , listField "silvers" defaultContext (ofMetadataField "level" "Silver" sponsors) - , listField "bronzes" defaultContext (ofMetadataField "level" "Bronze" sponsors) + [ listField "golds" sponsorCtx (ofMetadataField "level" "Gold" sponsors) + , listField "silvers" sponsorCtx (ofMetadataField "level" "Silver" sponsors) + , listField "bronzes" sponsorCtx (ofMetadataField "level" "Bronze" sponsors) , field "title" $ \item -> do metadata <- getMetadata (itemIdentifier item) return $ fromMaybe (fromMaybe "No title" mtitle) $ lookupString "title" metadata @@ -520,6 +523,38 @@ boilerPlateCtx mtitle sponsors = , defaultContext ] +-- | A single sponsor, as rendered in a logo row. +sponsorCtx :: Context String +sponsorCtx = + field "logoWidth" (fmap (show . pxX) . logoSize) + <> field "logoHeight" (fmap (show . pxY) . logoSize) + <> defaultContext + +{- | Browsers decode an image at its full size however small it is shown, and +the footer puts every logo on every page. Export logos at 683 px wide, plus 200 +and 400 px for the @srcset@. +-} +maxLogoWidth :: Integer +maxLogoWidth = 1000 + +-- | The version of a sponsor image whose body is the file's contents, for +-- 'logoSize' to 'load'. +logoBytes :: String +logoBytes = "bytes" + +-- | Intrinsic size of the file the @logo@ URL names, which must lie under +-- @assets/images/sponsors/@. Fails the build if the format is unknown or the +-- image is wider than 'maxLogoWidth'. +logoSize :: Item a -> Compiler ImageSize +logoSize item = do + path <- dropWhile (== '/') <$> getMetadataField' (itemIdentifier item) "logo" + image <- BS.toStrict <$> loadBody (setVersion (Just logoBytes) (fromFilePath path)) + either (fail . ((path <> ": ") <>)) pure $ do + size <- either (Left . T.unpack) Right (imageSize defaultHakyllWriterOptions image) + if pxX size > maxLogoWidth + then Left $ show (pxX size) <> " px wide, more than " <> show maxLogoWidth <> " px" + else Right size + -- affiliates ------------------------------------------------------------------------------------------ -- | Partition affiliates into affiliates and pending @@ -612,7 +647,7 @@ careersCtx reqs = hiringSponsorsCtx :: [Item String] -> Context String hiringSponsorsCtx sponsors = - listField "hiringsponsors" defaultContext (filterMetadataField "careersUrl" sponsors) + listField "hiringsponsors" sponsorCtx (filterMetadataField "careersUrl" sponsors) <> defaultContext -- Anouncements diff --git a/templates/careers/list.html b/templates/careers/list.html index 12c142bf..36bde527 100644 --- a/templates/careers/list.html +++ b/templates/careers/list.html @@ -38,7 +38,7 @@