LabelsHandler.coffee 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. ProjectEntityHandler.getAllDocs projectId, (err, docs) ->
  8. if err?
  9. return callback(err)
  10. LabelsHandler.extractLabelsFromProjectDocs docs, (err, projectLabels) ->
  11. if err?
  12. return callback(err)
  13. callback(null, projectLabels)
  14. getLabelsForDoc: (projectId, docId, callback=(err, docLabels)->) ->
  15. DocumentUpdaterHandler.flushDocToMongo projectId, docId, (err) ->
  16. if err?
  17. return callback(err)
  18. ProjectEntityHandler.getDoc projectId, docId, (err, lines) ->
  19. if err?
  20. return callback(err)
  21. LabelsHandler.extractLabelsFromDoc lines, (err, docLabels) ->
  22. if err?
  23. return callback(err)
  24. callback(null, docLabels)
  25. extractLabelsFromDoc: (lines, callback=(err, docLabels)->) ->
  26. docLabels = []
  27. for line in lines
  28. re = LabelsHandler.labelCaptureRegex()
  29. while (labelMatch = re.exec(line))
  30. if labelMatch[1]
  31. docLabels.push(labelMatch[1])
  32. callback(null, docLabels)
  33. extractLabelsFromProjectDocs: (docs, callback=(err, projectLabels)->) ->
  34. projectLabels = {} # docId => List[Label]
  35. for _docPath, doc of docs
  36. docLabels = []
  37. for line in doc.lines
  38. re = LabelsHandler.labelCaptureRegex()
  39. while (labelMatch = re.exec(line))
  40. if labelMatch[1]
  41. docLabels.push(labelMatch[1])
  42. projectLabels[doc._id] = docLabels
  43. callback(null, projectLabels)