LabelsHandler.coffee 1.4 KB

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