]> www.wagner.pp.ru Git - oss/stilllife.git/blob - templates/basicset/page.js
Исправил регэксп
[oss/stilllife.git] / templates / basicset / page.js
1 // Библиотека стандартных функций, используемых на страницах форума
2 //
3 // Извлекает из кук имя текущего пользователя и возвращает его, а также
4 // сохраняет в глобальной переменной forumUser;
5 var forumUser;
6 function getUserName() {
7         var cookietext =document.cookie;
8         var pos = cookietext.indexOf("sluser=");
9         if (pos == -1)  {
10                 return undefined;
11         }
12         var start = pos+7;
13         var end = cookietext.indexOf(";",start);
14         if (end == -1) end=cookietext.length;
15         var value= cookietext.substring(start,end);
16         forumUser = value;
17         return unescape(value);
18 }
19 //
20 // Шаблон страницы содержит два специальных тэга link с rel=forum-script
21 // и rel=forum-user-list
22 // Эта функция извлекает их в глобальные переменные forumScriptUrl
23 // и userListUrl;
24 var forumScriptUrl;
25 var userListUrl;
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;
33                 }
34         }       
35 }
36 function showUser(username) {
37         getBaseURLs();
38         if (!username) {
39                 return ;
40         }       
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]);
46                         }       
47                         if (username.substring(0,7) == "http://") {
48                                 links[i].href=username;
49                                 username=username.substring(7,username.length);
50                         } else {
51                                 links[i].href=userListUrl+"/" + username;
52                         }       
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]);
58                         }       
59                         links[i].appendChild(document.createTextNode("Выйти"));
60                         links[i].href=forumScriptUrl+"?logout=1";
61                 }               
62         }       
63 }
64
65 //
66 // Добывает с сервера информацию о модераторах данного форума и
67 // возвращает user, moderator или admin в зависисмости от статуса
68 // указанного пользователя.  
69 //
70 function getUserRights(user) {
71     status="user";
72     var xhr=getXMLHttpRequest();
73     if(!xhr) return status;
74     
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);
81         xhr.send("");
82         if(xhr.status!=200) continue;
83         
84         var perms=("\n"+xhr.responsText+"\n").match(re);
85         if(perms!=null) {
86             if(perms[1]=="banned") return "banned";
87             if(perms[1]=="admins") return "admin";
88             status=="moderator";
89         }
90         
91         xhr.open(GET, path+".forum",false);
92         xhr.send("");
93         if(xhr.status==403) break;
94     }
95     
96     return "user";
97 }
98
99 // Обработчик body onLoad
100 //  Пробегается по странице и прячет все элементы
101 // управления, которые не разрешены данному пользователю
102 //
103 function hideDeniedOperations() {
104     var user =getUserName();
105         var rights;
106         if (user) {     
107                 rights = getUserRights;
108         }
109         if (rights == "admin") {
110                 // Админу можно все
111                 return;
112         } else if (rights == "moderator") {
113                 // Убираем только администраторскую функцию setrights
114         } else if (user) {
115             // Убираем модераторские функции move и newforum
116                 
117                 // Пробегаемся по всем репликам и там, где автор != user
118                 // убираем edit и delete
119     } else {
120             // Убираем вообще все, включая reply
121         }        
122         
123 }
124
125 //
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=");
132    var id;
133    if (start!=-1) {
134                 start+=3;
135                 var end = linktext.indexOf("&",start);
136                 if (end==-1) end=linktext.length;
137                 id = linktext.substring(start,end);
138    }    
139    var f=document.forms[formName];
140    if (id) {
141       f.elements["id"].value=id;
142    }
143    f.style.display="block";
144    // позиционируем форму под текущей ссылкой.
145    return false;        
146 }
147
148 /**
149 * Создаёт объект XMLHttpRequest, предварительно уничтожая существующий,
150 * если такой существует.
151 */
152 function getXMLHttpRequest()
153 {
154     try {
155         return xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
156     } catch (e) {
157         try {
158             return new ActiveXObject("Microsoft.XMLHTTP");
159         } catch (E) {
160             if (typeof XMLHttpRequest!='undefined')
161                 return new XMLHttpRequest();
162         }
163     }
164
165     return false;
166 }
167