예제 #1
0
파일: iecc.py 프로젝트: auvipy/flowgram.com
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
예제 #2
0
파일: fix.py 프로젝트: sdia/flowgram.com
def add_base_target(html, url, target="_top"):
    base_tag = '<base target="%s"></base>' % target
    return (insert_in_head(html, base_tag), url)
예제 #3
0
파일: fix.py 프로젝트: sdia/flowgram.com
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)
예제 #4
0
파일: fix.py 프로젝트: sdia/flowgram.com
def add_topdog_fix(html, url):
    return (insert_in_head(html, '<script type="text/javascript">var top = window;</script>'), url)