WikiController.coffee 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. if _.include(other_lngs, req.lng)
  23. pageData.title = pageData.title.slice(0, pageData.title.length - (req.lng.length+1) )
  24. WikiController._renderPage(pageData, contents, res)
  25. else
  26. WikiController._getPageContent page, (error, pageData) ->
  27. return next(error) if error?
  28. WikiController._renderPage(pageData, contents, res)
  29. _getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) ->
  30. request {
  31. url: "#{settings.apis.wiki.url}/learn-scripts/api.php"
  32. qs: {
  33. page: decodeURI(page)
  34. action: "parse"
  35. format: "json"
  36. }
  37. }, (err, response, data)->
  38. return callback(err) if err?
  39. try
  40. data = JSON.parse(data)
  41. catch err
  42. logger.err err:err, data:data, "error parsing data from wiki"
  43. result =
  44. content: data?.parse?.text?['*']
  45. title: data?.parse?.title
  46. callback null, result
  47. _renderPage: (page, contents, res)->
  48. if page.title == "Main Page"
  49. title = "Documentation"
  50. else
  51. title = page.title
  52. res.render "wiki/page", {
  53. page: page
  54. contents: contents
  55. title: title
  56. }