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