// Creates a wrapper function that wraps the passed string using the
// passed prefix and suffix. If the suffix is omitted, it will be replaced
// by the prefix.
// Be aware that the wrap function will not wrap a string twice.
function createWrap(prefix, suffix) {
if (suffix === undefined) {
suffix = prefix;
}
return function(string) {
if (string.substr(0, prefix.length) === prefix && string.substr(-suffix.length) === suffix) {
return string;
}
if (string) {
return prefix + string + suffix;
}
return {
replacement: prefix + suffix,
offset: prefix.length
};
};
}
// Define default stud.ip button set
const buttonSet = {
left: {
bold: { label: 'B', evaluate: createWrap('**') },
italic: { label: 'i', evaluate: createWrap('%%') },
underline: { label: 'u', evaluate: createWrap('__') },
strikethrough: { label: 'u', evaluate: createWrap('{-', '-}') },
code: { label: 'code', evaluate: createWrap('[code]', '[/code]') },
larger: { label: 'A+', evaluate: createWrap('++') },
smaller: { label: 'A-', evaluate: createWrap('--') },
signature: { label: 'signature', evaluate: createWrap('', '\u2013~~~') },
link: {
label: 'link',
evaluate: function(string) {
string = string || window.prompt('Text:') || '';
if (string.length === 0) {
return string;
}
var url = window.prompt('URL:') || '';
return url.length === 0 ? string : '[' + string + ']' + url;
}
},
image: {
label: 'img',
evaluate: function(string) {
var url = window.prompt('URL:') || '';
return url.length === 0 ? string : '[img]' + url;
}
}
},
right: {
help: {
label: '?',
evaluate: function() {
var url = $('link[rel=help].text-format').attr('href'),
win;
win = window.open(url, '_blank');
win.opener = null;
}
}
}
};
export default buttonSet;