Форум » Помощь по коду » Скрипт добавления кнопок на панель редактирования и рядом с "отправить" » Ответить

Скрипт добавления кнопок на панель редактирования и рядом с "отправить"

Zenitchik: Часть для HTML-верх [pre]<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> [/pre] Вызов функций в 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-' '*' Пример добавления кнопок [pre]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'] );[/pre] Вызов функции appendInputButtons Функция добавляет кнопки рядом с кнопками "Отправить" и "Предпросмотр" Функция принимает сколько угодно аргументов, каждый аргумент соответствует одной добавляемой кнопке. Структура аргумента: [условие,text,code] text - текст отображаемый на кнопке code - код на языке JavaScript, который будет выполняться при нажатии. условие составляется так же, как для функции appendButtons Пример добавления кнопки: appendInputButtons([['0'],'Проба','alert("Здарвствуй Мир!")']); Вид скрипта HTML-низ [pre2]<script type="text/javascript"> appendButtons(аргументы через запятую); appendInputButtons(аргументы через запятую); </script>[/pre2] Назначение функций и устройство аргументов описано выше.

Ответов - 5

[Frozen_Fear]: Что-то не выходит каменый цветок(((( http://elvenkingdom.forum24.ru

Zenitchik: Сам подход плохой. Я же говорил - зашить в функцию. Вы функции когда-нибудь создавали?

[Frozen_Fear]: Zenitchik, нет, вот функции я как раз никогда и не создавала ((( Попыталась разобраться по вашему примеру, но не смогла


Zenitchik: По примерам разбираться - гиблое дело. Суть в том, что функция - это одно слово, чтобы много не писать. Т.е. она содержит код, который будет выполнен, когда вы ее вызываете. А еще почитайте вот что: http://katalogue.org/zenitchik/JavaScript/clientguide13/fcns.htm Раз есть желание - лучше сразу научиться. Чем черт не шутит - может когда-нибудь я к вам за скриптом приду :)

[Frozen_Fear]: Я на самом деле лучше разбираюсь с текстом и конкретным примером... По тем текстам я ничего не понимаю ((( А вот разбираясь на конкретных примерах начинаю понимать суть (собственно так и училась на хтмл). И если вас не затруднит, не мог ли бы вы этот конкретный пример предоставить. Хотя бы просто с фразами что и где писать



полная версия страницы