Форум » Чердак для Борды » Библиотека JSObjmodule.js (с myhelp.nm.ru - Dante) » Ответить

Библиотека JSObjmodule.js (с myhelp.nm.ru - Dante)

Geek: [pre2]function getTreeObj(obj, upLevel, next, downLevel){ for(i=0; i < upLevel; i++) {obj = obj.parentNode;} for(i=0; i < next; i++) {obj = obj.nextSibling;} for(i=0; i < downLevel; i++){obj = obj.lastChild;} return obj; } /* ***Функция добавления своей кнопки в меню над полем ввода ответа*** *obj - узел в котором выполняется скрипт (textAr.parentNode) *beforNumb - номер объекта в списке потомков obj, перед которым нужно вставлять новую кнопочку *Ahref - действия новой ссылки *Atarget - способ открытия окна на которое ведет ссылка, ежели она куда-то ведет *IMGsrc - картинка внутри ссылки *IMGalt - поясняющий текст новой кнопочки */ function addMenuAnc(obj, beforNumb, Ahref, Atarget, IMGsrc, IMGalt){ var tagA = new Object(); var newText = document.createTextNode(unescape('%A0%A0')); var newA = document.createElement('A'); newA.href = Ahref; newA.target = Atarget; obj.insertBefore(newA, obj.childNodes[beforNumb]); tagA = obj.childNodes[beforNumb]; tagA.appendChild(document.createElement('img')); tagA.lastChild.src = IMGsrc; tagA.lastChild.alt = IMGalt; tagA.lastChild.border = 0; tagA.lastChild.width = 16; tagA.lastChild.height = 16; if(obj.childNodes[beforNumb+1].nodeName == 'IMG'){obj.insertBefore(newText, obj.childNodes[beforNumb+1])} else{obj.insertBefore(newText, tagA)} } /*end addMenuAnc*/ /* ***Функция возвращающая массив ссылок на элементы с указанным атрибутом class*** *className - название класса *NodeList - список элементов в котором следует производить поиск. Если этот параметр опущен поиск производится по всему древу элементов */ function getElementsByClass(className, NodeList){ if(NodeList == null){ NodeList = document.all; } var RezNodeList = new Array(); var l = NodeList.length for(j=0; j < NodeList.length; j++){ if(NodeList[j].getAttribute('class') == className){ RezNodeList.push(NodeList[j]) } else{ if(NodeList[j].getAttribute('className') == className){ RezNodeList.push(NodeList[j]) } } } return RezNodeList; } /*end getElementsByClass*/ /* ***Функция возвращающая ссылку на родительский элемент элемента self с указанным именем тега*** *searchParentTagName - имя искомого родительского тега *self - элемент от которого ведется поиск */ function getParentElementByTagName(searchParentTagName, self){ var tmpElem = self.parentNode; var tmpNodeName = tmpElem.nodeName.toLowerCase(); searchParentTagName = searchParentTagName.toLowerCase(); while(tmpNodeName != searchParentTagName && tmpNodeName != '#document'){ tmpElem = tmpElem.parentNode; tmpNodeName = tmpElem.nodeName.toLowerCase(); } if((tmpNodeName == '#document' && searchParentTagName == '#document') || tmpNodeName != '#document'){ return tmpElem; } else{ return null; } } /*end getParentElementByTagName*/ /* ***Функция возвращающая NodeList потомков элемента self, с заданым атрибутом name*** *searchChildNodesName - имя искомых потомков *self - элемент от которого ведется поиск */ function getChildNodesByName(searchChildNodesName, self){ var NodeList = new Array(); var scnLen = self.childNodes.length; for(i=0; i < scnLen; i ++){ self.childNodes.getAttribute('name') == searchChildNodesName ? NodeList.push(self.childNodes) : NodeList = NodeList.concat(getChildNodesByName(searchChildNodesName, self.childNodes)); } return NodeList; } /* ***Функция возвращающая NodeList элементов div, содержащих сообщения темы*** */ function fbb_getMsgs(){ return getElementsByClass('font1', document.getElementsByTagName('div')); }[/pre2]

Ответов - 7

