import os indexfile = "html/index.html" docsfile = "html/doxygen.css" rootdir = os.path.abspath('./') rootdir+='/' print rootdir path = rootdir + '/docs/' def ReadFile(fileName, pathFlag = True): # """This method reads file directly or from path.""" if pathFlag: print("Read:", path+fileName) f = open(path+fileName) else: f = open(path+fileName) print("Read:", path+fileName) data = f.read() f.close() return data def HTMLTreeBegin( title, links = {}): html = '\n<li>\n<div class="hitarea expandable-hitarea"></div>\n' html = html + '<span class="folder">%s\n' % title for i in links.keys(): html = html + '<a target="_blank" href="%s">[%s]</a> \n' % (links[i], i) html = html + '</span>\n' html = html + '<ul style="display: block;">\n' return html def WriteFile( fileName, data): # This method writes data print("Write:", path + fileName) f = open(path + fileName, "w") f.write(data) f.close() def HTMLTreeEnd(): return '</li></ul>\n\n' def Fixcssfile( filename ): addition = """/** atlas insert **/ .doxyTable{ border-collapse:collapse; border:1px solid lightBlue; width: 70%; margin:0 auto; } .doxyTable tr:not(:first-child) { background: #eeeeff; border-spacing: 0px; padding: 0px; border-bottom: 1px solid #c1c1dc; } .doxyTable tr:hover { background: #cde4ec; } .doxyTable td { padding:8px; cursor:pointer; } .accordion { display: none; width: 100%; } div.content {} div.content h1, h2 { text-align: center; } """ text = ReadFile(filename) if("/** atlas insert **/" in text): print "Skipping rewriting css" return text += addition WriteFile(filename, text) def __NewTreePage( domain, package): content = '' content += HTMLTreeBegin(domain) for i in package[domain]: content += HTMLTreeAddItem(i, 'https://gitlab.cern.ch/atlas/athena/tree/master/' + domain + '/'+ i, folder = True) content += HTMLTreeEnd() temp = treePageTamplate % (content) WriteFile("html/iframes/%s.html" % domain.lower().replace(' ', '_'), temp) def CreateNewMainPage(outputFileName, packagemap): contents = """ <script>function changeState(item) { item.slideToggle("slow"); } $( document ).ready(function() { $(".doxyTable > tbody > tr").each(function(){ var row = $(this); // skip first row (header), you dont need to assing it accordion // trigger function. it is also the same for rows which doesn't have // id attribute. if a row doesn't have id attr, that means it is // accordion row if(row.attr('id') == 'header' || !row.attr('id')) return; // if it has id attribute, assign trigger function row.click(function(){ $('div#'+row.attr('id')).slideToggle(256); // we dont want to load whole iframes before they are showed var iframe = $('div#'+row.attr('id')).find('iframe'); // no need to set the source again again if already set if(iframe.attr('src')) return; iframe.attr('src', iframe.attr('data-src')); }); }); });</script> <table class="doxyTable" border="0" cellpadding="0" cellspacing="0"> <tr class="top" valign="top"> <th class="domain">Domain</th> </tr> """ keysI = sorted(packagemap.keys()) for i in keysI: if i=='': continue # contents = contents + '\n<tr class="DCRow">\n' ######### TAG: TR1 # contents = contents + """<td width="50%%" style="padding:8px;cursor:pointer" onclick="toggleHoba('hoba_%s', 'iframes/%s.html')" id="hoba_%s"><a>%s</a></td>\n""" % (i.replace(' ', '_'), i.lower().replace(' ', '_'), i.replace(' ', '_'), i) # contents = contents + '</td>\n' # contents = contents + '</tr>\n\n' ######### TAG: TR1 # contents = contents + """<tr><td colspan="2" style="background:#d7dbe3"> # <div style="display:none;" id="hoba_%s_div"><iframe width="100%%" frameborder="0"></iframe></div> # </td></tr>""" % (i.replace(' ', '_')) tagsafe = i.replace(' ', '_') tagsafelc = i.lower().replace(' ', '_') basic = """<tr id="{0}"><td width="50%">{0}</td></tr><tr style="padding:0"><td colspan="2" style="padding:0"> <div class="accordion" id="{0}"> <iframe width="100%" height="250px" frameborder="0" data-src="iframes/{1}.html"> </iframe> </div></td></tr>""" basic = basic.format(tagsafe, tagsafelc) contents += basic contents += "</table>" stamp = "</div></div><!-- contents -->" contents += stamp mainPageTemplate = ReadFile(indexfile) # print mainPageTemplate WriteFile(outputFileName, mainPageTemplate.replace(stamp, contents)) def HTMLTreeAddItem( title, links = None, endNode = False, folder = False): if endNode: html = '\t<li class="last">' else: html = '\t<li>' if isinstance(links, str) or isinstance(links, type(u'')): if folder: html = html + '\t<a href="%s" target="_blank" class=""><span class="emptyFolder">%s</span></a>\n' % (links, title) else: html = html + '\t<a href="%s" target="_blank" class=""><span class="file">%s</span></a>\n' % (links, title) elif isinstance(links, dict): if folder: html = html + '<span class="emptyFolder">%s ' % title else: html = html + '<span class="file">%s ' % title for i in links.keys(): html = html + '<a target="_blank" href="%s">[%s]</a> \n' % (links[i], i) html = html + '</span>' else: html = html + '\t<span class="file">%s</span>\n' % title return html + '\t</li>\n' #packagelist=[] packagemap ={} for subdir, dirs, files in os.walk(rootdir): if 'CMakeLists.txt' in files : # packagelist.append(subdir); package = subdir[len(rootdir):] i = package.find('/') if i<0 : i=0 category = package[0: i ] if category in packagemap: packagemap[category].append(package[i+1:]) else: packagemap[category] = [package[i+1:]] # print package #for st in packagelist: # print st; #print packagemap #print treePageTamplate framesdir = path+ 'html/iframes' if not os.path.exists(framesdir): os.makedirs(framesdir) #category = treePageTamplate=ReadFile("TreeViewTemplate.html", pathFlag = True) for k in packagemap.keys(): __NewTreePage(str(k), packagemap); CreateNewMainPage(indexfile, packagemap) Fixcssfile(docsfile)