Часть для HTML-верх
<script type="text/javascript">
function isDirective(arg){
/*
Проверяет директиву на истинность
arg - массив списков номеров вида [razdel,filenumber,group,work,msgid]
Пропускать элементы нельзя, но можно опустить последние.
*/
function createDirective(code, varname){
if(code=='*')return 'true';
var s=code.split(','), s1;
var t=[];
for(var i=0;i<s.length;i++){
if(s[i].search(/(\d+)-(\d+)/)>-1){
t[i]='!('+RegExp.$1+'<='+varname+'&&'+varname+'<='+RegExp.$2+')';
}else if(s[i].search(/(\d+)-/)>-1){
t[i]=RegExp.$1+'>'+varname;
}else if(s[i].search(/-(\d+)/)>-1){
t[i]=RegExp.$1+'<'+varname;
}else if(s[i].search(/!(\d+)/)>-1){
t[i]=RegExp.$1+'=='+varname;
}else if(s[i].search(/(\d+)/)>-1){
t[i]=RegExp.$1+'!='+varname;
}
}
return '!('+t.join(' && ')+')';
}
if(arg.length==0)return true;
var t=[],v=['razdel','filenumber','group','work','msgid'];
for(var i=0;i<arg.length&&i<v.length;i++){
t[i]=createDirective(arg[i],v[i]);
}
return eval(t.join(' && '));
}
function appendButtons(){
/*
Добавляет кнопки на форму ответа
Принимает сколько угодно аргументов представляющих собой массивы вида
[[razdel,filenumber,group,work,msgid],image,alt,href,target]
*/
var test=true;
if(theForm)if(theForm.message)test=false;
if(test)return;
var textAr=theForm.message;
var par=textAr.parentNode;
var a, img;
var relative =textAr.previousSibling;
for(var j=0; j<arguments.length; j++){
if(isDirective(arguments[j][0])){
if(arguments[j][1]=='br'){
par.insertBefore(document.createElement('BR'), relative);
}else{
a = document.createElement('A');
a.href = arguments[j][3];
a.target=arguments[j][4];
a.title=arguments[j][2];
img=document.createElement('IMG');
img.src = arguments[j][1];
img.border = 0;
img.alt = arguments[j][2];
img.style.height=16;
img.style.width=16;
a.appendChild(img);
par.insertBefore(a, relative);
par.insertBefore(document.createTextNode(unescape('%20')), relative);
}
}
}
}
function appendInputButtons(){
/*
Добавляет кнопки Input на форму ответа
Принимает сколько угодно аргументов представляющих собой массивы вида
[[razdel,filenumber,group,work,msgid],text,code]
*/
var test=true;
if(theForm)if(theForm.message)test=false;
if(test)return;
var input;
var par=theForm.message.parentNode.parentNode.nextSibling.childNodes[1];
for(var j=0; j<arguments.length; j++){
if(isDirective(arguments[j][0])){
if(arguments[j][1]=='br'){
par.appendChild(document.createElement('BR'));
}else{
input = document.createElement('input');
input.className = 'sender';
input.type = 'button';
input.value = arguments[j][1];
input.onclick = new Function(arguments[j][2]);
par.appendChild(input);
par.appendChild(document.createTextNode(unescape('%20')));
}
}
}
}
</script>
Вызов функций в HTML-низ
Вызов функции appendButtons Функция добавляет кнопки на панель редактирования (над окноп ввода сообщения)
Функция принимает сколько угодно аргументов, каждый аргумент соответствует одной добавляемой кнопке.
Структура аргумента:
[условие,image,alt,href,target]
image - картинка кнопки
alt - всплывающая подсказка
href - ссылка или команда кнопки
target - где открывать ссылку: _blank - новое окно браузера, _self - в текущее окно.
условие - вложенный массив, представляющий инструкцию о том, в каких случаях показывать кнопки.
[razdel,filenumber,group,work,msgid] - Пропускать элементы нельзя, но можно опустить последние/
razdel - список номеров разделов, в которых нужно показывать кнопку
filenumber - список номеров тем, в которых нужно показывать кнопку
group - список номеров групп, которым нужно показывать кнопку
work - список номеров типов страниц, в которых нужно показывать кнопку
0 - страница раздела с таблицей тем и формой для создания новой темы
1 - страница темы с формой ответа
2 - отдельная страница с формой для создания новой темы
3 - отдельная страница с формой для создания нового опроса
4 - страница отправки личного сообщения
6 - отдельная страница с формой для ответа в тему
7 - страница правки сообщения
msgid - разрешенные номера сообщений. Из-за особеннойтей нумерации постов, я рекомендую использовать только значения 0 - для первого поста темы, !0 - для всех постов кроме первого и * - для всех постов.
Список номеров составляется так: номера идут через запятую, можно задавать диапазоны через - (например 1-5), диапазон может быть оганичен только содной стороны ('-2' - до 2; '2-' - от 2 и больше), можно запретить номер знаком ! (например !3), можно разрешить любые номера знаком *.
Примеры списка:
'0-3,6,7'
'!0'
'2-'
'*'
Пример добавления кнопок
appendButtons(
[[],'http://s40.radikal.ru/i089/0905/7a/5744fd321f1e.gif','жирный курсив красный',"javascript:pst3('','','','[font color=red][i][b]','[/b][/i][/font]')",'_self'],
[['*','*','2-'],'http://i064.radikal.ru/0905/e1/32f40ac71812.gif','Вставить медаль','javascript:addMedal();','_self'],
[['0','26-'],'http://s51.radikal.ru/i133/0905/fa/89a218d4b770.gif','Шаблон заявки','javascript:RolesAddShablon()','_self'],
[['0','26-','2-','7','!0'],'http://s56.radikal.ru/i153/0905/45/7ad86b9aa2c5.gif','Добавить в каталог','javascript:AddGame();','_self']
);
Вызов функции appendInputButtons Функция добавляет кнопки рядом с кнопками "Отправить" и "Предпросмотр"
Функция принимает сколько угодно аргументов, каждый аргумент соответствует одной добавляемой кнопке.
Структура аргумента:
[условие,text,code]
text - текст отображаемый на кнопке
code - код на языке JavaScript, который будет выполняться при нажатии.
условие составляется так же, как для функции appendButtons
Пример добавления кнопки:
appendInputButtons([['0'],'Проба','alert("Здарвствуй Мир!")']);
Вид скрипта HTML-низ
<script type="text/javascript">
appendButtons(аргументы через запятую);
appendInputButtons(аргументы через запятую);
</script>
Назначение функций и устройство аргументов описано выше.