Merge pull request #1691 from dten/absolute-templates-path

Absolute templates path
This commit is contained in:
Michael Snoyman 2020-08-09 17:48:45 +03:00 committed by GitHub
commit eb5f7a95cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 2 deletions

View File

@ -1,3 +1,7 @@
## 1.6.1.0
* `widgetFileReload` and `widgetFileNoReload` now use absolute paths via the new `globFilePackage` Q Exp which can provide absolute templates paths within the project [#1691](https://github.com/yesodweb/yesod/pull/1691)
## 1.6.0.2 ## 1.6.0.2
* Replace deprecated decodeFile with decodeFileEither. This should have no semantic impact, but silences a deprecation warning. [#1658](https://github.com/yesodweb/yesod/pull/1658) * Replace deprecated decodeFile with decodeFileEither. This should have no semantic impact, but silences a deprecation warning. [#1658](https://github.com/yesodweb/yesod/pull/1658)

View File

@ -5,6 +5,7 @@
module Yesod.Default.Util module Yesod.Default.Util
( addStaticContentExternal ( addStaticContentExternal
, globFile , globFile
, globFilePackage
, widgetFileNoReload , widgetFileNoReload
, widgetFileReload , widgetFileReload
, TemplateLanguage (..) , TemplateLanguage (..)
@ -15,6 +16,7 @@ module Yesod.Default.Util
) where ) where
import qualified Data.ByteString.Lazy as L import qualified Data.ByteString.Lazy as L
import Data.FileEmbed (makeRelativeToProject)
import Data.Text (Text, pack, unpack) import Data.Text (Text, pack, unpack)
import Yesod.Core -- purposely using complete import so that Haddock will see addStaticContent import Yesod.Core -- purposely using complete import so that Haddock will see addStaticContent
import Control.Monad (when, unless) import Control.Monad (when, unless)
@ -64,6 +66,11 @@ addStaticContentExternal minify hash staticDir toRoute ext' _ content = do
globFile :: String -> String -> FilePath globFile :: String -> String -> FilePath
globFile kind x = "templates/" ++ x ++ "." ++ kind globFile kind x = "templates/" ++ x ++ "." ++ kind
-- | `globFile` but returned path is absolute and within the package the Q Exp is evaluated
-- @since 1.6.1.0
globFilePackage :: String -> String -> Q FilePath
globFilePackage = (makeRelativeToProject <$>) . globFile
data TemplateLanguage = TemplateLanguage data TemplateLanguage = TemplateLanguage
{ tlRequiresToWidget :: Bool { tlRequiresToWidget :: Bool
, tlExtension :: String , tlExtension :: String
@ -124,7 +131,7 @@ warnUnlessExists :: Bool
-> Bool -- ^ requires toWidget wrap -> Bool -- ^ requires toWidget wrap
-> String -> (FilePath -> Q Exp) -> Q (Maybe Exp) -> String -> (FilePath -> Q Exp) -> Q (Maybe Exp)
warnUnlessExists shouldWarn x wrap glob f = do warnUnlessExists shouldWarn x wrap glob f = do
let fn = globFile glob x fn <- globFilePackage glob x
e <- qRunIO $ doesFileExist fn e <- qRunIO $ doesFileExist fn
when (shouldWarn && not e) $ qRunIO $ putStrLn $ "widget file not found: " ++ fn when (shouldWarn && not e) $ qRunIO $ putStrLn $ "widget file not found: " ++ fn
if e if e

View File

@ -1,5 +1,5 @@
name: yesod name: yesod
version: 1.6.0.2 version: 1.6.1.0
license: MIT license: MIT
license-file: LICENSE license-file: LICENSE
author: Michael Snoyman <michael@snoyman.com> author: Michael Snoyman <michael@snoyman.com>
@ -25,6 +25,7 @@ library
, data-default-class , data-default-class
, directory , directory
, fast-logger , fast-logger
, file-embed
, monad-logger , monad-logger
, shakespeare , shakespeare
, streaming-commons , streaming-commons