UNPKG

trc-client-core

Version:
73 lines (54 loc) 2.06 kB
/*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;