src/cm/media/js/client/c_icomments.js
author gibus
Mon, 01 Oct 2012 11:00:56 +0200
changeset 469 08d57b273596
parent 341 053551f213fb
permissions -rw-r--r--
When building toc, delete <a> elements, including when written in uppercase (<A>).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
// gConf
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
IComments = function() {
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
     3
  // this class manages Comments interface (fetched comments <--> IComment.commentId != null)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
     5
  this._c = [] ; // IComments instances   // commentId == null means is connected to no comment anymore
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
     7
  this._a = [] ; // IComments animations to run
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
     9
  this._nbEndedAnim = 0 ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    11
  this._topActiveCommentDbId = null ; // active 
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
IComments.prototype = {
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    15
    init : function (container) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    16
      for (var i = 0 ; i < gConf['iCommentsInitAlloc']; i++) { 
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    17
        this._c.push(new IComment()) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    18
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
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: 337
diff changeset
    21
    getIComment : function (commentId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    22
      return CY.Array.find(this._c, function(iComment) { return (iComment.isfetched() && iComment.commentId == commentId) ;}) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    23
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    24
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    25
    insertAfter : function (previousComment, comment) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    26
      var _cids = CY.Array.map(this._c, function(iComment) { return iComment.commentId ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    27
      var index = CY.Array.indexOf(_cids, previousComment.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    28
      if (index != -1) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    29
        this._c.splice(index + 1, 0, new IComment()) ; // will append when index + 1 == array length
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    30
        this._c[index + 1].fetch(comment) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    31
        return this._c[index + 1] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    32
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    33
      return null ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    34
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    35
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    36
    _remove : function (iComments) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    37
      var toRemoveIds = CY.Array.map(iComments, function(comment) { return comment.commentId ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    38
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    39
      for (var i = 0 ; i < this._c.length ; i++) { // starting at the bottom to be sure that last remove will be iComment  
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    40
        var iComment2 = this._c[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    41
        if (iComment2.isfetched() && CY.Array.indexOf(toRemoveIds, iComment2.commentId) != -1) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    42
          
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    43
          iComment2.unfetch() ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    45
          this._c.push(this._c.splice(i, 1)[0]) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    46
          
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    47
          i-- ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    48
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    49
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    50
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    51
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    52
    // all children, comment's IComment included !
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    53
    // model based (cf. gDb)
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    54
    _getChildren : function (commentId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    55
      return CY.Array.filter(this._c, function(iComment) { return (iComment.isfetched() && gDb.isChild(iComment.commentId,commentId)) ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    56
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    58
    _getInvisibleChildren : function (commentId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    59
      return CY.Array.filter(this._getChildren(commentId), function(iComment) { return (!iComment.isVisible()) ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    60
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    62
    // REFRESH (readreplies link etc ?..)
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    63
    refresh : function (commentId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    64
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    65
      var iComment = this.getIComment(commentId) ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    67
      var invisibleChildrenIComments = this._getInvisibleChildren(commentId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    68
      if (invisibleChildrenIComments.length > 0) //parentIComment is supposed to be visible
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    69
        iComment.showReadRepliesLnk() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    70
      else
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    71
        iComment.hideReadRepliesLnk() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    72
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    74
    remove : function (commentId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    75
      this._remove(this._getChildren(commentId)) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    76
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    78
    close : function (commentId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    79
      CY.Array.each(this._getChildren(commentId), function (iComment) { iComment.hide() ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    80
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    82
    open : function (commentId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    83
      CY.Array.each(this._getChildren(commentId), function (iComment) { iComment.show() ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    84
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    86
    fetch : function (comments) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    87
      // fill
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    88
      for (var i = 0 ; i < comments.length; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    89
        if (i == this._c.length)
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    90
          this._c.push(new IComment()) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    91
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    92
        this._c[i].fetch(comments[i]) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    93
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    94
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    95
      // nullify others
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    96
      for (var i = comments.length ; i < this._c.length ; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    97
        this._c[i].unfetch() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    98
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
    99
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   100
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   101
    setPosition : function (xy) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   102
      CY.each(this._c, function (iComment) { iComment.setPosition(xy) ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   103
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   105
    show : function () {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   106
      CY.each(this._c, function (iComment) { 
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   107
        if (iComment.isfetched()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   108
          iComment.show();
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   109
        }}) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   110
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   111
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   112
    hide : function () {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   113
      this.deactivate(); // to prevent a chain of activate / deactivate while hiding IComments one by one
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   114
      CY.each(this._c, function (iComment) { if (iComment.commentId != null) iComment.hide(); }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   115
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   116
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   117
    setWidth : function (colWidth) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   118
      var nextY = null ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   119
      for (var i = 0 ; i < this._c.length; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   120
        var iComment = this._c[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   121
        iComment.setWidth(colWidth) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   122
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   123
        if (iComment.commentId != null && iComment.isVisible()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   124
          var xy = iComment.getPosition() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   125
          if (nextY == null) 
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   126
            nextY = xy[1] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   127
          xy[1] = nextY ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   128
          iComment.setPosition(xy) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   129
          nextY += iComment.getHeight() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   130
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   131
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   132
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   134
    getTopPosition:function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   135
      for (var i = 0 ; i < this._c.length; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   136
        var iComment = this._c[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   137
        if (iComment.commentId != null && iComment.isVisible())
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   138
          return iComment.getPosition() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   139
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   140
      return null
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   141
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   143
    getPosition:function(id) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   144
      for (var i = 0 ; i < this._c.length; i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   145
        var iComment = this._c[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   146
        if (iComment.commentId == id && iComment.isVisible())
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   147
          return iComment.getPosition() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   148
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   149
      return null ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   150
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   152
    setAnimationToPositions : function (y) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   153
      this._initAnimations();
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   154
      //CY.log(gPrefs.get('comments','threadpad')) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   155
      var lpad = (gPrefs.get('comments','threadpad') == '1') ? gConf['iCommentThreadPadding'] : 0 ; // gIThreadPad ... TODO 'configurize'
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   157
      var nextY = y ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   158
      for (var i = 0 ; i < this._c.length;i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   159
        var iComment = this._c[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   160
        if (iComment.isfetched && iComment.isVisible()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   161
          var comment_path = gDb.getPath(gDb.getComment(iComment.commentId)) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   162
          var iCommentX = ((comment_path.length - 1) * lpad) + gConf['iCommentLeftPadding'] ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   164
          if (nextY == null) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   165
            var xy = iComment.getPosition() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   166
            nextY = xy[1] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   167
          }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   168
          
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   169
          this._a.push(iComment.setAnimationToPosition([iCommentX, nextY])) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   170
          nextY += iComment.getHeight() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   171
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   172
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   173
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   174
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   175
    setAnimationToPositionsAndFocus : function (y, focusCommentId, reply) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   176
      this._initAnimations();
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   177
      var lpad = (gPrefs.get('comments','threadpad') == '1') ? gConf['iCommentThreadPadding'] : 0 ;
329
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   178
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   179
      var nextY = y ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   180
      for (var i = 0 ; i < this._c.length;i++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   181
        var iComment = this._c[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   182
        if (iComment.isfetched && iComment.isVisible()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   183
          var comment_path = gDb.getPath(gDb.getComment(iComment.commentId)) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   184
          var iCommentX = ((comment_path.length - 1) * lpad) + gConf['iCommentLeftPadding'] ;
329
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   185
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   186
          if (nextY == null) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   187
            var xy = iComment.getPosition() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   188
            nextY = xy[1] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   189
          }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   190
          
331
7ddb9fa9c3f2 focus on comment specified as url parameter *even if it is not the last comment of a thread*
gibus
parents: 329
diff changeset
   191
          if (iComment.commentId >= focusCommentId)
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   192
            this._a.push(iComment.setAnimationToPosition([iCommentX, nextY], focusCommentId, reply)) ;
329
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   193
          else
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   194
            this._a.push(iComment.setAnimationToPosition([iCommentX, nextY])) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   195
          nextY += iComment.getHeight() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   196
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   197
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   198
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   199
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   200
// ANIMATION FUNCTIONS    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   201
    _initAnimations : function () {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   202
      this._a = [] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   203
      this._nbEndedAnim = 0 ;     
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   204
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   205
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   206
    runAnimations : function () {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   207
      if (this._a.length == 0) // will occur when closing last displayed comment
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   208
        gSync.resetAutoContinue("animationRun") ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   209
      else 
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   210
        CY.each(this._a, function (animation) { animation.run() ; }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   211
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   212
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   213
    whenAnimationsEnd : function () {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   214
      gSync.resume() ;    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   215
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   216
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   217
    whenAnimationsEndFocus : function () {
329
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   218
      gGETValues = CY.JSON.parse(sv_get_params);
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   219
      if ("comment_id_key" in gGETValues) {
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   220
        var id_key = gGETValues["comment_id_key"];
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   221
        var focusComment = gDb.getCommentByIdKey(id_key);
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   222
        if (focusComment != null)
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   223
          gIComments.getIComment(focusComment.id).overlay.focus();
00df963f91fb When comment_id_key is passed as URL parameter, focus on this comment, instead of the top comment of the related thread.
gibus
parents: 217
diff changeset
   224
      }
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   225
      gSync.resume();
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   226
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   227
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   228
    whenAnimationsEndReply : function () {
337
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   229
      gGETValues = CY.JSON.parse(sv_get_params);
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   230
      if ("comment_id_key" in gGETValues) {
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   231
        var id_key = gGETValues["comment_id_key"];
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   232
        var focusComment = gDb.getCommentByIdKey(id_key);
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   233
        if (focusComment != null) {
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   234
          gSync.showReplyForm(gIComments.getIComment(focusComment.id));
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   235
        }
614669e0e313 Add url parameter (comment_op=reply) to open automatically reply to comment form
gibus
parents: 331
diff changeset
   236
      }
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   237
      gSync.resume();
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   238
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   239
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   240
    animationsEnded : function () {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   241
      return ((this._a.length == 0) || (this._a.length == this._nbEndedAnim)) ;     
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   242
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   243
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   244
    signalAnimationEnd : function () {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   245
      this._nbEndedAnim++ ;         
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   246
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   247
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   248
// ACTIVE RELATED FUNCTIONS   
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   249
    // returns true only for the top iComment
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   250
    isTopActive : function(commentDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   251
      return ((commentDbId != null) && (this._topActiveCommentDbId == commentDbId)) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   252
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   253
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   254
    isAnyActive : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   255
      return (this._topActiveCommentDbId != null) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   256
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   257
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   258
    //warning : calling this function "focus" would make IE get mad
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   259
    activate : function(commentDbId) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   260
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   261
      if (this._topActiveCommentDbId != null) {// then deactivate current 
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   262
        this.deactivate() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   263
      }
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   265
      // activate whole top parent thread
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   266
      var comment = gDb.getComment(commentDbId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   267
      var comment_path = gDb.getPath(comment) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   268
      var topParent = comment_path[comment_path.length - 1] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   269
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   270
      var iComments = this._getChildren(topParent.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   271
      CY.Array.each(iComments, function(iComment){iComment.activate();}) ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   273
      this._topActiveCommentDbId = topParent.id ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   275
      // update browser index
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   276
      if (gLayout.isInFrame()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   277
        var indxDict = gDb.browsingIndex(this._topActiveCommentDbId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   278
        parent.$("#browse_by option").each(function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   279
          var rank = 1 + indxDict[this.value] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   280
          parent.$("#c_browse_indx_"+this.value).html(''+ rank) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   281
        }) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   282
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   283
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   284
      showScope(topParent.id) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   285
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   286
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   287
    deactivate : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   288
      if (this._topActiveCommentDbId != null) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   289
        parent.$("#browse_by option").each(function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   290
          parent.$("#c_browse_indx_"+this.value).html('-') ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   291
        }) ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   293
        // scopes
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   294
        hideScopeAnyway() ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   295
        
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   296
        var iComments = this._getChildren(this._topActiveCommentDbId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   297
        CY.Array.each(iComments, function(iComment){iComment.deactivate();}) ;
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   299
        this._topActiveCommentDbId = null ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   300
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   301
    },
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   303
    // active next IComment among the displayed ones (try below and if couldn't try above)
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   304
    // model based
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   305
    activateVisibleNext : function() {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   306
      
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   307
      if (this._topActiveCommentDbId != null) {
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
341
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   309
        for (var j = 0 ; j < 2 ; j++) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   310
          
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   311
          var start = (j==0) ? 0 : this._c.length - 1 ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   312
          
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   313
          var b = false ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   314
          
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   315
          for (var i = start ; (i >= 0) && i <= (this._c.length - 1) ;) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   316
            var iComment = this._c[i] ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   317
            
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   318
            if (iComment.commentId != null && iComment.isVisible()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   319
              b = b || (gDb.isChild(iComment.commentId,this._topActiveCommentDbId)) ; 
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   320
              if (b && (!gDb.isChild(iComment.commentId,this._topActiveCommentDbId))) { // found the one below that doesn't have topActive as parent
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   321
                this.activate(iComment.commentId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   322
                return true ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   323
              }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   324
            }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   325
            i = (j == 0) ? i + 1 : i - 1 ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   326
          }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   327
        }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   328
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   329
      return false ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   330
    },
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   331
    
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   332
    browse : function(order, whereto) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   333
      var wt = whereto ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   334
      if ((whereto == "prev") && !this.isAnyActive()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   335
        wt = "last" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   336
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   337
      if ((whereto == "next") && !this.isAnyActive()) {
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   338
        wt = "first" ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   339
      }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   340
      return gDb.browse(order, wt, this._topActiveCommentDbId) ;
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   341
    }
053551f213fb Coding style for js: expand tabs
gibus
parents: 337
diff changeset
   342
    
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
}