|
|
/*
|
|
|
@licstart The following is the entire license notice for the
|
|
|
JavaScript code in this page.
|
|
|
|
|
|
|
|
|
Copyright (C) 2013 neko259
|
|
|
|
|
|
The JavaScript code in this page is free software: you can
|
|
|
redistribute it and/or modify it under the terms of the GNU
|
|
|
General Public License (GNU GPL) as published by the Free Software
|
|
|
Foundation, either version 3 of the License, or (at your option)
|
|
|
any later version. The code is distributed WITHOUT ANY WARRANTY;
|
|
|
without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
|
|
|
|
|
|
As additional permission under GNU GPL version 3 section 7, you
|
|
|
may distribute non-source (e.g., minimized or compacted) forms of
|
|
|
that code without the copy of the GNU GPL normally required by
|
|
|
section 4, provided you include this license notice and a URL
|
|
|
through which recipients can access the Corresponding Source.
|
|
|
|
|
|
@licend The above is the entire license notice
|
|
|
for the JavaScript code in this page.
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
* Add the desired characters to the start and end of selection.
|
|
|
* @param start Start (left) text
|
|
|
* @param end End (right) text
|
|
|
* @returns {boolean}
|
|
|
*/
|
|
|
function addMarkToMsg(start, end) {
|
|
|
if (end.length == 0) {
|
|
|
return addTextToEachLineOfSelection(start);
|
|
|
}
|
|
|
|
|
|
var textarea = document.getElementsByTagName('textarea')[0];
|
|
|
if(!textarea) return;
|
|
|
if( document.selection ) {
|
|
|
textarea.focus();
|
|
|
sel = document.selection.createRange();
|
|
|
sel.text = start + sel.text + end;
|
|
|
} else if(textarea.selectionStart || textarea.selectionStart == '0') {
|
|
|
textarea.focus();
|
|
|
var startPos = textarea.selectionStart;
|
|
|
var endPos = textarea.selectionEnd;
|
|
|
textarea.value = textarea.value.substring(0, startPos) + start + textarea.value.substring(startPos, endPos) + end + textarea.value.substring( endPos, textarea.value.length );
|
|
|
} else {
|
|
|
textarea.value += start + end;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Add text to the beginning of each selected line. Partially selected lines
|
|
|
* are included
|
|
|
* @param textToAdd
|
|
|
* @returns {*}
|
|
|
*/
|
|
|
function addTextToEachLineOfSelection(textToAdd) {
|
|
|
var editor, end, newValue, start, value, _ref, _ref1;
|
|
|
editor = document.getElementsByTagName('textarea')[0];
|
|
|
_ref = [editor.selectionStart, editor.selectionEnd], start = _ref[0], end = _ref[1];
|
|
|
if (start == null) {
|
|
|
return;
|
|
|
}
|
|
|
if (start === end) {
|
|
|
return;
|
|
|
}
|
|
|
console.log("Selection range: start=" + start + " end=" + end);
|
|
|
value = editor.value;
|
|
|
_ref1 = getLinesRange(start, end, value), start = _ref1[0], end = _ref1[1];
|
|
|
newValue = replaceLines(start, end, value, textToAdd);
|
|
|
return editor.value = newValue;
|
|
|
}
|
|
|
|
|
|
function replaceLines(start, end, value, textToAdd) {
|
|
|
var line, replacedText, text;
|
|
|
text = value.slice(start, end);
|
|
|
replacedText = ((function() {
|
|
|
var _i, _len, _ref, _results;
|
|
|
_ref = text.split("\n");
|
|
|
_results = [];
|
|
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
|
line = _ref[_i];
|
|
|
_results.push(textToAdd + line);
|
|
|
}
|
|
|
return _results;
|
|
|
})()).join("\n");
|
|
|
return replaceSubstring(start, end, value, replacedText);
|
|
|
}
|
|
|
|
|
|
function replaceSubstring(start, end, string, replacingString) {
|
|
|
return string.slice(0, start) + replacingString + string.slice(end);
|
|
|
}
|
|
|
|
|
|
function getLinesRange(start, end, value) {
|
|
|
var i, rangeEnd, rangeStart, _i, _j, _ref, _ref1;
|
|
|
if (value[start] === "\n") {
|
|
|
start = start - 1;
|
|
|
}
|
|
|
_ref = [start, end], rangeStart = _ref[0], rangeEnd = _ref[1];
|
|
|
for (i = _i = start; start <= 0 ? _i <= 0 : _i >= 0; i = start <= 0 ? ++_i : --_i) {
|
|
|
if (value[i] === "\n") {
|
|
|
break;
|
|
|
}
|
|
|
rangeStart = i;
|
|
|
}
|
|
|
for (i = _j = end, _ref1 = value.length; end <= _ref1 ? _j < _ref1 : _j > _ref1; i = end <= _ref1 ? ++_j : --_j) {
|
|
|
if (value[i] === "\n") {
|
|
|
break;
|
|
|
}
|
|
|
rangeEnd = i;
|
|
|
}
|
|
|
return [rangeStart, rangeEnd];
|
|
|
}
|