WikiController.coffee 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. request = require("request")
  2. settings = require("settings-sharelatex")
  3. logger = require("logger-sharelatex")
  4. ErrorController = require "../Errors/ErrorController"
  5. _ = require("underscore")
  6. other_lngs = ["es"]
  7. module.exports = WikiController =
  8. getPage: (req, res, next) ->
  9. page = req.url.replace(/^\/learn/, "").replace(/^\//, "")
  10. if page == ""
  11. page = "Main_Page"
  12. logger.log page: page, "getting page from wiki"
  13. if _.include(other_lngs, req.lng)
  14. lngPage = "#{page}_#{req.lng}"
  15. else
  16. lngPage = page
  17. WikiController._getPageContent "Contents", (error, contents) ->
  18. return next(error) if error?
  19. WikiController._getPageContent lngPage, (error, pageData) ->
  20. return next(error) if error?
  21. if pageData.content?.length > 280
  22. WikiController._renderPage(pageData, contents, res)
  23. else
  24. WikiController._getPageContent page, (error, pageData) ->
  25. return next(error) if error?
  26. WikiController._renderPage(pageData, contents, res)
  27. _getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) ->
  28. request {
  29. url: "#{settings.apis.wiki.url}/learn-scripts/api.php"
  30. qs: {
  31. page: decodeURI(page)
  32. action: "parse"
  33. format: "json"
  34. }
  35. }, (err, response, data)->
  36. return callback(err) if err?
  37. try
  38. data = JSON.parse(data)
  39. catch err
  40. logger.err err:err, data:data, "error parsing data from wiki"
  41. result =
  42. content: data?.parse?.text?['*']
  43. title: data?.parse?.title
  44. callback null, result
  45. _renderPage: (page, contents, res)->
  46. if page.title == "Main Page"
  47. title = "Documentation"
  48. else
  49. title = page.title
  50. res.render "wiki/page", {
  51. page: page
  52. contents: contents
  53. title: title
  54. }