Участник:X-romix/SciRefs.js
Материал из Викиреальностя
Замечание. Возможно, после сохранения вам придётся очистить кеш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить, или нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
- Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
- Internet Explorer: Удерживая Ctrl нажмите Обновить, или нажмите Ctrl-F5
- Opera: Выберите очистку кеша в меню Инструменты → Настройки
function xRomixReplaceBookRefs_RusEng(str){ var str1=''; for(i=0; i<str.length; i++){ var c=str.charAt(i); if(c=='|') {break;} //по символу | прерываем обработку else if(c==' ') {c='_'} else if(c=='.') {c='_'} else if(c==',') {c='_'} else if(c=='-') {c='_'} else if(c>='а' && c<='я'){ if(c=='а') {c='a'} else if(c=='б') {c='b'} else if(c=='в') {c='v'} else if(c=='г') {c='g'} else if(c=='д') {c='d'} else if(c=='е') {c='e'} else if(c=='ж') {c='zh'} else if(c=='з') {c='z'} else if(c=='и') {c='i'} else if(c=='й') {c='j'} else if(c=='к') {c='k'} else if(c=='л') {c='l'} else if(c=='м') {c='m'} else if(c=='н') {c='n'} else if(c=='о') {c='o'} else if(c=='п') {c='p'} else if(c=='р') {c='r'} else if(c=='с') {c='s'} else if(c=='т') {c='t'} else if(c=='у') {c='u'} else if(c=='ф') {c='f'} else if(c=='х') {c='h'} else if(c=='ц') {c='c'} else if(c=='ч') {c='ch'} else if(c=='ш') {c='sh'} else if(c=='щ') {c='sx'} else if(c=='ъ') {c='_'} else if(c=='ы') {c='y'} else if(c=='ь') {c='_'} else if(c=='э') {c='ye'} else if(c=='ю') {c='yu'} else if(c=='я') {c='ya'} ; }else if(c>='А' && c<='Я'){ if(c=='А') {c='А'} else if(c=='Б') {c='B'} else if(c=='В') {c='V'} else if(c=='Г') {c='G'} else if(c=='Д') {c='D'} else if(c=='Е') {c='E'} else if(c=='Ж') {c='ZH'} else if(c=='З') {c='Z'} else if(c=='И') {c='I'} else if(c=='Й') {c='J'} else if(c=='К') {c='K'} else if(c=='Л') {c='L'} else if(c=='М') {c='M'} else if(c=='Н') {c='N'} else if(c=='О') {c='O'} else if(c=='П') {c='P'} else if(c=='Р') {c='R'} else if(c=='С') {c='S'} else if(c=='Т') {c='T'} else if(c=='У') {c='U'} else if(c=='Ф') {c='F'} else if(c=='Х') {c='H'} else if(c=='Ц') {c='C'} else if(c=='Ч') {c='CH'} else if(c=='Ш') {c='SH'} else if(c=='Щ') {c='SX'} else if(c=='Ъ') {c='_'} else if(c=='Ы') {c='Y'} else if(c=='Ь') {c='_'} else if(c=='Э') {c='YE'} else if(c=='Ю') {c='YU'} else if(c=='Я') {c='YA'} ; } ; str1+=c; } return str1; } //Глобальные переменные var xRomixReplaceBookRefs_BodyContent; var xRomixReplaceBookRefs_RefCounter; var xRomixReplaceBookRefs_LastRef; //последняя обратная ссылка function xRomixReplaceBookRefs_ClickOnRef(str, id) { //Эта функция выполнится при клике на ссылку - аналог ref //Окрасим ссылки var s1="backlink_"+str+"_id_"+id; var s2="backlink_"+str+"_id_"; var s3="backlink_"; var s4="CITEREF_"+str; var s5="CITEREF_"; var anchorTags = document.getElementsByTagName("a"); for (var i = 0; i < anchorTags.length ; i++) { var ob=anchorTags[i]; if(ob.name.indexOf(s1)==0){ ob.style.backgroundColor="yellow"; }else if(ob.name.indexOf(s2)==0){ ob.style.backgroundColor="#DDEEFF"; }else if(ob.name.indexOf(s3)==0){ ob.style.backgroundColor=""; }else if(ob.name.indexOf(s4)==0){ ob.parentNode.style.backgroundColor="#DDEEFF"; }else if(ob.name.indexOf(s5)==0){ ob.parentNode.style.backgroundColor=""; } } xRomixReplaceBookRefs_LastRef=id; //Запомним номер ссылки для обратного перехода } function xRomixBookRefs_Backlink(s){ //Функция выполнится при клике на обратную ссылку. var s1="backlink_"+s+"_id_"+xRomixReplaceBookRefs_LastRef; var s2="backlink_"+s+"_id_"; var s3="backlink_"; var link=""; var ok=0; //Подсветка ссылок, которые содержат строку s var anchorTags = document.getElementsByTagName("a"); for (var i = 0; i < anchorTags.length ; i++) { var ob1=anchorTags[i]; if(ob1.name.indexOf(s1)==0 && xRomixReplaceBookRefs_LastRef!=""){ ob1.style.backgroundColor="yellow"; link=ob1.name; ok=1; }else if(ob1.name.indexOf(s2)==0){ ob1.style.backgroundColor="#DDEEFF"; if(ok==0 && link==""){ link=ob1.name; } }else if(ob1.name.indexOf(s3)==0){ ob1.style.backgroundColor=""; } } document.location.href="#"+link; //переход по найденной ссылке return false; //отмена стандартного действия } function xRomixReplaceBookRefs($0,$1,$2) { //Эта функция вызывается для замены найденного текста методом replace(). //Первый параметр функции содержит найденную подстроку, остальные - подсовпадения RegExp (выделенные круглыми скобками в запросе RegExp). // http://www.citforum.ru/internet/javascript/js_new13.shtml var s=""+$0; if(s.charAt(1)=='*'){ //Ссылка-цель вида [*Это ссылка] s=s.slice(2,-1); var n=xRomixReplaceBookRefs_RusEng(s); var qn="'"+n+"'"; var a='<a href="#backlink_'+n+'" onClick="return xRomixBookRefs_Backlink('+qn+')" name="CITEREF_'+n+'"><small>['+s+']</small></a>'; s=a; }else{ //Ссылка-источник вида [ссылка], у которой есть цель. var n=$2; //n теперь содержит имя внутри квадратных скобок (без них самих) //Отрежем все что после символа |, если он есть. var p=n.indexOf("|"); if(p>=0){ n=n.substr(0,p); } //Попытаемся найти якорь с этим же именем (если ее нет, то замену не производим) searchStr="[*"+n+"]"; if(xRomixReplaceBookRefs_BodyContent.indexOf(searchStr)!=-1){ //Если такой якорь найден var n=xRomixReplaceBookRefs_RusEng(n); xRomixReplaceBookRefs_RefCounter++; //увеличиваем счетчик //Производим замену ссылки var cnt=xRomixReplaceBookRefs_RefCounter; var nn='backlink_'+n+'_id_'+cnt; s='<a href="#CITEREF_'+n+'" name="'+nn+'" onClick="xRomixReplaceBookRefs_ClickOnRef(\''+n+'\', '+cnt+');"><sup>'+$0+'</sup></a>'+ '</a>'; } } return s; } //Это главная функция, с нее начинается работа скрипта после загрузки страницы addOnloadHook(function() { if (wgAction=="view"){ //только для страниц просмотра xRomixReplaceBookRefs_RefCounter=0; xRomixReplaceBookRefs_LastRef=""; var on=document.getElementById('X-romix_SciRefs_On'); if(!on) return; var doc=document.getElementById('bodyContent'); var s=doc.innerHTML; xRomixReplaceBookRefs_BodyContent=s; //Регулярное выражение для поиска ссылок в формате [Ссылка 1] var reg = /(\[)(.+?)(\])/g //Выполняем замену s=s.replace(reg,xRomixReplaceBookRefs); //xRomixReplaceBookRefs - это функция, которая будет вызвана для выполнения замены doc.innerHTML=s; } });