358: #line 461 "web_weaver.ipk" 359: def mk_contents(self,toc_filename,target): 360: self.toc_sink = named_file_sink( 361: self.pass_frame, 362: self.basedir+toc_filename, 363: self.master.weaver_prefix, 364: eol=self.eol) 365: self.mk_head(self.toc_sink) 366: w = self.toc_sink.writeline 367: w( '<BODY onload="loadHandler()">') 368: tocline= """ 369: <SCRIPT type="text/javascript"> 370: <!-- 371: function clickHandler() { 372: var targetId, srcElement, targetElement; 373: srcElement = window.event.srcElement; 374: if (srcElement.className == "Button") { 375: targetId = srcElement.id + "d"; 376: targetElement = document.all(targetId); 377: if(targetElement.style.display == "none") { 378: targetElement.style.display = ""; 379: srcElement.checked = true; 380: } else { 381: targetElement.style.display = "none"; 382: srcElement.checked = false; 383: } 384: } 385: } 386: 387: // this function restores the status of the contents tree 388: // IE4 preserves the buttons states, but not the visibility 389: function loadHandler() { 390: for (var srcId in document.all) { 391: srcElement = document.all(srcId); 392: if (srcElement != null && srcElement.className == "Button") { 393: var targetId = srcId + "d"; 394: var targetElement = document.all(targetId); 395: if(srcElement.checked == true) { 396: targetElement.style.display = ""; 397: } else { 398: targetElement.style.display = "none"; 399: } 400: } 401: } 402: } 403: document.onclick = clickHandler 404: document.onload = loadHandler 405: // --> 406: </SCRIPT> 407: """ 408: if not target: 409: nav = '<DIV CLASS="NAVIGATION">'+self.home_anchor+' '+self.frames_anchor+'<BR><HR></DIV>' 410: self.toc_sink.writeline(nav) 411: w('<H1>Table of Contents</H1>') 412: w(tocline) 413: last_level = -1 414: if self.toc: 415: i = 0 416: level, hnum, href, text = self.toc[i] 417: next_level = 0 418: if len(self.toc) > i+1: next_level = self.toc[i+1][0] 419: self.emit_contents_line(level, hnum, href, text, level<next_level, target) 420: divid = 'h'+hnum+'d' 421: w('<DIV ID='+divid+' style="display:">') 422: last_level = level 423: for i in range(1, len(self.toc)): 424: level, hnum, href, text = self.toc[i] 425: next_level = 0 426: if len(self.toc) > i+1: next_level = self.toc[i+1][0] 427: while level <= last_level: 428: self.toc_sink.writeline('</DIV>') 429: last_level = last_level - 1 430: self.emit_contents_line(level, hnum, href, text, level<next_level, target) 431: divid = 'h'+hnum+'d' 432: w('<DIV ID='+divid+' style="display:">') 433: last_level = level 434: while 1 <= last_level: 435: w('</DIV>') 436: last_level = last_level - 1 437: w( '</BODY>') 438: w( '</HTML>') 439: del self.toc_sink 440: print 'stacked contents done' 441: 442: def emit_contents_line(self, level, hnum, href, text, enabled, target): 443: self.toc_sink.writeline(' '*(3*level)) 444: headid ='h'+hnum 445: flag = 'disabled' 446: if enabled: flag = '' 447: self.toc_sink.writeline('<INPUT ID='+headid+' CLASS="Button" TYPE="Radio" '+flag+'>') 448: if target: 449: self.toc_sink.writeline('<A HREF="'+href+'" TARGET="'+target+'">'+text+'</A>') 450: else: 451: self.toc_sink.writeline('<A HREF="'+href+'">'+text+'</A>') 452: