--- a/src/cm/media/js/client/c_icomments.js Mon Nov 29 15:05:21 2010 +0100
+++ b/src/cm/media/js/client/c_icomments.js Tue Nov 30 09:53:35 2010 +0100
@@ -1,220 +1,220 @@
// gConf
IComments = function() {
- // this class manages Comments interface (fetched comments <--> IComment.commentId != null)
+ // this class manages Comments interface (fetched comments <--> IComment.commentId != null)
- this._c = [] ; // IComments instances // commentId == null means is connected to no comment anymore
+ this._c = [] ; // IComments instances // commentId == null means is connected to no comment anymore
- this._a = [] ; // IComments animations to run
+ this._a = [] ; // IComments animations to run
- this._nbEndedAnim = 0 ;
+ this._nbEndedAnim = 0 ;
- this._topActiveCommentDbId = null ; // active
+ this._topActiveCommentDbId = null ; // active
}
IComments.prototype = {
- init : function (container) {
- for (var i = 0 ; i < gConf['iCommentsInitAlloc']; i++) {
- this._c.push(new IComment()) ;
- }
- },
+ init : function (container) {
+ for (var i = 0 ; i < gConf['iCommentsInitAlloc']; i++) {
+ this._c.push(new IComment()) ;
+ }
+ },
- getIComment : function (commentId) {
- return CY.Array.find(this._c, function(iComment) { return (iComment.isfetched() && iComment.commentId == commentId) ;}) ;
- },
-
- insertAfter : function (previousComment, comment) {
- var _cids = CY.Array.map(this._c, function(iComment) { return iComment.commentId ; }) ;
- var index = CY.Array.indexOf(_cids, previousComment.id) ;
- if (index != -1) {
- this._c.splice(index + 1, 0, new IComment()) ; // will append when index + 1 == array length
- this._c[index + 1].fetch(comment) ;
- return this._c[index + 1] ;
- }
- return null ;
- },
-
- _remove : function (iComments) {
- var toRemoveIds = CY.Array.map(iComments, function(comment) { return comment.commentId ; }) ;
-
- for (var i = 0 ; i < this._c.length ; i++) { // starting at the bottom to be sure that last remove will be iComment
- var iComment2 = this._c[i] ;
- if (iComment2.isfetched() && CY.Array.indexOf(toRemoveIds, iComment2.commentId) != -1) {
-
- iComment2.unfetch() ;
+ getIComment : function (commentId) {
+ return CY.Array.find(this._c, function(iComment) { return (iComment.isfetched() && iComment.commentId == commentId) ;}) ;
+ },
+
+ insertAfter : function (previousComment, comment) {
+ var _cids = CY.Array.map(this._c, function(iComment) { return iComment.commentId ; }) ;
+ var index = CY.Array.indexOf(_cids, previousComment.id) ;
+ if (index != -1) {
+ this._c.splice(index + 1, 0, new IComment()) ; // will append when index + 1 == array length
+ this._c[index + 1].fetch(comment) ;
+ return this._c[index + 1] ;
+ }
+ return null ;
+ },
+
+ _remove : function (iComments) {
+ var toRemoveIds = CY.Array.map(iComments, function(comment) { return comment.commentId ; }) ;
+
+ for (var i = 0 ; i < this._c.length ; i++) { // starting at the bottom to be sure that last remove will be iComment
+ var iComment2 = this._c[i] ;
+ if (iComment2.isfetched() && CY.Array.indexOf(toRemoveIds, iComment2.commentId) != -1) {
+
+ iComment2.unfetch() ;
- this._c.push(this._c.splice(i, 1)[0]) ;
-
- i-- ;
- }
- }
- },
-
- // all children, comment's IComment included !
- // model based (cf. gDb)
- _getChildren : function (commentId) {
- return CY.Array.filter(this._c, function(iComment) { return (iComment.isfetched() && gDb.isChild(iComment.commentId,commentId)) ; }) ;
- },
+ this._c.push(this._c.splice(i, 1)[0]) ;
+
+ i-- ;
+ }
+ }
+ },
+
+ // all children, comment's IComment included !
+ // model based (cf. gDb)
+ _getChildren : function (commentId) {
+ return CY.Array.filter(this._c, function(iComment) { return (iComment.isfetched() && gDb.isChild(iComment.commentId,commentId)) ; }) ;
+ },
- _getInvisibleChildren : function (commentId) {
- return CY.Array.filter(this._getChildren(commentId), function(iComment) { return (!iComment.isVisible()) ; }) ;
- },
+ _getInvisibleChildren : function (commentId) {
+ return CY.Array.filter(this._getChildren(commentId), function(iComment) { return (!iComment.isVisible()) ; }) ;
+ },
- // REFRESH (readreplies link etc ?..)
- refresh : function (commentId) {
-
- var iComment = this.getIComment(commentId) ;
+ // REFRESH (readreplies link etc ?..)
+ refresh : function (commentId) {
+
+ var iComment = this.getIComment(commentId) ;
- var invisibleChildrenIComments = this._getInvisibleChildren(commentId) ;
- if (invisibleChildrenIComments.length > 0) //parentIComment is supposed to be visible
- iComment.showReadRepliesLnk() ;
- else
- iComment.hideReadRepliesLnk() ;
- },
+ var invisibleChildrenIComments = this._getInvisibleChildren(commentId) ;
+ if (invisibleChildrenIComments.length > 0) //parentIComment is supposed to be visible
+ iComment.showReadRepliesLnk() ;
+ else
+ iComment.hideReadRepliesLnk() ;
+ },
- remove : function (commentId) {
- this._remove(this._getChildren(commentId)) ;
- },
+ remove : function (commentId) {
+ this._remove(this._getChildren(commentId)) ;
+ },
- close : function (commentId) {
- CY.Array.each(this._getChildren(commentId), function (iComment) { iComment.hide() ; }) ;
- },
+ close : function (commentId) {
+ CY.Array.each(this._getChildren(commentId), function (iComment) { iComment.hide() ; }) ;
+ },
- open : function (commentId) {
- CY.Array.each(this._getChildren(commentId), function (iComment) { iComment.show() ; }) ;
- },
+ open : function (commentId) {
+ CY.Array.each(this._getChildren(commentId), function (iComment) { iComment.show() ; }) ;
+ },
- fetch : function (comments) {
- // fill
- for (var i = 0 ; i < comments.length; i++) {
- if (i == this._c.length)
- this._c.push(new IComment()) ;
-
- this._c[i].fetch(comments[i]) ;
- }
-
- // nullify others
- for (var i = comments.length ; i < this._c.length ; i++) {
- this._c[i].unfetch() ;
- }
- },
-
- setPosition : function (xy) {
- CY.each(this._c, function (iComment) { iComment.setPosition(xy) ; }) ;
- },
+ fetch : function (comments) {
+ // fill
+ for (var i = 0 ; i < comments.length; i++) {
+ if (i == this._c.length)
+ this._c.push(new IComment()) ;
+
+ this._c[i].fetch(comments[i]) ;
+ }
+
+ // nullify others
+ for (var i = comments.length ; i < this._c.length ; i++) {
+ this._c[i].unfetch() ;
+ }
+ },
+
+ setPosition : function (xy) {
+ CY.each(this._c, function (iComment) { iComment.setPosition(xy) ; }) ;
+ },
- show : function () {
- CY.each(this._c, function (iComment) {
- if (iComment.isfetched()) {
- iComment.show();
- }}) ;
- },
-
- hide : function () {
- this.deactivate(); // to prevent a chain of activate / deactivate while hiding IComments one by one
- CY.each(this._c, function (iComment) { if (iComment.commentId != null) iComment.hide(); }) ;
- },
-
- setWidth : function (colWidth) {
- var nextY = null ;
- for (var i = 0 ; i < this._c.length; i++) {
- var iComment = this._c[i] ;
- iComment.setWidth(colWidth) ;
-
- if (iComment.commentId != null && iComment.isVisible()) {
- var xy = iComment.getPosition() ;
- if (nextY == null)
- nextY = xy[1] ;
- xy[1] = nextY ;
- iComment.setPosition(xy) ;
- nextY += iComment.getHeight() ;
- }
- }
- },
+ show : function () {
+ CY.each(this._c, function (iComment) {
+ if (iComment.isfetched()) {
+ iComment.show();
+ }}) ;
+ },
+
+ hide : function () {
+ this.deactivate(); // to prevent a chain of activate / deactivate while hiding IComments one by one
+ CY.each(this._c, function (iComment) { if (iComment.commentId != null) iComment.hide(); }) ;
+ },
+
+ setWidth : function (colWidth) {
+ var nextY = null ;
+ for (var i = 0 ; i < this._c.length; i++) {
+ var iComment = this._c[i] ;
+ iComment.setWidth(colWidth) ;
+
+ if (iComment.commentId != null && iComment.isVisible()) {
+ var xy = iComment.getPosition() ;
+ if (nextY == null)
+ nextY = xy[1] ;
+ xy[1] = nextY ;
+ iComment.setPosition(xy) ;
+ nextY += iComment.getHeight() ;
+ }
+ }
+ },
- getTopPosition:function() {
- for (var i = 0 ; i < this._c.length; i++) {
- var iComment = this._c[i] ;
- if (iComment.commentId != null && iComment.isVisible())
- return iComment.getPosition() ;
- }
- return null
- },
+ getTopPosition:function() {
+ for (var i = 0 ; i < this._c.length; i++) {
+ var iComment = this._c[i] ;
+ if (iComment.commentId != null && iComment.isVisible())
+ return iComment.getPosition() ;
+ }
+ return null
+ },
- getPosition:function(id) {
- for (var i = 0 ; i < this._c.length; i++) {
- var iComment = this._c[i] ;
- if (iComment.commentId == id && iComment.isVisible())
- return iComment.getPosition() ;
- }
- return null ;
- },
+ getPosition:function(id) {
+ for (var i = 0 ; i < this._c.length; i++) {
+ var iComment = this._c[i] ;
+ if (iComment.commentId == id && iComment.isVisible())
+ return iComment.getPosition() ;
+ }
+ return null ;
+ },
- setAnimationToPositions : function (y) {
- this._initAnimations();
- //CY.log(gPrefs.get('comments','threadpad')) ;
- var lpad = (gPrefs.get('comments','threadpad') == '1') ? gConf['iCommentThreadPadding'] : 0 ; // gIThreadPad ... TODO 'configurize'
+ setAnimationToPositions : function (y) {
+ this._initAnimations();
+ //CY.log(gPrefs.get('comments','threadpad')) ;
+ var lpad = (gPrefs.get('comments','threadpad') == '1') ? gConf['iCommentThreadPadding'] : 0 ; // gIThreadPad ... TODO 'configurize'
- var nextY = y ;
- for (var i = 0 ; i < this._c.length;i++) {
- var iComment = this._c[i] ;
- if (iComment.isfetched && iComment.isVisible()) {
- var comment_path = gDb.getPath(gDb.getComment(iComment.commentId)) ;
- var iCommentX = ((comment_path.length - 1) * lpad) + gConf['iCommentLeftPadding'] ;
+ var nextY = y ;
+ for (var i = 0 ; i < this._c.length;i++) {
+ var iComment = this._c[i] ;
+ if (iComment.isfetched && iComment.isVisible()) {
+ var comment_path = gDb.getPath(gDb.getComment(iComment.commentId)) ;
+ var iCommentX = ((comment_path.length - 1) * lpad) + gConf['iCommentLeftPadding'] ;
- if (nextY == null) {
- var xy = iComment.getPosition() ;
- nextY = xy[1] ;
- }
-
- this._a.push(iComment.setAnimationToPosition([iCommentX, nextY])) ;
- nextY += iComment.getHeight() ;
- }
- }
- },
-
- setAnimationToPositionsAndFocus : function (y, focusCommentId, reply) {
- this._initAnimations();
- var lpad = (gPrefs.get('comments','threadpad') == '1') ? gConf['iCommentThreadPadding'] : 0 ;
+ if (nextY == null) {
+ var xy = iComment.getPosition() ;
+ nextY = xy[1] ;
+ }
+
+ this._a.push(iComment.setAnimationToPosition([iCommentX, nextY])) ;
+ nextY += iComment.getHeight() ;
+ }
+ }
+ },
+
+ setAnimationToPositionsAndFocus : function (y, focusCommentId, reply) {
+ this._initAnimations();
+ var lpad = (gPrefs.get('comments','threadpad') == '1') ? gConf['iCommentThreadPadding'] : 0 ;
- var nextY = y ;
- for (var i = 0 ; i < this._c.length;i++) {
- var iComment = this._c[i] ;
- if (iComment.isfetched && iComment.isVisible()) {
- var comment_path = gDb.getPath(gDb.getComment(iComment.commentId)) ;
- var iCommentX = ((comment_path.length - 1) * lpad) + gConf['iCommentLeftPadding'] ;
+ var nextY = y ;
+ for (var i = 0 ; i < this._c.length;i++) {
+ var iComment = this._c[i] ;
+ if (iComment.isfetched && iComment.isVisible()) {
+ var comment_path = gDb.getPath(gDb.getComment(iComment.commentId)) ;
+ var iCommentX = ((comment_path.length - 1) * lpad) + gConf['iCommentLeftPadding'] ;
- if (nextY == null) {
- var xy = iComment.getPosition() ;
- nextY = xy[1] ;
- }
-
+ if (nextY == null) {
+ var xy = iComment.getPosition() ;
+ nextY = xy[1] ;
+ }
+
if (iComment.commentId >= focusCommentId)
- this._a.push(iComment.setAnimationToPosition([iCommentX, nextY], focusCommentId, reply)) ;
+ this._a.push(iComment.setAnimationToPosition([iCommentX, nextY], focusCommentId, reply)) ;
else
- this._a.push(iComment.setAnimationToPosition([iCommentX, nextY])) ;
- nextY += iComment.getHeight() ;
- }
- }
- },
-
-// ANIMATION FUNCTIONS
- _initAnimations : function () {
- this._a = [] ;
- this._nbEndedAnim = 0 ;
- },
-
- runAnimations : function () {
- if (this._a.length == 0) // will occur when closing last displayed comment
- gSync.resetAutoContinue("animationRun") ;
- else
- CY.each(this._a, function (animation) { animation.run() ; }) ;
- },
-
- whenAnimationsEnd : function () {
- gSync.resume() ;
- },
-
- whenAnimationsEndFocus : function () {
+ this._a.push(iComment.setAnimationToPosition([iCommentX, nextY])) ;
+ nextY += iComment.getHeight() ;
+ }
+ }
+ },
+
+// ANIMATION FUNCTIONS
+ _initAnimations : function () {
+ this._a = [] ;
+ this._nbEndedAnim = 0 ;
+ },
+
+ runAnimations : function () {
+ if (this._a.length == 0) // will occur when closing last displayed comment
+ gSync.resetAutoContinue("animationRun") ;
+ else
+ CY.each(this._a, function (animation) { animation.run() ; }) ;
+ },
+
+ whenAnimationsEnd : function () {
+ gSync.resume() ;
+ },
+
+ whenAnimationsEndFocus : function () {
gGETValues = CY.JSON.parse(sv_get_params);
if ("comment_id_key" in gGETValues) {
var id_key = gGETValues["comment_id_key"];
@@ -222,10 +222,10 @@
if (focusComment != null)
gIComments.getIComment(focusComment.id).overlay.focus();
}
- gSync.resume();
- },
-
- whenAnimationsEndReply : function () {
+ gSync.resume();
+ },
+
+ whenAnimationsEndReply : function () {
gGETValues = CY.JSON.parse(sv_get_params);
if ("comment_id_key" in gGETValues) {
var id_key = gGETValues["comment_id_key"];
@@ -234,110 +234,110 @@
gSync.showReplyForm(gIComments.getIComment(focusComment.id));
}
}
- gSync.resume();
- },
-
- animationsEnded : function () {
- return ((this._a.length == 0) || (this._a.length == this._nbEndedAnim)) ;
- },
-
- signalAnimationEnd : function () {
- this._nbEndedAnim++ ;
- },
-
-// ACTIVE RELATED FUNCTIONS
- // returns true only for the top iComment
- isTopActive : function(commentDbId) {
- return ((commentDbId != null) && (this._topActiveCommentDbId == commentDbId)) ;
- },
-
- isAnyActive : function() {
- return (this._topActiveCommentDbId != null) ;
- },
-
- //warning : calling this function "focus" would make IE get mad
- activate : function(commentDbId) {
-
- if (this._topActiveCommentDbId != null) {// then deactivate current
- this.deactivate() ;
- }
+ gSync.resume();
+ },
+
+ animationsEnded : function () {
+ return ((this._a.length == 0) || (this._a.length == this._nbEndedAnim)) ;
+ },
+
+ signalAnimationEnd : function () {
+ this._nbEndedAnim++ ;
+ },
+
+// ACTIVE RELATED FUNCTIONS
+ // returns true only for the top iComment
+ isTopActive : function(commentDbId) {
+ return ((commentDbId != null) && (this._topActiveCommentDbId == commentDbId)) ;
+ },
+
+ isAnyActive : function() {
+ return (this._topActiveCommentDbId != null) ;
+ },
+
+ //warning : calling this function "focus" would make IE get mad
+ activate : function(commentDbId) {
+
+ if (this._topActiveCommentDbId != null) {// then deactivate current
+ this.deactivate() ;
+ }
- // activate whole top parent thread
- var comment = gDb.getComment(commentDbId) ;
- var comment_path = gDb.getPath(comment) ;
- var topParent = comment_path[comment_path.length - 1] ;
-
- var iComments = this._getChildren(topParent.id) ;
- CY.Array.each(iComments, function(iComment){iComment.activate();}) ;
+ // activate whole top parent thread
+ var comment = gDb.getComment(commentDbId) ;
+ var comment_path = gDb.getPath(comment) ;
+ var topParent = comment_path[comment_path.length - 1] ;
+
+ var iComments = this._getChildren(topParent.id) ;
+ CY.Array.each(iComments, function(iComment){iComment.activate();}) ;
- this._topActiveCommentDbId = topParent.id ;
+ this._topActiveCommentDbId = topParent.id ;
- // update browser index
- if (gLayout.isInFrame()) {
- var indxDict = gDb.browsingIndex(this._topActiveCommentDbId) ;
- parent.$("#browse_by option").each(function() {
- var rank = 1 + indxDict[this.value] ;
- parent.$("#c_browse_indx_"+this.value).html(''+ rank) ;
- }) ;
- }
-
- showScope(topParent.id) ;
- },
-
- deactivate : function() {
- if (this._topActiveCommentDbId != null) {
- parent.$("#browse_by option").each(function() {
- parent.$("#c_browse_indx_"+this.value).html('-') ;
- }) ;
+ // update browser index
+ if (gLayout.isInFrame()) {
+ var indxDict = gDb.browsingIndex(this._topActiveCommentDbId) ;
+ parent.$("#browse_by option").each(function() {
+ var rank = 1 + indxDict[this.value] ;
+ parent.$("#c_browse_indx_"+this.value).html(''+ rank) ;
+ }) ;
+ }
+
+ showScope(topParent.id) ;
+ },
+
+ deactivate : function() {
+ if (this._topActiveCommentDbId != null) {
+ parent.$("#browse_by option").each(function() {
+ parent.$("#c_browse_indx_"+this.value).html('-') ;
+ }) ;
- // scopes
- hideScopeAnyway() ;
-
- var iComments = this._getChildren(this._topActiveCommentDbId) ;
- CY.Array.each(iComments, function(iComment){iComment.deactivate();}) ;
+ // scopes
+ hideScopeAnyway() ;
+
+ var iComments = this._getChildren(this._topActiveCommentDbId) ;
+ CY.Array.each(iComments, function(iComment){iComment.deactivate();}) ;
- this._topActiveCommentDbId = null ;
- }
- },
+ this._topActiveCommentDbId = null ;
+ }
+ },
- // active next IComment among the displayed ones (try below and if couldn't try above)
- // model based
- activateVisibleNext : function() {
-
- if (this._topActiveCommentDbId != null) {
+ // active next IComment among the displayed ones (try below and if couldn't try above)
+ // model based
+ activateVisibleNext : function() {
+
+ if (this._topActiveCommentDbId != null) {
- for (var j = 0 ; j < 2 ; j++) {
-
- var start = (j==0) ? 0 : this._c.length - 1 ;
-
- var b = false ;
-
- for (var i = start ; (i >= 0) && i <= (this._c.length - 1) ;) {
- var iComment = this._c[i] ;
-
- if (iComment.commentId != null && iComment.isVisible()) {
- b = b || (gDb.isChild(iComment.commentId,this._topActiveCommentDbId)) ;
- if (b && (!gDb.isChild(iComment.commentId,this._topActiveCommentDbId))) { // found the one below that doesn't have topActive as parent
- this.activate(iComment.commentId) ;
- return true ;
- }
- }
- i = (j == 0) ? i + 1 : i - 1 ;
- }
- }
- }
- return false ;
- },
-
- browse : function(order, whereto) {
- var wt = whereto ;
- if ((whereto == "prev") && !this.isAnyActive()) {
- wt = "last" ;
- }
- if ((whereto == "next") && !this.isAnyActive()) {
- wt = "first" ;
- }
- return gDb.browse(order, wt, this._topActiveCommentDbId) ;
- }
-
+ for (var j = 0 ; j < 2 ; j++) {
+
+ var start = (j==0) ? 0 : this._c.length - 1 ;
+
+ var b = false ;
+
+ for (var i = start ; (i >= 0) && i <= (this._c.length - 1) ;) {
+ var iComment = this._c[i] ;
+
+ if (iComment.commentId != null && iComment.isVisible()) {
+ b = b || (gDb.isChild(iComment.commentId,this._topActiveCommentDbId)) ;
+ if (b && (!gDb.isChild(iComment.commentId,this._topActiveCommentDbId))) { // found the one below that doesn't have topActive as parent
+ this.activate(iComment.commentId) ;
+ return true ;
+ }
+ }
+ i = (j == 0) ? i + 1 : i - 1 ;
+ }
+ }
+ }
+ return false ;
+ },
+
+ browse : function(order, whereto) {
+ var wt = whereto ;
+ if ((whereto == "prev") && !this.isAnyActive()) {
+ wt = "last" ;
+ }
+ if ((whereto == "next") && !this.isAnyActive()) {
+ wt = "first" ;
+ }
+ return gDb.browse(order, wt, this._topActiveCommentDbId) ;
+ }
+
}