Geek: Пример использования (с форума telegimnaz.borda.ru): [pre] <script> var textAr = document.all.message; if(textAr){ document.write('<SCRIPT SRC="http://myhelp.nm.ru/scripts/helper_forum/ForumSm.js" TYPE="text/javascript"><\/SCRIPT>'); //Вызов функции, с параметрами кнопки неразрывного пробела addMenuAnc(textAr.parentNode, 21, "javascript:p3('','','','"+unescape('%A0%A0%A0')+"','')", "", "http://myhelp.nm.ru/smile/space.gif", "неразрывный пробел"); //Вызов функции, с параметрами кнопки copyright addMenuAnc(textAr.parentNode, 27, "javascript:p3('','','','©','')", "", "http://foto.radikal.ru/0511/6443a8b50338.gif", "copyright"); //Вызов функции, с параметрами кнопки User Agent addMenuAnc(textAr.parentNode, 23, "javascript:p3('','','','User Agent: " + navigator.userAgent + "','')", "", "http://foto.radikal.ru/0601/c59ab6c21e6d.gif", "User Agent");} </script>[/pre]

Geek: Geek пишет: document.write('<SCRIPT SRC="http://myhelp.nm.ru/scripts/helper_forum/ForumSm.js" TYPE="text/javascript"><\/SCRIPT>'); То были дополнительные смайлики. Файл, который подгружался этим скриптом, был таким: [pre] var UsInfTD = new Object(); (gb==1)?(UsInfTD = textAr.parentNode):(UsInfTD = textAr.parentNode.previousSibling); var SmBurrSRC = 'https://web.archive.org/web/20070227024730/http://foto.radikal.ru/0511/cb6854103080.gif'; var SmFolderPath = 'https://web.archive.org/web/20070227024730/http://myhelp.nm.ru/smile/Forum_Sm'; var titleT = 'Доп. смайлы'; var SmNumber = 19; var DSmImgPath = ''; if(forum == 'hellsingforum'){SmBurrSRC = 'https://web.archive.org/web/20070227024730/http://hellsinguniverse.ru/ect/smiles/mySm3.gif';} function RPprintSm(){ var index = 0; if(UsInfTD.lastChild.lastChild.nodeName == 'A'){ UsInfTD.appendChild(document.createElement('TABLE')); UsInfTD.lastChild.setAttribute("bgColor", diz[5]); UsInfTD.lastChild.setAttribute("border", 2); UsInfTD.lastChild.setAttribute("borderColor", diz[8]); UsInfTD.lastChild.style.position = 'absolute'; UsInfTD.lastChild.appendChild(document.createElement('TBODY')); UsInfTD.lastChild.lastChild.appendChild(document.createElement('TR')); for(i=0; i < SmNumber; i++){ if(i - index == 5){UsInfTD.lastChild.lastChild.appendChild(document.createElement('TR')); index += 5;} UsInfTD.lastChild.lastChild.lastChild.setAttribute("borderColor", diz[8]); UsInfTD.lastChild.lastChild.lastChild.appendChild(document.createElement('TD')).innerHTML = '<IMG SRC="'+SmFolderPath+'/FSm'+(i+1)+'.gif" onclick="p3(\''+SmFolderPath+'/FSm'+(i+1)+'.gif\',\'\',\'\',\'[img src=\',\']\');" onmouseover="this.style.cursor=\'hand\'" onmouseout="this.style.cursor=\'default\'">'; UsInfTD.lastChild.lastChild.lastChild.setAttribute("align", "center");}} else{(UsInfTD.lastChild.style.visibility == 'hidden')?UsInfTD.lastChild.style.visibility = 'visible' : UsInfTD.lastChild.style.visibility = 'hidden';} } UsInfTD.appendChild(document.createElement('BR')); if(gb!=1){ UsInfTD.appendChild(document.createElement('BR')); UsInfTD.appendChild(document.createElement('center'));} else{ UsInfTD.appendChild(document.createElement('font'));} UsInfTD.lastChild.appendChild(document.createElement('A')); UsInfTD.lastChild.lastChild.href='javascript:RPprintSm();'; if(graf_but_off == 1){UsInfTD.lastChild.lastChild.innerHTML = '<u>'+titleT+'<u>';} else{UsInfTD.lastChild.lastChild.appendChild(document.createElement('IMG')); UsInfTD.lastChild.lastChild.lastChild.src = SmBurrSRC; UsInfTD.lastChild.lastChild.lastChild.border = 0; UsInfTD.lastChild.lastChild.lastChild.title = titleT;}[/pre]

Geek: Было: (функция для добавления своей кнопки в пеню над формой ответа) [pre] /* ***Функция добавления своей кнопки в меню над полем ввода ответа*** *obj - узел в котором выполняется скрипт (textAr.parentNode) *beforNumb - номер объекта в списке потомков obj, перед которым нужно вставлять новую кнопочку *Ahref - действия новой ссылки *Atarget - способ открытия окна на которое ведет ссылка, ежели она куда-то ведет *IMGsrc - картинка внутри ссылки *IMGalt - поясняющий текст новой кнопочки */ function addMenuAnc(obj, beforNumb, Ahref, Atarget, IMGsrc, IMGalt){ var tagA = new Object(); var newText = document.createTextNode(unescape('%A0%A0')); var newA = document.createElement('A'); newA.href = Ahref; newA.target = Atarget; obj.insertBefore(newA, obj.childNodes[beforNumb]); tagA = obj.childNodes[beforNumb]; tagA.appendChild(document.createElement('img')); tagA.lastChild.src = IMGsrc; tagA.lastChild.alt = IMGalt; tagA.lastChild.border = 0; tagA.lastChild.width = 16; tagA.lastChild.height = 16; if(obj.childNodes[beforNumb+1].nodeName == 'IMG'){obj.insertBefore(newText, obj.childNodes[beforNumb+1])} else{obj.insertBefore(newText, tagA)} } /*end addMenuAnc*/[/pre] Разметка с древних пор немного изменилась. Теперь меню над полем ответа расположено здесь: document.all.message.parentNode.childNodes[0] А дальше объекты-потомки - это следующие друг за другом ссылки с пробелом друг между другом. Поэтому функция должна стать такой: [pre2] /* ***Функция добавления своей кнопки в меню над полем ввода ответа*** *obj - узел в котором выполняется скрипт (textAr.parentNode.childNodes[0]) *beforNumb - номер объекта в списке потомков obj, перед которым нужно вставлять новую кнопочку *Ahref - действия новой ссылки *Atarget - способ открытия окна на которое ведет ссылка, ежели она куда-то ведет *IMGsrc - картинка внутри ссылки *IMGalt - поясняющий текст новой кнопочки */ function addMenuAnc(obj, beforNumb, Ahref, Atarget, IMGsrc, IMGalt){ var tagA = new Object(); var newText = document.createTextNode(unescape('%A0%A0')); var newA = document.createElement('A'); newA.href = Ahref; newA.target = Atarget; obj.insertBefore(newA, obj.childNodes[beforNumb]); tagA = obj.childNodes[beforNumb]; tagA.appendChild(document.createElement('img')); tagA.lastChild.src = IMGsrc; tagA.lastChild.alt = IMGalt; tagA.lastChild.border = 0; tagA.lastChild.width = 16; tagA.lastChild.height = 16; if(obj.childNodes[beforNumb+1].nodeName == 'IMG'){ obj.insertBefore(newText, obj.childNodes[beforNumb+1]); } else{ obj.insertBefore(newText, tagA); } } /*end addMenuAnc*/[/pre2] Нетрудно заметить, что ничего не поменялось. Только нужно в obj передавать правильный адрес меню с кнопками. Поспешил с набором поста так поспешил. Ай молодец. И двух фейспалмов будет мало.


Geek: Подключение библиотеки сейчас: [pre2] <!-- JSObjmodule Dante --> <script type='text/javascript' src='http://stlab.freesite.vip/myhelp.nm.ru/scripts/JSObjmodule.js'></script>[/pre2] - - - А теперь добавим абы какой тег (после </HTML>), мне уже просто интересно посмотреть, как это будет. [pre2] <!-- Дополнительные теги с помощью JSObjmodule.js: Начало --> <script type='text/javascript'> textAr = document.all.message; if(textAr){ // находим панель с кнопками над формой ответа // сейчас в ней 30 кнопок textArMenu = textAr.parentNode.childNodes[0]; //Вызов функции, с параметрами кнопки copyright addMenuAnc(textArMenu, 23, "javascript:pst3('','','','©','')", "", "https://i.imgur.com/eITNdlL.gif", "copyright"); } </script> <!-- Дополнительные теги с помощью JSObjmodule.js: Конец -->[/pre2]

Geek: НЯ!!!1©©©©©

Geek: ©©©©©©©©©© ©©©©©©©©©© ©©©©©©©©©© ©©©©©©©©©© ©©©©©©©©©© ©©©©©©©©© ©©©©©©©© ©©©©©© ©©©© ©

Geek: Теперь можно     делать         отступы             вот                 так                         с помощью неразрывных пробелов Сбылась             мечта             балбеса



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