LaTeX Helper v2
HTML
<script src="http://dxdy-js.korotkov.co.uk/styles/subsilver2/template/jquery.selection.js"></script>
<script src="http://dxdy.ru/misc/lxhelper/cmddefs.php"></script>
<table id="tablewrapper">
<tr>
<td>
<textarea id="textarea" cols="30" rows="4">Попробуйте использовать это окно для теста. Скрипт должен понимать в каком режиме вы находитесь. [math]$a=b$[/math] $a-b$ $$a+ b$$ [math]$$y-x$$[/math] [math]textmode[/math]</textarea>
</td>
<td>
<div id="lxtoolbar"></div>
</td>
</tr>
</table>
CSS
body {
font-family:'Lucida Grande';
font-size: 14px;
}
textarea {
font-size: 1em;
width: 100%;
}
div#lxtoolbar {
float: right;
text-align: left;
padding: 10px;
width: 350px;
height: 220px;
}
.lxcommands {
}
button {
vertical-align: middle;
margin-left: 5px;
margin-right: 5px;
font-family:'PT Mono', monospace;
}
button img {
vertical-align: middle;
//max-height: 18px;
margin: 5px;
}
.stdiconBtn {
height: 25px;
}
.stdiconImg {
max-height: 15px;
}
.largeiconBtn {
height: 70px;
}
.largeiconImg {
max-height: 60px;
}
#tablewrapper {
width: 100%;
}
#tablewrapper td {
vertical-align: top;
}
.ui-accordion {
font-size: 1em;
font-family: inherit;
}
.ui-accordion .ui-accordion-content {
padding: 0.5em;
}
JavaScript
function isInMathMode() {
var selectedPosition = $('#textarea').selection('getPos');
var ss = $("#textarea").val().substr(0, selectedPosition.start) + ' ';
var sslen = ss.length;
var sdb = -1; // single dollar balance
var ddb = -1; // double dollar balance
for (var i = 0; i < sslen; i++) {
if (ss[i] == '$' && (ss[i + 1] != '$')) {
sdb *= -1;
} else if (ss[i] == '$' && ss[i + 1] == '$') {
ddb *= -1;
i++; // extra step forward
}
}
return (sdb > 0 || ddb > 0);
}
function getSymbolAtCarret() {
return $("#textarea").val().substr($('#textarea').selection('getPos').start, 1);
}
function hashToSrc(hash) {
var ext = 'svg';
var host = 'dxdy-01.korotkov.co.uk';
return 'http://' + host +
'/f/' + hash.substr(0, 1) + '/' + hash.substr(1, 1) + '/' + hash.substr(2, 1) + '/' + hash + (ext == 'png' ? '82' : '') + '.' + ext;
}
function findCommand(id) {
for (j = 0; j < commandsSize; j++) {
if (id == commands[j].id) {
return commands[j];
}
}
return false;
}
categoriesSize = categories.length;
commandsSize = commands.length;
for (i = 0; i < categoriesSize; i++) {
$('#lxtoolbar').html($('#lxtoolbar').html() + '<h3 class="lxcattitle">' + categories[i].ru + '</h3>');
var catid = categories[i].id;
var commandsInCategory = 0;
var commandsHtml = '';
var btncontents = '';
for (j = 0; j < commandsSize; j++) {
if (commands[j].catid === catid) {
commandsInCategory++;
var cmdClass = (commands[j].class === '') ? 'stdicon' : commands[j].class;
var cmdClassBtn = cmdClass + 'Btn';
var cmdClassImg = cmdClass + 'Img';
if (commands[j].src !== '' || commands[j].hash !== '') {
var src = (commands[j].src === '') ? hashToSrc(commands[j].hash) : commands[j].src;
btncontents = '<img src="' + src + '" class="' + cmdClassImg +...