Guest User

Untitled

a guest
Aug 6th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 2.81 KB | None | 0 0
  1. import  prologue
  2.  
  3. from std/os import walkDir, getLastModificationTime, getCreationTime
  4. from std/times import ZonedTime, Time, inZone, newTimezone, format
  5. from std/sequtils import toSeq
  6. from std/strutils import replace
  7.  
  8. import prologue/middlewares/staticfile
  9.  
  10. import nre except toSeq
  11. import markdown except toSeq
  12.  
  13. import routes/index
  14.  
  15. proc blog*(ctx: Context) {.async.} =
  16.   let posts = toSeq(walkDir("website/posts/", relative=true))
  17.  
  18.   var postText = ""
  19.  
  20.   for path in posts:
  21.     let post = readFile("website/posts/" & path.path)
  22.  
  23.     let title = post.match(nre.re("(?i)(?m)\\|title\\|(.*)$")).get.captures[0]
  24.  
  25.     proc europeTzInfo(time: Time): ZonedTime =
  26.       ZonedTime(utcOffset: -3, isDst: true, time: time)
  27.  
  28.     let edited = getLastModificationTime("website/posts/" & path.path)
  29.                 .inZone(zone = newTimezone("Europe/Riga", europeTzInfo, europeTzInfo))
  30.                 .format("yyyy-MM-dd HH:mm tt")
  31.  
  32.     let posted = getCreationTime("website/posts/" & path.path)
  33.                   .inZone(zone = newTimezone("Europe/Riga", europeTzInfo, europeTzInfo))
  34.                   .format("yyyy-MM-dd HH:mm tt")
  35.    
  36.     var postTemplate = readFile("website/templates/postListing.md")
  37.  
  38.     postTemplate = replace(postTemplate, "%title%", title)  
  39.     postTemplate = replace(postTemplate, "%creation%", posted)
  40.     postTemplate = replace(postTemplate, "%edited%", edited)
  41.     postTemplate = replace(postTemplate, "%url%", strutils.replace("/blog/post/" & path.path, " ", "_"))
  42.  
  43.     postText = postText & postTemplate
  44.  
  45.   var postsTemplate = readFile("website/templates/posts.md")
  46.  
  47.   postsTemplate = strutils.replace(postsTemplate, "%posts%", postText)
  48.  
  49.   postsTemplate = markdown(postsTemplate)
  50.  
  51.   var index = readFile("website/templates/index.html")
  52.  
  53.   index = strutils.replace(index, "%Markdown%", postsTemplate)
  54.  
  55.   resp index
  56.  
  57. proc posts(ctx: Context) {.async.} =
  58.   let post = readFile("website/posts/" & strutils.replace(ctx.getPathParams("text"), "_", " "))
  59.  
  60.   var postTemplate = readFile("website/templates/post.md")
  61.  
  62.   postTemplate = replace(postTemplate, "%title%", post.match(nre.re("(?i)(?m)\\|title\\|(.*)$")).get.captures[0])
  63.   postTemplate = replace(postTemplate, "%content%", replace(post, nre.re("(?i)(?m)\\|title\\|(.*)$"), ""))
  64.  
  65.   postTemplate = markdown(postTemplate)
  66.  
  67.   var index = readFile("website/templates/index.html")
  68.  
  69.   index = replace(index, "%Markdown%", postTemplate)
  70.  
  71.   resp index
  72.  
  73.  
  74. let settings = newSettings(
  75.   address = "0.0.0.0",
  76.   port = Port(20007),
  77.   debug = false,
  78.   appName = "yourfriend's website"
  79. )
  80.  
  81. var app = newApp(settings = settings)
  82.  
  83. app.addRoute("/", index)
  84.  
  85. app.use(staticFileMiddleware("website/assets"))
  86.  
  87. app.addRoute("/blog", blog)
  88. app.addRoute("/blog/post/{text}", posts)
  89.  
  90. echo " Running yourfriend's website! "
  91. app.run()
Advertisement
Add Comment
Please, Sign In to add comment