1 // Библиотека стандартных функций, используемых на страницах форума
3 // Извлекает из кук имя текущего пользователя и возвращает его, а также
4 // сохраняет в глобальной переменной forumUser;
6 function getUserName() {
7 var cookietext =document.cookie;
8 var pos = cookietext.indexOf("sluser=");
13 var end = cookietext.indexOf(";",start);
14 if (end == -1) end=cookietext.length;
15 var value= cookietext.substring(start,end);
17 return unescape(value);
20 // Шаблон страницы содержит два специальных тэга link с rel=forum-script
21 // и rel=forum-user-list
22 // Эта функция извлекает их в глобальные переменные forumScriptUrl
26 function getBaseURLs() {
27 var links=document.getElementsByTagName("link");
28 for (i=0;i<links.length;i++) {
29 if (links[i].rel == "forum-script") {
30 forumScriptUrl = links[i].href;
31 } else if (links[i].rel = "forum-user-list") {
32 userListUrl = links[i].href;
36 function showUser(username) {
41 var links=document.getElementsByTagName("a");
42 for (i=0;i<links.length;i++) {
43 if (links[i].className == "userurl") {
44 while (links[i].childNodes.length>0) {
45 links[i].removeChild(links[i].childNodes[0]);
47 if (username.substring(0,7) == "http://") {
48 links[i].href=username;
49 username=username.substring(7,username.length);
51 links[i].href=userListUrl+"/" + username;
53 links[i].appendChild(document.createTextNode(username));
54 } else if (links[i].href.substring(0,forumScriptUrl.length)==
55 forumScriptUrl && links[i].href.indexOf("login=")!=-1) {
56 while (links[i].childNodes.length>0) {
57 links[i].removeChild(links[i].childNodes[0]);
59 links[i].appendChild(document.createTextNode("Выйти"));
60 links[i].href=forumScriptUrl+"?logout=1";
66 // Добывает с сервера информацию о модераторах данного форума и
67 // возвращает user, moderator или admin в зависисмости от статуса
68 // указанного пользователя.
70 function getUserRights(user) {
72 var xhr=getXMLHttpRequest();
73 if(!xhr) return status;
75 var hr=location.href.match(/^\w+:\/\/[^/]*\/([^?#]+)/);
76 if(hr==null) return status;
77 var depth=hr[1].split(/\//).length;
78 var re=new RegExp("\n\[\s*(admins|moderators|banned)\s*\]\s*[^[]+\n"+user+"\n","m");
79 for(var path="",i=0;i<depth;path+="../",i++) {
80 xhr.open(GET, path+"perms.txt",false);
82 if(xhr.status!=200) continue;
84 var perms=("\n"+xhr.responsText+"\n").match(re);
86 if(perms[1]=="banned") return "banned";
87 if(perms[1]=="admins") return "admin";
91 xhr.open(GET, path+".forum",false);
93 if(xhr.status==403) break;
99 // Обработчик body onLoad
100 // Пробегается по странице и прячет все элементы
101 // управления, которые не разрешены данному пользователю
103 function hideDeniedOperations() {
104 var user =getUserName();
107 rights = getUserRights;
109 if (rights == "admin") {
112 } else if (rights == "moderator") {
113 // Убираем только администраторскую функцию setrights
115 // Убираем модераторские функции move и newforum
117 // Пробегаемся по всем репликам и там, где автор != user
118 // убираем edit и delete
120 // Убираем вообще все, включая reply
126 // Показывает встроенную в страницу форму под текущей ссылкой
127 // Использование <a href="forum?operation=1&id=id" // onClick="showform(this,operation)">
128 function showForm(link, formName) {
129 var linktext=link.href;
130 // Разобрать параметры, получить значение id
131 var start =linktext.indexOf("id=");
135 var end = linktext.indexOf("&",start);
136 if (end==-1) end=linktext.length;
137 id = linktext.substring(start,end);
139 var f=document.forms[formName];
141 f.elements["id"].value=id;
143 f.style.display="block";
144 // позиционируем форму под текущей ссылкой.
149 * Создаёт объект XMLHttpRequest, предварительно уничтожая существующий,
150 * если такой существует.
152 function getXMLHttpRequest()
155 return xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
158 return new ActiveXObject("Microsoft.XMLHTTP");
160 if (typeof XMLHttpRequest!='undefined')
161 return new XMLHttpRequest();