LabelsHandler.coffee 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. ProjectEntityHandler = require "../Project/ProjectEntityHandler"
  2. DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
  3. Async = require('async')
  4. module.exports = LabelsHandler =
  5. labelCaptureRegex: () ->
  6. /\\label\{([^\}\n\\]{0,80})\}/g
  7. getAllLabelsForProject: (projectId, callback=(err, projectLabels)->) ->
  8. ProjectEntityHandler.getAllDocs projectId, (err, docs) ->
  9. if err?
  10. return callback(err)
  11. LabelsHandler.extractLabelsFromProjectDocs docs, (err, projectLabels) ->
  12. if err?
  13. return callback(err)
  14. callback(null, projectLabels)
  15. getLabelsForDoc: (projectId, docId, callback=(err, docLabels)->) ->
  16. # Flush doc first, because this action is often performed while
  17. # a document is being edited by the client. By contrast,
  18. # `getAllLabelsForProject` is called only when a project/editor is loaded
  19. DocumentUpdaterHandler.flushDocToMongo projectId, docId, (err) ->
  20. if err?
  21. return callback(err)
  22. ProjectEntityHandler.getDoc projectId, docId, (err, lines) ->
  23. if err?
  24. return callback(err)
  25. LabelsHandler.extractLabelsFromDoc lines, (err, docLabels) ->
  26. if err?
  27. return callback(err)
  28. callback(null, docLabels)
  29. extractLabelsFromDoc: (lines, callback=(err, docLabels)->) ->
  30. docLabels = []
  31. for line in lines
  32. re = LabelsHandler.labelCaptureRegex()
  33. while (labelMatch = re.exec(line))
  34. if labelMatch[1]
  35. docLabels.push(labelMatch[1])
  36. callback(null, docLabels)
  37. extractLabelsFromProjectDocs: (projectDocs, callback=(err, projectLabels)->) ->
  38. projectLabels = {} # docId => List[Label]
  39. docs = for _path, doc of projectDocs
  40. doc
  41. Async.eachSeries(
  42. docs
  43. , (doc, cb) ->
  44. LabelsHandler.extractLabelsFromDoc doc.lines, (err, docLabels) ->
  45. projectLabels[doc._id] = docLabels
  46. cb(err)
  47. , (err, x) ->
  48. callback(err, projectLabels)
  49. )