{"version":3,"file":"index.modern.mjs","sources":["../lib/util.js","../lib/comments.js","../lib/index.js"],"sourcesContent":["/**\n * @typedef { import('./types.js').Comment } Comment\n */\n\n\nexport function _getCommentsElement(element, create) {\n\n  var bo = element.businessObject;\n\n  var docs = bo.get('documentation');\n\n  var comments;\n\n  // get comments node\n  docs.some(function(d) {\n    return d.textFormat === 'text/x-comments' && (comments = d);\n  });\n\n  // create if not existing\n  if (!comments && create) {\n    comments = bo.$model.create('bpmn:Documentation', { textFormat: 'text/x-comments' });\n    docs.push(comments);\n  }\n\n  return comments;\n}\n\n/**\n * @param {DiagramElement} element\n *\n * @return {Comment[]} comments\n */\nexport function getComments(element) {\n  var doc = _getCommentsElement(element);\n\n  if (!doc || !doc.text) {\n    return [];\n  } else {\n    return doc.text.split(/;\\r?\\n;/).map(function(str) {\n      return str.split(/:/, 2);\n    }).map(([ author, text ]) => ({ author, text }));\n  }\n}\n\n/**\n * @param {DiagramElement} element\n * @param {Comment[]} comments\n */\nexport function setComments(element, comments) {\n  var doc = _getCommentsElement(element, true);\n\n  var str = comments.map(function(c) {\n    return [ c.author, c.text ].join(':');\n  }).join(';\\n;');\n\n  doc.text = str;\n}\n\n/**\n * @param {DiagramElement} element\n * @param {Comment} comment\n */\nexport function addComment(element, comment) {\n  var comments = getComments(element);\n\n  comments.push(comment);\n\n  setComments(element, comments);\n}\n\n/**\n * @param {DiagramElement} element\n * @param {Comment} comment\n */\nexport function removeComment(element, comment) {\n  var comments = getComments(element);\n\n  var idx = comments.findIndex(c => {\n    return (\n      c.author === comment.author && c.text === comment.text\n    );\n  });\n\n  if (idx !== -1) {\n    comments.splice(idx, 1);\n  }\n\n  setComments(element, comments);\n}","import $ from 'jquery';\n\nimport {\n  getComments,\n  removeComment,\n  addComment\n} from './util';\n\n\n/**\n * @typedef { import('./types.js').Comment } Comment\n */\n\n\nvar COMMENT_HTML =\n  '<div class=\"comment\">' +\n    '<div data-text></div><a href class=\"delete icon-delete\" data-delete></a>' +\n  '</div>';\n\n\nexport default function Comments(eventBus, overlays, bpmnjs, translate) {\n\n  var self = this;\n\n  function toggleCollapse(element, collapse) {\n\n    var o = overlays.get({ element: element, type: 'comments' })[0];\n\n    var $overlay = o && o.html;\n\n    if ($overlay) {\n\n      var expanded = typeof collapse !== 'undefined' ? !collapse : $overlay.is('.expanded');\n\n      eventBus.fire('comments.toggle', { element: element, active: !expanded });\n\n      if (expanded) {\n        $overlay.removeClass('expanded');\n      } else {\n        $overlay.addClass('expanded');\n        $overlay.find('textarea').focus();\n      }\n    }\n  }\n\n  function createCommentBox(element) {\n\n    var $overlay = $(getOverlayHtml(translate));\n\n    $overlay.find('.toggle').click(function(e) {\n      toggleCollapse(element);\n    });\n\n    var $commentCount = $overlay.find('[data-comment-count]'),\n        $textarea = $overlay.find('textarea'),\n        $comments = $overlay.find('.comments');\n\n\n    function renderComments() {\n\n      // clear innerHTML\n      $comments.html('');\n\n      var comments = getComments(element);\n\n      comments.forEach(function(val) {\n        var $comment = $(COMMENT_HTML);\n\n        $comment.find('[data-text]').text(val.text);\n        $comment.find('[data-delete]').click(function(e) {\n\n          e.preventDefault();\n\n          self.removeComment(element, val);\n          renderComments();\n          $textarea.val(val.text);\n        });\n\n        $comments.append($comment);\n      });\n\n      $overlay[comments.length ? 'addClass' : 'removeClass']('with-comments');\n\n      $commentCount.text(comments.length ? ('(' + comments.length + ')') : '');\n\n      eventBus.fire('comments.updated', { comments: comments });\n    }\n\n    $textarea.on('keydown', function(e) {\n      if (e.which === 13 && !e.shiftKey) {\n        e.preventDefault();\n\n        var text = $textarea.val();\n\n        if (text) {\n\n          const comment = {\n            author: '',\n            text\n          };\n\n          self.addComment(element, comment);\n          $textarea.val('');\n          renderComments();\n        }\n      }\n    });\n\n\n    // attach an overlay to a node\n    overlays.add(element, 'comments', {\n      position: {\n        bottom: 10,\n        right: 10\n      },\n      html: $overlay\n    });\n\n    renderComments();\n  }\n\n  eventBus.on('shape.added', function(event) {\n    var element = event.element;\n\n    if (element.labelTarget ||\n       !element.businessObject.$instanceOf('bpmn:FlowNode')) {\n\n      return;\n    }\n\n    defer(function() {\n      createCommentBox(element);\n    });\n\n  });\n\n  this.collapseAll = function() {\n\n    overlays.get({ type: 'comments' }).forEach(function(c) {\n      toggleCollapse(c.element, true);\n    });\n  };\n\n  this.getComments = function(element) {\n    return getComments(element);\n  };\n\n  this.addComment = function(element, comment) {\n    addComment(element, comment);\n\n    eventBus.fire('comments.added', {\n      element: element,\n      comment\n    });\n  };\n\n  this.removeComment = function(element, comment) {\n    removeComment(element, comment);\n\n    eventBus.fire('comments.removed', {\n      element: element,\n      comment: comment\n    });\n  };\n\n  this.events = {\n    ADDED: 'comments.added',\n    REMOVED: 'comments.removed',\n    UPDATED: 'comments.updated',\n    TOGGLED: 'comments.toggled'\n  };\n}\n\nComments.$inject = [ 'eventBus', 'overlays', 'bpmnjs', 'translate' ];\n\n\n// helpers ///////////////\n\nfunction defer(fn) {\n  setTimeout(fn, 0);\n}\n\nfunction getOverlayHtml(translate) {\n  return '<div class=\"comments-overlay\">' +\n    '<div class=\"toggle\">' +\n      '<span class=\"icon-comment\"></span>' +\n      '<span class=\"comment-count\" data-comment-count></span>' +\n    '</div>' +\n    '<div class=\"content\">' +\n      '<div class=\"comments\"></div>' +\n      '<div class=\"edit\">' +\n        `<textarea tabindex=\"1\" placeholder=\"${translate('Add a comment')}\"></textarea>` +\n      '</div>' +\n    '</div>' +\n  '</div>';\n}","import Comments from './comments';\n\nexport default {\n  __init__: [ 'comments' ],\n  'comments': [ 'type', Comments ]\n};"],"names":["_getCommentsElement","element","create","bo","businessObject","docs","get","comments","some","d","textFormat","$model","push","getComments","doc","text","split","map","str","author","setComments","c","join","addComment","comment","removeComment","idx","findIndex","splice","COMMENT_HTML","Comments","eventBus","overlays","bpmnjs","translate","self","toggleCollapse","collapse","o","type","$overlay","html","expanded","is","fire","active","removeClass","addClass","find","focus","createCommentBox","$","getOverlayHtml","click","e","$commentCount","$textarea","$comments","renderComments","forEach","val","$comment","preventDefault","append","length","on","which","shiftKey","add","position","bottom","right","event","labelTarget","$instanceOf","defer","collapseAll","events","ADDED","REMOVED","UPDATED","TOGGLED","$inject","fn","setTimeout","__init__"],"mappings":"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"}