import nh3
from django.utils.html import mark_safe

tags = {
    'a',
    'abbr',
    'acronym',
    'b',
    'blockquote',
    'br',
    'caption',
    'center',
    'code',
    'em',
    'div',
    'font',
    'h1',
    'h2',
    'h3',
    'h4',
    'h5',
    'h6',
    'head',
    'hr',
    'i',
    'img',
    'label',
    'li',
    'ol',
    'p',
    'pre',
    'span',
    'strong',
    'table',
    'tbody',
    'tfoot',
    'td',
    'th',
    'thead',
    'tr',
    'u',
    'ul',
}

attributes = {
    'a': {'class', 'href', 'id', 'style', 'target'},
    'abbr': {'class', 'id', 'style'},
    'acronym': {'class', 'id', 'style'},
    'b': {'class', 'id', 'style'},
    'blockquote': {'class', 'id', 'style'},
    'br': {'class', 'id', 'style'},
    'caption': {'class', 'id', 'style'},
    'center': {'class', 'id', 'style'},
    'code': {'class', 'id', 'style'},
    'em': {'class', 'id', 'style'},
    'div': {'class', 'id', 'style', 'align', 'dir'},
    'font': {'class', 'id', 'style', 'color', 'face', 'size'},
    'h1': {'class', 'id', 'style', 'align', 'dir'},
    'h2': {'class', 'id', 'style', 'align', 'dir'},
    'h3': {'class', 'id', 'style', 'align', 'dir'},
    'h4': {'class', 'id', 'style', 'align', 'dir'},
    'h5': {'class', 'id', 'style', 'align', 'dir'},
    'h6': {'class', 'id', 'style', 'align', 'dir'},
    'head': {'dir', 'lang'},
    'hr': {'align', 'size', 'width'},
    'i': {'class', 'id', 'style'},
    'img': {'class', 'id', 'style', 'align', 'border', 'height', 'hspace', 'src', 'usemap', 'vspace', 'width'},
    'label': {'class', 'id', 'style'},
    'li': {'class', 'id', 'style', 'dir', 'type'},
    'ol': {'class', 'id', 'style', 'dir', 'type'},
    'p': {'class', 'id', 'style', 'align', 'dir'},
    'pre': {'class', 'id', 'style'},
    'span': {'class', 'id', 'style'},
    'strong': {'class', 'id', 'style'},
    'table': {
        'class',
        'id',
        'style',
        'align',
        'bgcolor',
        'border',
        'cellpadding',
        'cellspacing',
        'dir',
        'frame',
        'rules',
        'width',
    },
    'tbody': {'class', 'id', 'style'},
    'tfoot': {'class', 'id', 'style'},
    'td': {
        'class',
        'id',
        'style',
        'abbr',
        'align',
        'bgcolor',
        'colspan',
        'dir',
        'height',
        'lang',
        'rowspan',
        'scope',
        'valign',
        'width',
    },
    'th': {
        'class',
        'id',
        'style',
        'abbr',
        'align',
        'background',
        'bgcolor',
        'colspan',
        'dir',
        'height',
        'lang',
        'scope',
        'valign',
        'width',
    },
    'thead': {'class', 'id', 'style'},
    'tr': {'class', 'id', 'style', 'align', 'bgcolor', 'dir', 'valign'},
    'u': {'class', 'id', 'style'},
    'ul': {'class', 'id', 'style', 'dir', 'type'},
}


def clean_html(body):
    return mark_safe(
        nh3.clean(
            body,
            tags=tags,
            attributes=attributes,
            strip_comments=True,
        )
    )
