src/cm/media/js/client/c_toc.js
author Simon Descarpentries <sid@sopinspace.com>
Wed, 06 Nov 2013 19:05:09 +0100
changeset 562 92e8e5aaacde
parent 532 0bad3613f59d
child 600 fda73ac53450
permissions -rw-r--r--
Give maximum width for add_comment form and toc.
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
      'tocId':CY.guid(),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
     6
      'tocTitleId':CY.guid(),
422
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
     7
      'closeBtnId':CY.guid(),
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
     8
      'empty': false
421
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
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    16
  var content = document.createElement('div');
422
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    17
  if (toBeTOCced.length >= 2) {
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    18
    for (var i=0;i<toBeTOCced.length;i++) {
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    19
	  	var tmp = document.createElement('a');
469
08d57b273596 When building toc, delete <a> elements, including when written in uppercase (<A>).
gibus
parents: 440
diff changeset
    20
		  tmp.innerHTML = toBeTOCced[i].innerHTML.replace(/<\/?a[^>]*>/ig,'');
422
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    21
  		tmp.className = 'page indent' + toBeTOCced[i].nodeName;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    22
	  	content.appendChild(tmp);
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    23
		  var headerId = toBeTOCced[i].id || 'link' + i;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    24
  		tmp.href = '#' + headerId;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    25
	  	toBeTOCced[i].id = headerId;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    26
    }
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    27
  }
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    28
  else {
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    29
    content.innerHTML = '';
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    30
    gToc['empty'] = true;
37cd1c72115d Hides button if table of contents is empty.
gibus
parents: 421
diff changeset
    31
  }
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    32
  overlayHtml['bodyContent'] = content.innerHTML;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    33
  
562
92e8e5aaacde Give maximum width for add_comment form and toc.
Simon Descarpentries <sid@sopinspace.com>
parents: 532
diff changeset
    34
  var width = gLayout.getTopICommentsWidth();
92e8e5aaacde Give maximum width for add_comment form and toc.
Simon Descarpentries <sid@sopinspace.com>
parents: 532
diff changeset
    35
  width += gLayout.iCommentsRequiredThreadPadding (); // SID: use max available space as there is no indentation on that box
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    36
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    37
  var overlay = new CY.Overlay( {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    38
    zIndex :3,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    39
    shim :false, // until we really need it, no shim 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    40
    visible :false,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    41
    headerContent :overlayHtml['headerContent'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    42
    bodyContent :overlayHtml['bodyContent'],
423
db95e6b3fc6e Better positionning of table of contents.
gibus
parents: 422
diff changeset
    43
    xy :[3,30],
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    44
    width : width
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    45
  });
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    46
  overlay.get('contentBox').addClass("c-toc") ;
424
2f9108930e47 Removes <a> tags inside toc + adjusts height of toc.
gibus
parents: 423
diff changeset
    47
  overlay.get('contentBox').set("id", "the-toc") ;
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    48
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    49
  // attach to DOM
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    50
  overlay.render('#leftcolumn');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    51
  
532
0bad3613f59d Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
gibus
parents: 525
diff changeset
    52
  CY.get("#"+gToc['tocTitleId']).set('innerHTML', gettext('Table of contents')) ;
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    53
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    54
  gToc['overlay'] = overlay ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    55
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    56
  var animationHide = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    57
  animationHide = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    58
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    59
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    60
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    61
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    62
  gToc['animationHide'] = animationHide ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    63
  animationHide.set('to', { opacity: 0});// height : 0 doesn't work
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    64
  gToc['animationHide-handle'] = animationHide.on('end', onTocHideAnimEnd, gToc);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    65
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    66
  var animationShow = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    67
  animationShow = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    68
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    69
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    70
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    71
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    72
  gToc['animationShow'] = animationShow ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    73
  animationShow.set('to', { opacity: 1});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    74
  gToc['animationShow-handle'] = animationShow.on('end', onTocShowAnimEnd, gToc);
440
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
    75
  getElementsByClassName('c-toc')[0].style.width = width + 'px';
421
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
toggleTocFn = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    79
  if (isTocVisible())
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    80
    hideToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    81
  else
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    82
    showToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    83
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    84
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    85
hideToc = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    86
  gToc['overlay'].hide();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    87
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    88
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    89
onTocHideAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    90
//  iComment['overlay'].blur() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    91
  this.overlay.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    92
  gSync.resume() ;    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    93
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    94
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    95
onTocShowAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    96
  gSync.resume() ;    
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
showToc= function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   100
  removeFormErrMsg(gToc['tocId']) ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   101
  gIComments.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   102
  gToc['overlay'].show();
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
isTocVisible = 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
    return gToc['overlay'].get('visible') ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   108
  return false ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   109
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   110
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   111
function getElementsByTagNames(list,obj) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   112
	if (!obj) var obj = document;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   113
	var tagNames = list.split(',');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   114
	var resultArray = new Array();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   115
	for (var i=0;i<tagNames.length;i++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   116
		var tags = obj.getElementsByTagName(tagNames[i]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   117
		for (var j=0;j<tags.length;j++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   118
			resultArray.push(tags[j]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   119
		}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   120
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   121
	var testNode = resultArray[0];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   122
	if (!testNode) return [];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   123
	if (testNode.sourceIndex) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   124
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   125
				return a.sourceIndex - b.sourceIndex;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   126
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   127
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   128
	else if (testNode.compareDocumentPosition) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   129
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   130
				return 3 - (a.compareDocumentPosition(b) & 6);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   131
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   132
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   133
	return resultArray;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   134
}
440
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   135
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   136
/*
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   137
	Developed by Robert Nyman, http://www.robertnyman.com
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   138
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   139
*/	
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   140
var getElementsByClassName = function (className, tag, elm){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   141
	if (document.getElementsByClassName) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   142
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   143
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   144
			var elements = elm.getElementsByClassName(className),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   145
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   146
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   147
				current;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   148
			for(var i=0, il=elements.length; i<il; i+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   149
				current = elements[i];
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   150
				if(!nodeName || nodeName.test(current.nodeName)) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   151
					returnElements.push(current);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   152
				}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   153
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   154
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   155
		};
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   156
	}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   157
	else if (document.evaluate) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   158
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   159
			tag = tag || "*";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   160
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   161
			var classes = className.split(" "),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   162
				classesToCheck = "",
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   163
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   164
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   165
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   166
				elements,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   167
				node;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   168
			for(var j=0, jl=classes.length; j<jl; j+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   169
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   170
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   171
			try	{
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   172
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   173
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   174
			catch (e) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   175
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   176
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   177
			while ((node = elements.iterateNext())) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   178
				returnElements.push(node);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   179
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   180
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   181
		};
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   182
	}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   183
	else {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   184
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   185
			tag = tag || "*";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   186
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   187
			var classes = className.split(" "),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   188
				classesToCheck = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   189
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   190
				current,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   191
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   192
				match;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   193
			for(var k=0, kl=classes.length; k<kl; k+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   194
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   195
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   196
			for(var l=0, ll=elements.length; l<ll; l+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   197
				current = elements[l];
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   198
				match = false;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   199
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   200
					match = classesToCheck[m].test(current.className);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   201
					if (!match) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   202
						break;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   203
					}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   204
				}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   205
				if (match) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   206
					returnElements.push(current);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   207
				}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   208
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   209
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   210
		};
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   211
	}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   212
	return getElementsByClassName(className, tag, elm);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   213
};