src/cm/media/js/client/c_db.js
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 529 5eeed336b992
permissions -rw-r--r--
Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
Db = function() {
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
     2
  //initial comment db as objs (TREE LIKE MODEL : replies are included in comment.replies)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
     3
  this.comments = null; // current set of (filtered) comments 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
     4
  this.allComments = null; // all server database comments
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
     6
  // obj
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
     7
  // keys : commentDbId as string 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
     8
  // values : comment db as obj
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
     9
  this.commentsByDbId = {};
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    10
  this.allCommentsByDbId = {};
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    11
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    12
  // dictionary (always contains all comments (no reply) whatever the filter
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    13
  // order key --> ordered array of comment ids (no reply)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    14
  this.ordered_comment_ids = {}; // all server database comments
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    15
  
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
Db.prototype = {
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    19
    
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
//////////////////////////////
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    21
//    CORE FUNCTIONS
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
//////////////////////////////
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    23
  init : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    24
    // at first server side ordered comment by asc ids, replies by creation date :
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    25
    this.allComments = CY.JSON.parse(sv_comments) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    26
    if (sv_read_only) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    27
      this.initToReadOnly() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    28
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    29
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    30
      this._computeAllCommentsByDbId() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    31
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    32
      this._reorder() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    33
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    34
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    35
  _del : function (arr, dic, id) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    36
    // first recursively remove all replies
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    37
    var comment = dic[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    38
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    39
    for (var i = 0 ; i < comment.replies.length ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    40
      var rid = comment.replies[i].id ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    41
      this._del(comment.replies, dic, rid) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    42
      i--;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    43
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    44
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    45
    for (var i = 0, ilen = arr.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    46
      if (arr[i].id == id) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    47
        arr.splice(i, 1) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    48
        delete dic[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    49
        break ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    50
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    51
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    52
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    54
  del : function(comment) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    55
    var arr = (comment.reply_to_id == null) ? this.comments : this.commentsByDbId[comment.reply_to_id].replies ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    56
    this._del(arr, this.commentsByDbId, comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    57
    arr = (comment.reply_to_id == null) ? this.allComments : this.allCommentsByDbId[comment.reply_to_id].replies ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    58
    this._del(arr, this.allCommentsByDbId, comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    59
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    60
    this._reorder() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    61
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    62
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    63
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    64
  // maintains the ordered lists
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    65
  _reorder : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    66
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    67
    // scope (order by start_wrapper, start_offset, end_wrapper, end_offset 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    68
    var a = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    69
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    70
    for (var i = 0, ilen = this.allComments.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    71
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    72
      var comment = this.allComments[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    73
      var found = false ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    75
      for (var j = 0, jlen = a.length ; j < jlen ; j++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    76
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    77
        var id = a[j] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    78
        var comment2 = this.allCommentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    79
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    80
        if ((comment.start_wrapper < comment2.start_wrapper)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    81
          ||
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    82
          ((comment.start_wrapper == comment2.start_wrapper) && (comment.start_offset < comment2.start_offset) )
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    83
          ||
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    84
          ((comment.start_wrapper == comment2.start_wrapper) && (comment.start_offset == comment2.start_offset) && (comment.end_wrapper < comment2.end_wrapper) ) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    85
          ||
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    86
          ((comment.start_wrapper == comment2.start_wrapper) && (comment.start_offset == comment2.start_offset) && (comment.end_wrapper == comment2.end_wrapper) && (comment.end_offset < comment2.end_offset) ) ) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    87
            a.splice(j, 0, comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    88
            found = true ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    89
            break ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    90
          }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    91
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    92
      if (!found)  {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    93
        a.push(comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    94
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    95
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    96
    this.ordered_comment_ids['scope']  = a ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    97
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    98
    // modified thread  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
    99
    a = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   100
    var mod = {} ; // we'll aggregate modification dates in this assoc array id --> latest modification
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   101
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   102
    for (var i = 0, ilen = this.allComments.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   103
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   104
      var comment = this.allComments[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   105
      var commentModif = comment.modified ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   106
      
333
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   107
      mod[comment.id] = this._latest_mod(comment);
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   108
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   109
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   110
    for (var id in mod) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   111
      var numberId = this.allCommentsByDbId[id].id      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   112
      var found = false ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   113
      for (var i = 0, ilen = a.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   114
        var id2 = a[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   115
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   116
        if (mod[id] < mod[id2]) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   117
          a.splice(i, 0, numberId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   118
          found = true ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   119
          break ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   120
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   121
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   122
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   123
      if (!found)  {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   124
        a.push(numberId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   125
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   126
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   127
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   128
    this.ordered_comment_ids['modif_thread'] = a ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   129
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
333
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   131
   // Finds recursively the last modification date of a thread.
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   132
  _latest_mod : function(comment) {
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   133
    var latest_mod = comment.modified;
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   134
    for (var i=0; i<comment.replies.length; i++) {
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   135
      var reply = comment.replies[i] ;
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   136
      var reply_mod = this._latest_mod(reply);
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   137
      if (reply_mod > latest_mod)
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   138
        latest_mod = reply_mod;
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   139
    }
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   140
    return latest_mod;
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   141
  },
f080de4cad76 Fix browsing by modifications, take into account every comment in a thread (instead of only the first two levels in each thread).
gibus
parents: 144
diff changeset
   142
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   143
  // EDIT OR ADD CASE : when just added id is max and so both (comments and replies) initial id asc order remains
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   144
  _upd : function(arr, dic, c) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   145
    var found = false ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   146
    for (var i = 0, ilen = arr.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   147
      if (arr[i].id == c.id) { // edit
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   148
        arr.splice(i, 1, c) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   149
        found = true ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   150
        break ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   151
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   152
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   153
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   154
    if (!found) { // add
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   155
      arr.push(c) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   156
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   157
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   158
    dic[c.id] = c ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   159
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   161
  // EDIT OR ADD CASE : when just added id is max and so both (comments and replies) initial id asc order respected
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   162
  upd : function(comment) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   163
    var arr = (comment.reply_to_id == null) ? this.allComments : this.allCommentsByDbId[comment.reply_to_id].replies ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   164
    this._upd(arr, this.allCommentsByDbId, comment) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   165
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   166
    var cloneComment = CY.clone(comment) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   167
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   168
    arr = (comment.reply_to_id == null) ? this.comments : this.commentsByDbId[comment.reply_to_id].replies ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   169
    this._upd(arr, this.commentsByDbId, cloneComment) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   170
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   171
    this._reorder() ;   
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   172
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   173
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   175
  // initializes this.comments
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   176
  // commentId is the result of a computeFilterResults call : no assumption can be made on the order of ids (!)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   177
  // so we'll loop through allComments to carry order from allComments to comments
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   178
  initComments : function(commentIds) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   179
      this.comments = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   180
    for (var i = 0, ilen = this.allComments.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   181
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   182
      var index = CY.Array.indexOf(commentIds, this.allComments[i].id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   183
      if (index != -1) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   184
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   185
        var cloneComment = CY.clone(this.allComments[i]) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   186
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   187
        this.comments.push(cloneComment) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   188
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   189
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   190
      this._computeCommentsByDbId() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   191
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   193
  _computeCommentsByDbId : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   194
    this.commentsByDbId = {} ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   195
      var flatComments = this.getThreads(this.comments) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   196
    for ( var i = 0; i < flatComments.length; i++)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   197
      this.commentsByDbId[flatComments[i].id] = flatComments[i];
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   198
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   199
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   200
  _computeAllCommentsByDbId : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   201
    this.allCommentsByDbId = {} ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   202
      var flatComments = this.getThreads(this.allComments) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   203
    for (var i = 0; i < flatComments.length; i++) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   204
      this.allCommentsByDbId[flatComments[i].id] = flatComments[i];
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   205
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   206
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   207
  // returns threads :
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   208
  // given an array [comment1, comment2, comment3], this function will return [comment1, comment1reply1, comment1reply1reply1, comment1reply1reply2, comment2, comment3, comment3reply1]
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   209
  //note : will return top parents ordered the way comments are
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   210
  getThreads : function(comments) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   211
    var ret = [] ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   213
    for (var i = 0 ; i < comments.length ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   214
      ret.push(comments[i]) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   215
      if (comments[i].replies.length > 0)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   216
        ret = ret.concat(this.getThreads(comments[i].replies)) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   217
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   218
    return ret ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   219
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   220
  _getPath : function(dic, comment) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   221
    var ret = [comment] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   222
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   223
    var c = comment ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   224
    while (c.reply_to_id != null) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   225
      c = dic[c.reply_to_id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   226
      ret.push(c) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   227
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   228
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   229
    return ret ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   230
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   231
  // returns comments as array : [comment, ..., comment's top parent]
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   232
  getPath : function(comment) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   233
    return this._getPath(this.commentsByDbId, comment) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   234
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   235
  // getCommentFromIComment ...
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   236
  getComment : function(dbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   237
    return this.commentsByDbId[dbId] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   238
  },  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   239
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   240
  getCommentByIdKey : function(id_key) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   241
    for (var id in this.commentsByDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   242
      var comment = this.commentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   243
      if (comment.id_key == id_key) { 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   244
        return comment ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   245
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   246
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   247
    return null ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   248
  },  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   249
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   250
  isChild : function(commentDbId, parentDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   251
    var comment = this.commentsByDbId[commentDbId] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   252
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   253
    var isChild = (commentDbId == parentDbId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   254
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   255
    while ((!isChild) && (comment.reply_to_id != null)) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   256
      comment = this.commentsByDbId[comment.reply_to_id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   257
      isChild = (comment.id == parentDbId) ; ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   258
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   259
    return isChild ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   260
  },  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   261
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   262
  initToReadOnly : function(commentDbId, parentDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   263
    for (var i = 0, ilen = this.allComments.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   264
      var comment = this.allComments[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   265
      for (var prop in comment) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   266
        if (0 == prop.indexOf("can_") && typeof comment[prop] === 'boolean')
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   267
          comment[prop] = false ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   268
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   269
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   270
  },  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   271
  
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
//////////////////////////////
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   273
//  BROWSING FUNCTIONS
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
//////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   276
  browsingIndex : function(dbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   277
    var indx = {} ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   278
    for (var order in this.ordered_comment_ids) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   279
      var inFilter =  CY.Array.filter(this.ordered_comment_ids[order], function(id) {return (id in this.commentsByDbId);}, this) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   280
      indx[order] = CY.Array.indexOf(inFilter, dbId ) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   281
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   282
    //indx['total'] = this.ordered_comment_ids['scope'].length
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   283
    return indx ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   284
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   285
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   286
  browse : function(order, whereto, dbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   287
    //var arr = this.ordered_comment_ids[gConf['defaultBrowsingOrder']] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   288
//    CY.log(order) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   289
    var arr = this.ordered_comment_ids[order] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   290
    if (arr.length > 0) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   291
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   292
      var starti = -1 ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   293
      if ((whereto == 'prev') || (whereto == 'next')) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   294
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   295
        for (var i = 0 ; i < arr.length ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   296
          var id = arr[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   297
          if (id == dbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   298
            starti = (whereto == 'prev') ? i - 1 : i + 1 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   299
            starti = (arr.length + starti) % arr.length ; // to guaranty a positive value 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   300
            break ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   301
          }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   302
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   303
        if (starti == -1) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   304
          CY.error("internal error in db browse (was called with a dbId that isn't among the filtered ones)") ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   305
          return null;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   306
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   307
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   308
      if (whereto == 'last') {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   309
        starti = arr.length - 1 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   310
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   311
      if (whereto == 'first') {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   312
        starti = 0 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   313
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   314
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   315
      for (var i = starti, j = 0 ; (i >= 0) && (i < arr.length) ; j++ ) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   316
        var id = arr[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   317
        if (id in this.commentsByDbId) // checking id is among the filtered ones
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   318
          return this.commentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   319
        if ((whereto == 'prev') || (whereto == 'last')) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   320
          i = i - 1 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   321
        else  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   322
          i = i + 1 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   323
        i = (arr.length + i) % arr.length ; // to guaranty a positive value
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   324
        if (j > arr.length)// to prevent an infinite loop
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   325
          break ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   326
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   327
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   328
      CY.error("internal error in db browse (could not find any filtered comment)") ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   329
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   330
    return null;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   331
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   332
  
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
//////////////////////////////
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   334
//  FILTER FUNCTIONS
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
//////////////////////////////
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   336
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   337
  //returns the list of commentIds satisfying the filter
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   338
  computeFilterResults : function(filterGETValues) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   339
      var filterData = {} ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   340
      if (filterGETValues) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   341
      for (key in filterGETValues) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   342
        if (key.indexOf('filter_') == 0) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   343
          filterData[key.substr('filter_'.length)] = filterGETValues[key];
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   344
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   345
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   346
      else {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   347
      if (gLayout.isInFrame()) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   348
        filterData = parent.f_getFrameFilterData() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   349
      }
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   351
    var cWithNameIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   352
    var rWithNameIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   353
    var filterName = "" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   354
    if ('name' in filterData)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   355
      filterName = filterData['name'] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   356
    this.filterByName(filterName, cWithNameIds, rWithNameIds) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   357
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   358
    var cAfterDateIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   359
    var rAfterDateIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   360
    var filterDate = "" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   361
    if ('date' in filterData)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   362
      filterDate = filterData['date'] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   363
    this.filterByDate(filterDate, cAfterDateIds, rAfterDateIds) ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   365
    var cWithTextIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   366
    var rWithTextIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   367
    var filterText = "" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   368
    if ('text' in filterData)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   369
      filterText = filterData['text'] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   370
    this.filterByText(filterText, cWithTextIds, rWithTextIds) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   371
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   372
    var cWithTagIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   373
    var rWithTagIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   374
    var filterTag = "" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   375
    if ('tag' in filterData)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   376
      filterTag = filterData['tag'] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   377
    this.filterByTag(filterTag, cWithTagIds, rWithTagIds) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   378
    
504
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   379
    var cWithCatIds = [] ;
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   380
    var rWithCatIds = [] ;
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   381
    var filterCat = "" ;
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   382
    if ('cat' in filterData)
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   383
      filterCat = filterData['cat'] ;
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   384
    this.filterByCat(filterCat, cWithCatIds, rWithCatIds) ;
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   385
    
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   386
    var cWithStateIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   387
    var rWithStateIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   388
    var filterState = "" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   389
    if ('state' in filterData)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   390
      filterState = filterData['state'] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   391
    this.filterByState(filterState, cWithStateIds, rWithStateIds) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   392
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   393
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   394
    var commentIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   395
    var replyIds = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   396
    // find intersections
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   397
    for (var i = 0, ilen = cWithNameIds.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   398
      var id = cWithNameIds[i] ;
504
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   399
      if ((CY.Array.indexOf(cAfterDateIds, id) != -1) && (CY.Array.indexOf(cWithTextIds,id) != -1) && (CY.Array.indexOf(cWithTagIds,id) != -1) && (CY.Array.indexOf(cWithCatIds,id) != -1) && (CY.Array.indexOf(cWithStateIds,id) != -1)) {
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   400
        commentIds.push(id) ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   401
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   402
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   403
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   404
    for (var i = 0, ilen = rWithNameIds.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   405
      var id = rWithNameIds[i] ;
504
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   406
      if ((CY.Array.indexOf(rAfterDateIds,id) != -1) && (CY.Array.indexOf(rWithTextIds,id) != -1) && (CY.Array.indexOf(rWithTagIds,id) != -1) && (CY.Array.indexOf(rWithCatIds,id) != -1) && (CY.Array.indexOf(rWithStateIds,id) != -1)) {
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   407
        replyIds.push(id) ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   408
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   409
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   410
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   411
    var nbReplies = replyIds.length, nbComments = commentIds.length ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   412
    var nbDiscussions = nbComments ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   413
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   414
    // look for comments to add because a reply satisfies the filter
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   415
//    CY.log('replyIds:') ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   416
//    CY.log(replyIds) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   417
//    CY.log('this.allCommentsByDbId :');CY.A
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   418
//    CY.log(this.allCommentsByDbId);
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   419
    for (var i = 0, ilen = replyIds.length ; i < ilen ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   420
      var id = replyIds[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   421
      var reply = this.allCommentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   422
      var parents = this._getPath(this.allCommentsByDbId, reply) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   423
      var topComment = parents[parents.length - 1] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   424
      var id = topComment.id ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   425
      if (CY.Array.indexOf(commentIds,id) == -1) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   426
        commentIds.push(id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   427
        nbDiscussions++ ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   428
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   429
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   430
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   431
    return {'commentIds': commentIds,'nbDiscussions':nbDiscussions, 'nbComments':nbComments, 'nbReplies':nbReplies} ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   432
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   434
  filterByText : function(text, cWithTextIds, rWithTextIds) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   435
    var re = new RegExp(text, "gi");
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   436
    for (var id in this.allCommentsByDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   437
      var comment = this.allCommentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   438
      if (text == "" || re.exec(comment.title) != null || re.exec(comment.content) != null) { // search only in the comment (not the comment scope) for now
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   439
        if (comment.reply_to_id == null) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   440
          cWithTextIds.push(comment.id);
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   441
        else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   442
          rWithTextIds.push(comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   443
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   444
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   445
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   447
  filterByName : function(name, cWithNameIds, rWithNameIds) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   448
    for (var id in this.allCommentsByDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   449
      var comment = this.allCommentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   450
      if (name == "" || comment.name == name) { // sensitive exact match for now
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   451
        if (comment.reply_to_id == null) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   452
          cWithNameIds.push(comment.id);
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   453
        else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   454
          rWithNameIds.push(comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   455
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   456
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   457
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   459
  // warning : tags are case sensitive
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   460
  filterByTag : function(tag, cWithTagIds, rWithTagIds) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   461
    // cf ", ".join... in client.py 
413
2479d33898dd Fix mismatching filter with tag.
gibus
parents: 341
diff changeset
   462
    var re0 = new RegExp("^" + tag + "$", ''); 
2479d33898dd Fix mismatching filter with tag.
gibus
parents: 341
diff changeset
   463
    var re1 = new RegExp("^" + tag + ", ", '');
2479d33898dd Fix mismatching filter with tag.
gibus
parents: 341
diff changeset
   464
    var re2 = new RegExp(", " + tag + ", ", ''); 
2479d33898dd Fix mismatching filter with tag.
gibus
parents: 341
diff changeset
   465
    var re3 = new RegExp(", " + tag + "$", ''); 
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   466
    for (var id in this.allCommentsByDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   467
      var comment = this.allCommentsByDbId[id] ;
413
2479d33898dd Fix mismatching filter with tag.
gibus
parents: 341
diff changeset
   468
      if ((tag == "") || re0.exec(comment.tags) != null || re1.exec(comment.tags) != null || re2.exec(comment.tags) != null || re3.exec(comment.tags) != null) { // search only in the comment (not the comment scope) for now
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   469
        if (comment.reply_to_id == null) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   470
          cWithTagIds.push(comment.id);
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   471
        else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   472
          rWithTagIds.push(comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   473
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   474
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   475
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
504
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   477
  filterByCat : function(cat, cWithCatIds, rWithCatIds) {
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   478
    for (var id in this.allCommentsByDbId) {
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   479
      var comment = this.allCommentsByDbId[id] ;
529
5eeed336b992 Filter by category should also be tested for undefined (and not just empty string) in case no category has been defined.
Production Moz <dev@sopinspace.com>
parents: 504
diff changeset
   480
      if (cat == undefined || cat == "" || comment.category == cat) { 
504
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   481
        if (comment.reply_to_id == null) {
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   482
          cWithCatIds.push(comment.id);
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   483
          if (comment.replies.length) {
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   484
            for (var reply in comment.replies) {
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   485
              rWithCatIds.push(comment.replies[reply].id) ;
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   486
            }
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   487
          }
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   488
        }
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   489
      }
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   490
    }
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   491
  },
b2e0186daa5b Adds a category to comments, painted with colored vertical bar.
gibus
parents: 413
diff changeset
   492
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   493
  filterByState : function(state, cWithStateIds, rWithStateIds) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   494
    for (var id in this.allCommentsByDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   495
      var comment = this.allCommentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   496
      if (state == "" || comment.state == state) { 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   497
        if (comment.reply_to_id == null) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   498
          cWithStateIds.push(comment.id);
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   499
        else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   500
          rWithStateIds.push(comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   501
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   502
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   503
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   504
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   505
  filterByDate : function(date_str, cAfterDateIds, rAfterDateIds) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   506
    var date = (date_str == "") ? 0 : parseInt(date_str) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   507
    for (var id in this.allCommentsByDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   508
      var comment = this.allCommentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   509
      if (comment.modified > date) { 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   510
        if (comment.reply_to_id == null) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   511
          cAfterDateIds.push(comment.id); 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   512
        else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   513
          rAfterDateIds.push(comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   514
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   515
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   516
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   517
//  filterByDate : function(date_str, cAfterDateIds, rAfterDateIds) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   518
//    var date = (date_str == "") ? "" : Date.parseDate(date_str, sv_client_date_fmt).getTime() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   519
//    for (var id in this.allCommentsByDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   520
//      var comment = this.allCommentsByDbId[id] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   521
//      // TODO : created should be the date not a string !!
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   522
//      var create_date = (date_str == "") ? "" : Date.parseDate(comment.created_str, sv_client_date_fmt).getTime() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   523
//      if (date_str == "" || create_date > date) { 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   524
//        if (comment.reply_to_id == null) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   525
//          cAfterDateIds.push(comment.id); 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   526
//        else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   527
//          rAfterDateIds.push(comment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   528
//      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   529
//    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   530
//  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   531
  
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   532
//////////////////////////////
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   533
//  COUNT FUNCTIONS
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   534
//////////////////////////////
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   535
  
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   536
  getCommentsAndRepliesCounts : function(all) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   537
    var cCount = 0 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   538
    var rCount = 0 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   539
    var arr = (all) ? this.allComments:this.comments;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   540
      var flatComments = this.getThreads(arr) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   541
    for ( var i = 0; i < flatComments.length; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   542
      if (flatComments[i].reply_to_id == null)
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   543
        cCount++ ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   544
      else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   545
        rCount++ ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   546
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   547
    return [cCount, rCount] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   548
  },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   549
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   550
  // counts both comments and comments 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   551
  getCommentsNb : function(all) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   552
    var arr = (all) ? this.allComments:this.comments;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   553
      return this.getThreads(arr).length ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   554
  },
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   555
  getFilteredCommentIdsAsString : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   556
    var ret = "" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   557
    for (var id in this.commentsByDbId) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   558
      ret = ret + id + "," ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   559
    return ret ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 333
diff changeset
   560
  }
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   561
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   562
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   563