src/cm/media/js/client/c_toc.js
author gibus
Fri, 11 May 2012 12:00:40 +0200
changeset 421 3ddbfa64f596
child 422 37cd1c72115d
permissions -rw-r--r--
Adds a table of content.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     1
gToc = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     2
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     3
instanciateToc = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     4
  gToc = {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     5
      'position':[CY.WidgetPositionExt.TL, CY.WidgetPositionExt.TL],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     6
      'tocId':CY.guid(),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     7
      'tocTitleId':CY.guid(),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     8
      'closeBtnId':CY.guid()
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     9
  } ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    10
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    11
  var overlayHtml = {};
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    12
  overlayHtml['headerContent'] = '<div id="' + gToc['tocId'] + '"><h3 id="' + gToc['tocTitleId'] + '"></h3>';
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    13
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    14
  var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5,h6', document.getElementById('maincontainer'));
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    15
  if (toBeTOCced.length < 2) return false;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    16
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    17
  var content = document.createElement('div');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    18
  for (var i=0;i<toBeTOCced.length;i++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    19
		var tmp = document.createElement('a');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    20
		tmp.innerHTML = toBeTOCced[i].innerHTML;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    21
		tmp.className = 'page indent' + toBeTOCced[i].nodeName;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    22
		content.appendChild(tmp);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    23
		var headerId = toBeTOCced[i].id || 'link' + i;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    24
		tmp.href = '#' + headerId;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    25
		toBeTOCced[i].id = headerId;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    26
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    27
  overlayHtml['bodyContent'] = content.innerHTML;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    28
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    29
  var width = gLayout.getTopICommentsWidth() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    30
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    31
  var overlay = new CY.Overlay( {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    32
    zIndex :3,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    33
    shim :false, // until we really need it, no shim 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    34
    visible :false,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    35
    headerContent :overlayHtml['headerContent'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    36
    bodyContent :overlayHtml['bodyContent'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    37
    xy :[10,10],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    38
    width : width
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    39
  });
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    40
  overlay.get('contentBox').addClass("c-toc") ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    41
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    42
  // attach to DOM
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    43
  overlay.render('#leftcolumn');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    44
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    45
  CY.get("#"+gToc['tocTitleId']).set('innerHTML', gettext('Table of contents')) ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    46
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    47
  gToc['overlay'] = overlay ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    48
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    49
  var animationHide = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    50
  animationHide = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    51
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    52
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    53
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    54
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    55
  gToc['animationHide'] = animationHide ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    56
  animationHide.set('to', { opacity: 0});// height : 0 doesn't work
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    57
  gToc['animationHide-handle'] = animationHide.on('end', onTocHideAnimEnd, gToc);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    58
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    59
  var animationShow = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    60
  animationShow = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    61
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    62
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    63
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    64
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    65
  gToc['animationShow'] = animationShow ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    66
  animationShow.set('to', { opacity: 1});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    67
  gToc['animationShow-handle'] = animationShow.on('end', onTocShowAnimEnd, gToc);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    68
  document.getElementsByClassName('c-toc')[0].style.width = width + 'px';
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    69
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    70
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    71
toggleTocFn = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    72
  if (isTocVisible())
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    73
    hideToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    74
  else
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    75
    showToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    76
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    77
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    78
hideToc = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    79
  gToc['overlay'].hide();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    80
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    81
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    82
onTocHideAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    83
//  iComment['overlay'].blur() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    84
  this.overlay.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    85
  gSync.resume() ;    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    86
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    87
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    88
onTocShowAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    89
  gSync.resume() ;    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    90
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    91
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    92
showToc= function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    93
  removeFormErrMsg(gToc['tocId']) ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    94
  gIComments.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    95
  positionToc() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    96
  gToc['overlay'].show();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    97
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    98
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    99
isTocVisible = function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   100
  if (gToc != null)
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   101
    return gToc['overlay'].get('visible') ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   102
  return false ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   103
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   104
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   105
positionToc = function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   106
  if (gToc != null) { 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   107
    var overlay = gToc['overlay'] ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   108
    var boundingBox = overlay.get('boundingBox') ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   109
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   110
    var commentFormHeight = boundingBox.get('offsetHeight') ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   111
    var windowHeight = boundingBox.get('winHeight') ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   112
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   113
    var pos = gToc['position'] ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   114
    if (commentFormHeight > windowHeight) // trying to have save comment visible ... :
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   115
      pos = [CY.WidgetPositionExt.BL, CY.WidgetPositionExt.BL] ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   116
    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   117
    overlay.set("align", {points:pos});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   118
    if (commentFormHeight <= windowHeight)
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   119
      overlay.set("y", overlay.get("y") + 30);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   120
    boundingBox.setX(boundingBox.getX() + gConf['iCommentLeftPadding']);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   121
  }
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   122
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   123
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   124
function getElementsByTagNames(list,obj) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   125
	if (!obj) var obj = document;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   126
	var tagNames = list.split(',');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   127
	var resultArray = new Array();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   128
	for (var i=0;i<tagNames.length;i++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   129
		var tags = obj.getElementsByTagName(tagNames[i]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   130
		for (var j=0;j<tags.length;j++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   131
			resultArray.push(tags[j]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   132
		}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   133
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   134
	var testNode = resultArray[0];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   135
	if (!testNode) return [];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   136
	if (testNode.sourceIndex) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   137
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   138
				return a.sourceIndex - b.sourceIndex;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   139
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   140
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   141
	else if (testNode.compareDocumentPosition) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   142
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   143
				return 3 - (a.compareDocumentPosition(b) & 6);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   144
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   145
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   146
	return resultArray;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   147
}