def fix_iecc(orig_html, rendered_html): first_dlh_end = orig_html.find("<![endif]-->") first_dlr_end = orig_html.find("<![endif]>") if first_dlh_end == -1 and first_dlr_end == -1: print "No IECCs found -- aborting" return rendered_html if first_dlr_end != -1: print "Warning! Use of downlevel-revealed IECC -- aborting" return rendered_html iecc_start = "<!--\[if [^\]]*\]>" iecc_end = "<!\[endif\]-->" start_re = re.compile(iecc_start) end_re = re.compile(iecc_end) starts = [m for m in start_re.finditer(orig_html)] ends = [m for m in end_re.finditer(orig_html)] print "Starts:", len(starts) print "Ends:", len(ends) pairs = zip(starts, ends) inner_blocks = [] for start, end in pairs: inner_block = orig_html[start.end():end.start()] inner_blocks.append(inner_block) ccs = zip(starts, inner_blocks, ends) cc_has_style = lambda cc: cc[1].find('.css')!=-1 cc_has_js = lambda cc: cc[1].lower().find('<script') != -1 print "There are", len(ccs), "conditional comments\n" if filter(cc_has_js,ccs): print "Warning! Mixed css and JS in a CC. -- aborting" return rendered_html replacement_text = [] for (startm, insides, endm) in ccs: replacement_text.append(startm.group() + insides + endm.group()) replaced = False replacement_text = ''.join(replacement_text) print "Replacement text:", replacement_text, "\n\n" for (startm, insides, endm) in ccs: print "Deleting instances of:", insides, '\n\n' insides_re_str = re.escape(insides) insides_re_str = insides_re_str.replace('"', '"?') #for IE weirdness insides_re = re.compile(insides_re_str, re.IGNORECASE | re.VERBOSE) if re.search(insides_re, rendered_html): print "Found!" if replaced: rendered_html = re.sub(insides_re, '', rendered_html) else: rendered_html = re.sub(insides_re, lambda x:replacement_text, rendered_html) replaced=True if not replaced: from flowgram.core.helpers import insert_in_head return insert_in_head(rendered_html, replacement_text) return rendered_html
def add_base_target(html, url, target="_top"): base_tag = '<base target="%s"></base>' % target return (insert_in_head(html, base_tag), url)
def add_base(html, url): # print "add base called" base_href = url_base(url) base_tag = '<base href="%s"></base>' % base_href return (insert_in_head(html, base_tag), url)
def add_topdog_fix(html, url): return (insert_in_head(html, '<script type="text/javascript">var top = window;</script>'), url)