src/cm/media/js/client/c_scopes.js
changeset 504 b2e0186daa5b
parent 373 f6fe14eb51bc
child 519 e89c25780e6e
--- a/src/cm/media/js/client/c_scopes.js	Wed Mar 27 17:51:18 2013 +0100
+++ b/src/cm/media/js/client/c_scopes.js	Tue Jun 25 11:56:01 2013 +0200
@@ -266,12 +266,22 @@
 //elt is supposed to be c-c classed
 _addIdClass = function (elt, commentId) {
   CY.DOM.addClass(elt, 'c-id-' + commentId) ;
+  var block_elt = _findParentBlockElt(elt);
+  if (block_elt != null) {
+    _unpaintCategories(block_elt);
+    _repaintCategories(elt, block_elt);
+  }
   _updateCommentCounter(elt) ;
 } ;
 
 //elt is supposed to be c-c classed
 _removeIdClass = function (elt, commentId) {
   CY.DOM.removeClass(elt, 'c-id-' + commentId) ;
+  var block_elt = _findParentBlockElt(elt);
+  if (block_elt != null) {
+    _unpaintCategories(block_elt);
+    _repaintCategories(elt, block_elt, commentId);
+  }
   _updateCommentCounter(elt) ;
 } ;
 
@@ -280,8 +290,51 @@
   var re = _cgetRegExp('(?:^|\\s+)c-id-(?:\\d+)', 'g');
   elt['className'] = elt['className'].replace(re, " ") ;
   _updateCommentCounter(elt) ;
+  var block_elt = _findParentBlockElt(elt);
+  if (block_elt != null) {
+    _unpaintCategories(block_elt);
+  }
 } ;
 
+// Finds the closest parent of an element which is a block.
+_findParentBlockElt = function(elt) {
+  var block_elt = elt;
+  var block_elt_style = block_elt.currentStyle || window.getComputedStyle(block_elt, ""); 
+  var block_elt_display = block_elt_style.display;
+  while (block_elt != null && block_elt_display != 'block') {
+    block_elt = block_elt.parentElement;
+    block_elt_style = block_elt.currentStyle || window.getComputedStyle(block_elt, ""); 
+    block_elt_display = block_elt_style.display;
+  }
+  return block_elt;
+};
+
+// Removes all vertical bars from a block element.
+_unpaintCategories = function(block_elt) {
+  CY.DOM.removeClass(block_elt, 'cat1');
+  CY.DOM.removeClass(block_elt, 'cat2');
+  CY.DOM.removeClass(block_elt, 'cat3');
+  CY.DOM.removeClass(block_elt, 'cat4');
+  CY.DOM.removeClass(block_elt, 'cat5');
+}
+
+// Paints all vertical bars of a block element but the one for commentId if not null.
+_repaintCategories = function(elt, block_elt, commentId) {
+  // Loop through all comments in this wrapper id
+  var wrapper_id = parseInt(getWrapperAncestor(elt).id.substr(3));
+  var len = gDb.comments.length;
+  for (var i=0; i<len; i++) {
+    if (i in gDb.comments) {
+      var comment = gDb.comments[i];
+      if ((commentId == null || comment.id != commentId) && comment.start_wrapper <= wrapper_id && comment.end_wrapper >= wrapper_id) {
+        if (comment.category) {
+          CY.DOM.addClass(block_elt, 'cat' + comment.category);
+        }
+      }
+    }
+  }
+}
+
 _recAddComment = function (elt, commentId) {
   if (CY.DOM.hasClass(elt, 'c-c')) {
     _addIdClass(elt, commentId) ;