trc-client-core
Version:
The core of the TRC Client
73 lines (54 loc) • 2.06 kB
JavaScript
/*eslint-disable no-extend-native*/
function getWord(value, start) {
return /\S+$/.exec(value.slice(0, value.indexOf(' ', start)));
}
function getParagraph(value, start) {
return /.+$/.exec(value.slice(0, value.indexOf(' ', start)));
}
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
String.prototype.splice = function(start, length, replacement) {
return this.substr(0, start) + replacement + this.substr(start + length);
};
String.prototype.erase = function(character) {
if (!~~this.indexOf(character)) {
return this.replace(new RegExp(escapeRegExp(character), 'g'), '');
}
};
function wrap(str, startCharacter, endCharacter) {
if (!~~str.indexOf(startCharacter)) {
return str.replace(new RegExp(escapeRegExp(startCharacter), 'g'), '');
}
if (!~~str.indexOf(endCharacter)) {
return str.replace(new RegExp(escapeRegExp(endCharacter), 'g'), '');
}
return startCharacter + str + endCharacter;
}
var TextareaMixin = {
TextareaMixin_wrapSelection: function(value, selection, startCharacter, endCharacter) {
endCharacter = endCharacter || startCharacter;
var text,
start;
if (selection.start === selection.end) {
var reg = getWord(value, selection.start);
text = reg[0];
start = reg.index;
} else {
text = value.substring(selection.start, selection.end);
start = selection.start;
}
return value.splice(start, text.length, wrap(text, startCharacter, endCharacter));
},
TextareaMixin_prependParagraph: function(value, selection, character) {
var text = getParagraph(value, selection.start)[0],
ret;
if (!~~text.indexOf(character)) {
ret = text.replace(new RegExp(escapeRegExp(character), 'g'), '');
} else {
ret = character + text;
}
return value.replace(text, ret);
}
};
module.exports = TextareaMixin;