LabelsHandler.coffee 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. ProjectEntityHandler = require "../Project/ProjectEntityHandler"
  2. DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
  3. module.exports = LabelsHandler =
  4. labelCaptureRegex: () ->
  5. /\\label\{([^\}\n\\]{0,80})\}/g
  6. getAllLabelsForProject: (projectId, callback=(err, projectLabels)->) ->
  7. DocumentUpdaterHandler.flushProjectToMongo projectId, (err) ->
  8. if err?
  9. return callback(err)
  10. ProjectEntityHandler.getAllDocs projectId, (err, docs) ->
  11. if err?
  12. return callback(err)
  13. projectLabels = LabelsHandler.extractLabelsFromProjectDocs docs
  14. callback(null, projectLabels)
  15. getLabelsForDoc: (projectId, docId, callback=(err, docLabels)->) ->
  16. DocumentUpdaterHandler.flushDocToMongo projectId, docId, (err) ->
  17. if err?
  18. return callback(err)
  19. ProjectEntityHandler.getDoc projectId, docId, (err, lines) ->
  20. if err?
  21. return callback(err)
  22. docLabels = LabelsHandler.extractLabelsFromDoc lines
  23. callback(null, docLabels)
  24. extractLabelsFromDoc: (lines) ->
  25. docLabels = []
  26. for line in lines
  27. re = LabelsHandler.labelCaptureRegex()
  28. while (labelMatch = re.exec(line))
  29. if labelMatch[1]
  30. docLabels.push(labelMatch[1])
  31. return docLabels
  32. extractLabelsFromProjectDocs: (projectDocs) ->
  33. projectLabels = {} # docId => List[Label]
  34. for _path, doc of projectDocs
  35. projectLabels[doc._id] = LabelsHandler.extractLabelsFromDoc(doc.lines)
  36. return projectLabels