1 // Библиотека стандартных функций, используемых на страницах форума
3 // Извлекает из кук имя текущего пользователя и возвращает его, а также
4 // сохраняет в глобальной переменной forumUser;
7 function getUserName() {
8 var cookietext =document.cookie;
9 var pos = cookietext.indexOf("sluser=");
14 var end = cookietext.indexOf(";",start);
15 if (end == -1) end=cookietext.length;
16 var value= cookietext.substring(start,end);
18 return decodeURIComponent(value);
21 // Шаблон страницы содержит два специальных тэга link с rel=forum-script
22 // и rel=forum-user-list
23 // Эта функция извлекает их в глобальные переменные forumScriptUrl
27 function getBaseURLs() {
28 var links=document.getElementsByTagName("link");
29 for (i=0;i<links.length;i++) {
30 if (links[i].rel == "forum-script") {
31 forumScriptUrl = links[i].href;
32 } else if (links[i].rel = "forum-user-list") {
33 userListUrl = links[i].href;
37 function showUser(username) {
42 userStatus = getUserRights(username);
43 var links=document.getElementsByTagName("a");
44 for (i=0;i<links.length;i++) {
45 if (links[i].className == "userurl") {
46 while (links[i].childNodes.length>0) {
47 links[i].removeChild(links[i].childNodes[0]);
49 if (username.substring(0,7) == "http://") {
50 links[i].href=username;
51 username=username.substring(7,username.length);
53 links[i].href=userListUrl+"/" + username;
55 links[i].appendChild(document.createTextNode(username));
56 links[i].className = status;
57 } else if (links[i].href.substring(0,forumScriptUrl.length)==
58 forumScriptUrl && links[i].href.indexOf("login=")!=-1) {
59 while (links[i].childNodes.length>0) {
60 links[i].removeChild(links[i].childNodes[0]);
62 links[i].appendChild(document.createTextNode("Выйти"));
63 links[i].href=forumScriptUrl+"?logout=1";
69 // Добывает с сервера информацию о модераторах данного форума и
70 // возвращает user, moderator или admin в зависисмости от статуса
71 // указанного пользователя.
73 function getUserRights(user) {
75 var xhr=getXMLHttpRequest();
76 if(!xhr) return status;
78 var hr=location.href.match(/^\w+:\/\/[^/]*\/([^?#]+)/);
79 if(hr==null) return status;
80 var depth=hr[1].split(/\//).length;
81 var re=new RegExp("\n\[\s*(admins|moderators|banned)\s*\]\s*[^[]+\n"+user+"\n","m");
82 for(var path="",i=0;i<depth;path+="../",i++) {
83 xhr.open(GET, path+"perms.txt",false);
85 if(xhr.status!=200) continue;
87 var perms=("\n"+xhr.responsText+"\n").match(re);
89 if(perms[1]=="banned") return "banned";
90 if(perms[1]=="admins") return "admin";
94 xhr.open(GET, path+".forum",false);
96 if(xhr.status==403 || xhr.status==200) break;
102 // Обработчик body onLoad
103 // Пробегается по странице и прячет все элементы
104 // управления, которые не разрешены данному пользователю
106 function hideDeniedOperations() {
107 var user =getUserName();
110 rights = getUserRights;
112 if (rights == "admin") {
115 } else if (rights == "moderator") {
116 // Убираем только администраторскую функцию setrights
118 // Убираем модераторские функции move и newforum
120 // Пробегаемся по всем репликам и там, где автор != user
121 // убираем edit и delete
123 // Убираем вообще все, включая reply
129 // Показывает встроенную в страницу форму под текущей ссылкой
130 // Использование <a href="forum?operation=1&id=id" // onClick="showform(this,operation)">
131 function showForm(link, formName) {
132 var linktext=link.href;
133 // Разобрать параметры, получить значение id
134 var start =linktext.indexOf("id=");
138 var end = linktext.indexOf("&",start);
139 if (end==-1) end=linktext.length;
140 id = linktext.substring(start,end);
142 var f=document.forms[formName];
144 f.elements["id"].value=id;
146 f.style.display="block";
147 // позиционируем форму под текущей ссылкой.
152 * Создаёт объект XMLHttpRequest, предварительно уничтожая существующий,
153 * если такой существует.
155 function getXMLHttpRequest()
158 return xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
161 return new ActiveXObject("Microsoft.XMLHTTP");
163 if (typeof XMLHttpRequest!='undefined')
164 return new XMLHttpRequest();