Custom BBCodes
Creating/Updating a BBCode
To add a new BBCode, use the sceditor.formats.bbcode.set()
function.
sceditor.formats.bbcode.set()
takes two arguments, name
and bbcode
.
- name String
Should be the name of the BBCode e.g. for[b]
it would be"b"
. This value must be lower-case! - bbcode Object
The BBCode object. See below for more information
Structure of a BBCode object
{
styles: {
"stylename": null,
"another-style-name": ["value1", "value2"]
}
tags: {
"tag": null,
"another-tag": {
"attribute1": null,
"attribute2": ["value1", "value2"]
}
}
isSelfClosing: false,
isInline: true,
isHtmlInline: undefined,
allowedChildren: null,
allowsEmpty: false,
excludeClosing: false,
skipLastLineBreak: false,
breakBefore: false,
breakStart: false,
breakEnd: false,
breakAfter: false,
format: 'string|function',
html: 'string|function',
quoteType: sceditor.BBCodeParser.QuoteType.auto
}
styles
styles object Defaults to null
All matching tags will be passed to the format
function or string to be converted into BBCode.
To match all occurrences of a CSS style do with a specific value do:
"style-name": ["value1", "value2"]
Any DOM node that has the style style-name
with the value value1
or value2
will be matched and passed to the format
property to be converted.
To match all occurrences of a style regardless of value do:
"style-name": null
The null
value means that the value of the CSS property doesn’t matter all that matters is the node has the property style-name
.
Currently it's not possible to target both styles and tags at the same time
via the styles
and tags
properties.
To target a tags that have specific styles, target the tag using the tags
property and then in the format method check if the node has the desired styles. If it does handle it otherwise just return the contents.
For example:
format: function(element, content) {
// Only handle tags with the font-weight: bold style
if(element.style.fontWeight !== 'bold') {
return content;
}
return '[b]' + content + '[/b]';
}
tags
tags object Defaults to null
All matching tags will be passed to the format
function or string to be converted into BBCode.
To match all occurrences of a specific tag do:
"tag-name": null
Any DOM node that is an instance of <tag-name>
will be passed to the format
property to be converted.
To match all occurrences of a tag with that has a specific attribute do:
"tag-name": {
"attribute-name": null,
"another-attribute-name": null
}
That will match any tag that is an instance of <tag-name>
and has the attribute attribute-name
or another-attribute-name
.
To match all occurrences of a tag with an attribute with a specific value do:
"tag-name": {
"attribute-name": ["value1", "value2"]
}
This will match any tag that is an instance of <tag-name>
and has the attribute attribute-name
with the value value1
or value2
.
isSelfClosing
isSelfClosing Bool Defaults to false
If this BBCode is a self closing tag (has no closing tag i.e. [hr]
).
isInline
isInline Bool Defaults to true
If this BBCode is an inline or block level BBCode.
isHtmlInline
isHtmlInline Bool or undefined Defaults to undefined
If this output HTML for this BBCode is inline or not. Only needs to be set if it differs from the BBCodes isInline
value. If undefined this is ignored and isInline
is used.
allowedChildren
allowedChildren Array or null Defaults to null
If null/undefined then all children will be allowed. If it’s an array only the tags specified will be allowed. To allow plain text use #
as the tag name.
To only allow plain text:
allowedChildren: ['#']
To only allow bold and italic as children:
allowedChildren: ['b', 'i']
allowsEmpty
allowsEmpty Bool Defaults to false
If this tag is allowed to be empty (have no children or content).
excludeClosing
excludeClosing Bool Defaults to false
If to not add a closing tag. Mostly so that [*]
can be used without [/*]
.
skipLastLineBreak
skipLastLineBreak Bool Defaults to false
Block level tags have an extra <br />
added to the end of them in all browsers except IE. If this is set to true the extra line break will not be added.
breakBefore
breakBefore Bool Defaults to false
If to insert a new line before the start tag.
breakStart
breakStart Bool Defaults to false
If to insert a new line after the start tag.
This does not apply to self closing tags.
breakEnd
breakEnd Bool Defaults to false
If to insert a new line before the end tag.
This does not apply to self closing tags.
breakAfter
breakAfter Bool Defaults to false
If to insert a new line after the end tag.
format
format String or function
Should be either a string in the format "[b]{0}[/b]"
where {0}
will be replaced with the BBCode tags content.
Or a function that takes two arguments, element
& content
and returns the formatted BBCode string.
- element HTMLElement
The DOM HTMLElement object to be converted - content String
A string containing the BBCodes content
e.g.:
function(element, content) {
if(!element.attr('data-youtube-id'))
return content;
return '[youtube]' + element.attr('data-youtube-id') + '[/youtube]';
}
html
html String or function
Should be either a string in the format "<strong>{0}</strong>"
where {0}
will be replaced with the HTML tags content.
Or a function that takes 3 arguments (token, attrs, content) and returns the HTML string.
- token Object
TokenizeToken object - attrs Object
Map of attributes. The default attribute[tag=default]
will be set todefaultattr
- content String
The HTML content of this tag
e.g.:
html: function(token, attrs, content) {
if(typeof attrs.defaultattr !== 'undefined')
content = '<cite>' + attrs.defaultattr + '</cite>' + content;
return '<blockquote>' + content + '</blockquote>';
}
quoteType
quoteType sceditor.BBCodeParser.QuoteType Defaults to sceditor.BBCodeParser.QuoteType.auto
The attribute quote type.
Should either be a function or one of the following values:
- sceditor.BBCodeParser.QuoteType.always
Always quote the attribute value - sceditor.BBCodeParser.QuoteType.never
Never quote the attributes value - sceditor.BBCodeParser.QuoteType.auto
Only quote the attributes value when it contains spaces ot equals