0 | 9 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,340 @@ |
1 |
+ GNU GENERAL PUBLIC LICENSE |
|
2 |
+ Version 2, June 1991 |
|
3 |
+ |
|
4 |
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
|
5 |
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
6 |
+ Everyone is permitted to copy and distribute verbatim copies |
|
7 |
+ of this license document, but changing it is not allowed. |
|
8 |
+ |
|
9 |
+ Preamble |
|
10 |
+ |
|
11 |
+ The licenses for most software are designed to take away your |
|
12 |
+freedom to share and change it. By contrast, the GNU General Public |
|
13 |
+License is intended to guarantee your freedom to share and change free |
|
14 |
+software--to make sure the software is free for all its users. This |
|
15 |
+General Public License applies to most of the Free Software |
|
16 |
+Foundation's software and to any other program whose authors commit to |
|
17 |
+using it. (Some other Free Software Foundation software is covered by |
|
18 |
+the GNU Library General Public License instead.) You can apply it to |
|
19 |
+your programs, too. |
|
20 |
+ |
|
21 |
+ When we speak of free software, we are referring to freedom, not |
|
22 |
+price. Our General Public Licenses are designed to make sure that you |
|
23 |
+have the freedom to distribute copies of free software (and charge for |
|
24 |
+this service if you wish), that you receive source code or can get it |
|
25 |
+if you want it, that you can change the software or use pieces of it |
|
26 |
+in new free programs; and that you know you can do these things. |
|
27 |
+ |
|
28 |
+ To protect your rights, we need to make restrictions that forbid |
|
29 |
+anyone to deny you these rights or to ask you to surrender the rights. |
|
30 |
+These restrictions translate to certain responsibilities for you if you |
|
31 |
+distribute copies of the software, or if you modify it. |
|
32 |
+ |
|
33 |
+ For example, if you distribute copies of such a program, whether |
|
34 |
+gratis or for a fee, you must give the recipients all the rights that |
|
35 |
+you have. You must make sure that they, too, receive or can get the |
|
36 |
+source code. And you must show them these terms so they know their |
|
37 |
+rights. |
|
38 |
+ |
|
39 |
+ We protect your rights with two steps: (1) copyright the software, and |
|
40 |
+(2) offer you this license which gives you legal permission to copy, |
|
41 |
+distribute and/or modify the software. |
|
42 |
+ |
|
43 |
+ Also, for each author's protection and ours, we want to make certain |
|
44 |
+that everyone understands that there is no warranty for this free |
|
45 |
+software. If the software is modified by someone else and passed on, we |
|
46 |
+want its recipients to know that what they have is not the original, so |
|
47 |
+that any problems introduced by others will not reflect on the original |
|
48 |
+authors' reputations. |
|
49 |
+ |
|
50 |
+ Finally, any free program is threatened constantly by software |
|
51 |
+patents. We wish to avoid the danger that redistributors of a free |
|
52 |
+program will individually obtain patent licenses, in effect making the |
|
53 |
+program proprietary. To prevent this, we have made it clear that any |
|
54 |
+patent must be licensed for everyone's free use or not licensed at all. |
|
55 |
+ |
|
56 |
+ The precise terms and conditions for copying, distribution and |
|
57 |
+modification follow. |
|
58 |
+ |
|
59 |
+ GNU GENERAL PUBLIC LICENSE |
|
60 |
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
|
61 |
+ |
|
62 |
+ 0. This License applies to any program or other work which contains |
|
63 |
+a notice placed by the copyright holder saying it may be distributed |
|
64 |
+under the terms of this General Public License. The "Program", below, |
|
65 |
+refers to any such program or work, and a "work based on the Program" |
|
66 |
+means either the Program or any derivative work under copyright law: |
|
67 |
+that is to say, a work containing the Program or a portion of it, |
|
68 |
+either verbatim or with modifications and/or translated into another |
|
69 |
+language. (Hereinafter, translation is included without limitation in |
|
70 |
+the term "modification".) Each licensee is addressed as "you". |
|
71 |
+ |
|
72 |
+Activities other than copying, distribution and modification are not |
|
73 |
+covered by this License; they are outside its scope. The act of |
|
74 |
+running the Program is not restricted, and the output from the Program |
|
75 |
+is covered only if its contents constitute a work based on the |
|
76 |
+Program (independent of having been made by running the Program). |
|
77 |
+Whether that is true depends on what the Program does. |
|
78 |
+ |
|
79 |
+ 1. You may copy and distribute verbatim copies of the Program's |
|
80 |
+source code as you receive it, in any medium, provided that you |
|
81 |
+conspicuously and appropriately publish on each copy an appropriate |
|
82 |
+copyright notice and disclaimer of warranty; keep intact all the |
|
83 |
+notices that refer to this License and to the absence of any warranty; |
|
84 |
+and give any other recipients of the Program a copy of this License |
|
85 |
+along with the Program. |
|
86 |
+ |
|
87 |
+You may charge a fee for the physical act of transferring a copy, and |
|
88 |
+you may at your option offer warranty protection in exchange for a fee. |
|
89 |
+ |
|
90 |
+ 2. You may modify your copy or copies of the Program or any portion |
|
91 |
+of it, thus forming a work based on the Program, and copy and |
|
92 |
+distribute such modifications or work under the terms of Section 1 |
|
93 |
+above, provided that you also meet all of these conditions: |
|
94 |
+ |
|
95 |
+ a) You must cause the modified files to carry prominent notices |
|
96 |
+ stating that you changed the files and the date of any change. |
|
97 |
+ |
|
98 |
+ b) You must cause any work that you distribute or publish, that in |
|
99 |
+ whole or in part contains or is derived from the Program or any |
|
100 |
+ part thereof, to be licensed as a whole at no charge to all third |
|
101 |
+ parties under the terms of this License. |
|
102 |
+ |
|
103 |
+ c) If the modified program normally reads commands interactively |
|
104 |
+ when run, you must cause it, when started running for such |
|
105 |
+ interactive use in the most ordinary way, to print or display an |
|
106 |
+ announcement including an appropriate copyright notice and a |
|
107 |
+ notice that there is no warranty (or else, saying that you provide |
|
108 |
+ a warranty) and that users may redistribute the program under |
|
109 |
+ these conditions, and telling the user how to view a copy of this |
|
110 |
+ License. (Exception: if the Program itself is interactive but |
|
111 |
+ does not normally print such an announcement, your work based on |
|
112 |
+ the Program is not required to print an announcement.) |
|
113 |
+ |
|
114 |
+These requirements apply to the modified work as a whole. If |
|
115 |
+identifiable sections of that work are not derived from the Program, |
|
116 |
+and can be reasonably considered independent and separate works in |
|
117 |
+themselves, then this License, and its terms, do not apply to those |
|
118 |
+sections when you distribute them as separate works. But when you |
|
119 |
+distribute the same sections as part of a whole which is a work based |
|
120 |
+on the Program, the distribution of the whole must be on the terms of |
|
121 |
+this License, whose permissions for other licensees extend to the |
|
122 |
+entire whole, and thus to each and every part regardless of who wrote it. |
|
123 |
+ |
|
124 |
+Thus, it is not the intent of this section to claim rights or contest |
|
125 |
+your rights to work written entirely by you; rather, the intent is to |
|
126 |
+exercise the right to control the distribution of derivative or |
|
127 |
+collective works based on the Program. |
|
128 |
+ |
|
129 |
+In addition, mere aggregation of another work not based on the Program |
|
130 |
+with the Program (or with a work based on the Program) on a volume of |
|
131 |
+a storage or distribution medium does not bring the other work under |
|
132 |
+the scope of this License. |
|
133 |
+ |
|
134 |
+ 3. You may copy and distribute the Program (or a work based on it, |
|
135 |
+under Section 2) in object code or executable form under the terms of |
|
136 |
+Sections 1 and 2 above provided that you also do one of the following: |
|
137 |
+ |
|
138 |
+ a) Accompany it with the complete corresponding machine-readable |
|
139 |
+ source code, which must be distributed under the terms of Sections |
|
140 |
+ 1 and 2 above on a medium customarily used for software interchange; or, |
|
141 |
+ |
|
142 |
+ b) Accompany it with a written offer, valid for at least three |
|
143 |
+ years, to give any third party, for a charge no more than your |
|
144 |
+ cost of physically performing source distribution, a complete |
|
145 |
+ machine-readable copy of the corresponding source code, to be |
|
146 |
+ distributed under the terms of Sections 1 and 2 above on a medium |
|
147 |
+ customarily used for software interchange; or, |
|
148 |
+ |
|
149 |
+ c) Accompany it with the information you received as to the offer |
|
150 |
+ to distribute corresponding source code. (This alternative is |
|
151 |
+ allowed only for noncommercial distribution and only if you |
|
152 |
+ received the program in object code or executable form with such |
|
153 |
+ an offer, in accord with Subsection b above.) |
|
154 |
+ |
|
155 |
+The source code for a work means the preferred form of the work for |
|
156 |
+making modifications to it. For an executable work, complete source |
|
157 |
+code means all the source code for all modules it contains, plus any |
|
158 |
+associated interface definition files, plus the scripts used to |
|
159 |
+control compilation and installation of the executable. However, as a |
|
160 |
+special exception, the source code distributed need not include |
|
161 |
+anything that is normally distributed (in either source or binary |
|
162 |
+form) with the major components (compiler, kernel, and so on) of the |
|
163 |
+operating system on which the executable runs, unless that component |
|
164 |
+itself accompanies the executable. |
|
165 |
+ |
|
166 |
+If distribution of executable or object code is made by offering |
|
167 |
+access to copy from a designated place, then offering equivalent |
|
168 |
+access to copy the source code from the same place counts as |
|
169 |
+distribution of the source code, even though third parties are not |
|
170 |
+compelled to copy the source along with the object code. |
|
171 |
+ |
|
172 |
+ 4. You may not copy, modify, sublicense, or distribute the Program |
|
173 |
+except as expressly provided under this License. Any attempt |
|
174 |
+otherwise to copy, modify, sublicense or distribute the Program is |
|
175 |
+void, and will automatically terminate your rights under this License. |
|
176 |
+However, parties who have received copies, or rights, from you under |
|
177 |
+this License will not have their licenses terminated so long as such |
|
178 |
+parties remain in full compliance. |
|
179 |
+ |
|
180 |
+ 5. You are not required to accept this License, since you have not |
|
181 |
+signed it. However, nothing else grants you permission to modify or |
|
182 |
+distribute the Program or its derivative works. These actions are |
|
183 |
+prohibited by law if you do not accept this License. Therefore, by |
|
184 |
+modifying or distributing the Program (or any work based on the |
|
185 |
+Program), you indicate your acceptance of this License to do so, and |
|
186 |
+all its terms and conditions for copying, distributing or modifying |
|
187 |
+the Program or works based on it. |
|
188 |
+ |
|
189 |
+ 6. Each time you redistribute the Program (or any work based on the |
|
190 |
+Program), the recipient automatically receives a license from the |
|
191 |
+original licensor to copy, distribute or modify the Program subject to |
|
192 |
+these terms and conditions. You may not impose any further |
|
193 |
+restrictions on the recipients' exercise of the rights granted herein. |
|
194 |
+You are not responsible for enforcing compliance by third parties to |
|
195 |
+this License. |
|
196 |
+ |
|
197 |
+ 7. If, as a consequence of a court judgment or allegation of patent |
|
198 |
+infringement or for any other reason (not limited to patent issues), |
|
199 |
+conditions are imposed on you (whether by court order, agreement or |
|
200 |
+otherwise) that contradict the conditions of this License, they do not |
|
201 |
+excuse you from the conditions of this License. If you cannot |
|
202 |
+distribute so as to satisfy simultaneously your obligations under this |
|
203 |
+License and any other pertinent obligations, then as a consequence you |
|
204 |
+may not distribute the Program at all. For example, if a patent |
|
205 |
+license would not permit royalty-free redistribution of the Program by |
|
206 |
+all those who receive copies directly or indirectly through you, then |
|
207 |
+the only way you could satisfy both it and this License would be to |
|
208 |
+refrain entirely from distribution of the Program. |
|
209 |
+ |
|
210 |
+If any portion of this section is held invalid or unenforceable under |
|
211 |
+any particular circumstance, the balance of the section is intended to |
|
212 |
+apply and the section as a whole is intended to apply in other |
|
213 |
+circumstances. |
|
214 |
+ |
|
215 |
+It is not the purpose of this section to induce you to infringe any |
|
216 |
+patents or other property right claims or to contest validity of any |
|
217 |
+such claims; this section has the sole purpose of protecting the |
|
218 |
+integrity of the free software distribution system, which is |
|
219 |
+implemented by public license practices. Many people have made |
|
220 |
+generous contributions to the wide range of software distributed |
|
221 |
+through that system in reliance on consistent application of that |
|
222 |
+system; it is up to the author/donor to decide if he or she is willing |
|
223 |
+to distribute software through any other system and a licensee cannot |
|
224 |
+impose that choice. |
|
225 |
+ |
|
226 |
+This section is intended to make thoroughly clear what is believed to |
|
227 |
+be a consequence of the rest of this License. |
|
228 |
+ |
|
229 |
+ 8. If the distribution and/or use of the Program is restricted in |
|
230 |
+certain countries either by patents or by copyrighted interfaces, the |
|
231 |
+original copyright holder who places the Program under this License |
|
232 |
+may add an explicit geographical distribution limitation excluding |
|
233 |
+those countries, so that distribution is permitted only in or among |
|
234 |
+countries not thus excluded. In such case, this License incorporates |
|
235 |
+the limitation as if written in the body of this License. |
|
236 |
+ |
|
237 |
+ 9. The Free Software Foundation may publish revised and/or new versions |
|
238 |
+of the General Public License from time to time. Such new versions will |
|
239 |
+be similar in spirit to the present version, but may differ in detail to |
|
240 |
+address new problems or concerns. |
|
241 |
+ |
|
242 |
+Each version is given a distinguishing version number. If the Program |
|
243 |
+specifies a version number of this License which applies to it and "any |
|
244 |
+later version", you have the option of following the terms and conditions |
|
245 |
+either of that version or of any later version published by the Free |
|
246 |
+Software Foundation. If the Program does not specify a version number of |
|
247 |
+this License, you may choose any version ever published by the Free Software |
|
248 |
+Foundation. |
|
249 |
+ |
|
250 |
+ 10. If you wish to incorporate parts of the Program into other free |
|
251 |
+programs whose distribution conditions are different, write to the author |
|
252 |
+to ask for permission. For software which is copyrighted by the Free |
|
253 |
+Software Foundation, write to the Free Software Foundation; we sometimes |
|
254 |
+make exceptions for this. Our decision will be guided by the two goals |
|
255 |
+of preserving the free status of all derivatives of our free software and |
|
256 |
+of promoting the sharing and reuse of software generally. |
|
257 |
+ |
|
258 |
+ NO WARRANTY |
|
259 |
+ |
|
260 |
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
|
261 |
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
|
262 |
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
|
263 |
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
|
264 |
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
265 |
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
|
266 |
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
|
267 |
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
|
268 |
+REPAIR OR CORRECTION. |
|
269 |
+ |
|
270 |
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
|
271 |
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
|
272 |
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
|
273 |
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
|
274 |
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
|
275 |
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
|
276 |
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
|
277 |
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
|
278 |
+POSSIBILITY OF SUCH DAMAGES. |
|
279 |
+ |
|
280 |
+ END OF TERMS AND CONDITIONS |
|
281 |
+ |
|
282 |
+ How to Apply These Terms to Your New Programs |
|
283 |
+ |
|
284 |
+ If you develop a new program, and you want it to be of the greatest |
|
285 |
+possible use to the public, the best way to achieve this is to make it |
|
286 |
+free software which everyone can redistribute and change under these terms. |
|
287 |
+ |
|
288 |
+ To do so, attach the following notices to the program. It is safest |
|
289 |
+to attach them to the start of each source file to most effectively |
|
290 |
+convey the exclusion of warranty; and each file should have at least |
|
291 |
+the "copyright" line and a pointer to where the full notice is found. |
|
292 |
+ |
|
293 |
+ <one line to give the program's name and a brief idea of what it does.> |
|
294 |
+ Copyright (C) 19yy <name of author> |
|
295 |
+ |
|
296 |
+ This program is free software; you can redistribute it and/or modify |
|
297 |
+ it under the terms of the GNU General Public License as published by |
|
298 |
+ the Free Software Foundation; either version 2 of the License, or |
|
299 |
+ (at your option) any later version. |
|
300 |
+ |
|
301 |
+ This program is distributed in the hope that it will be useful, |
|
302 |
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
303 |
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
304 |
+ GNU General Public License for more details. |
|
305 |
+ |
|
306 |
+ You should have received a copy of the GNU General Public License |
|
307 |
+ along with this program; if not, write to the Free Software |
|
308 |
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
309 |
+ |
|
310 |
+ |
|
311 |
+Also add information on how to contact you by electronic and paper mail. |
|
312 |
+ |
|
313 |
+If the program is interactive, make it output a short notice like this |
|
314 |
+when it starts in an interactive mode: |
|
315 |
+ |
|
316 |
+ Gnomovision version 69, Copyright (C) 19yy name of author |
|
317 |
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
|
318 |
+ This is free software, and you are welcome to redistribute it |
|
319 |
+ under certain conditions; type `show c' for details. |
|
320 |
+ |
|
321 |
+The hypothetical commands `show w' and `show c' should show the appropriate |
|
322 |
+parts of the General Public License. Of course, the commands you use may |
|
323 |
+be called something other than `show w' and `show c'; they could even be |
|
324 |
+mouse-clicks or menu items--whatever suits your program. |
|
325 |
+ |
|
326 |
+You should also get your employer (if you work as a programmer) or your |
|
327 |
+school, if any, to sign a "copyright disclaimer" for the program, if |
|
328 |
+necessary. Here is a sample; alter the names: |
|
329 |
+ |
|
330 |
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
|
331 |
+ `Gnomovision' (which makes passes at compilers) written by James Hacker. |
|
332 |
+ |
|
333 |
+ <signature of Ty Coon>, 1 April 1989 |
|
334 |
+ Ty Coon, President of Vice |
|
335 |
+ |
|
336 |
+This General Public License does not permit incorporating your program into |
|
337 |
+proprietary programs. If your program is a subroutine library, you may |
|
338 |
+consider it more useful to permit linking proprietary applications with the |
|
339 |
+library. If this is what you want to do, use the GNU Library General |
|
340 |
+Public License instead of this License. |
0 | 341 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,7 @@ |
1 |
+Changes since v0.1: |
|
2 |
+ |
|
3 |
+ * autoscroll only if scrollbar at bottom |
|
4 |
+ * support for private messages |
|
5 |
+ * nick highlighting |
|
6 |
+ * configurable backend (http polling and/or binding) |
|
7 |
+ * a lot of fixes and enhancements |
|
0 | 8 |
\ No newline at end of file |
1 | 9 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,192 @@ |
1 |
+MUCkl tribune |
|
2 |
+============= |
|
3 |
+ |
|
4 |
+A special version of MUCkl with tribune features. |
|
5 |
+ |
|
6 |
+What is MUCkl ? |
|
7 |
+=============== |
|
8 |
+ |
|
9 |
+ MUCkl is a web based groupchat application with focus on ease of |
|
10 |
+ installation and usage. As a user you just need to enter your |
|
11 |
+ desired nickname and start chatting. |
|
12 |
+ MUCkl doesn't need Perl, PHP or MySQL at the server side nor Java at |
|
13 |
+ the client side. It's just plain HTML/JavaScript. |
|
14 |
+ |
|
15 |
+ MUCkl uses [1]Jabber technology to handle all communication. It |
|
16 |
+ let's you connect to any predefined [2]MUC-based chat room. |
|
17 |
+ |
|
18 |
+ This version |
|
19 |
+ |
|
20 |
+ |
|
21 |
+ [1] http://www.jabber.org |
|
22 |
+ [2] http://www.jabber.org/jeps/jep-0045.html |
|
23 |
+ |
|
24 |
+What is a tribune? |
|
25 |
+================== |
|
26 |
+ |
|
27 |
+A tribune is a type of chat popular in some obscure french websites. |
|
28 |
+ |
|
29 |
+It adds to traditionnal chat some usefull features: |
|
30 |
+ |
|
31 |
+- norloge: a conversation flow highlightning tool. |
|
32 |
+- totoz: a way to insert stupid images. |
|
33 |
+ |
|
34 |
+Supported browsers and plattforms |
|
35 |
+================================= |
|
36 |
+ |
|
37 |
+ As of this release MUCkl has not been tested a lot. It should work |
|
38 |
+ with any version of Internet Explorer since version 5 and all recent |
|
39 |
+ versions of Gecko ("Mozilla") based browsers. |
|
40 |
+ |
|
41 |
+ Feedback on this is very welcome! |
|
42 |
+ |
|
43 |
+ |
|
44 |
+Prerequisites |
|
45 |
+============= |
|
46 |
+ |
|
47 |
+ In order to use MUCkl you need to have access to an [3]HTTP Polling |
|
48 |
+ or [4]HTTP Binding service for Jabber. These allow you to connect to |
|
49 |
+ a Jabber server using the HTTP protocol rather than raw TCP/IP |
|
50 |
+ sockets. There are Jabber servers that have built-in HTTP Polling |
|
51 |
+ support like [5]ejabberd or some of the commercial ones. |
|
52 |
+ |
|
53 |
+ There are also some standalone implementations of HTTP Polling |
|
54 |
+ available like [6]tonneru and [7]webjah. Both allow you to connect |
|
55 |
+ to any jabber server. Latest versions of punjab have built in |
|
56 |
+ support for HTTP Polling and HTTP Binding. See [8]punjab's website for |
|
57 |
+ details. |
|
58 |
+ |
|
59 |
+ Additionally you need a web server of your choice capable of doing |
|
60 |
+ address rewriting (at least if you're using an HTTP proxy service |
|
61 |
+ that is not local to your web server). |
|
62 |
+ |
|
63 |
+ So to sum it up: If you don't know of any public jabber server which |
|
64 |
+ offers HTTP Polling as a free service, you will have to install your |
|
65 |
+ own jabber server or one of the HTTP Polling components mentioned |
|
66 |
+ above. If you've got the choice use ejabberd as it's the most |
|
67 |
+ reliable solution available at the moment at no cost. |
|
68 |
+ |
|
69 |
+ [3] http://www.jabber.org/jeps/jep-0025.html |
|
70 |
+ [4] http://www.jabber.org/jeps/jep-0124.html |
|
71 |
+ [5] http://ejabberd.jabberstudio.org |
|
72 |
+ [6] http://tonneru.tanoshi.net/ |
|
73 |
+ [7] http://www.gonzo.kiev.ua/projects/jabber/index.html#webjah |
|
74 |
+ [8] http://punjab.sourceforge.net/ |
|
75 |
+ |
|
76 |
+ |
|
77 |
+Installation |
|
78 |
+============ |
|
79 |
+ |
|
80 |
+ 1) Unpacking |
|
81 |
+ |
|
82 |
+ Unpack MUCkl into a directory accessible by your web server. |
|
83 |
+ |
|
84 |
+ 2) Configure Web Server |
|
85 |
+ |
|
86 |
+ This is the trickiest part of the setup as it depends on which |
|
87 |
+ HTTP Polling service you've chosen. It requires some knowledge of |
|
88 |
+ apache configuration as well as some understanding of what HTTP |
|
89 |
+ Polling is. |
|
90 |
+ |
|
91 |
+ First let me explain, what we need to do and why: Due to security |
|
92 |
+ considerations most browsers don't allow JavaScript to access any |
|
93 |
+ data outside the domain it has been loaded from. Gecko based |
|
94 |
+ browsers are even more restrictive in this as they don't allow |
|
95 |
+ them to access data on a different port either. |
|
96 |
+ |
|
97 |
+ So say, the HTTP Polling service we plan to use for MUCkl is |
|
98 |
+ located at http://jabber.somedomain.com:5280/http-poll/ (a |
|
99 |
+ typical ejabberd URI). MUCkl itself is served at |
|
100 |
+ http://www.mydomain.com/MUCkl/. Now we have to make sure that our |
|
101 |
+ installation of MUCkl can access the HTTP Polling service by |
|
102 |
+ calling some local URI like |
|
103 |
+ http://www.mydomain.com/http-poll/. So we have to |
|
104 |
+ setup a rewrite rule which redirects requests on |
|
105 |
+ http://www.mydomain.com/MUCkl/http-poll/ to |
|
106 |
+ http://jabber.somedomain.com:5280/http-poll/. |
|
107 |
+ |
|
108 |
+ Using apache this can be achieved by the following steps: |
|
109 |
+ |
|
110 |
+ * Make sure that mod_rewrite and mod_proxy (additionally |
|
111 |
+ mod_proxy_http for apache2) are loaded. |
|
112 |
+ |
|
113 |
+ * Define a rewrite rule for your MUCkl installation directory (Step 1). |
|
114 |
+ E.g. create an .htaccess file within your MUCkl installation |
|
115 |
+ directory like the following: |
|
116 |
+ |
|
117 |
+ <IfModule mod_rewrite.c> |
|
118 |
+ RewriteEngine On |
|
119 |
+ RewriteRule http-poll/ http://jabber.somedomain.com:5280/http-poll/ [P] |
|
120 |
+ </IfModule> |
|
121 |
+ |
|
122 |
+ |
|
123 |
+ 3) Setup Jabber Account |
|
124 |
+ |
|
125 |
+ In order to complete Step 3 and 4 you will need a native Jabber |
|
126 |
+ client that supports registration of new accounts and the MUC |
|
127 |
+ protocol for configuration of your chat room. My tip: Use Exodus |
|
128 |
+ on Windows, tkabber on Linux. |
|
129 |
+ |
|
130 |
+ Now you need to create a new jabber account. Make sure that you |
|
131 |
+ can connect to it by way of the chosen HTTP Polling service. So |
|
132 |
+ most probably using the example above you would create it on |
|
133 |
+ jabber.somedomain.com. |
|
134 |
+ |
|
135 |
+ Everybody using your installation of MUCkl will use this account |
|
136 |
+ data to enter the Jabber network and join your chat room. |
|
137 |
+ |
|
138 |
+ 4) Setup Chat Room |
|
139 |
+ |
|
140 |
+ Now use some different Jabber account which will be the owner of |
|
141 |
+ your desired chat room. Enter your room or create a new one and |
|
142 |
+ configure it to suit your needs (e.g. don't make it |
|
143 |
+ private/invite only/password protected, as MUCkl doesn't support |
|
144 |
+ these kind of things). |
|
145 |
+ |
|
146 |
+ 5) Configure MUCkl |
|
147 |
+ |
|
148 |
+ Now that we have all necessary data at hand we finally may edit |
|
149 |
+ config.js (located in MUCkl's installation directory). For |
|
150 |
+ detailed information on how to do this refer to the comments |
|
151 |
+ given in this file! |
|
152 |
+ |
|
153 |
+ When done, fire up your prefered browser (see above! ;-)) and |
|
154 |
+ login to MUCkl. |
|
155 |
+ |
|
156 |
+ |
|
157 |
+Further Information/Reading |
|
158 |
+=========================== |
|
159 |
+ |
|
160 |
+ MUCkl is a stripped down version of [9]JWChat - a web based Jabber |
|
161 |
+ client. As such it uses the [10]JSJaC library for communication with |
|
162 |
+ the Jabber network. JSJaC allows you to connect to Jabber servers |
|
163 |
+ using either [11]HTTP Polling or [12]HTTP Binding. Groupchat |
|
164 |
+ functionality is realized as an implementation of the [13]Multi User |
|
165 |
+ Conference Protocol [MUC]. |
|
166 |
+ |
|
167 |
+ |
|
168 |
+ [9] http://jwchat.sourceforge.net |
|
169 |
+ [10] http://jsjac.jabberstudio.org |
|
170 |
+ [11] http://www.jabber.org/jeps/jep-0025.html |
|
171 |
+ [12] http://www.jabber.org/jeps/jep-0124.html |
|
172 |
+ [13] http://www.jabber.org/jeps/jep-0045.html |
|
173 |
+ |
|
174 |
+ |
|
175 |
+Disclaimer |
|
176 |
+========== |
|
177 |
+ |
|
178 |
+ This program is free software; you can redistribute it and/or modify |
|
179 |
+ it under the terms of the GNU General Public License as published by |
|
180 |
+ the Free Software Foundation; either version 2 of the License, or |
|
181 |
+ (at your option) any later version. |
|
182 |
+ |
|
183 |
+ This program is distributed in the hope that it will be useful, but |
|
184 |
+ WITHOUT ANY WARRANTY; without even the implied warranty of |
|
185 |
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
186 |
+ General Public License for more details. |
|
187 |
+ |
|
188 |
+ You should have received a copy of the GNU General Public License |
|
189 |
+ along with this program; if not, write to the Free Software |
|
190 |
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
|
191 |
+ USA |
|
192 |
+ |
0 | 7 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,34 @@ |
1 |
+/* BrowserCheck Object |
|
2 |
+ provides most commonly needed browser checking variables |
|
3 |
+ 19990326 |
|
4 |
+*/ |
|
5 |
+// Copyright (C) 1999 Dan Steinman |
|
6 |
+// Distributed under the terms of the GNU Library General Public License |
|
7 |
+// Available at http://www.dansteinman.com/dynapi/ |
|
8 |
+ |
|
9 |
+function BrowserCheck() { |
|
10 |
+ var b = navigator.appName |
|
11 |
+ if (b=="Netscape") this.b = "ns" |
|
12 |
+ else if (b=="Microsoft Internet Explorer") this.b = "ie" |
|
13 |
+ else if (b=="Opera") this.b = "op" |
|
14 |
+ else this.b = b |
|
15 |
+ this.v = parseInt(navigator.appVersion) |
|
16 |
+ this.ns = (this.b=="ns" && this.v>=4) |
|
17 |
+ this.ns4 = (this.b=="ns" && this.v==4) |
|
18 |
+ this.ns5 = (this.b=="ns" && this.v==5) |
|
19 |
+ this.ie = (this.b=="ie" && this.v>=4) |
|
20 |
+ this.op = (this.b=="op" && this.v>=7) |
|
21 |
+ this.ie4 = (navigator.userAgent.indexOf('MSIE 4')>0) |
|
22 |
+ this.ie5 = (navigator.userAgent.indexOf('MSIE 5')>0) |
|
23 |
+ this.ie55 = (navigator.userAgent.indexOf('MSIE 5.5')>0) |
|
24 |
+ if (this.ie55) { |
|
25 |
+ this.v = 5.5; |
|
26 |
+ this.ie5 = false; |
|
27 |
+ } |
|
28 |
+ this.mac = (navigator.userAgent.indexOf('Mac')>0); |
|
29 |
+ if (this.ie5) this.v = 5 |
|
30 |
+ this.min = (this.ns||this.ie) |
|
31 |
+} |
|
32 |
+ |
|
33 |
+// automatically create the "is" object |
|
34 |
+is = new BrowserCheck() |
0 | 35 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,108 @@ |
1 |
+/* |
|
2 |
+ * MUCkl - A Web Based Groupchat Application |
|
3 |
+ * Copyright (C) 2004 Stefan Strigler <steve@zeank.in-berlin.de> |
|
4 |
+ * |
|
5 |
+ * This program is free software; you can redistribute it and/or |
|
6 |
+ * modify it under the terms of the GNU General Public License |
|
7 |
+ * as published by the Free Software Foundation; either version 2 |
|
8 |
+ * of the License, or (at your option) any later version. |
|
9 |
+ * |
|
10 |
+ * This program is distributed in the hope that it will be useful, |
|
11 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
+ * GNU General Public License for more details. |
|
14 |
+ * |
|
15 |
+ * You should have received a copy of the GNU General Public License |
|
16 |
+ * along with this program; if not, write to the Free Software |
|
17 |
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
18 |
+ */ |
|
19 |
+ |
|
20 |
+/* *** |
|
21 |
+ * This is the main configuration file for the chat client itself. |
|
22 |
+ * You have to edit this before you can start using MUCkl on your website! |
|
23 |
+ * *** |
|
24 |
+ */ |
|
25 |
+ |
|
26 |
+/* BACKENDTYPE - the type of backend to be used |
|
27 |
+ * |
|
28 |
+ * Either 'polling' for HTTP Polling |
|
29 |
+ * Or 'binding' for HTTP Binding |
|
30 |
+ */ |
|
31 |
+var BACKENDTYPE = 'binding'; |
|
32 |
+ |
|
33 |
+/* HTTPBASE - base URI to contact HTTP Polling service |
|
34 |
+ * |
|
35 |
+ * This must be local to your web server which serves MUCkl. If |
|
36 |
+ * HTTP Polling service is not local to your web server you have to |
|
37 |
+ * define a rewrite rule which matches this address and redirects to |
|
38 |
+ * the real HTTP Polling URI. |
|
39 |
+ * |
|
40 |
+ * [refers to step 2 of installation instructions] |
|
41 |
+ */ |
|
42 |
+ |
|
43 |
+//var HTTPBASE = "/tomcat/JHB/"; |
|
44 |
+var HTTPBASE = "/http-bind/"; |
|
45 |
+ |
|
46 |
+/* Login Data - the user to login |
|
47 |
+ * |
|
48 |
+ * [refers to step 3 of installation instructions] |
|
49 |
+ */ |
|
50 |
+ |
|
51 |
+var XMPPDOMAIN = "bci.im"; // domain name of jabber service to be used |
|
52 |
+ |
|
53 |
+var AUTHTYPE = 'anonymous'; |
|
54 |
+//var AUTHHOST = "anon.localhost"; // hostname of sasl anonymous service |
|
55 |
+ |
|
56 |
+var MUCKLJID = "muckl"; // username |
|
57 |
+var MUCKLPASS = "muckl"; // password |
|
58 |
+ |
|
59 |
+/* ROOMS |
|
60 |
+ * |
|
61 |
+ * Which chat room to join |
|
62 |
+ * |
|
63 |
+ * [refers to step 4 of installation instructions] |
|
64 |
+ */ |
|
65 |
+ |
|
66 |
+var ROOMS = |
|
67 |
+[ |
|
68 |
+ { |
|
69 |
+ name:'newton_adventure', |
|
70 |
+ description:'newton adventure', |
|
71 |
+ server:'conference.bci.im'//, |
|
72 |
+// logo: 'http://localhost/spongebob.png' |
|
73 |
+ } |
|
74 |
+]; |
|
75 |
+ |
|
76 |
+/* CONFERENCENOHIST |
|
77 |
+ * whether to not show room history upon joining |
|
78 |
+ */ |
|
79 |
+var CONFERENCENOHIST = false; |
|
80 |
+ |
|
81 |
+/* DEFAULT_LOCK_MINS |
|
82 |
+ * time a user is being locked out if not otherwise indicated by kick reason |
|
83 |
+ */ |
|
84 |
+var DEFAULT_LOCK_MINS = 1; |
|
85 |
+ |
|
86 |
+/* MAX_LOCK_MINS |
|
87 |
+ * maximum allowed number of minutes a user may be locked out by kick reason |
|
88 |
+ * on ban this is used as default value |
|
89 |
+ */ |
|
90 |
+var MAX_LOCK_MINS = 60; |
|
91 |
+ |
|
92 |
+/* *** |
|
93 |
+ * some internally used vars - don't change except you really know |
|
94 |
+ * what you are doing |
|
95 |
+ * *** |
|
96 |
+ */ |
|
97 |
+ |
|
98 |
+var timerval = 5000; // poll frequency in msec |
|
99 |
+ |
|
100 |
+var stylesheet = "muckl.css"; |
|
101 |
+var THEMESDIR = "themes"; |
|
102 |
+ |
|
103 |
+/* debugging options */ |
|
104 |
+var DEBUG = true; // turn debugging on |
|
105 |
+var DEBUG_LVL = 2; // debug-level 0..4 (4 = very noisy) |
|
106 |
+ |
|
107 |
+/* ** Don't touch ** */ |
|
108 |
+var VERSION = "0.4.4"; |
0 | 109 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,275 @@ |
1 |
+// name: RhymBox |
|
2 |
+// description: Default set of icons in RhymBox. Created by Greg Fleming as part of his Megapack1 icon collection. |
|
3 |
+// author: Greg Fleming |
|
4 |
+// author: Sebastiaan Deckers |
|
5 |
+// creation: 2002-04-07 |
|
6 |
+ |
|
7 |
+var emoticons = new Object(); |
|
8 |
+var emoticonpath = "./images/emoticons/rythmbox/"; |
|
9 |
+ |
|
10 |
+emoticons[':cat:'] = 'cat.gif'; |
|
11 |
+ |
|
12 |
+emoticons[':dog:'] = 'dog.gif'; |
|
13 |
+ |
|
14 |
+emoticons['@-\\)'] = 'alien.gif'; |
|
15 |
+ |
|
16 |
+emoticons['8-\\]'] = 'ogre.gif'; |
|
17 |
+ |
|
18 |
+emoticons['o-\\)'] = 'cyclops.gif'; |
|
19 |
+emoticons['O-\\)'] = 'cyclops.gif'; |
|
20 |
+ |
|
21 |
+emoticons['o-\\]'] = 'robot.gif'; |
|
22 |
+emoticons['O-\\]'] = 'robot.gif'; |
|
23 |
+ |
|
24 |
+emoticons['\\|:-\\)'] = 'rambo.gif'; |
|
25 |
+ |
|
26 |
+emoticons[':#\\('] = 'hurt.gif'; |
|
27 |
+ |
|
28 |
+emoticons['#-\\('] = 'dead.gif'; |
|
29 |
+ |
|
30 |
+emoticons['O:-\\)'] = 'angel.gif'; |
|
31 |
+emoticons['o:-\\)'] = 'angel.gif'; |
|
32 |
+emoticons['o:\\)'] = 'angel.gif'; |
|
33 |
+emoticons['O:\\)'] = 'angel.gif'; |
|
34 |
+ |
|
35 |
+emoticons['\\(6\\)'] = 'devil.gif'; |
|
36 |
+emoticons[':devil:'] = 'devil.gif'; |
|
37 |
+ |
|
38 |
+emoticons['\\(y\\)'] = 'thumbup.gif'; |
|
39 |
+emoticons['\\(Y\\)'] = 'thumbup.gif'; |
|
40 |
+emoticons[':yes:'] = 'thumbup.gif'; |
|
41 |
+ |
|
42 |
+emoticons['\\(n\\)'] = 'thumbdown.gif'; |
|
43 |
+emoticons['\\(N\\)'] = 'thumbdown.gif'; |
|
44 |
+emoticons[':no:'] = 'thumbdown.gif'; |
|
45 |
+ |
|
46 |
+emoticons[':heart:'] = 'heart.gif'; |
|
47 |
+emoticons['\\(l\\)'] = 'heart.gif'; |
|
48 |
+emoticons['\\(L\\)'] = 'heart.gif'; |
|
49 |
+ |
|
50 |
+emoticons['\\(u\\)'] = 'heart.gif'; |
|
51 |
+emoticons['\\(U\\)'] = 'heart.gif'; |
|
52 |
+emoticons[':bheart:'] = 'heart.gif'; |
|
53 |
+ |
|
54 |
+emoticons['\\(z\\)'] = 'person.gif'; |
|
55 |
+emoticons['\\(Z\\)'] = 'person.gif'; |
|
56 |
+emoticons[':man:'] = 'person.gif'; |
|
57 |
+ |
|
58 |
+emoticons['\\(e\\)'] = 'letter.gif'; |
|
59 |
+emoticons['\\(E\\)'] = 'letter.gif'; |
|
60 |
+emoticons[':letter:'] = 'letter.gif'; |
|
61 |
+ |
|
62 |
+emoticons[':coffee:'] = 'coffee.gif'; |
|
63 |
+emoticons['\\(c\\)'] = 'coffee.gif'; |
|
64 |
+emoticons['\\(C\\)'] = 'coffee.gif'; |
|
65 |
+ |
|
66 |
+emoticons['\\(i\\)'] = 'bulb.gif'; |
|
67 |
+emoticons['\\(I\\)'] = 'bulb.gif'; |
|
68 |
+emoticons[':lamp:'] = 'bulb.gif'; |
|
69 |
+emoticons[':jabber:'] = 'bulb.gif'; |
|
70 |
+ |
|
71 |
+emoticons['\\}\\{'] = 'bat.gif'; |
|
72 |
+emoticons[':bat:'] = 'bat.gif'; |
|
73 |
+ |
|
74 |
+emoticons[':dragon:'] = 'dragon.gif'; |
|
75 |
+ |
|
76 |
+emoticons[':home:'] = 'house.gif'; |
|
77 |
+ |
|
78 |
+emoticons[':apple:'] = 'apple.gif'; |
|
79 |
+ |
|
80 |
+emoticons[':glasses:'] = 'glasses.gif'; |
|
81 |
+ |
|
82 |
+emoticons['\\(t\\)'] = 'phone.gif'; |
|
83 |
+emoticons['\\(T\\)'] = 'phone.gif'; |
|
84 |
+emoticons[':phone:'] = 'phone.gif'; |
|
85 |
+ |
|
86 |
+emoticons[':mushroom:'] = 'mushroom.gif'; |
|
87 |
+ |
|
88 |
+emoticons['\\(p\\)'] = 'camera.gif'; |
|
89 |
+emoticons['\\(P\\)'] = 'camera.gif'; |
|
90 |
+emoticons[':photo:'] = 'camera.gif'; |
|
91 |
+ |
|
92 |
+emoticons[':world:'] = 'globe.gif'; |
|
93 |
+ |
|
94 |
+emoticons[':syringe:'] = 'needle.gif'; |
|
95 |
+ |
|
96 |
+ |
|
97 |
+emoticons['\\(b\\)'] = 'beer.gif'; |
|
98 |
+emoticons['\\(B\\)'] = 'beer.gif'; |
|
99 |
+emoticons[':beer:'] = 'beer.gif'; |
|
100 |
+ |
|
101 |
+emoticons[':carrot:'] = 'carrot.gif'; |
|
102 |
+ |
|
103 |
+emoticons[':cherry:'] = 'cherry.gif'; |
|
104 |
+ |
|
105 |
+emoticons[':cobra:'] = 'cobra.gif'; |
|
106 |
+ |
|
107 |
+emoticons[':wine:'] = 'cocktail.gif'; |
|
108 |
+emoticons[':cocktail:'] = 'cocktail.gif'; |
|
109 |
+emoticons['\\(d\\)'] = 'cocktail.gif'; |
|
110 |
+emoticons['\\(D\\)'] = 'cocktail.gif'; |
|
111 |
+ |
|
112 |
+emoticons[':dinosaur:'] = 'dinosaur.gif'; |
|
113 |
+ |
|
114 |
+emoticons[':drink:'] = 'drink.gif'; |
|
115 |
+ |
|
116 |
+emoticons[':fish:'] = 'fish.gif'; |
|
117 |
+ |
|
118 |
+emoticons[':graduate:'] = 'graduate.gif'; |
|
119 |
+ |
|
120 |
+emoticons[':death:'] = 'grimreaper.gif'; |
|
121 |
+ |
|
122 |
+emoticons[':hammer:'] = 'hammer.gif'; |
|
123 |
+ |
|
124 |
+emoticons[':helicopter:'] = 'helicopter.gif'; |
|
125 |
+ |
|
126 |
+emoticons['\\(8\\)'] = 'music.gif'; |
|
127 |
+emoticons[':note:'] = 'music.gif'; |
|
128 |
+emoticons[':music:'] = 'music.gif'; |
|
129 |
+ |
|
130 |
+emoticons[':tux:'] = 'penguin.gif'; |
|
131 |
+emoticons[':linux:'] = 'penguin.gif'; |
|
132 |
+ |
|
133 |
+emoticons[':skull:'] = 'skull.gif'; |
|
134 |
+ |
|
135 |
+emoticons[':speaker:'] = 'speaker.gif'; |
|
136 |
+ |
|
137 |
+emoticons[':tv:'] = 'tv.gif'; |
|
138 |
+emoticons[':television:'] = 'tv.gif'; |
|
139 |
+ |
|
140 |
+emoticons[':p'] = 'ditsy.gif'; |
|
141 |
+ |
|
142 |
+emoticons[':pill:'] = 'pill.png'; |
|
143 |
+emoticons['\\(E\\)'] = 'pill.png'; |
|
144 |
+emoticons['\\(e\\)'] = 'pill.png'; |
|
145 |
+ |
|
146 |
+emoticons[':god:'] = 'trinity_glowing.gif'; |
|
147 |
+emoticons[':water:'] = 'water_molecule.gif'; |
|
148 |
+ |
|
149 |
+emoticons[':\\)'] = 'smile.gif'; |
|
150 |
+emoticons[':-\\)'] = 'smile.gif'; |
|
151 |
+emoticons['\\(:'] = 'spin.gif'; |
|
152 |
+emoticons['\\(-:'] = 'spin.gif'; |
|
153 |
+ |
|
154 |
+emoticons[';\\)'] = 'wink.gif'; |
|
155 |
+emoticons[';-\\)'] = 'wink.gif'; |
|
156 |
+emoticons['\\(;'] = 'wink.gif'; |
|
157 |
+emoticons['\\(-;'] = 'wink.gif'; |
|
158 |
+ |
|
159 |
+emoticons[':\\|'] = 'normal.gif'; |
|
160 |
+emoticons[':-\\|'] = 'normal.gif'; |
|
161 |
+ |
|
162 |
+emoticons[':-\\\\'] = 'ermm.gif'; |
|
163 |
+emoticons[':\\\\'] = 'ermm.gif'; |
|
164 |
+emoticons[':-\\/'] = 'ermm.gif'; |
|
165 |
+emoticons[':\\/'] = 'ermm.gif'; |
|
166 |
+ |
|
167 |
+emoticons[':S'] = 'puzzled.gif'; |
|
168 |
+emoticons[':s'] = 'puzzled.gif'; |
|
169 |
+emoticons[':-S'] = 'puzzled.gif'; |
|
170 |
+emoticons[':-s'] = 'puzzled.gif'; |
|
171 |
+ |
|
172 |
+emoticons[':\\('] = 'depressed.gif'; |
|
173 |
+emoticons[':-\\('] = 'depressed.gif'; |
|
174 |
+emoticons['\\):'] = 'depressed.gif'; |
|
175 |
+emoticons['\\)-:'] = 'depressed.gif'; |
|
176 |
+ |
|
177 |
+emoticons[':\'\\('] = 'cry.gif'; |
|
178 |
+emoticons[':\'-\\('] = 'cry.gif'; |
|
179 |
+ |
|
180 |
+emoticons[':X'] = 'speechless.gif'; |
|
181 |
+emoticons[':x'] = 'speechless.gif'; |
|
182 |
+ |
|
183 |
+emoticons[':o'] = 'surprised.gif'; |
|
184 |
+emoticons[':-o'] = 'surprised.gif'; |
|
185 |
+emoticons[':O'] = 'surprised.gif'; |
|
186 |
+emoticons[':-O'] = 'surprised.gif'; |
|
187 |
+ |
|
188 |
+emoticons['%\\)'] = 'evolved.gif'; |
|
189 |
+emoticons['%-\\)'] = 'evolved.gif'; |
|
190 |
+ |
|
191 |
+emoticons['\\>:D'] = 'laugh.gif'; |
|
192 |
+ |
|
193 |
+emoticons[':D'] = 'silly.gif'; |
|
194 |
+emoticons[':-d'] = 'silly.gif'; |
|
195 |
+emoticons[':d'] = 'silly.gif'; |
|
196 |
+emoticons[':-D'] = 'silly.gif'; |
|
197 |
+ |
|
198 |
+emoticons[':o\\)'] = 'cheerful.gif'; |
|
199 |
+ |
|
200 |
+emoticons[':\\)'] = 'smiley.gif'; |
|
201 |
+ |
|
202 |
+emoticons['8-D'] = 'cheeky.gif'; |
|
203 |
+ |
|
204 |
+emoticons[':\\*\\)'] = 'embarrassed.gif'; |
|
205 |
+ |
|
206 |
+emoticons[':-0'] = 'shocked.gif'; |
|
207 |
+emoticons[':-O'] = 'shocked.gif'; |
|
208 |
+ |
|
209 |
+emoticons[':0'] = 'scared.gif'; |
|
210 |
+emoticons[':O'] = 'scared.gif'; |
|
211 |
+ |
|
212 |
+emoticons[':-P'] = 'lick.gif'; |
|
213 |
+emoticons[':-p'] = 'lick.gif'; |
|
214 |
+ |
|
215 |
+emoticons['B-\\)'] = 'cool.gif'; |
|
216 |
+ |
|
217 |
+emoticons['B-\\|'] = 'calm.gif'; |
|
218 |
+ |
|
219 |
+emoticons[':-!'] = 'smoker.gif'; |
|
220 |
+ |
|
221 |
+emoticons['\\|-\\)'] = 'bandit.gif'; |
|
222 |
+ |
|
223 |
+emoticons['P-\\)'] = 'pirate.gif'; |
|
224 |
+ |
|
225 |
+emoticons[':-\\)\\}'] = 'beard.gif'; |
|
226 |
+ |
|
227 |
+emoticons[':-\\)\\{'] = 'beard.gif'; |
|
228 |
+ |
|
229 |
+emoticons[':-\\)\\>'] = 'old-man.gif'; |
|
230 |
+ |
|
231 |
+emoticons['\\[:\\|\\]'] = 'ninja.gif'; |
|
232 |
+ |
|
233 |
+emoticons[':-\\[\\]'] = 'gasmask.gif'; |
|
234 |
+ |
|
235 |
+emoticons[':-\\['] = 'vampire.gif'; |
|
236 |
+emoticons[':\\['] = 'vampire.gif'; |
|
237 |
+ |
|
238 |
+emoticons['3-\\|\\{'] = 'sleeping.gif'; |
|
239 |
+ |
|
240 |
+emoticons['8-\\/'] = 'paranoid.gif'; |
|
241 |
+ |
|
242 |
+emoticons['\\?-\\|'] = 'ponder.gif'; |
|
243 |
+ |
|
244 |
+emoticons[':-S'] = 'nervous.gif'; |
|
245 |
+ |
|
246 |
+emoticons['8-s'] = 'confused.gif'; |
|
247 |
+ |
|
248 |
+emoticons['8-\\|'] = 'tired.gif'; |
|
249 |
+ |
|
250 |
+emoticons['8-\\['] = 'bored.gif'; |
|
251 |
+ |
|
252 |
+emoticons['8-\\('] = 'disappointed.gif'; |
|
253 |
+ |
|
254 |
+emoticons[':-\\<'] = 'sad.gif'; |
|
255 |
+ |
|
256 |
+emoticons['\\>:-D'] = 'evil.gif'; |
|
257 |
+ |
|
258 |
+emoticons['\\>:-\\|'] = 'angry.gif'; |
|
259 |
+ |
|
260 |
+emoticons['\\>:-\\)'] = 'devious.gif'; |
|
261 |
+ |
|
262 |
+emoticons['\\>:-o'] = 'mad.gif'; |
|
263 |
+ |
|
264 |
+emoticons[':D'] = 'grin.gif'; |
|
265 |
+ |
|
266 |
+emoticons['8\\)'] = 'classic.gif'; |
|
267 |
+ |
|
268 |
+emoticons[':-\\]'] = 'square-eyed.gif'; |
|
269 |
+ |
|
270 |
+emoticons['\\|\\|-\\)'] = 'cross-eyed.gif'; |
|
271 |
+ |
|
272 |
+emoticons['8-\\)'] = 'foureyes.gif'; |
|
273 |
+ |
|
274 |
+emoticons['x-\\)'] = 'knocked-out.gif'; |
|
275 |
+emoticons['X-\\)'] = 'knocked-out.gif'; |
0 | 276 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,16 @@ |
1 |
+<?xml version="1.0" encoding="ISO-8859-1" ?> |
|
2 |
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
|
3 |
+<html xmlns="http://www.w3.org/1999/xhtml"> |
|
4 |
+<head> |
|
5 |
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> |
|
6 |
+<style type="text/css" media="screen"> |
|
7 |
+/*<![CDATA[*/ |
|
8 |
+@import url(muckl.css); |
|
9 |
+/*]]>*/ |
|
10 |
+</style> |
|
11 |
+<title>MUCkl</title> |
|
12 |
+</head> |
|
13 |
+<body> |
|
14 |
+ |
|
15 |
+</body> |
|
16 |
+</html> |
|
0 | 17 |
\ No newline at end of file |
1 | 18 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,764 @@ |
1 |
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
|
2 |
+<html> |
|
3 |
+ <head> |
|
4 |
+ <title>JWChat - Groupchat</title> |
|
5 |
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"> |
|
6 |
+ <script src="shared.js"></script> |
|
7 |
+ <script src="browsercheck.js"></script> |
|
8 |
+ <script src="emoticons.js"></script> |
|
9 |
+ <script src="config.js"></script> |
|
10 |
+ |
|
11 |
+ <script src="switchStyle.js"></script> |
|
12 |
+ |
|
13 |
+ <script src="roster.js"></script> |
|
14 |
+ |
|
15 |
+ <script src="jsjac.js"></script> |
|
16 |
+ <script src="uuid.core.js"></script> |
|
17 |
+ |
|
18 |
+ <script> |
|
19 |
+ |
|
20 |
+function submitClicked() { |
|
21 |
+ if (!clearedEls['msgbox']) |
|
22 |
+ return false; |
|
23 |
+ |
|
24 |
+ var body = document.getElementById("msgbox").value; |
|
25 |
+ var to = ''; |
|
26 |
+ |
|
27 |
+ if (body == '') // don't send empty message |
|
28 |
+ return false; |
|
29 |
+ |
|
30 |
+ var aMessage = new JSJaCMessage(); |
|
31 |
+ aMessage.setID('muckl' + UUID.generate()); |
|
32 |
+ if (frames['groupchatIRoster'].userSelected) { |
|
33 |
+ to = frames['groupchatIRoster'].userSelected.getAttribute('username'); |
|
34 |
+ var jid = roster.getFullJIDByNick(htmlFullEnc(to)); |
|
35 |
+ if (jid == null) { |
|
36 |
+ putMsgHTML("No such nick"+": " + htmlFullEnc(to), new Date().toLocaleTimeString(), group); |
|
37 |
+ |
|
38 |
+ // unselect user |
|
39 |
+ if (frames['groupchatIRoster'].userSelected) |
|
40 |
+ frames['groupchatIRoster'].userSelected.className = "rosterUser";; |
|
41 |
+ frames['groupchatIRoster'].userSelected = null;; |
|
42 |
+ document.getElementById('send_to_label').innerHTML = ''; |
|
43 |
+ |
|
44 |
+ srcW.addtoHistory(body); |
|
45 |
+ document.getElementById('msgbox').value=''; // empty box |
|
46 |
+ document.getElementById('msgbox').focus(); // set focus back on input field |
|
47 |
+ return; |
|
48 |
+ } else { |
|
49 |
+ aMessage.setType('chat'); |
|
50 |
+ aMessage.setTo(jid); |
|
51 |
+ } |
|
52 |
+ } else { |
|
53 |
+ aMessage.setType('groupchat'); |
|
54 |
+ aMessage.setTo(group); |
|
55 |
+ } |
|
56 |
+ |
|
57 |
+ /* handle commands */ |
|
58 |
+ if (body.match(/^\/say (.+)/)) { |
|
59 |
+ |
|
60 |
+ /* *** say *** */ |
|
61 |
+ |
|
62 |
+ body = RegExp.$1; |
|
63 |
+ aMessage.setBody(body); |
|
64 |
+ srcW.con.send(aMessage); |
|
65 |
+ } else if (body.match(/^\/clear/)) { |
|
66 |
+ |
|
67 |
+ /* *** clear *** */ |
|
68 |
+ |
|
69 |
+ cFrame.body.innerHTML = ''; |
|
70 |
+ } else if (body.match(/^\/nick (.+)/)) { |
|
71 |
+ |
|
72 |
+ /* *** nick *** */ |
|
73 |
+ |
|
74 |
+ var nick2 = body.replace(/^\/nick (.+)/,"$1"); |
|
75 |
+ var aPresence = new JSJaCPresence(); |
|
76 |
+ aPresence.setTo(group+"/"+nick2); |
|
77 |
+ srcW.con.send(aPresence); |
|
78 |
+ } else if (body.match(/^\/topic (.+)/)) { |
|
79 |
+ |
|
80 |
+ /* *** topic *** */ |
|
81 |
+ |
|
82 |
+ var topic = body.replace(/^\/topic (.+)/,"$1"); |
|
83 |
+ aMessage.setType('groupchat'); |
|
84 |
+ aMessage.setSubject(topic); |
|
85 |
+ srcW.con.send(aMessage); |
|
86 |
+ } else if (body.match(/^\/ban (\S+)\s*(.*)/)) { |
|
87 |
+ |
|
88 |
+ /* *** ban *** */ |
|
89 |
+ |
|
90 |
+ var nick2 = RegExp.$1; |
|
91 |
+ var reason = RegExp.$2; |
|
92 |
+ |
|
93 |
+ var jid = roster.getFullJIDByNick(nick2); |
|
94 |
+ if (jid == null) { |
|
95 |
+ putMsgHTML("No such nick"+": " + nick2, new Date().toLocaleTimeString(), group); |
|
96 |
+ } else { |
|
97 |
+ changeAffiliation(jid,'outcast',false,reason); |
|
98 |
+ } |
|
99 |
+ } else if (body.match(/^\/kick (\S+)\s*(.*)/)) { |
|
100 |
+ |
|
101 |
+ /* *** kick *** */ |
|
102 |
+ |
|
103 |
+ var nick2 = RegExp.$1; |
|
104 |
+ var reason = RegExp.$2; |
|
105 |
+ |
|
106 |
+ var jid = roster.getFullJIDByNick(nick2); |
|
107 |
+ if (jid == null) { |
|
108 |
+ putMsgHTML("No such nick"+": " + nick2, new Date().toLocaleTimeString(),group); |
|
109 |
+ } else { |
|
110 |
+ changeRole(jid,'none',false,reason); |
|
111 |
+ } |
|
112 |
+ } else if (body.match(/^\/join (\S+)\s*(.*)/)) { |
|
113 |
+ |
|
114 |
+ /* *** join *** */ |
|
115 |
+ |
|
116 |
+ var room = RegExp.$1; |
|
117 |
+ var pass = RegExp.$2; |
|
118 |
+ srcW.roster.openGroupchat(room,nick,pass); |
|
119 |
+ } else if (body.match(/^\/msg (\S+)\s*(.*)/)) { |
|
120 |
+ |
|
121 |
+ /* *** msg *** */ |
|
122 |
+ |
|
123 |
+ to = RegExp.$1; |
|
124 |
+ var body = RegExp.$2; |
|
125 |
+ |
|
126 |
+ var jid = roster.getFullJIDByNick(to); |
|
127 |
+ if (jid == null) |
|
128 |
+ putMsgHTML("No such nick"+": " + to, new Date().toLocaleTimeString(), group); |
|
129 |
+ else { |
|
130 |
+ aMessage.setType('chat'); |
|
131 |
+ aMessage.setTo(jid); |
|
132 |
+ aMessage.setBody(body); |
|
133 |
+ srcW.con.send(aMessage); |
|
134 |
+ } |
|
135 |
+ } else if (body.match(/^\/part\s*(.*)/)) { |
|
136 |
+ |
|
137 |
+ /* *** part *** */ |
|
138 |
+ |
|
139 |
+ var msg = RegExp.$1; |
|
140 |
+ var aPresence = new JSJaCPresence(); |
|
141 |
+ aPresence.setTo(group); |
|
142 |
+ aPresence.setType('unavailable'); |
|
143 |
+ if (msg && msg != '') |
|
144 |
+ aPresence.setStatus(msg); |
|
145 |
+ srcW.con.send(aPresence); |
|
146 |
+ } else if (body.match(/^\/help/)) { |
|
147 |
+ |
|
148 |
+ /* *** help *** */ |
|
149 |
+ |
|
150 |
+ open("http://www.jabber.org/jeps/jep-0045.html#impl-client-irc"); |
|
151 |
+ } else { |
|
152 |
+ aMessage.setBody(body); |
|
153 |
+ srcW.con.send(aMessage); |
|
154 |
+ } |
|
155 |
+ |
|
156 |
+ if (aMessage.getType() == 'chat') { // a private message we have to putMsgHTML ourself |
|
157 |
+ putMsgHTML(aMessage.getBody(),new Date().toLocaleTimeString(),to,'purple',null,'to'); |
|
158 |
+ } |
|
159 |
+ |
|
160 |
+ // add message to our message history |
|
161 |
+ srcW.addtoHistory(body); |
|
162 |
+ document.getElementById('msgbox').value=''; // empty box |
|
163 |
+ document.getElementById('msgbox').focus(); // set focus back on input field |
|
164 |
+ |
|
165 |
+ return false; |
|
166 |
+} |
|
167 |
+ |
|
168 |
+function partRoom() { |
|
169 |
+ if (confirm('Are you sure you want to leave this chat room?')) |
|
170 |
+ if (parent.document.referrer) |
|
171 |
+ return parent.location.replace(parent.document.referrer); |
|
172 |
+ else |
|
173 |
+ return parent.location.replace('index.html'); |
|
174 |
+} |
|
175 |
+ |
|
176 |
+var colors = new Array('maroon','green','olive','navy','purple','teal','red','blue'); |
|
177 |
+ |
|
178 |
+var norlogeToMtime = {}; |
|
179 |
+ |
|
180 |
+function putMsgHTML(msg,mtime,user,usercolor,err,type,norloge) { |
|
181 |
+ var msgHTML = ''; |
|
182 |
+ |
|
183 |
+ if(norloge) { |
|
184 |
+ msgHTML += '<div data-norloge="' + norloge +'">'; |
|
185 |
+ msgHTML += '<span class="norloge norloge-ref" data-norloge="' + norloge +'">[' + mtime + '] </span>'; |
|
186 |
+ norlogeToMtime[norloge] = mtime; |
|
187 |
+ } |
|
188 |
+ else |
|
189 |
+ msgHTML += '<div'; |
|
190 |
+ |
|
191 |
+ if (msg.match(/^\/me /)) { |
|
192 |
+ msg = msgFormat(msg,norlogeToMtime); |
|
193 |
+ |
|
194 |
+ msg = msg.replace(/^\/me /,"<span class='meMsg'>* <span class='chatUser' username=\""+htmlFullEnc(user)+"\" title='@ "+mtime+"'>"+htmlEnc(user)+"</span></span> "); |
|
195 |
+ } else if (user && user != group) { |
|
196 |
+ msg = msgFormat(msg,norlogeToMtime); |
|
197 |
+ |
|
198 |
+ if (type == 'chat' || type == 'to') { // a private message |
|
199 |
+ msgHTML += "<span class='privMsg'>["; |
|
200 |
+ msgHTML += "<span class='chatUser' username=\""+htmlFullEnc(user)+"\" title=\"@ "+mtime+"\">" + htmlEnc(user) + "</span>"; |
|
201 |
+ if (type == 'to') |
|
202 |
+ msgHTML += "«"; |
|
203 |
+ else |
|
204 |
+ msgHTML += "»"; |
|
205 |
+ msgHTML += "]</span> "; |
|
206 |
+ } else |
|
207 |
+ msgHTML += "<span style=\"color:"+usercolor+";\" class='chatUser' username=\""+htmlFullEnc(user)+"\" title='@ "+mtime+"'><" + htmlEnc(user) + "></span> "; |
|
208 |
+ } |
|
209 |
+ |
|
210 |
+ if (user == group) {/* channel status messages */ |
|
211 |
+ if (err) |
|
212 |
+ msgHTML += "<span style=\"font-weight:bold;color:red;\">"+msg+"</span>"; |
|
213 |
+ else |
|
214 |
+ msgHTML += "<span style=\"font-weight:bold;\">"+msg+"</span>"; |
|
215 |
+ } else { |
|
216 |
+ |
|
217 |
+ if (user != nick && meRegExp.test(msg) && !notHREFMeRegExp.test(msg)) |
|
218 |
+ msgHTML += msg.replace(meRegExp,"<span class='highlighted'>$1</span>"); |
|
219 |
+ else |
|
220 |
+ msgHTML += msg; |
|
221 |
+ } |
|
222 |
+ |
|
223 |
+ msgHTML += "</div>"; |
|
224 |
+ |
|
225 |
+ scroll_bottom = false; |
|
226 |
+ if (cFrame.body.scrollTop+cFrame.body.clientHeight >= cFrame.body.scrollHeight) |
|
227 |
+ scroll_bottom = true; |
|
228 |
+ |
|
229 |
+ cFrame.body.innerHTML += msgHTML; |
|
230 |
+ |
|
231 |
+ if (scroll_bottom) |
|
232 |
+ frames.groupchatIChat.scrollTo(0,cFrame.body.scrollHeight); |
|
233 |
+} |
|
234 |
+ |
|
235 |
+function popMsgs() { |
|
236 |
+ if (!user) |
|
237 |
+ user = srcW.roster.getUserByJID(group); |
|
238 |
+ |
|
239 |
+ while (user.chatmsgs.length>0) { |
|
240 |
+ var msg; |
|
241 |
+ if (is.ie5||is.op) { |
|
242 |
+ msg = user.chatmsgs[0]; |
|
243 |
+ user.chatmsgs = user.chatmsgs.slice(1,user.chatmsgs.length); |
|
244 |
+ } else |
|
245 |
+ msg = user.chatmsgs.shift(); |
|
246 |
+ |
|
247 |
+ var from = msg.getFrom(); |
|
248 |
+ if (msg.getFrom().indexOf('/') != -1) |
|
249 |
+ from = msg.getFrom().substring(msg.getFrom().indexOf('/')+1); |
|
250 |
+ |
|
251 |
+ /* get date */ |
|
252 |
+ var timestamp; |
|
253 |
+ if (msg.jwcTimestamp) |
|
254 |
+ timestamp = msg.jwcTimestamp; |
|
255 |
+ else |
|
256 |
+ timestamp = new Date(); |
|
257 |
+ |
|
258 |
+ var mtime = ''; |
|
259 |
+ if (new Date() - timestamp > 24*3600*1000) |
|
260 |
+ mtime += timestamp.toLocaleDateString() + " "; |
|
261 |
+ |
|
262 |
+ mtime += timestamp.toLocaleTimeString(); |
|
263 |
+ |
|
264 |
+ /* look for a subject */ |
|
265 |
+ if (msg.getType() == 'groupchat' && msg.getSubject()) { // set topic |
|
266 |
+ user.roster.subject = msg.getSubject(); |
|
267 |
+ document.getElementById('room_topic').innerHTML = htmlEnc(msg.getSubject()); |
|
268 |
+ putMsgHTML("/me has set the topic to: "+msg.getSubject(), mtime, from); |
|
269 |
+ return; |
|
270 |
+ } |
|
271 |
+ |
|
272 |
+ if(!msg.getBody() || msg.getBody() == '') |
|
273 |
+ return; |
|
274 |
+ |
|
275 |
+ srcW.playSound('chat_recv'); |
|
276 |
+ |
|
277 |
+ /* calculate color */ |
|
278 |
+ var charSum = 0; |
|
279 |
+ for (var i=0; i<from.length; i++) |
|
280 |
+ charSum += from.charCodeAt(i); |
|
281 |
+ |
|
282 |
+ var norloge = msg.getID(); |
|
283 |
+ if(!norloge) |
|
284 |
+ norloge = "message_sans_id_puxor"; |
|
285 |
+ |
|
286 |
+ putMsgHTML(msg.getBody(),mtime,from,colors[charSum%(colors.length)],null,msg.getType(),norloge); |
|
287 |
+ } /* end while */ |
|
288 |
+ |
|
289 |
+} |
|
290 |
+ |
|
291 |
+function displayTimestamp() { |
|
292 |
+ var tstyle; |
|
293 |
+ if (is.ie) { |
|
294 |
+ tstyle = cFrame.styleSheets('timestampstyle'); |
|
295 |
+ tstyle.disabled = srcW.timestamps; |
|
296 |
+ } else { |
|
297 |
+ tstyle = cFrame.getElementById("timestampstyle"); |
|
298 |
+ tstyle.sheet.disabled = srcW.timestamps; |
|
299 |
+ } |
|
300 |
+} |
|
301 |
+ |
|
302 |
+function updateMe() { |
|
303 |
+ document.getElementById('submit_button').disabled = (roster.me.role == 'none'); |
|
304 |
+ |
|
305 |
+ if (roster.me.role == 'none') {// seems we left |
|
306 |
+ cFrame.body.innerHTML += "<span style='color:red';>"+"Disconnected."+"</span><br>"; |
|
307 |
+ groupchatIChat.scrollTo(0,cFrame.body.scrollHeight); |
|
308 |
+ } |
|
309 |
+} |
|
310 |
+ |
|
311 |
+function changeUserStat(jid,stat,val,confirm,reason) { |
|
312 |
+ var user = roster.getUserByJID(jid); |
|
313 |
+ var iq = new JSJaCIQ(); |
|
314 |
+ iq.setType('set'); |
|
315 |
+ iq.setTo(group); |
|
316 |
+ |
|
317 |
+ var query = iq.setQuery('http://jabber.org/protocol/muc#admin'); |
|
318 |
+ var item = query.appendChild(iq.getDoc().createElement('item')); |
|
319 |
+ item.setAttribute('nick',user.name); |
|
320 |
+ |
|
321 |
+ item.setAttribute(stat,val); |
|
322 |
+ |
|
323 |
+ if (reason || (confirm && (reason = prompt("Reason","")) != '')) |
|
324 |
+ item.appendChild(iq.getDoc().createElement('reason')).appendChild(iq.getDoc().createTextNode(reason)); |
|
325 |
+ |
|
326 |
+ me = this; |
|
327 |
+ srcW.con.send(iq,me.handleError); |
|
328 |
+} |
|
329 |
+ |
|
330 |
+function handleError(iq) { |
|
331 |
+ // handle error |
|
332 |
+ if (iq && iq.getType() == 'error') { |
|
333 |
+ var error = iq.getNode().getElementsByTagName('error').item(0); |
|
334 |
+ if (error) { |
|
335 |
+ var msg = ''; |
|
336 |
+ for (var i=0; i<error.childNodes.length; i++) { |
|
337 |
+ switch (error.childNodes.item(i).nodeName) { |
|
338 |
+ case 'not-allowed': |
|
339 |
+ putMsgHTML("Not Allowed",new Date(),group,null,true); |
|
340 |
+ break; |
|
341 |
+ case 'forbidden': |
|
342 |
+ putMsgHTML("Forbidden",new Date(),group,null,true); |
|
343 |
+ break; |
|
344 |
+ case 'item-not-found': |
|
345 |
+ putMsgHTML("Not Found",new Date(),group,null,true); |
|
346 |
+ break; |
|
347 |
+ default: |
|
348 |
+ putMsgHTML(error.childNodes.item(i).nodeName,new Date(),group,null,true); |
|
349 |
+ break; |
|
350 |
+ } |
|
351 |
+ } |
|
352 |
+ } |
|
353 |
+ } |
|
354 |
+} |
|
355 |
+ |
|