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 = userStatus;
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;
77 // Strip http:// prefix from OpenID url
78 if (user.substring(0,7) == "http://") {
79 user=user.substring(7,user.length);
81 var hr=location.href.match(/^\w+:\/\/[^/]*\/([^?#]+)/);
82 if(hr==null) return status;
83 var depth=hr[1].split(/\//).length;
84 var re=new RegExp("\n\\\[\s*(admins|moderators|banned)\s*\\\]\s*[^[]*\n"+user+"\n","m");
85 for(var path="",i=0;i<depth;path+="../",i++) {
86 xhr.open("GET", path+"perms.txt",false);
88 if(xhr.status!=200) continue;
90 var perms=("\n"+xhr.responseText+"\n").match(re);
92 if(perms[1]=="banned") return "banned";
93 if(perms[1]=="admins") return "admin";
98 xhr.open("GET", path+".forum",false);
100 if(xhr.status==403 || xhr.status==200) break;
105 // Обработчик body onLoad
106 // Пробегается по странице и прячет все элементы
107 // управления, которые не разрешены данному пользователю
109 function hideDeniedOperations() {
110 var user =getUserName();
113 rights = getUserRights;
115 if (rights == "admin") {
118 } else if (rights == "moderator") {
119 // Убираем только администраторскую функцию setrights
121 // Убираем модераторские функции move и newforum
123 // Пробегаемся по всем репликам и там, где автор != user
124 // убираем edit и delete
126 // Убираем вообще все, включая reply
132 // Показывает встроенную в страницу форму под текущей ссылкой
133 // Использование <a href="forum?operation=1&id=id" // onClick="showform(this,operation)">
134 function showForm(link, formName) {
135 var linktext=link.href;
136 // Разобрать параметры, получить значение id
137 var start =linktext.indexOf("id=");
141 var end = linktext.indexOf("&",start);
142 if (end==-1) end=linktext.length;
143 id = linktext.substring(start,end);
145 var f=document.forms[formName];
147 f.elements["id"].value=id;
149 f.style.display="block";
150 // позиционируем форму под текущей ссылкой.
155 * Создаёт объект XMLHttpRequest, предварительно уничтожая существующий,
156 * если такой существует.
158 function getXMLHttpRequest()
161 return xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
164 return new ActiveXObject("Microsoft.XMLHTTP");
166 if (typeof XMLHttpRequest!='undefined')
167 return new XMLHttpRequest();