# How to use

Filter highlightAll provides you with ways to filter the element the `highlightAll` and `highlightAllUnder` methods actually highlight. This can be very useful when you use Prism's automatic highlighting when loading the page but want to exclude certain code blocks.

# API

In `Prism.plugins.filterHighlightAll` you can find the following:

`add(condition: (value: { element, language: string }) => boolean): void`
  Adds a new filter which will only allow an element to be highlighted if the given function returns `true` for that element.
  This can be used to define a custom language filter.
`addSelector(selector: string): void`
  Adds a new filter which will only allow an element to be highlighted if the element matches the given CSS selector.
`reject.add(condition: (value: { element, language: string }) => boolean): void`
  Same as `add`, but only elements which do not fulfill the condition will be highlighted.
`reject.addSelector(selector: string): void`
  Same as `addSelector`, but only elements which do not match the selector will be highlighted.
`filterKnown: boolean = false`
  Set this to `true` to only allow known languages. Code blocks without a set language or an unknown language will not be highlighted.

An element will only be highlighted by the `highlightAll` and `highlightAllUnder` methods if all of the above accept the element.

## Attributes

You can also add the following `data-*` attributes to the script which contains the Filter highlightAll plugin.

`<script src="..." data-filter-selector="<css selector>">`
  This attribute is a shorthand for `Prism.plugins.filterHighlightAll.addSelector`. The value of the attribute will be passed as is to the `addSelector` function.
`<script src="..." data-reject-selector="<css selector>">`
  This attribute is a shorthand for `Prism.plugins.filterHighlightAll.reject.addSelector`. The value of the attribute will be passed as is to the `rejectSelector` function.
`<script src="..." data-filter-known>`
  This attribute can be used to set the value of `Prism.plugins.filterHighlightAll.filterKnown`. `filterKnown` will be set to `true` if the attribute is present, `false` otherwise.

# Examples

The following code is used to define a filter on this page.

    // <code> elements with a .no-highlight class will be ignored
    Prism.plugins.filterHighlightAll.reject.addSelector('code.no-highlight');
    Prism.plugins.filterHighlightAll.reject.addSelector('pre.no-highlight > code');

    // don't highlight CSS code
    Prism.plugins.filterHighlightAll.add(function (env) {
    	return env.language !== 'css';
    });

The results:

    let foo = "I'm not being highlighted";

    a.link::after {
    	content: 'also not being highlighted';
    	color: #F00;
    }

Prism will ignore these blocks, so you can even define your own static highlighting which Prism would normally remove.

    a.link::before {
    	content: 'I just do my own highlighting';
    	color: #F00;
    }