src/cm/media/js/client/c_toc.js
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 525 89ef5ed3c48b
child 562 92e8e5aaacde
permissions -rw-r--r--
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.
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
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    34
  var width = gLayout.getTopICommentsWidth() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    35
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    36
  var overlay = new CY.Overlay( {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    37
    zIndex :3,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    38
    shim :false, // until we really need it, no shim 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    39
    visible :false,
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    40
    headerContent :overlayHtml['headerContent'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    41
    bodyContent :overlayHtml['bodyContent'],
423
db95e6b3fc6e Better positionning of table of contents.
gibus
parents: 422
diff changeset
    42
    xy :[3,30],
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    43
    width : width
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    44
  });
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    45
  overlay.get('contentBox').addClass("c-toc") ;
424
2f9108930e47 Removes <a> tags inside toc + adjusts height of toc.
gibus
parents: 423
diff changeset
    46
  overlay.get('contentBox').set("id", "the-toc") ;
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    47
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    48
  // attach to DOM
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    49
  overlay.render('#leftcolumn');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    50
  
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
    51
  CY.get("#"+gToc['tocTitleId']).set('innerHTML', gettext('Table of contents')) ;
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    52
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    53
  gToc['overlay'] = overlay ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    54
  
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    55
  var animationHide = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    56
  animationHide = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    57
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    58
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    59
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    60
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    61
  gToc['animationHide'] = animationHide ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    62
  animationHide.set('to', { opacity: 0});// height : 0 doesn't work
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    63
  gToc['animationHide-handle'] = animationHide.on('end', onTocHideAnimEnd, gToc);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    64
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    65
  var animationShow = null ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    66
  animationShow = new CY.Anim({
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    67
        node: overlay.get('boundingBox'),
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    68
        duration: .3, //gPrefs['general']['animduration'],
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    69
        easing: CY.Easing.easeOut
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    70
    });   
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    71
  gToc['animationShow'] = animationShow ; 
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    72
  animationShow.set('to', { opacity: 1});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    73
  gToc['animationShow-handle'] = animationShow.on('end', onTocShowAnimEnd, gToc);
440
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
    74
  getElementsByClassName('c-toc')[0].style.width = width + 'px';
421
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    75
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    76
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    77
toggleTocFn = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    78
  if (isTocVisible())
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    79
    hideToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    80
  else
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    81
    showToc();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    82
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    83
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    84
hideToc = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    85
  gToc['overlay'].hide();
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
onTocHideAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    89
//  iComment['overlay'].blur() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    90
  this.overlay.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    91
  gSync.resume() ;    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    92
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    93
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    94
onTocShowAnimEnd = function() {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    95
  gSync.resume() ;    
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    96
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    97
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    98
showToc= function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
    99
  removeFormErrMsg(gToc['tocId']) ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   100
  gIComments.hide() ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   101
  gToc['overlay'].show();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   102
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   103
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   104
isTocVisible = function () {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   105
  if (gToc != null)
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   106
    return gToc['overlay'].get('visible') ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   107
  return false ;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   108
}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   109
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   110
function getElementsByTagNames(list,obj) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   111
	if (!obj) var obj = document;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   112
	var tagNames = list.split(',');
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   113
	var resultArray = new Array();
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   114
	for (var i=0;i<tagNames.length;i++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   115
		var tags = obj.getElementsByTagName(tagNames[i]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   116
		for (var j=0;j<tags.length;j++) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   117
			resultArray.push(tags[j]);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   118
		}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   119
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   120
	var testNode = resultArray[0];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   121
	if (!testNode) return [];
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   122
	if (testNode.sourceIndex) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   123
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   124
				return a.sourceIndex - b.sourceIndex;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   125
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   126
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   127
	else if (testNode.compareDocumentPosition) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   128
		resultArray.sort(function (a,b) {
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   129
				return 3 - (a.compareDocumentPosition(b) & 6);
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   130
		});
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   131
	}
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   132
	return resultArray;
3ddbfa64f596 Adds a table of content.
gibus
parents:
diff changeset
   133
}
440
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   134
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
	Developed by Robert Nyman, http://www.robertnyman.com
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   137
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   138
*/	
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   139
var getElementsByClassName = function (className, tag, elm){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   140
	if (document.getElementsByClassName) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   141
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   142
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   143
			var elements = elm.getElementsByClassName(className),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   144
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   145
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   146
				current;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   147
			for(var i=0, il=elements.length; i<il; i+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   148
				current = elements[i];
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   149
				if(!nodeName || nodeName.test(current.nodeName)) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   150
					returnElements.push(current);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   151
				}
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
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   154
		};
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
	else if (document.evaluate) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   157
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   158
			tag = tag || "*";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   159
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   160
			var classes = className.split(" "),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   161
				classesToCheck = "",
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   162
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   163
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   164
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   165
				elements,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   166
				node;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   167
			for(var j=0, jl=classes.length; j<jl; j+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   168
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   169
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   170
			try	{
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   171
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   172
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   173
			catch (e) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   174
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   175
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   176
			while ((node = elements.iterateNext())) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   177
				returnElements.push(node);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   178
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   179
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   180
		};
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
	else {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   183
		getElementsByClassName = function (className, tag, elm) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   184
			tag = tag || "*";
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   185
			elm = elm || document;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   186
			var classes = className.split(" "),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   187
				classesToCheck = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   188
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   189
				current,
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   190
				returnElements = [],
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   191
				match;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   192
			for(var k=0, kl=classes.length; k<kl; k+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   193
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   194
			}
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   195
			for(var l=0, ll=elements.length; l<ll; l+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   196
				current = elements[l];
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   197
				match = false;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   198
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   199
					match = classesToCheck[m].test(current.className);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   200
					if (!match) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   201
						break;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   202
					}
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
				if (match) {
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   205
					returnElements.push(current);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   206
				}
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
			return returnElements;
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   209
		};
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
	return getElementsByClassName(className, tag, elm);
0d2d10bc47bd Adds generic getElementsByClassName for IE compatibility.
gibus
parents: 425
diff changeset
   212
};