bsw/jbe@1309: /** bsw/jbe@1309: * Full HTML5 compatibility rule set bsw/jbe@1309: * These rules define which tags and CSS classes are supported and which tags should be specially treated. bsw/jbe@1309: * bsw/jbe@1309: * Examples based on this rule set: bsw/jbe@1309: * bsw/jbe@1309: * foo bsw/jbe@1309: * ... becomes ... bsw/jbe@1309: * foo bsw/jbe@1309: * bsw/jbe@1309: * bsw/jbe@1309: * ... becomes ... bsw/jbe@1309: * bsw/jbe@1309: * bsw/jbe@1309: *
foo
bsw/jbe@1309: * ... becomes ... bsw/jbe@1309: *
foo
bsw/jbe@1309: * bsw/jbe@1309: * foo bsw/jbe@1309: * ... becomes ... bsw/jbe@1309: * foo bsw/jbe@1309: * bsw/jbe@1309: * foo
bar bsw/jbe@1309: * ... becomes ... bsw/jbe@1309: * foo
bar bsw/jbe@1309: * bsw/jbe@1309: *
hello
bsw/jbe@1309: * ... becomes ... bsw/jbe@1309: *
hello
bsw/jbe@1309: * bsw/jbe@1309: *
hello
bsw/jbe@1309: * ... becomes ... bsw/jbe@1309: *
hello
bsw/jbe@1309: */ bsw/jbe@1309: var wysihtmlParserRules = { bsw/jbe@1309: /** bsw/jbe@1309: * CSS Class white-list bsw/jbe@1309: * Following CSS classes won't be removed when parsed by the wysihtml HTML parser bsw/jbe@1309: */ bsw/jbe@1309: "classes": { bsw/jbe@1309: "wysiwyg-clear-both": 1, bsw/jbe@1309: "wysiwyg-clear-left": 1, bsw/jbe@1309: "wysiwyg-clear-right": 1, bsw/jbe@1309: "wysiwyg-color-aqua": 1, bsw/jbe@1309: "wysiwyg-color-black": 1, bsw/jbe@1309: "wysiwyg-color-blue": 1, bsw/jbe@1309: "wysiwyg-color-fuchsia": 1, bsw/jbe@1309: "wysiwyg-color-gray": 1, bsw/jbe@1309: "wysiwyg-color-green": 1, bsw/jbe@1309: "wysiwyg-color-lime": 1, bsw/jbe@1309: "wysiwyg-color-maroon": 1, bsw/jbe@1309: "wysiwyg-color-navy": 1, bsw/jbe@1309: "wysiwyg-color-olive": 1, bsw/jbe@1309: "wysiwyg-color-purple": 1, bsw/jbe@1309: "wysiwyg-color-red": 1, bsw/jbe@1309: "wysiwyg-color-silver": 1, bsw/jbe@1309: "wysiwyg-color-teal": 1, bsw/jbe@1309: "wysiwyg-color-white": 1, bsw/jbe@1309: "wysiwyg-color-yellow": 1, bsw/jbe@1309: "wysiwyg-float-left": 1, bsw/jbe@1309: "wysiwyg-float-right": 1, bsw/jbe@1309: "wysiwyg-font-size-large": 1, bsw/jbe@1309: "wysiwyg-font-size-larger": 1, bsw/jbe@1309: "wysiwyg-font-size-medium": 1, bsw/jbe@1309: "wysiwyg-font-size-small": 1, bsw/jbe@1309: "wysiwyg-font-size-smaller": 1, bsw/jbe@1309: "wysiwyg-font-size-x-large": 1, bsw/jbe@1309: "wysiwyg-font-size-x-small": 1, bsw/jbe@1309: "wysiwyg-font-size-xx-large": 1, bsw/jbe@1309: "wysiwyg-font-size-xx-small": 1, bsw/jbe@1309: "wysiwyg-text-align-center": 1, bsw/jbe@1309: "wysiwyg-text-align-justify": 1, bsw/jbe@1309: "wysiwyg-text-align-left": 1, bsw/jbe@1309: "wysiwyg-text-align-right": 1 bsw/jbe@1309: }, bsw/jbe@1309: /** bsw/jbe@1309: * Tag list bsw/jbe@1309: * bsw/jbe@1309: * The following options are available: bsw/jbe@1309: * bsw/jbe@1309: * - add_class: converts and deletes the given HTML4 attribute (align, clear, ...) via the given method to a css class bsw/jbe@1309: * The following methods are implemented in wysihtml.dom.parse: bsw/jbe@1309: * - align_text: converts align attribute values (right/left/center/justify) to their corresponding css class "wysiwyg-text-align-*") bsw/jbe@1309: *

foo

... becomes ...

foo

bsw/jbe@1309: * - clear_br: converts clear attribute values left/right/all/both to their corresponding css class "wysiwyg-clear-*" bsw/jbe@1309: *
... becomes ...
bsw/jbe@1309: * - align_img: converts align attribute values (right/left) on to their corresponding css class "wysiwyg-float-*" bsw/jbe@1309: * bsw/jbe@1309: * - add_style: converts and deletes the given HTML4 attribute (align) via the given method to a css style bsw/jbe@1309: * The following methods are implemented in wysihtml.dom.parse: bsw/jbe@1309: * - align_text: converts align attribute values (right/left/center) to their corresponding css style) bsw/jbe@1309: *

foo

... becomes ...

foo

bsw/jbe@1309: * bsw/jbe@1309: * - remove: removes the element and its content bsw/jbe@1309: * bsw/jbe@1309: * - unwrap removes element but leaves content bsw/jbe@1309: * bsw/jbe@1309: * - rename_tag: renames the element to the given tag bsw/jbe@1309: * bsw/jbe@1309: * - set_class: adds the given class to the element (note: make sure that the class is in the "classes" white list above) bsw/jbe@1309: * bsw/jbe@1309: * - set_attributes: sets/overrides the given attributes bsw/jbe@1309: * bsw/jbe@1309: * - check_attributes: checks the given HTML attribute via the given method bsw/jbe@1309: * - url: allows only valid urls (starting with http:// or https://) bsw/jbe@1309: * - src: allows something like "/foobar.jpg", "http://google.com", ... bsw/jbe@1309: * - href: allows something like "mailto:bert@foo.com", "http://google.com", "/foobar.jpg" bsw/jbe@1309: * - alt: strips unwanted characters. if the attribute is not set, then it gets set (to ensure valid and compatible HTML) bsw/jbe@1309: * - numbers: ensures that the attribute only contains numeric (integer) characters (no float values or units) bsw/jbe@1309: * - dimension: for with/height attributes where floating point numbrs and percentages are allowed bsw/jbe@1309: * - any: allows anything to pass bsw/jbe@1309: */ bsw/jbe@1309: "tags": { bsw/jbe@1309: "tr": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "strike": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "form": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "rt": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "code": {}, bsw/jbe@1309: "acronym": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "br": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "clear": "clear_br" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "details": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "h4": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "em": {}, bsw/jbe@1309: "title": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "multicol": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "figure": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "xmp": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "small": { bsw/jbe@1309: "rename_tag": "span", bsw/jbe@1309: "set_class": "wysiwyg-font-size-smaller" bsw/jbe@1309: }, bsw/jbe@1309: "area": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "time": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "dir": { bsw/jbe@1309: "rename_tag": "ul" bsw/jbe@1309: }, bsw/jbe@1309: "bdi": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "command": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "ul": {}, bsw/jbe@1309: "progress": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "dfn": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "iframe": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "figcaption": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "a": { bsw/jbe@1309: "check_attributes": { bsw/jbe@1309: "target": "any", bsw/jbe@1309: "href": "url" // if you compiled master manually then change this from 'url' to 'href' bsw/jbe@1309: }, bsw/jbe@1309: "set_attributes": { bsw/jbe@1309: "rel": "nofollow" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "img": { bsw/jbe@1309: "check_attributes": { bsw/jbe@1309: "width": "dimension", bsw/jbe@1309: "alt": "alt", bsw/jbe@1309: "src": "url", // if you compiled master manually then change this from 'url' to 'src' bsw/jbe@1309: "height": "dimension" bsw/jbe@1309: }, bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_img" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "rb": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "footer": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "noframes": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "abbr": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "u": {}, bsw/jbe@1309: "bgsound": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "address": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "basefont": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "nav": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "h1": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "head": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "tbody": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "dd": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "s": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "li": {}, bsw/jbe@1309: "td": { bsw/jbe@1309: "check_attributes": { bsw/jbe@1309: "rowspan": "numbers", bsw/jbe@1309: "colspan": "numbers" bsw/jbe@1309: }, bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "object": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "div": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "option": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "select": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "i": {}, bsw/jbe@1309: "track": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "wbr": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "fieldset": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "big": { bsw/jbe@1309: "rename_tag": "span", bsw/jbe@1309: "set_class": "wysiwyg-font-size-larger" bsw/jbe@1309: }, bsw/jbe@1309: "button": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "noscript": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "svg": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "input": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "table": {}, bsw/jbe@1309: "keygen": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "h5": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "meta": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "map": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "isindex": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "mark": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "caption": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "tfoot": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "base": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "video": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "strong": {}, bsw/jbe@1309: "canvas": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "output": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "marquee": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "b": {}, bsw/jbe@1309: "q": { bsw/jbe@1309: "check_attributes": { bsw/jbe@1309: "cite": "url" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "applet": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "span": {}, bsw/jbe@1309: "rp": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "spacer": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "source": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "aside": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "frame": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "section": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "body": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "ol": {}, bsw/jbe@1309: "nobr": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "html": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "summary": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "var": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "del": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "blockquote": { bsw/jbe@1309: "check_attributes": { bsw/jbe@1309: "cite": "url" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "style": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "device": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "meter": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "h3": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "textarea": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "embed": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "hgroup": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "font": { bsw/jbe@1309: "rename_tag": "span", bsw/jbe@1309: "add_class": { bsw/jbe@1309: "size": "size_font" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "tt": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "noembed": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "thead": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "blink": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "plaintext": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "xml": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "h6": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "param": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "th": { bsw/jbe@1309: "check_attributes": { bsw/jbe@1309: "rowspan": "numbers", bsw/jbe@1309: "colspan": "numbers" bsw/jbe@1309: }, bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "legend": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "hr": {}, bsw/jbe@1309: "label": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "dl": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "kbd": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "listing": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "dt": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "nextid": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "pre": {}, bsw/jbe@1309: "center": { bsw/jbe@1309: "rename_tag": "div", bsw/jbe@1309: "set_class": "wysiwyg-text-align-center" bsw/jbe@1309: }, bsw/jbe@1309: "audio": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "datalist": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "samp": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "col": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "article": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "cite": {}, bsw/jbe@1309: "link": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "script": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "bdo": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "menu": { bsw/jbe@1309: "rename_tag": "ul" bsw/jbe@1309: }, bsw/jbe@1309: "colgroup": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "ruby": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "h2": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "ins": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "p": { bsw/jbe@1309: "add_class": { bsw/jbe@1309: "align": "align_text" bsw/jbe@1309: } bsw/jbe@1309: }, bsw/jbe@1309: "sub": {}, bsw/jbe@1309: "comment": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "frameset": { bsw/jbe@1309: "remove": 1 bsw/jbe@1309: }, bsw/jbe@1309: "optgroup": { bsw/jbe@1309: "rename_tag": "span" bsw/jbe@1309: }, bsw/jbe@1309: "header": { bsw/jbe@1309: "rename_tag": "div" bsw/jbe@1309: }, bsw/jbe@1309: "sup": {} bsw/jbe@1309: } bsw/jbe@1309: };