Файл: library/wysihtml5/src/commands/formatInline.js
Строк: 78
<?php
/**
* formatInline scenarios for tag "B" (| = caret, |foo| = selected text)
*
* #1 caret in unformatted text:
* abcdefg|
* output:
* abcdefg<b>|</b>
*
* #2 unformatted text selected:
* abc|deg|h
* output:
* abc<b>|deg|</b>h
*
* #3 unformatted text selected across boundaries:
* ab|c <span>defg|h</span>
* output:
* ab<b>|c </b><span><b>defg</b>|h</span>
*
* #4 formatted text entirely selected
* <b>|abc|</b>
* output:
* |abc|
*
* #5 formatted text partially selected
* <b>ab|c|</b>
* output:
* <b>ab</b>|c|
*
* #6 formatted text selected across boundaries
* <span>ab|c</span> <b>de|fgh</b>
* output:
* <span>ab|c</span> de|<b>fgh</b>
*/
(function(wysihtml5) {
var // Treat <b> as <strong> and vice versa
ALIAS_MAPPING = {
"strong": "b",
"em": "i",
"b": "strong",
"i": "em"
},
htmlApplier = {};
function _getTagNames(tagName) {
var alias = ALIAS_MAPPING[tagName];
return alias ? [tagName.toLowerCase(), alias.toLowerCase()] : [tagName.toLowerCase()];
}
function _getApplier(tagName, className, classRegExp) {
var identifier = tagName + ":" + className;
if (!htmlApplier[identifier]) {
htmlApplier[identifier] = new wysihtml5.selection.HTMLApplier(_getTagNames(tagName), className, classRegExp, true);
}
return htmlApplier[identifier];
}
wysihtml5.commands.formatInline = {
exec: function(composer, command, tagName, className, classRegExp) {
var range = composer.selection.getRange();
if (!range) {
return false;
}
_getApplier(tagName, className, classRegExp).toggleRange(range);
composer.selection.setSelection(range);
},
state: function(composer, command, tagName, className, classRegExp) {
var doc = composer.doc,
aliasTagName = ALIAS_MAPPING[tagName] || tagName,
range;
// Check whether the document contains a node with the desired tagName
if (!wysihtml5.dom.hasElementWithTagName(doc, tagName) &&
!wysihtml5.dom.hasElementWithTagName(doc, aliasTagName)) {
return false;
}
// Check whether the document contains a node with the desired className
if (className && !wysihtml5.dom.hasElementWithClassName(doc, className)) {
return false;
}
range = composer.selection.getRange();
if (!range) {
return false;
}
return _getApplier(tagName, className, classRegExp).isAppliedToRange(range);
}
};
})(wysihtml5);
?>