Merge lp:~timo-wingender/widelands-website/ggz-support into lp:widelands-website

Proposed by Timowi
Status: Merged
Merged at revision: 218
Proposed branch: lp:~timo-wingender/widelands-website/ggz-support
Merge into: lp:widelands-website
Diff against target: 5503 lines (+2736/-1294)
89 files modified
diff_match_patch.py (+2/-2)
media/css/base.css (+225/-101)
media/css/comments.css (+8/-8)
media/css/forum.css (+30/-90)
media/css/ggz.css (+12/-0)
media/css/messages.css (+3/-76)
media/css/news.css (+68/-83)
media/css/notice.css (+12/-0)
media/css/profile.css (+7/-79)
news/templatetags/news.py (+31/-0)
news/urls.py (+12/-12)
news/views.py (+0/-1)
pybb/feeds.py (+22/-5)
pybb/forms.py (+14/-3)
pybb/management/__init__.py (+1/-0)
pybb/management/pybb_notifications.py (+20/-0)
pybb/models.py (+14/-2)
pybb/templatetags/pybb_extras.py (+132/-1)
pybb/urls.py (+4/-0)
pybb/util.py (+3/-5)
pybb/views.py (+7/-0)
settings.py (+1/-0)
templates/django_messages/compose.html (+16/-21)
templates/django_messages/inbox.html (+9/-6)
templates/django_messages/inlines/navigation.html (+14/-14)
templates/django_messages/outbox.html (+9/-5)
templates/django_messages/trash.html (+25/-14)
templates/mainpage.html (+40/-44)
templates/mainpage/online_users.html (+8/-5)
templates/navigation.html (+16/-2)
templates/news/inlines/post_detail.html (+49/-47)
templates/news/post_archive_day.html (+20/-14)
templates/news/post_archive_month.html (+21/-10)
templates/news/post_archive_year.html (+26/-11)
templates/news/post_list.html (+24/-30)
templates/notification/forum_new_post/full.txt (+7/-0)
templates/notification/forum_new_post/notice.html (+2/-0)
templates/notification/forum_new_topic/full.txt (+7/-0)
templates/notification/forum_new_topic/notice.html (+2/-0)
templates/notification/notices.html (+46/-28)
templates/notification/single.html (+50/-0)
templates/notification/wiki_article_edited/notice.html (+1/-1)
templates/pybb/add_post.html (+5/-4)
templates/pybb/delete_post.html (+15/-6)
templates/pybb/edit_post.html (+5/-4)
templates/pybb/forum.html (+62/-39)
templates/pybb/index.html (+7/-3)
templates/pybb/inlines/add_post_form.html (+27/-35)
templates/pybb/inlines/display_category.html (+9/-15)
templates/pybb/inlines/forum_row.html (+0/-2)
templates/pybb/inlines/post.html (+43/-71)
templates/pybb/inlines/topic_row.html (+11/-3)
templates/pybb/last_posts.html (+21/-0)
templates/pybb/pagination.html (+35/-14)
templates/pybb/topic.html (+73/-59)
templates/registration/base.html (+8/-0)
templates/registration/login.html (+49/-20)
templates/registration/password_change_done.html (+23/-8)
templates/registration/password_change_form.html (+65/-20)
templates/registration/password_reset_complete.html (+23/-8)
templates/registration/password_reset_confirm.html (+35/-21)
templates/registration/password_reset_done.html (+23/-8)
templates/registration/password_reset_form.html (+35/-14)
templates/registration/registration_complete.html (+19/-8)
templates/registration/registration_form.html (+82/-54)
templates/right_boxes.html (+27/-26)
templates/threadedcomments/inlines/comments.html (+33/-27)
templates/threadedcomments/preview_comment.html (+16/-18)
templates/wlggz/base.html (+12/-0)
templates/wlggz/edit_ggz.html (+43/-0)
templates/wlggz/view_ggz_highscore.html (+43/-0)
templates/wlggz/view_ggz_matches.html (+45/-0)
templates/wlggz/view_ggz_overview.html (+27/-0)
templates/wlggz/view_ggz_playerstats.html (+106/-0)
templates/wlprofile/edit_profile.html (+36/-11)
templates/wlprofile/view_profile.html (+21/-9)
templates/wlwebchat/index.html (+1/-1)
urls.py (+2/-0)
wiki/feeds.py (+29/-56)
wlggz/admin.py (+27/-0)
wlggz/fields.py (+85/-0)
wlggz/forms.py (+43/-0)
wlggz/ggz_models.py (+189/-0)
wlggz/models.py (+27/-0)
wlggz/urls.py (+25/-0)
wlggz/views.py (+117/-0)
wlprofile/models.py (+23/-0)
wlprofile/templatetags/custom_date.py (+58/-10)
wlprofile/templatetags/wlprofile.py (+6/-0)
To merge this branch: bzr merge lp:~timo-wingender/widelands-website/ggz-support
Reviewer Review Type Date Requested Status
Widelands Developers Pending
Review via email: mp+27543@code.launchpad.net

Description of the change

Changes:
* ggz support: set ggz password in the profile, show ggz statistics in the profile and two overview pages: latest ten matches and top ten rating
* show ggz statistics in the forum
* improved navigation through profiles, messaging, notifications
* implementing forum ranking #340926
* add notifications for the forum: new topics and subscribing to topics #336016
* improved pagination in the forum #336699
* show signatures in the forum #357960
* add a form to change the password #591880
* make the feeds valid #454450
* lot of style fixes on the website
* improvement of the news archive

To post a comment you must log in.
259. By Timowi

add feature to pybb: show last five posts

260. By Timowi

pass user through last_post tag

261. By janus

add string filter
modify output template

262. By janus

add pybb_cut_string function to cut a string ;)
modify last_post output

263. By janus

add local timezone support
-> https://bugs.launchpad.net/widelands-website/+bug/345981

264. By janus

add some new forum icons, thx to genesis for this work
modify and implement the new graphics

265. By janus

add the new forum icons, thx to genesis for this work

266. By janus

:d

267. By janus

;)

268. By Timowi

merge trunk

269. By janus

modify the background of user menu
next time the menu will move to the account div in the right menu panel

270. By janus

add some new icons, big thx to genesis

271. By janus

add the new icons in the forum

272. By janus

add new open_topic icon, thx to genesis

273. By janus

modify the webchat guest nickname

274. By janus

sum sum sum ;)

275. By Timowi

merge trunk

276. By Timowi

remove wrong raise Exception

277. By Timowi

add field to choose between markdown and bbcode as markup

278. By Timowi

add new forum rank images by genesis

279. By janus

modify output of forum topic ;), for the forum better handling

280. By Timowi

fix displaying of ggz users which do not exist in django

281. By Timowi

add new columns to ggz matchplayers database schema

282. By Timowi

rename wgllz template

283. By Timowi

display result and points on last matches page

284. By Timowi

style fix by janus

285. By janus

change ranks post count

286. By janus

disable online users if it's none

287. By janus

fix previews commit -.-

288. By janus

many style fixes, remove ggz menu becouse it's not done

289. By janus

fix wiki edit history style, fix new style

290. By janus

remove <li>

291. By janus

remove online menu complitly

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'diff_match_patch.py'
2--- diff_match_patch.py 2010-01-03 21:51:19 +0000
3+++ diff_match_patch.py 2010-10-30 22:51:06 +0000
4@@ -1006,10 +1006,10 @@
5 text = (data.replace("&", "&amp;").replace("<", "&lt;")
6 .replace(">", "&gt;").replace("\n", "&para;<BR>"))
7 if op == self.DIFF_INSERT:
8- html.append("<INS STYLE=\"color: #00FF00;\" TITLE=\"i=%i\">%s</INS>"
9+ html.append("<SPAN STYLE=\"color: #00FF00;\" TITLE=\"i=%i\">%s</SPAN>"
10 % (i, text))
11 elif op == self.DIFF_DELETE:
12- html.append("<DEL STYLE=\"color: #FF0000;\" TITLE=\"i=%i\">%s</DEL>"
13+ html.append("<SPAN STYLE=\"color: #FF0000;\" TITLE=\"i=%i\">%s</SPAN>"
14 % (i, text))
15 elif op == self.DIFF_EQUAL:
16 html.append("<SPAN TITLE=\"i=%i\">%s</SPAN>" % (i, text))
17
18=== modified file 'media/css/base.css'
19--- media/css/base.css 2010-09-26 13:30:30 +0000
20+++ media/css/base.css 2010-10-30 22:51:06 +0000
21@@ -1,24 +1,24 @@
22 /* HEADER */
23 div#headerbanner {
24-background: url(../img/headback.jpg);
25-background-repeat: repeat-x;
26-color: #FFFFFF;
27-text-align: center;
28-height:110px;
29-border-bottom:2px solid #090909;
30+ background: url(../img/headback.jpg);
31+ background-repeat: repeat-x;
32+ color: #FFFFFF;
33+ text-align: center;
34+ height:110px;
35+ order-bottom:2px solid #090909;
36 }
37
38 /***************************************************************/
39 /* SIDECOLUMNS */
40 /***************************************************************/
41 #leftcolumn, #rightcolumn {
42- background-color: #555555;
43- background-image: url('../img/Menubackground.png');
44- border-left: 1px solid #151515;
45- border-right: 1px solid #090909;
46- border-bottom: 1px solid #090909;
47- padding-top: 4px; /* A small space */
48- vertical-align: top;
49+ background-color: #555555;
50+ background-image: url('../img/Menubackground.png');
51+ border-left: 1px solid #151515;
52+ border-right: 1px solid #090909;
53+ border-bottom: 1px solid #090909;
54+ padding-top: 4px; /* A small space */
55+ vertical-align: top;
56
57 }
58 /* The content is capsuled in divs, because
59@@ -26,10 +26,10 @@
60 * for tables
61 */
62 #leftcontent {
63- min-width: 175px;
64+ min-width: 175px;
65 }
66-#rightcontent {
67- min-width: 170px;
68+#rightcontent {
69+ min-width: 170px;
70 }
71
72
73@@ -37,19 +37,19 @@
74 * Mainmenu
75 */
76 #mainmenu {
77-margin: 0px;
78-padding: 0px;
79+ margin: 0px;
80+ padding: 0px;
81 }
82 #mainmenu li {
83- list-style-image: url('../img/1.gif');
84- list-style-position: inside;
85- font-weight: bold;
86- padding: 4px;
87+ list-style-image: url('../img/1.gif');
88+ list-style-position: inside;
89+ font-weight: bold;
90+ padding: 4px;
91 }
92 #mainmenu .sub {
93-padding-left: 20px;
94-color: red;
95-font-weight: normal;
96+ padding-left: 20px;
97+ color: red;
98+ font-weight: normal;
99 }
100
101
102@@ -57,52 +57,55 @@
103 /* CONTENT COLUMN */
104 /******************/
105 #content {
106- text-align: left;
107- vertical-align: top;
108- padding: 8px;
109- padding-top: 0px;
110- background-color: #333333;
111- background: url(../img/background.png);
112+ text-align: left;
113+ vertical-align: top;
114+ padding: 8px;
115+ padding-top: 0px;
116+ background-color: #000000;
117+ background: url(../img/background.png);
118
119- font-size: 12px;
120- color: #D0DFFF;
121- width: 100%;
122+ font-size: 12px;
123+ color: #D0DFFF;
124+ width: 100%;
125 }
126
127 /****************/
128 /* BOTTOM TABLE */
129 /****************/
130 table#table_bottom {
131- background-color: #333333;
132- background: url(../img/background.png);
133+ background-color: #333333;
134+ background: url(../img/background.png);
135
136- width: 100%;
137+ width: 100%;
138 }
139 td#table_bottomleft {
140- background: url(../img/table_bottomleft.png);
141- background-repeat: no-repeat;
142- background-position: left;
143- height:8px;
144- width:8px;
145+ background: url(../img/table_bottomleft.png);
146+ background-repeat: no-repeat;
147+ background-position: left;
148+ height:8px;
149+ width:8px;
150 }
151
152 td#table_bottomright {
153- background: url(../img/table_bottomright.png);
154- background-repeat: no-repeat;
155- background-position: right;
156- height:8px;
157- width:8px;
158+ background: url(../img/table_bottomright.png);
159+ background-repeat: no-repeat;
160+ background-position: right;
161+ height:8px;
162+ width:8px;
163 }
164
165 /**********/
166 /* FOOTER */
167 /**********/
168 #footer {
169- width: 100%;
170- height: 8px;
171- background: url(../img/background.png);
172+ width: 100%;
173+ height: 8px;
174+ background: url(../img/background.png);
175 }
176-/* Menu Blocks */
177+
178+/*
179+ * Menu Blocks
180+ */
181 h3.box_title {
182 color: #D0DFFF;
183 font-weight: bold;
184@@ -117,96 +120,100 @@
185 padding-bottom: 6px;
186 margin: 0px;
187 }
188+
189 div.box_content {
190- font-size:12px;
191- line-height: 120%;
192- border-left: 0px solid #999999;
193- border-right: 0px solid #999999;
194- padding: 6px;
195- padding-top: 0px;
196- padding-bottom: 20px;
197- background-color: #555555;
198- background-image: url('../img/Menubackground.png');
199+ font-size:12px;
200+ line-height: 120%;
201+ border-left: 0px solid #999999;
202+ border-right: 0px solid #999999;
203+ padding: 6px;
204+ padding-top: 0px;
205+ padding-bottom: 20px;
206+ background-color: #555555;
207+ background-image: url('../img/Menubackground.png');
208 }
209+
210 .box_content p {
211- margin: 0px;
212- padding: 0px;
213- padding-bottom: 4px;
214+ margin: 0px;
215+ padding: 0px;
216+ padding-bottom: 4px;
217 }
218
219+.block_center {
220+ text-align: center;
221+}
222
223 /***************************************************************/
224 /* GENERAL STYLE ELEMENTS */
225 /***************************************************************/
226 body {
227- color: #D0DFFF;
228- font-family: Verdana, Arial, Helvetica, sans-serif;
229- font-size: 12px;
230- background-color: #000000;
231- margin: 0;
232- padding: 0;
233+ color: #D0DFFF;
234+ font-family: Verdana, Arial, Helvetica, sans-serif;
235+ font-size: 12px;
236+ background-color: #000000;
237+ margin: 0;
238+ padding: 0;
239 }
240
241 img {
242- border: 0px;
243+ border: 0px;
244 }
245
246 a {
247- color: #D0DFFF;
248- text-decoration: none;
249- font-weight: bold;
250- background-color: transparent;
251+ color: #D0DFFF;
252+ text-decoration: none;
253+ font-weight: bold;
254+ background-color: transparent;
255 }
256 a.external:before {
257 padding-right: 2px;
258- /* Must be an absolute reference, otherwise some browsers give errors */
259- content: url(/wlmedia/img/external_link.gif);
260+ /* Must be an absolute reference, otherwise some browsers give errors */
261+ content: url(/wlmedia/img/external_link.gif);
262 }
263 a.missing {
264- color: rgb(255, 85, 0);
265+ color: rgb(255, 85, 0);
266 }
267
268
269 a:hover {
270- color: #A0AAFF;
271- text-decoration: underline;
272+ color: #A0AAFF;
273+ text-decoration: underline;
274 }
275-
276-
277+
278 /*
279 * Default table layout
280 */
281 th {
282- font-weight: bold;
283- background-position: left;
284- text-align: left;
285- padding-left: 4px;
286- background-image: url('../img/Navbar.png');
287- background-repeat: repeat-x;
288- height: 20px;
289+ font-weight: bold;
290+ background-position: left;
291+ text-align: left;
292+ padding-left: 4px;
293+ background-image: url('../img/Navbar.png');
294+ background-repeat: repeat-x;
295+ height: 20px;
296 }
297
298 /*
299 * Odd Even Tags (mainly for tables)
300 */
301 .even {
302- background-color: #444444;
303- background: url(../img/background-444.png);
304- padding: 5px;
305+ background-color: #444444;
306+ background: url(../img/background-444.png);
307+ padding: 5px;
308 }
309
310 .odd {
311- background-color: #4f4f4f;
312- background: url(../img/background-4F4F4F.png);
313- padding: 5px;
314-}
315-
316-.legend {
317-}
318-
319+ background-color: #4f4f4f;
320+ background: url(../img/background-4F4F4F.png);
321+ padding: 5px;
322+}
323+
324+/*
325+ * Error Handling
326+ */
327 .errormessage {
328- color: #ff0000;
329- font-size: 13px;
330+ color: #ff0000;
331+ font-size: 13px;
332 }
333
334 /*
335@@ -230,3 +237,120 @@
336 }
337
338
339+/*
340+ * Box Item Model
341+ */
342+.box_item_model {
343+
344+}
345+
346+.border {
347+ border: 1px solid rgb(9, 9, 9);
348+}
349+
350+.full_site {
351+ width: 100%;
352+}
353+
354+.fixed_site {
355+ width: 540px;
356+}
357+
358+.box_item_model img.news {
359+ float: right;
360+ padding: 0px;
361+ width: 20px;
362+}
363+
364+.box_item_model .border_top {
365+ border-top: 1px solid rgb(9, 9, );
366+}
367+
368+.box_item_model h3.title {
369+ font-weight: bold;
370+ font-size: 12px;
371+ padding-left: 12px;
372+ background-image: url('../img/Navbar.png');
373+ background-repeat: repeat-x;
374+ border-left: 0px solid #999999;
375+ bolder-right: 0px solid #999999;
376+ border-top: 0px solid #999999;
377+ padding-top: 2px;
378+ padding-bottom: 0px;
379+ margin: 0px;
380+}
381+
382+.box_item_model .content {
383+ line-height: 120%;
384+ border: 0px;
385+ padding: 2px;
386+ padding-top: 5px;
387+ padding-left: 15px;
388+ background-color: #3F3F3F;
389+ background: url('../img/background-3F3F3F.png');
390+}
391+
392+.box_item_model .info_line {
393+ text-align: right;
394+ padding: 3px;
395+ margin: 0px;
396+ background-color: #222222;
397+ background: url('../img/background-222.png');
398+}
399+
400+.box_item_model .text {
401+ vertical-align: baseline;
402+ margin-top: 5px;
403+ margin-bottom: 5px;
404+ margin: 0px;
405+ line-height: 130%;
406+}
407+
408+.box_item_model .text:first-letter {
409+ color: #7070FF;
410+ font-size: 180%;
411+ font-family: Cretino, "Bitstream Vera Serif", serif;
412+ font-weight: bold;
413+}
414+
415+.box_item_model .show_right {
416+ text-align: right;
417+ vertical-align: top;
418+}
419+
420+.box_item_model .show_left {
421+ text-align: left;
422+ vertical-align: top;
423+}
424+
425+.box_item_model .show_center {
426+ text-align: center;
427+ vertical-align: top;
428+}
429+
430+.show_center {
431+ text-align: center;
432+ vertical-align: top;
433+}
434+.button_send {
435+ padding:0;
436+ margin:0;
437+ border:none;
438+ color: #222222;
439+ background: url(../forum/img/en/send.png) no-repeat center;
440+ background-repeat: no-repeat;
441+ font-size:12px;
442+ width:100px;
443+ height: 25px;
444+}
445+.button_preview {
446+ padding:0;
447+ margin:0;
448+ border:none;
449+ color: #222222;
450+ background: url(../forum/img/en/preview.png) no-repeat center;
451+ background-repeat: no-repeat;
452+ font-size:12px;
453+ width:100px;
454+ height: 25px;
455+}
456
457=== modified file 'media/css/comments.css'
458--- media/css/comments.css 2010-01-03 18:38:36 +0000
459+++ media/css/comments.css 2010-10-30 22:51:06 +0000
460@@ -1,14 +1,14 @@
461-
462-
463 /*
464 * Comment
465 */
466 .comment {
467- margin: 0px;
468- padding-bottom: 2px;
469-/* border: 1px solid rgb(20%,20%,20%); */
470- border-top: 0px;
471- width: 100%;
472+ margin: 0px;
473+ padding-bottom: 2px;
474+ /*
475+ * border: 1px solid rgb(20%,20%,20%);
476+ */
477+ border-top: 0px;
478+ width: 100%;
479 }
480 .comment p {
481 margin: 0px;
482@@ -26,4 +26,4 @@
483 }
484 .text textarea {
485 width: 100%;
486-}
487\ No newline at end of file
488+}
489
490=== modified file 'media/css/forum.css'
491--- media/css/forum.css 2010-01-03 00:07:10 +0000
492+++ media/css/forum.css 2010-10-30 22:51:06 +0000
493@@ -1,6 +1,17 @@
494
495 .index_category, .index_forum {
496 margin-bottom: 20px;
497+ border-left: 0px;
498+ border-right: 0px;
499+}
500+
501+.list_overview {
502+ display: block;
503+ font-weight: bold;
504+ padding: 0px;
505+ margin-top: 0px;
506+ margin-bottom: 0px;
507+ background: url('../img/background-444.png');
508 }
509
510 .title {
511@@ -16,7 +27,6 @@
512 text-align: center;
513 }
514
515-
516 /*
517 * POSTS
518 */
519@@ -30,6 +40,14 @@
520 height: auto;
521 }
522
523+.post .top {
524+ vertical-align: top;
525+}
526+.post .top .signature .line {
527+ color: #D0DFFF;
528+ font-weight: bolder;
529+}
530+
531 /*
532 * Post
533 */
534@@ -87,93 +105,15 @@
535 width: 40%;
536 }
537 .post-form #id_body {
538- width: 100%;
539- height: 400px;
540-}
541-
542-/*
543- * Post and Edit field
544- */
545-
546-.forum_poster { font-size: 90%;}
547-.forum_post_date { font-size: 90%;}
548-
549-
550-.forum_item .forum_image img {
551- float: right;
552- padding: 0px;
553- margin-left: 20px;
554-}
555-
556-.forum_item {
557- border: 1px solid rgb(9, 9, 9);
558- width: 100%;
559-}
560-
561-.forum_item p {
562- margin-bottom: 5px;
563-}
564-
565-.forum_item h3.title {
566+ width: 98%;
567+ height: 150px;
568+}
569+.post .bold {
570 font-weight: bold;
571- font-size: 12px;
572- padding-left: 12px;
573- background-image: url('../img/Navbar.png');
574- background-repeat: repeat-x;
575- border-left: 0px solid #999999;
576- border-right: 0px solid #999999;
577- border-bottom: 0px solid #999999;
578- padding-top: 2px;
579- padding-bottom: 0px;
580- margin: 0px;
581-}
582-.forum_item .content {
583- line-height: 120%;
584- border: 0px;
585- padding: 2px;
586- padding-top: 5px;
587- padding-left: 15px;
588- background-color: #3F3F3F;
589- background: url(../img/background-3F3F3F.png);
590-}
591-
592-.forum_item .info_line {
593- text-align: right;
594- padding: 3px;
595- margin: 0px;
596- background-color: #222222;
597- background: url(../img/background-222.png);
598-}
599-
600-.forum_item .text {
601- vertical-align: baseline;;
602- margin-top: 5px;
603- margin-bottom: 5px;
604- margin: 0px;
605- line-height: 130%;
606-}
607-
608-.forum_item .text:first-letter {
609- vertical-align: baseline;
610- color: #7070FF;
611- font-size: 180%;
612- font-family: Cretino, "Bitstream Vera Serif", serif;
613- font-weight: bold;
614- }
615-
616-.forum_item .bottom_line {
617- background-color: #222222;
618- background: url(../img/background-222.png);
619- table-layout: fixed;
620-}
621-.forum_item .tags {
622- text-align: right;
623-}
624-.forum_item .comments {
625- text-align: left;
626-}
627-.forum_item .admin {
628- text-align: center;
629-}
630-
631-
632+}
633+.post .underline {
634+ text-decoration: underline;
635+}
636+.post .italic {
637+ font-style: italic;
638+}
639
640=== added file 'media/css/ggz.css'
641--- media/css/ggz.css 1970-01-01 00:00:00 +0000
642+++ media/css/ggz.css 2010-10-30 22:51:06 +0000
643@@ -0,0 +1,12 @@
644+.ggz_stats {
645+ width: 120px;
646+}
647+.ggz_date {
648+ width: 150px;
649+}
650+.ggz_winner {
651+ width: 100px;
652+}
653+.ggz_vs {
654+ width: 290px;
655+}
656
657=== modified file 'media/css/messages.css'
658--- media/css/messages.css 2010-01-03 15:47:15 +0000
659+++ media/css/messages.css 2010-10-30 22:51:06 +0000
660@@ -60,89 +60,16 @@
661 width: 40%;
662 }
663 #id_body {
664- width: 100%;
665- height: 400px;
666+ width: 98%;
667+ height: 200px;
668 }
669
670 /*
671 * MessageBox style
672 */
673
674-.message_item .message_image img {
675+.message_image img {
676 float: right;
677 padding: 0px;
678 margin-left: 20px;
679 }
680-
681-.message_item {
682- border: 1px solid rgb(9, 9, 9);
683- width: 100%;
684-}
685-
686-.message_item p {
687- margin-bottom: 5px;
688-}
689-
690-.message_item h3.title {
691- font-weight: bold;
692- font-size: 12px;
693- padding-left: 12px;
694- background-image: url('../img/Navbar.png');
695- background-repeat: repeat-x;
696- border-left: 0px solid #999999;
697- border-right: 0px solid #999999;
698- border-bottom: 0px solid #999999;
699- padding-top: 2px;
700- padding-bottom: 0px;
701- margin: 0px;
702-}
703-.message_item .content {
704- line-height: 120%;
705- border: 0px;
706- padding: 2px;
707- padding-top: 5px;
708- padding-left: 15px;
709- background-color: #3F3F3F;
710- background: url(../img/background-3F3F3F.png);
711-}
712-
713-.message_item .info_line {
714- text-align: right;
715- padding: 3px;
716- margin: 0px;
717- background-color: #222222;
718- background: url(../img/background-222.png);
719-}
720-
721-.message_item .text {
722- vertical-align: baseline;;
723- margin-top: 5px;
724- margin-bottom: 5px;
725- margin: 0px;
726- line-height: 130%;
727-}
728-
729-.message_item .text:first-letter {
730- vertical-align: baseline;
731- color: #7070FF;
732- font-size: 180%;
733- font-family: Cretino, "Bitstream Vera Serif", serif;
734- font-weight: bold;
735- }
736-
737-.message_item .bottom_line {
738- background-color: #222222;
739- background: url(../img/background-222.png);
740- table-layout: fixed;
741-}
742-.message_item .tags {
743- text-align: right;
744-}
745-.message_item .comments {
746- text-align: left;
747-}
748-.message_item .admin {
749- text-align: center;
750-}
751-
752-
753
754=== modified file 'media/css/news.css'
755--- media/css/news.css 2009-02-27 15:36:38 +0000
756+++ media/css/news.css 2010-10-30 22:51:06 +0000
757@@ -1,83 +1,68 @@
758-
759-.news_poster { font-size: 90%;}
760-.news_post_date { font-size: 90%;}
761-
762-
763-.news_item .news_image img {
764- float: right;
765- padding: 0px;
766- margin-left: 20px;
767-}
768-
769-.news_item {
770- border: 1px solid rgb(9, 9, 9);
771- width: 100%;
772-}
773-
774-.news_item p {
775- margin-bottom: 5px;
776-}
777-
778-.news_item h3.title {
779- font-weight: bold;
780- font-size: 12px;
781- padding-left: 12px;
782- background-image: url('../img/Navbar.png');
783- background-repeat: repeat-x;
784- border-left: 0px solid #999999;
785- border-right: 0px solid #999999;
786- border-bottom: 0px solid #999999;
787- padding-top: 2px;
788- padding-bottom: 0px;
789- margin: 0px;
790-}
791-.news_item .content {
792- line-height: 120%;
793- border: 0px;
794- padding: 2px;
795- padding-top: 5px;
796- padding-left: 15px;
797- background-color: #3F3F3F;
798- background: url(../img/background-3F3F3F.png);
799-}
800-
801-.news_item .info_line {
802- text-align: right;
803- padding: 3px;
804- margin: 0px;
805- background-color: #222222;
806- background: url(../img/background-222.png);
807-}
808-
809-.news_item .text {
810- vertical-align: baseline;;
811- margin-top: 5px;
812- margin-bottom: 5px;
813- margin: 0px;
814- line-height: 130%;
815-}
816-
817-.news_item .text:first-letter {
818- vertical-align: baseline;
819- color: #7070FF;
820- font-size: 180%;
821- font-family: Cretino, "Bitstream Vera Serif", serif;
822- font-weight: bold;
823- }
824-
825-.news_item .bottom_line {
826- background-color: #222222;
827- background: url(../img/background-222.png);
828- table-layout: fixed;
829-}
830-.news_item .tags {
831- text-align: right;
832-}
833-.news_item .comments {
834- text-align: left;
835-}
836-.news_item .admin {
837- text-align: center;
838-}
839-
840-
841+/**************************/
842+/* General Style elements */
843+/**************************/
844+.text h1 {
845+ font-size: 2.5em;
846+ margin: 10px 0px;
847+}
848+.text h2 {
849+ font-size: 2em;
850+ margin: 25px 0px 10px;
851+ line-height: 70%;
852+}
853+.text h3 {
854+ font-size: 1.4em;
855+ margin: 5px 0px;
856+}
857+.text h4 {
858+ font-size: 1.30em;
859+ margin: 5px 0px;
860+ /*
861+ * text-decoration: underline;
862+ * */
863+}
864+.text h5 {
865+ font-size: 1.2em;
866+ margin: 5px 0px;
867+ /*
868+ * text-decoration: underline;
869+ * font-style: italic;
870+ * */
871+}
872+.text h6 {
873+ font-size: 1.1em;
874+ margin: 5px 0px;
875+ /*
876+ * font-style: italic;
877+ * */
878+}
879+
880+.text h1:first-letter,.text h2:first-letter,.text h3:first-letter,.text h4:first-letter,.text h5:first-letter {
881+ vertical-align: baseline;
882+ color: #7070FF;
883+ font-size: 180%;
884+ font-family: Cretino, "Bitstream Vera Serif", serif;
885+ font-weight: bold;
886+}
887+.text h3:first-letter {
888+ color: rgb(156,156,86);
889+}
890+.text h4:first-letter {
891+ color: rgb(156,86,156);
892+ font-size: 150%;
893+}
894+.text h5:first-letter {
895+ color: rgb(86,156,156);
896+ font-size: 120%;
897+}
898+.news_poster {
899+ font-size: 90%;
900+}
901+.news_post_date {
902+ font-size: 90%;
903+}
904+.news_image img {
905+ float:right;
906+ margin-left:20px;
907+ padding:0;
908+}
909
910=== added file 'media/css/notice.css'
911--- media/css/notice.css 1970-01-01 00:00:00 +0000
912+++ media/css/notice.css 2010-10-30 22:51:06 +0000
913@@ -0,0 +1,12 @@
914+.notice_poster {
915+ font-size: 90%;
916+}
917+.notice_post_date {
918+ font-size: 90%;
919+}
920+.notice_unseen_notice {
921+ font-style: italic;
922+}
923+.notice_type {
924+ font-weight: bold;
925+}
926
927=== modified file 'media/css/profile.css'
928--- media/css/profile.css 2010-01-02 19:08:16 +0000
929+++ media/css/profile.css 2010-10-30 22:51:06 +0000
930@@ -1,83 +1,11 @@
931-
932-.profile_poster { font-size: 90%;}
933-.profile_post_date { font-size: 90%;}
934-
935-
936-.profile_item .profile_image img {
937+.profile_poster {
938+ font-size: 90%;
939+}
940+.profile_post_date {
941+ font-size: 90%;
942+}
943+.profile_image img {
944 float: right;
945 padding: 0px;
946 margin-left: 20px;
947 }
948-
949-.profile_item {
950- border: 1px solid rgb(9, 9, 9);
951- width: 540px;
952-}
953-
954-.profile_item p {
955- margin-bottom: 5px;
956-}
957-
958-.profile_item h3.title {
959- font-weight: bold;
960- font-size: 12px;
961- padding-left: 12px;
962- background-image: url('../img/Navbar.png');
963- background-repeat: repeat-x;
964- border-left: 0px solid #999999;
965- border-right: 0px solid #999999;
966- border-bottom: 0px solid #999999;
967- padding-top: 2px;
968- padding-bottom: 0px;
969- margin: 0px;
970-}
971-.profile_item .content {
972- line-height: 120%;
973- border: 0px;
974- padding: 2px;
975- padding-top: 5px;
976- padding-left: 15px;
977- background-color: #3F3F3F;
978- background: url(../img/background-3F3F3F.png);
979-}
980-
981-.profile_item .info_line {
982- text-align: right;
983- padding: 3px;
984- margin: 0px;
985- background-color: #222222;
986- background: url(../img/background-222.png);
987-}
988-
989-.profile_item .text {
990- vertical-align: baseline;;
991- margin-top: 5px;
992- margin-bottom: 5px;
993- margin: 0px;
994- line-height: 130%;
995-}
996-
997-.profile_item .text:first-letter {
998- vertical-align: baseline;
999- color: #7070FF;
1000- font-size: 180%;
1001- font-family: Cretino, "Bitstream Vera Serif", serif;
1002- font-weight: bold;
1003- }
1004-
1005-.profile_item .bottom_line {
1006- background-color: #222222;
1007- background: url(../img/background-222.png);
1008- table-layout: fixed;
1009-}
1010-.profile_item .tags {
1011- text-align: right;
1012-}
1013-.profile_item .comments {
1014- text-align: left;
1015-}
1016-.profile_item .admin {
1017- text-align: center;
1018-}
1019-
1020-
1021
1022=== added file 'media/css/register.css'
1023=== added file 'media/forum/img/en/close_small.png'
1024Binary files media/forum/img/en/close_small.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/close_small.png 2010-10-30 22:51:06 +0000 differ
1025=== added file 'media/forum/img/en/close_topic.png'
1026Binary files media/forum/img/en/close_topic.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/close_topic.png 2010-10-30 22:51:06 +0000 differ
1027=== added file 'media/forum/img/en/closed.png'
1028Binary files media/forum/img/en/closed.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/closed.png 2010-10-30 22:51:06 +0000 differ
1029=== added file 'media/forum/img/en/delete.png'
1030Binary files media/forum/img/en/delete.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/delete.png 2010-10-30 22:51:06 +0000 differ
1031=== added file 'media/forum/img/en/edit.png'
1032Binary files media/forum/img/en/edit.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/edit.png 2010-10-30 22:51:06 +0000 differ
1033=== added file 'media/forum/img/en/new_topic.png'
1034Binary files media/forum/img/en/new_topic.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/new_topic.png 2010-10-30 22:51:06 +0000 differ
1035=== added file 'media/forum/img/en/newtopic.png'
1036Binary files media/forum/img/en/newtopic.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/newtopic.png 2010-10-30 22:51:06 +0000 differ
1037=== added file 'media/forum/img/en/open_topic.png'
1038Binary files media/forum/img/en/open_topic.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/open_topic.png 2010-10-30 22:51:06 +0000 differ
1039=== added file 'media/forum/img/en/permalink.png'
1040Binary files media/forum/img/en/permalink.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/permalink.png 2010-10-30 22:51:06 +0000 differ
1041=== added file 'media/forum/img/en/preview.png'
1042Binary files media/forum/img/en/preview.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/preview.png 2010-10-30 22:51:06 +0000 differ
1043=== added file 'media/forum/img/en/quote.png'
1044Binary files media/forum/img/en/quote.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/quote.png 2010-10-30 22:51:06 +0000 differ
1045=== added file 'media/forum/img/en/search.png'
1046Binary files media/forum/img/en/search.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/search.png 2010-10-30 22:51:06 +0000 differ
1047=== added file 'media/forum/img/en/send.png'
1048Binary files media/forum/img/en/send.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/send.png 2010-10-30 22:51:06 +0000 differ
1049=== added file 'media/forum/img/en/send_pm.png'
1050Binary files media/forum/img/en/send_pm.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/send_pm.png 2010-10-30 22:51:06 +0000 differ
1051=== added file 'media/forum/img/en/sendpm.png'
1052Binary files media/forum/img/en/sendpm.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/sendpm.png 2010-10-30 22:51:06 +0000 differ
1053=== added file 'media/forum/img/en/stick_topic.png'
1054Binary files media/forum/img/en/stick_topic.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/stick_topic.png 2010-10-30 22:51:06 +0000 differ
1055=== added file 'media/forum/img/en/stick_topic_small.png'
1056Binary files media/forum/img/en/stick_topic_small.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/stick_topic_small.png 2010-10-30 22:51:06 +0000 differ
1057=== added file 'media/forum/img/en/sticky.png'
1058Binary files media/forum/img/en/sticky.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/sticky.png 2010-10-30 22:51:06 +0000 differ
1059=== added file 'media/forum/img/en/subscribe.png'
1060Binary files media/forum/img/en/subscribe.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/subscribe.png 2010-10-30 22:51:06 +0000 differ
1061=== added file 'media/forum/img/en/subscribe_small.png'
1062Binary files media/forum/img/en/subscribe_small.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/subscribe_small.png 2010-10-30 22:51:06 +0000 differ
1063=== added file 'media/forum/img/en/top.png'
1064Binary files media/forum/img/en/top.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/top.png 2010-10-30 22:51:06 +0000 differ
1065=== added file 'media/forum/img/en/unstick_topic.png'
1066Binary files media/forum/img/en/unstick_topic.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/unstick_topic.png 2010-10-30 22:51:06 +0000 differ
1067=== added file 'media/forum/img/en/unsubscribe.png'
1068Binary files media/forum/img/en/unsubscribe.png 1970-01-01 00:00:00 +0000 and media/forum/img/en/unsubscribe.png 2010-10-30 22:51:06 +0000 differ
1069=== added file 'media/img/rang_1.png'
1070Binary files media/img/rang_1.png 1970-01-01 00:00:00 +0000 and media/img/rang_1.png 2010-10-30 22:51:06 +0000 differ
1071=== added file 'media/img/rang_2.png'
1072Binary files media/img/rang_2.png 1970-01-01 00:00:00 +0000 and media/img/rang_2.png 2010-10-30 22:51:06 +0000 differ
1073=== added file 'media/img/rang_3.png'
1074Binary files media/img/rang_3.png 1970-01-01 00:00:00 +0000 and media/img/rang_3.png 2010-10-30 22:51:06 +0000 differ
1075=== added file 'media/img/rang_4.png'
1076Binary files media/img/rang_4.png 1970-01-01 00:00:00 +0000 and media/img/rang_4.png 2010-10-30 22:51:06 +0000 differ
1077=== added file 'media/img/rang_5.png'
1078Binary files media/img/rang_5.png 1970-01-01 00:00:00 +0000 and media/img/rang_5.png 2010-10-30 22:51:06 +0000 differ
1079=== added file 'media/img/rang_6.png'
1080Binary files media/img/rang_6.png 1970-01-01 00:00:00 +0000 and media/img/rang_6.png 2010-10-30 22:51:06 +0000 differ
1081=== added file 'media/img/rang_7.png'
1082Binary files media/img/rang_7.png 1970-01-01 00:00:00 +0000 and media/img/rang_7.png 2010-10-30 22:51:06 +0000 differ
1083=== added file 'media/img/sterne_0.png'
1084Binary files media/img/sterne_0.png 1970-01-01 00:00:00 +0000 and media/img/sterne_0.png 2010-10-30 22:51:06 +0000 differ
1085=== added file 'media/img/sterne_1.png'
1086Binary files media/img/sterne_1.png 1970-01-01 00:00:00 +0000 and media/img/sterne_1.png 2010-10-30 22:51:06 +0000 differ
1087=== added file 'media/img/sterne_2.png'
1088Binary files media/img/sterne_2.png 1970-01-01 00:00:00 +0000 and media/img/sterne_2.png 2010-10-30 22:51:06 +0000 differ
1089=== added file 'media/img/sterne_3.png'
1090Binary files media/img/sterne_3.png 1970-01-01 00:00:00 +0000 and media/img/sterne_3.png 2010-10-30 22:51:06 +0000 differ
1091=== added file 'media/img/sterne_4.png'
1092Binary files media/img/sterne_4.png 1970-01-01 00:00:00 +0000 and media/img/sterne_4.png 2010-10-30 22:51:06 +0000 differ
1093=== added file 'media/img/sterne_5.png'
1094Binary files media/img/sterne_5.png 1970-01-01 00:00:00 +0000 and media/img/sterne_5.png 2010-10-30 22:51:06 +0000 differ
1095=== added file 'media/img/sterne_6.png'
1096Binary files media/img/sterne_6.png 1970-01-01 00:00:00 +0000 and media/img/sterne_6.png 2010-10-30 22:51:06 +0000 differ
1097=== modified file 'news/templatetags/news.py'
1098--- news/templatetags/news.py 2009-02-24 12:53:54 +0000
1099+++ news/templatetags/news.py 2010-10-30 22:51:06 +0000
1100@@ -47,6 +47,37 @@
1101 format_string, var_name = m.groups()
1102 return LatestPosts(format_string, var_name)
1103
1104+class NewsYears(template.Node):
1105+ def __init__(self, var_name):
1106+ self.var_name = var_name
1107+
1108+ def render(self, context):
1109+ years = Post.objects.all().dates('publish', 'year')
1110+ context[self.var_name] = years
1111+ return ''
1112+
1113+@register.tag
1114+def get_news_years(parser, token):
1115+ """
1116+ Gets any number of latest posts and stores them in a varable.
1117+
1118+ Syntax::
1119+
1120+ {% get_latest_posts [limit] as [var_name] %}
1121+
1122+ Example usage::
1123+
1124+ {% get_latest_posts 10 as latest_post_list %}
1125+ """
1126+ try:
1127+ tag_name, arg = token.contents.split(None, 1)
1128+ except ValueError:
1129+ raise template.TemplateSyntaxError, "%s tag requires arguments" % token.contents.split()[0]
1130+ m = re.search(r'as (\w+)', arg)
1131+ if not m:
1132+ raise template.TemplateSyntaxError, "%s tag had invalid arguments" % tag_name
1133+ (var_name, ) = m.groups()
1134+ return NewsYears(var_name)
1135
1136 class NewsCategories(template.Node):
1137 def __init__(self, var_name):
1138
1139=== modified file 'news/urls.py'
1140--- news/urls.py 2009-03-23 20:34:20 +0000
1141+++ news/urls.py 2010-10-30 22:51:06 +0000
1142@@ -6,18 +6,18 @@
1143 url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$',
1144 view=news_views.post_detail,
1145 name='news_detail'),
1146- #
1147- # url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$',
1148- # view=news_views.post_archive_day,
1149- # name='news_archive_day'),
1150- #
1151- # url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$',
1152- # view=news_views.post_archive_month,
1153- # name='news_archive_month'),
1154- #
1155- # url(r'^(?P<year>\d{4})/$',
1156- # view=news_views.post_archive_year,
1157- # name='news_archive_year'),
1158+
1159+ url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$',
1160+ view=news_views.post_archive_day,
1161+ name='news_archive_day'),
1162+
1163+ url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$',
1164+ view=news_views.post_archive_month,
1165+ name='news_archive_month'),
1166+
1167+ url(r'^(?P<year>\d{4})/$',
1168+ view=news_views.post_archive_year,
1169+ name='news_archive_year'),
1170
1171 # url(r'^categories/(?P<slug>[-\w]+)/$',
1172 # view=news_views.category_detail,
1173
1174=== modified file 'news/views.py'
1175--- news/views.py 2009-03-23 20:34:20 +0000
1176+++ news/views.py 2010-10-30 22:51:06 +0000
1177@@ -13,7 +13,6 @@
1178 return list_detail.object_list(
1179 request,
1180 queryset = Post.objects.published(),
1181- paginate_by = 20,
1182 page = page,
1183 **kwargs
1184 )
1185
1186=== modified file 'pybb/feeds.py'
1187--- pybb/feeds.py 2009-04-08 18:21:36 +0000
1188+++ pybb/feeds.py 2010-10-30 22:51:06 +0000
1189@@ -1,8 +1,8 @@
1190 from django.contrib.syndication.feeds import Feed
1191-from django.utils.feedgenerator import Atom1Feed
1192 from django.core.urlresolvers import reverse
1193 from django.utils.translation import ugettext_lazy as _
1194 from django.core.exceptions import ObjectDoesNotExist
1195+from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
1196
1197 from pybb.models import Post, Topic, Forum
1198
1199@@ -27,10 +27,10 @@
1200 else:
1201 return self.items_for_object(obj)
1202
1203- def link(self,obj):
1204+ def link(self, obj):
1205 if obj == self.all_objects:
1206 return reverse('pybb_index')
1207- return reverse('pybb_forum', args=(obj.pk,))
1208+ return "/ewfwevw%s" % reverse('pybb_forum', args=(obj.pk,))
1209
1210 def get_object(self,bits):
1211 """
1212@@ -46,12 +46,15 @@
1213 ##########################
1214 # Individual items below #
1215 ##########################
1216- def item_guid(self, obj):
1217+ def item_id(self, obj):
1218 return str(obj.id)
1219
1220 def item_pubdate(self, obj):
1221 return obj.created
1222-
1223+
1224+ def item_links(self, item):
1225+ return [{'href': item.get_absolute_url()}, ]
1226+
1227
1228 class LastPosts(PybbFeed):
1229 all_title = _('Latest posts on all forums')
1230@@ -66,6 +69,13 @@
1231 def items_for_object(self,obj):
1232 return Post.objects.filter( topic__forum = obj ).order_by('-created')[:15]
1233
1234+ def item_author_name(self, item):
1235+ """
1236+ Takes the object returned by get_object and returns the feeds's
1237+ auhor's name as a Python string
1238+ """
1239+ return item.user.username
1240+
1241
1242 class LastTopics(PybbFeed):
1243 all_title = _('Latest topics on all forums')
1244@@ -80,3 +90,10 @@
1245 def items_for_object(self,obj):
1246 return Topic.objects.filter( forum = obj ).order_by('-created')[:15]
1247
1248+ def item_author_name(self, item):
1249+ """
1250+ Takes the object returned by get_object and returns the feeds's
1251+ auhor's name as a Python string
1252+ """
1253+ return item.user.username
1254+
1255
1256=== modified file 'pybb/forms.py'
1257--- pybb/forms.py 2009-04-10 11:35:06 +0000
1258+++ pybb/forms.py 2010-10-30 22:51:06 +0000
1259@@ -10,13 +10,15 @@
1260 from pybb.models import Topic, Post, PrivateMessage, Attachment
1261 from pybb import settings as pybb_settings
1262
1263+from notification import models as notification
1264+
1265 class AddPostForm(forms.ModelForm):
1266 name = forms.CharField(label=_('Subject'))
1267 attachment = forms.FileField(label=_('Attachment'), required=False)
1268
1269 class Meta:
1270 model = Post
1271- fields = ['body']
1272+ fields = ['body', 'markup',]
1273
1274 def __init__(self, *args, **kwargs):
1275 self.user = kwargs.pop('user', None)
1276@@ -25,7 +27,7 @@
1277 self.ip = kwargs.pop('ip', None)
1278 super(AddPostForm, self).__init__(*args, **kwargs)
1279
1280- self.fields.keyOrder = ['name', 'body', 'attachment']
1281+ self.fields.keyOrder = ['name', 'body', 'markup', 'attachment']
1282
1283 if self.topic:
1284 self.fields['name'].widget = forms.HiddenInput()
1285@@ -47,20 +49,29 @@
1286
1287 def save(self):
1288 if self.forum:
1289+ topic_is_new = True
1290 topic = Topic(forum=self.forum,
1291 user=self.user,
1292 name=self.cleaned_data['name'])
1293 topic.save()
1294 else:
1295+ topic_is_new = False
1296 topic = self.topic
1297
1298 post = Post(topic=topic, user=self.user, user_ip=self.ip,
1299- markup="markdown",
1300+ markup=self.cleaned_data['markup'],
1301 body=self.cleaned_data['body'])
1302 post.save()
1303
1304 if pybb_settings.ATTACHMENT_ENABLE:
1305 self.save_attachment(post, self.cleaned_data['attachment'])
1306+
1307+ if topic_is_new:
1308+ notification.send(User.objects.all(), "forum_new_topic",
1309+ {'topic': topic, 'post':post, 'user':topic.user})
1310+ else:
1311+ notification.send(self.topic.subscribers.all(), "forum_new_post",
1312+ {'post':post, 'topic':topic, 'user':post.user})
1313 return post
1314
1315
1316
1317=== modified file 'pybb/management/__init__.py'
1318--- pybb/management/__init__.py 2009-02-25 16:55:36 +0000
1319+++ pybb/management/__init__.py 2010-10-30 22:51:06 +0000
1320@@ -0,0 +1,1 @@
1321+import pybb_notifications
1322
1323=== added file 'pybb/management/pybb_notifications.py'
1324--- pybb/management/pybb_notifications.py 1970-01-01 00:00:00 +0000
1325+++ pybb/management/pybb_notifications.py 2010-10-30 22:51:06 +0000
1326@@ -0,0 +1,20 @@
1327+from django.db.models import signals
1328+
1329+from django.utils.translation import ugettext_noop as _
1330+
1331+try:
1332+ from notification import models as notification
1333+
1334+ def create_notice_types(app, created_models, verbosity, **kwargs):
1335+ notification.create_notice_type("forum_new_topic",
1336+ _("Forum New Topic"),
1337+ _("a new topic has been added to the forum"),
1338+ default=1)
1339+ notification.create_notice_type("forum_new_post",
1340+ _("Forum New Post"),
1341+ _("a new comment has been posted to a topic you observe"))
1342+
1343+ signals.post_syncdb.connect(create_notice_types,
1344+ sender=notification)
1345+except ImportError:
1346+ print "Skipping creation of NoticeTypes as notification app not found"
1347
1348=== modified file 'pybb/models.py'
1349--- pybb/models.py 2010-01-02 23:11:47 +0000
1350+++ pybb/models.py 2010-10-30 22:51:06 +0000
1351@@ -18,9 +18,15 @@
1352 if settings.USE_SPHINX:
1353 from djangosphinx import SphinxSearch
1354
1355+try:
1356+ from notification import models as notification
1357+ from django.db.models import signals
1358+except ImportError:
1359+ notification = None
1360+
1361 MARKUP_CHOICES = (
1362 ('markdown', 'markdown'),
1363- # ('bbcode', 'bbcode'),
1364+ ('bbcode', 'bbcode'),
1365 )
1366
1367
1368@@ -127,10 +133,12 @@
1369 return reverse('pybb_topic', args=[self.id])
1370
1371 def save(self, *args, **kwargs):
1372- if self.id is None:
1373+ new = self.id is None
1374+ if new:
1375 self.created = datetime.now()
1376 super(Topic, self).save(*args, **kwargs)
1377
1378+
1379 def update_read(self, user):
1380 read, new = Read.objects.get_or_create(user=user, topic=self)
1381 if not new:
1382@@ -207,6 +215,7 @@
1383 def save(self, *args, **kwargs):
1384 if self.created is None:
1385 self.created = datetime.now()
1386+
1387 self.render()
1388
1389 new = self.id is None
1390@@ -339,5 +348,8 @@
1391 self.path)
1392
1393
1394+#if notification is not None:
1395+# signals.post_save.connect(notification.handle_observations, sender=Post)
1396+
1397 from pybb import signals
1398 signals.setup_signals()
1399
1400=== modified file 'pybb/templatetags/pybb_extras.py'
1401--- pybb/templatetags/pybb_extras.py 2009-12-06 09:53:08 +0000
1402+++ pybb/templatetags/pybb_extras.py 2010-10-30 22:51:06 +0000
1403@@ -1,16 +1,21 @@
1404+# coding=UTF-8
1405+
1406 from datetime import datetime, timedelta
1407+import re
1408+from pprint import pprint
1409
1410 from django import template
1411 from django.core.urlresolvers import reverse
1412 from django.utils.safestring import mark_safe
1413 from django.template import RequestContext
1414+from django.template.defaultfilters import stringfilter
1415 from django.utils.encoding import smart_unicode
1416 from django.db import settings
1417 from django.utils.html import escape
1418 from django.utils.translation import ugettext as _
1419 from django.utils import dateformat
1420
1421-from pybb.models import Forum, Topic, Read, PrivateMessage
1422+from pybb.models import Post, Forum, Topic, Read, PrivateMessage
1423 from pybb.unread import cache_unreads
1424 from pybb import settings as pybb_settings
1425
1426@@ -73,6 +78,13 @@
1427 'label': label,
1428 }
1429
1430+@register.inclusion_tag('pybb/last_posts.html', takes_context=True)
1431+def pybb_last_posts(context, number = 5):
1432+ last_posts = Post.objects.order_by('-created').select_related()[:5]
1433+ return {
1434+ 'posts': last_posts,
1435+ 'user': context['user'],
1436+ }
1437
1438 @register.simple_tag
1439 def pybb_link(object, anchor=u''):
1440@@ -179,3 +191,122 @@
1441 @register.filter
1442 def pybb_unreads(qs, user):
1443 return cache_unreads(qs, user)
1444+
1445+@register.filter
1446+@stringfilter
1447+def pybb_cut_string(value, arg):
1448+ if len(value) > arg:
1449+ return value[0:arg-3] + "..."
1450+ else:
1451+ return value
1452+
1453+@register.filter
1454+@stringfilter
1455+def pybb_output_bbcode(post):
1456+ """
1457+ post = post.replace('[b]', '<span class="bold">')
1458+ post = post.replace('[i]', '<span class="italic">')
1459+ post = post.relpace('[u]', '<span class="underline">')
1460+
1461+ post = post.replace('[/b]', '</span>')
1462+ post = post.replace('[/i]', '</span>')
1463+ post = post.replace('[/u]', '</span>')
1464+ """
1465+ return pprint(post)
1466+
1467+@register.simple_tag
1468+def pybb_render_post(post, mode='html'):
1469+ """
1470+ Process post contents and replace special tags with human readeable messages.
1471+
1472+ Arguments:
1473+ post - the ``Post`` instance
1474+ mode - "html" or "text". Control which field to use ``body_html`` or ``body_text``
1475+
1476+ Currently following tags are supported:
1477+
1478+ @@@AUTOJOIN-(SECONDS)@@@ - autojoin message
1479+
1480+ """
1481+
1482+ def render_autojoin_message(match):
1483+ time_diff = int(match.group(1)) / 60
1484+
1485+ join_message = ungettext(u"Added after %s minute",
1486+ u"Added after %s minutes",
1487+ time_diff)
1488+ join_message %= time_diff
1489+
1490+ if mode == 'html':
1491+ return u'<div class="autojoin-message">%s</div>' % join_message
1492+ else:
1493+ return join_message
1494+
1495+
1496+ body = getattr(post, 'body_%s' % mode)
1497+ re_tag = re.compile(r'@@@AUTOJOIN-(\d+)@@@')
1498+ return re_tag.sub(render_autojoin_message, body)
1499+
1500+"""
1501+Spielwiese, Playground, Cour de récréati ;)
1502+"""
1503+
1504+@register.filter
1505+@stringfilter
1506+def pybb_trim_string(value, arg):
1507+ """
1508+ Mit "arg" ist es moeglich 1 oder mehr Werte der Funtion zu Uebergeben. Wenn
1509+ mehr als 1 Wert genutzt werden soll wird es durch "-" getrennt. Jeder Wert
1510+ kann entweder die Beschraenkung fuer die Zeichen oder Woerter beinhalten.
1511+ Um das eindeutig zu identifizieren Wort "w" und Zeichen "z".
1512+ Beispiel:
1513+ 1. w:10 -> Auf 10 Worte beschraenken
1514+ 2. z:250 -> Auf 250 Zeichen beschraenken
1515+ 3. w:10-z:250 -> Auf 10 Worte und 250 Zeichen beschraenken
1516+
1517+ Beim spaeteren drueber nachdenken ist das mit den Worten eig. egal und
1518+ koennte wieder entfernt werden, aber vllt findet ja einer noch einen nutzen
1519+ dafuer ;)
1520+ """
1521+ _iWord = ""
1522+ _iSign = ""
1523+ _lArguments = arg.split("-")
1524+ _sOption = _lArguments[0].split(":")[0]
1525+ _iValue = _lArguments[0].split(":")[1]
1526+ if len(_lArguments) == 1:
1527+ if _sOption == "w":
1528+ _iWord = int(_iValue)
1529+ elif _sOption == "z":
1530+ _iSign = int(_iValue)
1531+ else:
1532+ pass
1533+ elif len(_lArguments) == 2:
1534+ if _sOption == "w":
1535+ _iWord = int(_iValue)
1536+ _iSign = int(_lArguments[1].split(":")[1])
1537+ elif _sOption == "z":
1538+ _iSign = int(_iValue)
1539+ _iWord = int(_lArguments[1].split(":")[1])
1540+ else:
1541+ pass
1542+ else:
1543+ pass
1544+ if _iWord != "" or _iSign != "":
1545+ _iWordCount = int(len(value.split(" ")))
1546+ _iSignCount = int(len(value))
1547+ """
1548+ Hier waere noch die Ueberlegung wenn 2 Werte gesetzt das man dann
1549+ wirklich nur ganze Woerter anzeigen laesst ohne sie zu beschneiden
1550+ """
1551+ if _iWord != "" and _iSign != "" and _iSignCount >= _iSign:
1552+ return value[0:_iSign] + "..."
1553+ elif _iWord != "" and _iSign == "" and _iWordCount >= _iWord:
1554+ return ' '.join(value.split(" ")[0:_iWord]) + "..."
1555+ elif _iWord == "" and _iSign != "" and _iSignCount >= _iSign:
1556+ return value[0:_iSign] + "..."
1557+ else:
1558+ return value
1559+ # return " " + str(len(value)) + " " + str(len(value.split(" "))) + " " + str(arg) + " " + str(_iWord) + ":" + str(_iWordCount) + " " + str(_iSign) + ":" + str(_iSignCount)
1560+ else:
1561+ return value
1562+
1563
1564=== modified file 'pybb/urls.py'
1565--- pybb/urls.py 2009-03-17 15:02:13 +0000
1566+++ pybb/urls.py 2010-10-30 22:51:06 +0000
1567@@ -37,4 +37,8 @@
1568
1569 # API
1570 url('^api/post_ajax_preview/$', views.post_ajax_preview, name='pybb_post_ajax_preview'),
1571+
1572+ # Subsciption
1573+ url('^topic/(?P<topic_id>\d+)/subscribe/$', views.add_subscription, name='pybb_add_subscription'),
1574+ url('^topic/(?P<topic_id>\d+)/unsubscribe/$', views.delete_subscription, name='pybb_delete_subscription'),
1575 )
1576
1577=== modified file 'pybb/util.py'
1578--- pybb/util.py 2009-02-28 12:03:41 +0000
1579+++ pybb/util.py 2010-10-30 22:51:06 +0000
1580@@ -173,14 +173,12 @@
1581 text = user.username + " wrote:\n" + text
1582
1583 # if markup == 'markdown':
1584- if markup:
1585+ if markup == 'markdown':
1586 return '>'+text.replace('\n','\n>').replace('\r','\n>') + '\n'
1587+ elif markup == 'bbcode':
1588+ return '[quote]\n%s\n[/quote]\n' % text
1589 else:
1590 return text
1591- # elif markup == 'bbcode':
1592- # return '[quote]\n%s\n[/quote]\n' % text
1593- # else:
1594- # return text
1595
1596
1597 def absolute_url(path):
1598
1599=== modified file 'pybb/views.py'
1600--- pybb/views.py 2009-06-08 13:26:43 +0000
1601+++ pybb/views.py 2010-10-30 22:51:06 +0000
1602@@ -18,6 +18,11 @@
1603 from pybb import settings as pybb_settings
1604 from pybb.orm import load_related
1605
1606+try:
1607+ from notification import models as notification
1608+except ImportError:
1609+ notification = None
1610+
1611 def index_ctx(request):
1612 quick = {'posts': Post.objects.count(),
1613 'topics': Topic.objects.count(),
1614@@ -165,6 +170,8 @@
1615
1616 if form.is_valid():
1617 post = form.save();
1618+ if not topic:
1619+ post.topic.subscribers.add(request.user)
1620 return HttpResponseRedirect(post.get_absolute_url())
1621
1622 if topic:
1623
1624=== modified file 'settings.py'
1625--- settings.py 2010-09-26 13:30:30 +0000
1626+++ settings.py 2010-10-30 22:51:06 +0000
1627@@ -199,6 +199,7 @@
1628 'widelands.wlevents',
1629 'widelands.wlmaps',
1630 'widelands.wlscreens',
1631+ 'widelands.wlggz',
1632
1633 # Modified 3rd party apps
1634 'widelands.wiki', # This is based on wikiapp, but has some local modifications
1635
1636=== modified file 'templates/django_messages/compose.html'
1637--- templates/django_messages/compose.html 2010-03-14 14:13:24 +0000
1638+++ templates/django_messages/compose.html 2010-10-30 22:51:06 +0000
1639@@ -10,28 +10,23 @@
1640 {% include "django_messages/inlines/navigation.html" %}
1641 <br />
1642 <br />
1643-<div class="message_item">
1644+<div class="box_item_model fixed_site border">
1645 <h3 class="title">{% trans "Compose Message"%}</h3>
1646- <div class="content">
1647- <form action="" method="post">
1648- <table class="text" width="100%" cellspacing="1">
1649- {% for field in form %}
1650- <tr>
1651- <td {% ifequal field.name "body" %}valign="top" {% endifequal %}width="80" class="{% cycle "odd" "even" %}">{{ field.label_tag }}:</td>
1652- <td class="{% cycle "odd" "even" %}">{{ field }}</td>
1653- <td width="1%" class="{% cycle "odd" "even" %}"></td>
1654- </tr>
1655- {% endfor %}
1656- </table>
1657- </div>
1658- <table class="bottom_line" width="100%">
1659- <tr>
1660- <td class="admin">
1661- <input type="submit" value="{% trans "Send" %} &raquo;"/>
1662- </td>
1663- <tr>
1664- </table>
1665- </form>
1666+ <form action="" method="post">
1667+ <div class="content">
1668+ <table class="text full_site" cellspacing="1">
1669+ {% for field in form %}
1670+ <tr>
1671+ <td width="80" class="{% cycle "odd" "even" %}{% ifequal field.name "body" %} show_left{% endifequal %}">{{ field.label_tag }}:</td>
1672+ <td class="{% cycle "odd" "even" %}">{{ field }}</td>
1673+ </tr>
1674+ {% endfor %}
1675+ </table>
1676+ </div>
1677+ <div class="info_line show_center">
1678+ <input type="submit" value="{% trans "Send" %} &raquo;"/>
1679+ </div>
1680+ </form>
1681 </div>
1682
1683 {% endblock %}
1684
1685=== modified file 'templates/django_messages/inbox.html'
1686--- templates/django_messages/inbox.html 2010-03-14 14:13:24 +0000
1687+++ templates/django_messages/inbox.html 2010-10-30 22:51:06 +0000
1688@@ -7,15 +7,17 @@
1689
1690 {% block content %}
1691 {% include "django_messages/inlines/navigation.html" %}
1692-
1693- <h1>{% trans "Inbox" %}</h1>
1694+ <br />
1695+ <br />
1696+ <div class="box_item_model border">
1697+ <h3 class="title">{% trans "Inbox" %}</h3>
1698 <table class="messages" cellspacing="1">
1699 <thead>
1700 <tr>
1701- <th>{% trans "Sender" %}</th>
1702- <th>{% trans "Subject" %}</th>
1703- <th>{% trans "Received" %}</th>
1704- <th>{% trans "Action" %}</th>
1705+ <td>{% trans "Sender" %}</td>
1706+ <td>{% trans "Subject" %}</td>
1707+ <td>{% trans "Received" %}</td>
1708+ <td>{% trans "Action" %}</td>
1709 </tr>
1710 </thead>
1711 <tbody>
1712@@ -24,4 +26,5 @@
1713 {% endfor %}
1714 </tbody>
1715 </table>
1716+ </div>
1717 {% endblock %}
1718
1719=== modified file 'templates/django_messages/inlines/navigation.html'
1720--- templates/django_messages/inlines/navigation.html 2009-03-15 20:26:08 +0000
1721+++ templates/django_messages/inlines/navigation.html 2010-10-30 22:51:06 +0000
1722@@ -1,19 +1,19 @@
1723 {% load i18n %}
1724
1725+{% if user.is_authenticated %}
1726 <div>
1727- <table width="100%">
1728- <tr>
1729- <td align="left">
1730- <a href="{% url profile_view %} ">{% trans "Profile" %}</a>
1731- | <a href="{% url notification_notices %} ">{% trans "Notifications" %}</a>
1732- </td>
1733- <td align="right" style="table-layout: fixed;">
1734- <a href="{% url messages_inbox %} ">{% trans "Inbox" %}</a>
1735- | <a href="{% url messages_outbox %} ">{% trans "Sent Messages" %}</a>
1736- | <a href="{% url messages_compose %} ">{% trans "New Message" %}</a>
1737- | <a href="{% url messages_trash %} ">{% trans "Message Trash" %}</a>
1738- </td>
1739- </tr>
1740- </table>
1741+ <table width="100%">
1742+ <tr>
1743+ <td width="">&nbsp;
1744+ </td>
1745+ <td width="370" align="right" style="table-layout: fixed; background-image: url(http://wl-testbed.dyndns.org/wlmedia/img/background-4F4F4F.png);">
1746+ <a href="{% url messages_inbox %} ">{% trans "Inbox" %}</a>
1747+ | <a href="{% url messages_outbox %} ">{% trans "Sent Messages" %}</a>
1748+ | <a href="{% url messages_compose %} ">{% trans "New Message" %}</a>
1749+ | <a href="{% url messages_trash %} ">{% trans "Message Trash" %}</a>
1750+ </td>
1751+ </tr>
1752+ </table>
1753 </div>
1754+{% endif %}
1755
1756
1757=== modified file 'templates/django_messages/outbox.html'
1758--- templates/django_messages/outbox.html 2010-03-14 14:13:24 +0000
1759+++ templates/django_messages/outbox.html 2010-10-30 22:51:06 +0000
1760@@ -7,14 +7,17 @@
1761
1762 {% block content %}
1763 {% include "django_messages/inlines/navigation.html" %}
1764-<h1>{% trans "Sent Messages" %}</h1>
1765+<br />
1766+<br />
1767+<div class="box_item_model border">
1768+<h3 class="title">{% trans "Sent Messages" %}</h3>
1769 <table class="messages" cellspacing="1">
1770 <thead>
1771 <tr>
1772- <th>{% trans "Recipient" %}</th>
1773- <th>{% trans "Subject" %}</th>
1774- <th>{% trans "Sent" %}</th>
1775- <th>{% trans "Action" %}</th>
1776+ <td>{% trans "Recipient" %}</td>
1777+ <td>{% trans "Subject" %}</td>
1778+ <td>{% trans "Sent" %}</td>
1779+ <td>{% trans "Action" %}</td>
1780 </tr>
1781 </thead>
1782 <tbody>
1783@@ -23,4 +26,5 @@
1784 {% endfor %}
1785 </tbody>
1786 </table>
1787+</div>
1788 {% endblock %}
1789
1790=== modified file 'templates/django_messages/trash.html'
1791--- templates/django_messages/trash.html 2010-03-14 14:13:24 +0000
1792+++ templates/django_messages/trash.html 2010-10-30 22:51:06 +0000
1793@@ -7,22 +7,33 @@
1794
1795 {% block content %}
1796 {% include "django_messages/inlines/navigation.html" %}
1797-<h1>{% trans "Deleted Messages" %}</h1>
1798-<table class="messages" cellspacing="1">
1799- <thead>
1800- <tr>
1801- <th>{% trans "Sender" %}</th>
1802- <th>{% trans "Subject" %}</th>
1803- <th>{% trans "Date" %}</th>
1804- <th>{% trans "Action" %}</th>
1805- </tr>
1806- </thead>
1807- <tbody>
1808+<br />
1809+<br />
1810+<div class="box_item_model border">
1811+ <h3 class="title">{% trans "Deleted Messages" %}</h3>
1812+ <table class="messages" cellspacing="1">
1813+ <thead>
1814+ <tr>
1815+ <td>{% trans "Sender" %}</td>
1816+ <td>{% trans "Subject" %}</td>
1817+ <td>{% trans "Date" %}</td>
1818+ <td>{% trans "Action" %}</td>
1819+ </tr>
1820+ </thead>
1821+ <tbody>
1822 {% for message in message_list %}
1823 {% include "django_messages/inlines/message_row.html" %}
1824 {% endfor %}
1825- </tbody>
1826-</table>
1827+ </tbody>
1828+ </table>
1829+</div>
1830 <br />
1831-<p>{% trans "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." %}</p>
1832+<div class="box_item_model border">
1833+ <div class="info_line show_center errormessage">
1834+ <br />
1835+ {% trans "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." %}
1836+ <br />
1837+ <br />
1838+ </div>
1839+</div>
1840 {% endblock %}
1841
1842=== modified file 'templates/mainpage.html'
1843--- templates/mainpage.html 2009-05-25 10:47:04 +0000
1844+++ templates/mainpage.html 2010-10-30 22:51:06 +0000
1845@@ -16,58 +16,54 @@
1846 {{ block.super}}{% endblock %}
1847 {% block content %}
1848
1849-
1850-<div class="blockContent">
1851- <center>
1852- <h1>Welcome to Widelands.org</h1>
1853- <h3>Home of the free realtime strategy game and its community</h3>
1854- <p>
1855- <br/>
1856- <img src='{{ MEDIA_URL }}/img/HomepageSplash.jpg' title='Widelands' alt='Widelands-Screenshot' />
1857- <br/><br/>
1858- </p>
1859- </center>
1860+<div class="block_center">
1861+ <h1>Welcome to Widelands.org</h1>
1862+ <h3>Home of the free realtime strategy game and its community</h3>
1863+ <br/>
1864+ <img src='{{ MEDIA_URL }}/img/HomepageSplash.jpg' title='Widelands' alt='Widelands-Screenshot' />
1865+ <br/>
1866+ <br/>
1867 </div>
1868
1869 <!-- Begin of text -->
1870 <div class="itemText">
1871- <p>
1872- Widelands is an open source (GPLed) real-time strategy
1873- game. It is built upon the <a
1874- href='http://www.libsdl.org'>SDL</a> and other open
1875- source libraries and is (and will always be) under heavy development. If
1876- you knew Settlers I &amp; II&#8482; (© Bluebyte), then you
1877- already have a rough idea what Widelands is all about because
1878- widelands is heavily inspired by those two games.
1879- </p>
1880- <p>
1881- You can find detailed information on the game in our <a
1882- href="/wiki">Wiki</a>. I you want to get a quick Overview, go to
1883- the <a title="General Info" href="{% url wiki_article "GeneralInfo" %}">General Info</a> page.
1884- </p>
1885-
1886- <p>
1887- You can download the game on the <a href="{% url wiki_article "DownloadPage" %}">DownloadPage</a>. You can also find
1888- installation instructions and various troubleshooting hints
1889- there.
1890- </p>
1891-
1892- <p>
1893- You are also invited to visit the <a
1894- href="{% url pybb_index %}">Forums</a>:
1895- chat with the community about the game, find playing mates for multiplayer,
1896- help translating, discuss graphics, music and much more.
1897- </p>
1898+ <p>
1899+ Widelands is an open source (GPLed) real-time strategy game.
1900+ It is built upon the <a href='http://www.libsdl.org'>SDL</a> and other
1901+ open source libraries and is (and will always be) under heavy
1902+ development. If you knew Settlers I &amp; II&#8482; (© Bluebyte), then
1903+ you already have a rough idea what Widelands is all about because
1904+ widelands is heavily inspired by those two games.
1905+ </p>
1906+ <p>
1907+ You can find detailed information on the game in our
1908+ <a href="/wiki">Wiki</a>. I you want to get a quick Overview, go to the
1909+ <a title="General Info" href="{% url wiki_article "GeneralInfo" %}">General Info</a>
1910+ page.
1911+ </p>
1912+ <p>
1913+ You can download the game on the
1914+ <a href="{% url wiki_article "DownloadPage" %}">DownloadPage</a>. You
1915+ can also find installation instructions and various troubleshooting
1916+ hints there.
1917+ </p>
1918+ <p>
1919+ You are also invited to visit the <a href="{% url pybb_index %}">Forums</a>:
1920+ chat with the community about the game, find playing mates for
1921+ multiplayer, help translating, discuss graphics, music and much more.
1922+ </p>
1923 </div>
1924
1925 {% get_latest_posts 3 as latest_posts_list %}
1926 {% if latest_posts_list %}
1927- <h2><a href="{% url news_index %}">Latest news:</a></h2>
1928- {% for object in latest_posts_list %}
1929- {% include "news/inlines/post_detail.html" %}
1930- <br />
1931- {% endfor %}
1932- <a href="{% url news_index %}">News archive</a>
1933+<h2>
1934+ <a href="{% url news_index %}">Latest news:</a>
1935+</h2>
1936+ {% for object in latest_posts_list %}
1937+ {% include "news/inlines/post_detail.html" %}
1938+ <br />
1939+ {% endfor %}
1940+ <a href="{% url news_index %}">News archive</a>
1941 {% endif %}
1942
1943 {% endblock %}
1944
1945=== modified file 'templates/mainpage/online_users.html'
1946--- templates/mainpage/online_users.html 2009-03-15 17:19:34 +0000
1947+++ templates/mainpage/online_users.html 2010-10-30 22:51:06 +0000
1948@@ -1,9 +1,12 @@
1949 {% load wlprofile %}
1950
1951 {% if users %}
1952- <ul>
1953- {% for user in users %}
1954- <li><a href="{% url profile_view user %}">{{user.username}}</a></li>
1955- {% endfor %}
1956- </ul>
1957+ <h3 class="box_title">Currently online</h3>
1958+ <div class="box_content">
1959+ <ul>
1960+ {% for user in users %}
1961+ <li><a href="{% url profile_view user %}">{{user.username}}</a></li>
1962+ {% endfor %}
1963+ </ul>
1964+ </div>
1965 {% endif %}
1966
1967=== modified file 'templates/navigation.html'
1968--- templates/navigation.html 2010-05-13 09:45:42 +0000
1969+++ templates/navigation.html 2010-10-30 22:51:06 +0000
1970@@ -38,7 +38,9 @@
1971 <li><a href="{% url pybb_forum 12 %}">Translations &amp; Internationalization</a></li>
1972 </ul>
1973 </li>
1974-<li><a href="{% url webchat_index %}">IRC Chat</a></li>
1975+<li>
1976+ <a href="{% url webchat_index %}">IRC Chat</a>
1977+</li>
1978 <li>
1979 <a href="{% url wiki_article "DevelopmentPage" %}">Development</a>
1980 <ul>
1981@@ -50,4 +52,16 @@
1982 <li><a href="https://bugs.launchpad.net/widelands-website">Website Bugtracker</a></li>
1983 </ul>
1984 </li>
1985-
1986+ <!--
1987+<li>
1988+ <a href="{% url wlggz_main %}">Online Gaming</a>
1989+ <ul>
1990+ <li><a href="{% url wlggz_ranking %}">GGZ Ranking</a></li>
1991+ <li><a href="{% url wlggz_matches %}">GGZ Matches</a></li>
1992+ {% if user.is_authenticated %}
1993+ <li><a href="{% url wlggz_userstats %}">GGZ Status</a></li>
1994+ {% endif %}
1995+ <li><a href="{% url wiki_article "InternetGaming" %}">HowTo</a></li>
1996+ </ul>
1997+</li>
1998+ -->
1999
2000=== modified file 'templates/news/inlines/post_detail.html'
2001--- templates/news/inlines/post_detail.html 2010-01-02 15:32:46 +0000
2002+++ templates/news/inlines/post_detail.html 2010-10-30 22:51:06 +0000
2003@@ -6,50 +6,52 @@
2004 {% endcomment %}
2005 {% load threadedcommentstags %}
2006 {% load news wl_markdown tagging_tags wlprofile custom_date %}
2007-
2008-
2009- <div class="news_item">
2010- <h3 class="title">{# TODO: categories! #} {{ object.title }}</h3>
2011- <div class="info_line">
2012- <span class="news_poster">Posted by {{object.author|user_link}}</span>
2013- <span class="news_post_date">on {{ object.publish|custom_date:user }}</span>
2014- </div>
2015- <div class="content">
2016- {% if object.has_image %}
2017- <span class="news_image"><img src='{{MEDIA_URL}}{{ object.image }}' alt='{{ object.image_alt }}' /></span>
2018- <div class="text" style='min-height: {{ object.image.height }}px;'>
2019- {% else %}
2020- <div class="text">
2021- {% endif %}
2022- {{ object.body|wl_markdown:"safe" }}
2023- </div>
2024- </div>
2025-
2026- <table class="bottom_line" width="100%">
2027- <tr>
2028- {% get_comment_count for object as ccount %}
2029- <td class="comments">
2030- <a href="{{ object.get_absolute_url }}">{{ ccount }} comments</a>
2031- </td>
2032-
2033- <td class="admin">
2034- {% if perms.news %}
2035- {% if perms.news.post_can_add %}<a href="/admin/news/post/add/">Add New Post</a>{% endif %}
2036- {% if perms.news.post_can_edit %}| <a href="/admin/news/post/{{object.id}}/">Edit</a>{% endif %}
2037- {% if perms.news.post_can_delete %}| <a href="/admin/news/post/{{object.id}}/delete/">Delete</a>{% endif %}
2038- {% endif %}
2039- </td>
2040-
2041- {% tags_for_object object as tag_list %}
2042- <td class="tags">
2043- {% if tag_list %}
2044- <strong>Tags:</strong>
2045- {% for tag in tag_list %}
2046- {{ tag }}{% if not forloop.last %}, {% endif %}
2047- {% endfor %}
2048- {% endif %}
2049- </td>
2050- </tr>
2051-
2052- </table>
2053- </div>
2054+ <div class="box_item_model border">
2055+ <h3 class="title">{# TODO: categories! #} {{ object.title }}</h3>
2056+ <div class="info_line">
2057+ <span class="news_poster">Posted by {{object.author|user_link}}</span>
2058+ <span class="news_post_date">on {{ object.publish|custom_date:user }}</span>
2059+ </div>
2060+ <div class="content">
2061+{% if object.has_image %}
2062+ <span class="news_image"><img src='{{MEDIA_URL}}{{ object.image }}' alt='{{ object.image_alt }}' /></span>
2063+ <div class="text" style='min-height: {{ object.image.height }}px;'>
2064+{% else %}
2065+ <div class="text">
2066+{% endif %}
2067+{{ object.body|wl_markdown:"safe" }}
2068+ </div>
2069+ </div>
2070+
2071+ <table class="info_line full_site">
2072+ <tr>
2073+{% get_comment_count for object as ccount %}
2074+ <td class="comments show_left">
2075+ <a href="{{ object.get_absolute_url }}">{{ ccount }} comments</a>
2076+ </td>
2077+ <td class="show_center">
2078+{% if perms.news %}
2079+ {% if perms.news.post_can_add %}
2080+ <a href="/admin/news/post/add/">Add New Post</a>
2081+ {% endif %}
2082+ {% if perms.news.post_can_edit %}
2083+ | <a href="/admin/news/post/{{object.id}}/">Edit</a>
2084+ {% endif %}
2085+ {% if perms.news.post_can_delete %}
2086+ | <a href="/admin/news/post/{{object.id}}/delete/">Delete</a>
2087+ {% endif %}
2088+{% endif %}
2089+ </td>
2090+{% tags_for_object object as tag_list %}
2091+ <td class="show_right">
2092+{% if tag_list %}
2093+ <strong>Tags:</strong>
2094+ {% for tag in tag_list %}
2095+ {{ tag }}
2096+ {% if not forloop.last %}, {% endif %}
2097+ {% endfor %}
2098+{% endif %}
2099+ </td>
2100+ </tr>
2101+ </table>
2102+ </div>
2103
2104=== modified file 'templates/news/post_archive_day.html'
2105--- templates/news/post_archive_day.html 2009-03-19 06:46:41 +0000
2106+++ templates/news/post_archive_day.html 2010-10-30 22:51:06 +0000
2107@@ -1,23 +1,29 @@
2108 {% extends "news/base_news.html" %}
2109 {% load custom_date %}
2110-
2111+{% load pagination_tags %}
2112 {% block title %}Post archive for {{ day|date:"d F Y" }}{% endblock %}
2113 {% block body_class %}{{ block.super }} post_archive_day{% endblock %}
2114
2115-
2116-{% block content_title %}
2117- <h2>Post archive for {{ day|date:"d F Y" }}</h2>
2118-{% endblock %}
2119-
2120-
2121 {% block content %}
2122- <div class="post_list">
2123- {% for post in object_list %}
2124- <div>
2125- <h3 class="title"><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h3>
2126- <p class="date">{{ post.publish|custom_date:user }}</p>
2127- <p class="tease">{{ post.tease }}</p>
2128+{% include "django_messages/inlines/navigation.html" %}
2129+<br />
2130+<br />
2131+<div class="muttis_liebling">
2132+ <div class="box_item_model even show_center">
2133+ <a href="{% url news_index %}{{ day|date:"Y" }}/{{ day|date:"m" }}">Archiv {{ day|date:"F" }}</a>
2134+ {% autopaginate object_list 10 %}
2135+ {% paginate %}
2136 </div>
2137+ <br />
2138+ {% for object in object_list %}
2139+ {% include "news/inlines/post_detail.html" %}
2140+ <br />
2141 {% endfor %}
2142- </div>
2143+ <br />
2144+ {% if page_obj.has_other_pages %}
2145+ <div class="box_item_model even show_center">
2146+ {% paginate %}
2147+ </div>
2148+ {% endif %}
2149+</div>
2150 {% endblock %}
2151
2152=== modified file 'templates/news/post_archive_month.html'
2153--- templates/news/post_archive_month.html 2009-03-23 17:44:44 +0000
2154+++ templates/news/post_archive_month.html 2010-10-30 22:51:06 +0000
2155@@ -1,22 +1,33 @@
2156 {% extends "news/base_news.html" %}
2157 {% load custom_date %}
2158-
2159+{% load news %}
2160+{% load pagination_tags %}
2161
2162 {% block title %}Post archive for {{ month|date:"F Y" }}{% endblock %}
2163 {% block body_class %}{{ block.super }} post_archive_month{% endblock %}
2164
2165-
2166-{% block content_title %}
2167- <h2>Post archive for {{ month|date:"F Y" }}</h2>
2168-{% endblock %}
2169-
2170-
2171 {% block content %}
2172- <div class="post_list">
2173+{% load markup %}
2174+{% include "django_messages/inlines/navigation.html" %}
2175+<br />
2176+<br />
2177+<div class="muttis_liebling">
2178+ <div class="box_item_model even show_center">
2179+ <a href="{% url news_index %}{{ month|date:"Y" }}">Archiv {{ month|date:"Y" }}</a>
2180+ {% for day in object_list %}
2181+ {% endfor %}
2182+ {% autopaginate object_list 10 %}
2183+ {% paginate %}
2184+ </div>
2185 <br />
2186 {% for object in object_list %}
2187- {% include "news/inlines/post_detail.html" %}
2188+ {% include "news/inlines/post_detail.html" %}
2189 <br />
2190 {% endfor %}
2191- </div>
2192+ {% if page_obj.has_other_pages %}
2193+ <div class="box_item_model even show_center">
2194+ {% paginate %}
2195+ </div>
2196+ {% endif %}
2197+</div>
2198 {% endblock %}
2199
2200=== modified file 'templates/news/post_archive_year.html'
2201--- templates/news/post_archive_year.html 2009-03-23 17:44:44 +0000
2202+++ templates/news/post_archive_year.html 2010-10-30 22:51:06 +0000
2203@@ -1,22 +1,37 @@
2204 {% extends "news/base_news.html" %}
2205 {% load custom_date %}
2206+{% load news %}
2207+{% load pagination_tags %}
2208
2209
2210 {% block title %}Post archive for {{ year }}{% endblock %}
2211 {% block body_class %}{{ block.super }} post_archive_year{% endblock %}
2212
2213-
2214-{% block content_title %}
2215- <h2>Post archive for {{ year }}</h2>
2216-{% endblock %}
2217-
2218-
2219 {% block content %}
2220 {% load markup %}
2221-
2222- <ul class="link_list">
2223+{% include "django_messages/inlines/navigation.html" %}
2224+<br />
2225+<br />
2226+<div class="muttis_liebling">
2227+ <div class="box_item_model even show_center">
2228+ <a href="/news/">News Archiv</a>
2229 {% for month in date_list %}
2230- <li><a href="{% url news_index %}{{ year }}/{{ month|date:"m" }}/">{{ month|date:"F" }}</a></li>
2231- {% endfor %}
2232- </ul>
2233+ | <a href="{% url news_index %}{{ year }}/{{ month|date:"m" }}/">{{ month|date:"F" }}</a>
2234+ {% endfor %}
2235+ <br />
2236+ {% autopaginate object_list 10 %}
2237+ {% paginate %}
2238+ </div>
2239+ <br />
2240+ {% for object in object_list %}
2241+ {% include "news/inlines/post_detail.html" %}
2242+ <br />
2243+ {% endfor %}
2244+ {% if page_obj.has_other_pages %}
2245+ <div class="box_item_model even show_center">
2246+ {% paginate %}
2247+ </div>
2248+ {% endif %}
2249+
2250+</div>
2251 {% endblock %}
2252
2253=== modified file 'templates/news/post_list.html'
2254--- templates/news/post_list.html 2009-03-23 17:44:44 +0000
2255+++ templates/news/post_list.html 2010-10-30 22:51:06 +0000
2256@@ -1,40 +1,34 @@
2257 {% extends "news/base_news.html" %}
2258
2259 {% load news %}
2260-
2261+{% load custom_date %}
2262+{% load pagination_tags %}
2263 {% block title %}Post archive - {{ block.super }}{% endblock %}
2264 {% block body_class %}{{ block.super }} post_list{% endblock %}
2265
2266-{% block content_title %}
2267- <h2>Post archive</h2>
2268-{% endblock %}
2269-
2270-
2271 {% block content %}
2272- <div class="post_list">
2273- <br />
2274+{% include "django_messages/inlines/navigation.html" %}
2275+<br />
2276+<br />
2277+<div class="">
2278+ {% get_news_years as news_years %}
2279+ <div class="box_item_model even show_center">
2280+ {% for muh in news_years %}
2281+ <a href="{% url news_index %}{{ muh.year }}" >{{ muh.year }}</a>
2282+ {% endfor %}
2283+ {% autopaginate object_list 10 %}
2284+ {% paginate %}
2285+ </div>
2286+ <br />
2287 {% for object in object_list %}
2288- {% include "news/inlines/post_detail.html" %}
2289- <br />
2290- {% comment %}
2291- <div>
2292- <h3 class="title"><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h3>
2293- <p class="date">{{ post.publish|date:"Y F d" }}</p>
2294- <p class="tease">{{ post.tease }}</p>
2295+ {% include "news/inlines/post_detail.html" %}
2296+ <br />
2297+ {% endfor %}
2298+ <br />
2299+ {% if page_obj.has_other_pages %}
2300+ <div class="box_item_model even show_center">
2301+ {% paginate %}
2302 </div>
2303- {%endcomment%}
2304- {% endfor %}
2305- </div>
2306-
2307- {% if is_paginated %}
2308- <p class="pagination">
2309- {% if has_next %}
2310- <a class="older" href="?page={{ next }}">Older</a>
2311- {% endif %}
2312- {% if has_next and has_previous %} | {% endif %}
2313- {% if has_previous %}
2314- <a class="newer" href="?page={{ previous }}">Newer</a>
2315- {% endif %}
2316- </p>
2317- {% endif %}
2318+ {% endif %}
2319+</div>
2320 {% endblock %}
2321
2322=== added directory 'templates/notification/forum_new_post'
2323=== added file 'templates/notification/forum_new_post/full.txt'
2324--- templates/notification/forum_new_post/full.txt 1970-01-01 00:00:00 +0000
2325+++ templates/notification/forum_new_post/full.txt 2010-10-30 22:51:06 +0000
2326@@ -0,0 +1,7 @@
2327+{% load i18n %}{% blocktrans with topic.get_absolute_url as topic_url %} A new forum post was added under topic "{{ topic }}" by "{{ user }}".
2328+
2329+http://{{ current_site }}{{ topic_url }}
2330+{% endblocktrans %}
2331+{{ topic }}:
2332+
2333+{{ post.body_text }}
2334
2335=== added file 'templates/notification/forum_new_post/notice.html'
2336--- templates/notification/forum_new_post/notice.html 1970-01-01 00:00:00 +0000
2337+++ templates/notification/forum_new_post/notice.html 2010-10-30 22:51:06 +0000
2338@@ -0,0 +1,2 @@
2339+{% load i18n %}{% url profile_view user.username as user_url %}
2340+{% blocktrans with topic.get_absolute_url as topic_url %}A new forum post has be created in forum under topic <a href="{{ topic_url }}">{{ topic }}</a> by <a href="{{ user_url }}">{{ user }}</a>.{% endblocktrans %}
2341
2342=== added directory 'templates/notification/forum_new_topic'
2343=== added file 'templates/notification/forum_new_topic/full.txt'
2344--- templates/notification/forum_new_topic/full.txt 1970-01-01 00:00:00 +0000
2345+++ templates/notification/forum_new_topic/full.txt 2010-10-30 22:51:06 +0000
2346@@ -0,0 +1,7 @@
2347+{% load i18n %}{% blocktrans with topic.get_absolute_url as topic_url %}The Forum topic {{ topic }} has been created by {{ user }}.
2348+
2349+http://{{ current_site }}{{ topic_url }}
2350+{% endblocktrans %}
2351+{{ topic }}:
2352+
2353+{{ post.body_text }}
2354
2355=== added file 'templates/notification/forum_new_topic/notice.html'
2356--- templates/notification/forum_new_topic/notice.html 1970-01-01 00:00:00 +0000
2357+++ templates/notification/forum_new_topic/notice.html 2010-10-30 22:51:06 +0000
2358@@ -0,0 +1,2 @@
2359+{% load i18n %}{% url profile_view user.username as user_url %}
2360+{% blocktrans with topic.get_absolute_url as topic_url %}A new forum topic has be created under <a href="{{ topic_url }}">{{ topic }}</a> by <a href="{{ user_url }}">{{ user }}</a>.{% endblocktrans %}
2361
2362=== modified file 'templates/notification/notices.html'
2363--- templates/notification/notices.html 2010-01-02 19:55:10 +0000
2364+++ templates/notification/notices.html 2010-10-30 22:51:06 +0000
2365@@ -10,64 +10,82 @@
2366
2367 {% block extra_head %}
2368 <link rel="alternate" type="application/atom+xml" title="Notices Feed" href="{% url notification_feed_for_user %}" />
2369+ <link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}/css/notice.css" />{{ block.super}}
2370 {% endblock %}
2371
2372 {% block content %}
2373- {% include "messages/inlines/navigation.html" %}
2374-
2375- <h1>{% trans "Notices" %}</h1>
2376+ {% include "django_messages/inlines/navigation.html" %}
2377+<br />
2378+<br />
2379+<div class="box_item_model full_site border" width="100%">
2380+ <h3 class="title">{% trans "Notices" %}</h3>
2381
2382 {% autopaginate notices %}
2383-
2384+
2385 {% if notices %}
2386- <a href="{% url notification_mark_all_seen %}">{% trans "Mark all unseen notices seen" %}</a>
2387-
2388+ <div class="info_line show_center">
2389+ <br />
2390+ <a href="{% url notification_mark_all_seen %}">{% trans "Mark all unseen notices seen" %}</a>
2391+ <br />
2392+ <br />
2393+ </div>
2394 {# TODO: get timezone support working with regroup #}
2395 {% regroup notices by added.date as notices_by_date %}
2396
2397 {% for date in notices_by_date %}
2398- <h2 class="notice_date">{{ date.grouper|naturalday:_("MONTH_DAY_FORMAT")|capfirst }}</h2>
2399-
2400+ <h3 class="title notice_date">{{ date.grouper|naturalday:_("MONTH_DAY_FORMAT")|capfirst }}</h3>
2401 {% for notice in date.list %}
2402 {% if notice.is_unseen %}
2403- <div class="unseen_notice">
2404+ <div class="{% cycle "odd" "even" %} notice_unseen_notice border_top">
2405 {% else %}
2406- <div class="notice">
2407+ <div class="{% cycle "odd" "even" %} border_top">
2408 {% endif %}
2409- <span class="notice_type">[{% trans notice.notice_type.display %}]</span>
2410+ <span class="notice_type"><a href="{% url notification_notice notice.pk %} ">[{% trans notice.notice_type.display %}]</a></span>
2411 <span class="notice_message">{{ notice.message|safe }}</span>
2412 <span class="notice_time">{{ notice.added }}</span>
2413 </div>
2414 {% endfor %}
2415 {% endfor %}
2416-
2417- {% paginate %}
2418-
2419+ <div class="info_line show_center">
2420+ {% paginate %}
2421+ </div>
2422 {% else %}
2423- <p>{% trans "No notices." %}</p>
2424+ <div class="info_line show_center">
2425+ <br />
2426+ {% trans "No notices." %}
2427+ <br />
2428+ <br />
2429+ </div>
2430 {% endif %}
2431-
2432-
2433- <div class="notice_settings">
2434- <h2>{% trans "Settings" %}</h2>
2435+ </div>
2436+ <br />
2437+ <br />
2438+ <div class="box_item_model full_site border">
2439+ <h3 class="title">{% trans "Settings" %}</h2>
2440
2441 {% url acct_email as email_url %}
2442 {% if user.email %}
2443- <p>
2444+ <div class="info_line show_center">
2445+ <br />
2446 {% trans "Primary email" %}:<br />
2447 <b>{{ user.email }}</b><br />
2448- (change under <a href="{% url profile_view %}">Account</a>)
2449- </p>
2450+ (change under <a href="{% url profile_view user %}">Account</a>)
2451+ <br />
2452+ <br />
2453+ </div>
2454 {% else %}
2455- <p>
2456+ <div class="info_line show_center">
2457+ <br />
2458 <span class="warning">{% trans "Note" %}</span>:
2459- {% blocktrans %}You do not have a verified email address to which notices can be sent. You can add one by going to <a href="{{ email_url }}">Account</a>.{% endblocktrans %}
2460- </p>
2461+ You do not have a verified email address to which notices can be sent. You can add one by going to <a href="{% url profile_edit %}">Account</a>.
2462+ <br />
2463+ <br />
2464+ </div>
2465 {% endif %}
2466
2467 <form method="POST" action=""> {# doubt this easy to do in uni-form #}
2468- <table class="notice_settings" cellspacing="1">
2469- <tr>
2470+ <table width="100%" class="notice_settings" cellspacing="1">
2471+ <tr>
2472 <th>{% trans "Notification Type" %}</th>
2473 {% for header in notice_settings.column_headers %}
2474 <th>{{ header }}</th>
2475@@ -86,7 +104,7 @@
2476 </tr>
2477 {% endfor %}
2478 <tr>
2479- <td><input type="submit" value="{% trans "Change" %}" /></td>
2480+ <td class="info_line show_center" colspan="2"><input type="submit" value="{% trans "Change" %}" /></td>
2481 </tr>
2482 </table>
2483 </form>
2484
2485=== added file 'templates/notification/single.html'
2486--- templates/notification/single.html 1970-01-01 00:00:00 +0000
2487+++ templates/notification/single.html 2010-10-30 22:51:06 +0000
2488@@ -0,0 +1,50 @@
2489+{% extends "notification/base.html" %}
2490+
2491+{% load humanize i18n %}
2492+{% load pagination_tags %}
2493+{% load custom_date %}
2494+
2495+{% block title %}
2496+{% trans "Notices "%} - Account - {{ block.super }}
2497+{% endblock %}
2498+
2499+{% block extra_head %}
2500+ <link rel="alternate" type="application/atom+xml" title="Notices Feed" href="{% url notification_feed_for_user %}" />
2501+ <link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}/css/notice.css" />{{ block.super}}
2502+{% endblock %}
2503+
2504+{% block content %}
2505+ {% include "django_messages/inlines/navigation.html" %}
2506+ <br />
2507+ <br />
2508+ <div class="box_item_model fixed_site">
2509+ <h3 class="title">{% trans "Notice" %}</h3>
2510+ <table width="100%">
2511+ <tr>
2512+ <td class="odd">Notice:</td>
2513+ <td class="odd">{{ notice.message|safe }}</td>
2514+ </tr>
2515+ <tr>
2516+ <td class="even">Notice Type:</td>
2517+ <td class="even">{{ notice.notice_type }}</td>
2518+ </tr>
2519+ <tr>
2520+ <td class="odd">Date of Notice:</td>
2521+ <td class="odd">{{ notice.added }}</td>
2522+ </tr>
2523+ <tr>
2524+ <td class="even">Notice Unseen:</td>
2525+ <td class="even">{{ notice.unseen }}</td>
2526+ </tr>
2527+ <tr>
2528+ <td class="odd">Notice Archiv:</td>
2529+ <td class="odd">{{ notice.archived }}</td>
2530+ </tr>
2531+ <tr>
2532+ <td class="even">Notice Site:</td>
2533+ <td class="even">{{ notice.on_site }}</td>
2534+ </tr>
2535+ </table>
2536+ </div>
2537+{% endblock %}
2538+
2539
2540=== modified file 'templates/notification/wiki_article_edited/notice.html'
2541--- templates/notification/wiki_article_edited/notice.html 2009-02-20 10:11:49 +0000
2542+++ templates/notification/wiki_article_edited/notice.html 2010-10-30 22:51:06 +0000
2543@@ -1,2 +1,2 @@
2544-{% load i18n %}{% url profile_detail username=user.username as user_url %}
2545+{% load i18n %}{% url profile_view user.username as user_url %}
2546 {% blocktrans with article.get_absolute_url as article_url %}The wiki article <a href="{{ article_url }}">{{ article }}</a> has been edited by <a href="{{ user_url }}">{{ user }}</a>.{% endblocktrans %}
2547
2548=== modified file 'templates/pybb/add_post.html'
2549--- templates/pybb/add_post.html 2010-01-03 00:07:10 +0000
2550+++ templates/pybb/add_post.html 2010-10-30 22:51:06 +0000
2551@@ -3,9 +3,10 @@
2552 {% load i18n %}
2553
2554 {% block content %}
2555-<br />
2556-<br />
2557-<div class="forum_item">
2558-{% include "pybb/inlines/add_post_form.html" %}
2559+{% include "django_messages/inlines/navigation.html" %}
2560+<br />
2561+<br />
2562+<div class="box_item_model border">
2563+ {% include "pybb/inlines/add_post_form.html" %}
2564 </div>
2565 {% endblock %}
2566
2567=== modified file 'templates/pybb/delete_post.html'
2568--- templates/pybb/delete_post.html 2009-03-17 15:02:13 +0000
2569+++ templates/pybb/delete_post.html 2010-10-30 22:51:06 +0000
2570@@ -6,11 +6,20 @@
2571 {% endblock %}
2572
2573 {% block content %}
2574-<h1>{% trans "Are you sure you want to delete this message?" %}</h1>
2575-<p class="post-preview">
2576+{% include "django_messages/inlines/navigation.html" %}
2577+<br />
2578+<br />
2579+<div class="box_item_model fixed_site border">
2580+ <h3 class="title">{% trans "Are you sure you want to delete this message?" %}</h3>
2581+ <div class="even">
2582+ <p class="post-preview">
2583 {{ post.body_html|safe }}
2584-</p>
2585-<form method="post">
2586- <p><input type="submit" value="{% trans "Yes, I am sure." %}" /></p>
2587-</form>
2588+ </p>
2589+ </div>
2590+ <form method="post">
2591+ <div class="info_line">
2592+ <input type="submit" value="{% trans "Yes, I am sure." %}" />
2593+ </div>
2594+ </form>
2595+</div>
2596 {% endblock %}
2597
2598=== modified file 'templates/pybb/edit_post.html'
2599--- templates/pybb/edit_post.html 2010-01-03 00:07:10 +0000
2600+++ templates/pybb/edit_post.html 2010-10-30 22:51:06 +0000
2601@@ -7,9 +7,10 @@
2602 {% endblock %}
2603
2604 {% block content %}
2605-<br />
2606-<br />
2607-<div class="forum_item">
2608-{% include "pybb/inlines/add_post_form.html" %}
2609+{% include "django_messages/inlines/navigation.html" %}
2610+<br />
2611+<br />
2612+<div class="box_item_model border">
2613+ {% include "pybb/inlines/add_post_form.html" %}
2614 </div>
2615 {% endblock %}
2616
2617=== modified file 'templates/pybb/forum.html'
2618--- templates/pybb/forum.html 2010-01-02 18:28:31 +0000
2619+++ templates/pybb/forum.html 2010-10-30 22:51:06 +0000
2620@@ -13,52 +13,75 @@
2621 {% endblock %}
2622
2623 {% block content %}
2624+{% include "django_messages/inlines/navigation.html" %}
2625+<br />
2626+<br />
2627+<div class="box_item_model">
2628 <div class="forum-list">
2629- <span class="title">{{ forum }}</span>
2630-
2631+ <span class="title"><a href="/forum/">Forum</a> &rArr; {{ forum }}</span>
2632+ <br />
2633 <div class="index_forum">
2634- {% pybb_pagination _('Topics') %}
2635- <div class="controls">
2636- <a href="{% url pybb_add_topic forum.id %}">{% trans "New topic" %}</a>
2637- </div>
2638-
2639- <table cellspacing="1" width="100%">
2640- <tr align="center">
2641- <th width="5%">&nbsp;</th>
2642- <th width="40%" nowrap="nowrap" align="left">Topic</th>
2643- <th nowrap="nowrap">Creator</th>
2644- <th nowrap="nowrap">At</th>
2645- <th nowrap="nowrap">Posts</th>
2646- <th nowrap="nowrap">Views</th>
2647- <th width="20%" nowrap="nowrap">Last Post</th>
2648- </tr>
2649-
2650- {# List all forums #}
2651- {% for topic in topics %}
2652- {% include "pybb/inlines/topic_row.html" %}
2653- {% endfor %}
2654- </table>
2655-
2656- {% pybb_pagination _('Topics') %}
2657- <div class="controls">
2658- <a href="{% url pybb_add_topic forum.id %}">{% trans "New topic" %}</a>
2659- </div>
2660-
2661+ <table width="100%">
2662+ <tr>
2663+ <td>
2664+ {% pybb_pagination _('Topics') %}
2665+ </td>
2666+ <td>
2667+ <div class="controls">
2668+ <a href="{% url pybb_add_topic forum.id %}">
2669+ <img src="{{MEDIA_URL}}/forum/img/en/new_topic.png" height="25" alt ="{% trans "New Topic" %}" style="float:right" />
2670+ </a>
2671+ </div>
2672+ </td>
2673+ </tr>
2674+ </table>
2675+ <table cellspacing="1" width="100%">
2676+ <tr align="center">
2677+ <th width="5%">&nbsp;</th>
2678+ <th width="40%" nowrap="nowrap" align="left">Topic</th>
2679+ <th nowrap="nowrap">Creator</th>
2680+ <th nowrap="nowrap">At</th>
2681+ <th nowrap="nowrap">Posts</th>
2682+ <th nowrap="nowrap">Views</th>
2683+ <th width="20%" nowrap="nowrap">Last Post</th>
2684+ </tr>
2685+
2686+ {# List all forums #}
2687+ {% for topic in topics %}
2688+ {% include "pybb/inlines/topic_row.html" %}
2689+ {% endfor %}
2690+ </table>
2691+ <table width="100%">
2692+ <tr>
2693+ <td>
2694+ {% pybb_pagination _('Topics') %}
2695+ </td>
2696+ <td>
2697+ <div class="controls">
2698+ <a href="{% url pybb_add_topic forum.id %}">
2699+ <img src="{{MEDIA_URL}}/forum/img/en/new_topic.png" height="25" alt ="{% trans "New Topic" %}" style="float:right"/>
2700+ </a>
2701+ </div>
2702+ </td>
2703+ </tr>
2704+ </table>
2705 </div>
2706
2707 <table class="legend">
2708- <tr>
2709- <td>
2710- <img src="{{MEDIA_URL}}/forum/img/folder_new.png" style=":" alt="" align="middle" />
2711- </td><td>= Unread posts</td>
2712- <td>
2713- <img src="{{MEDIA_URL}}/forum/img/folder.png" style="" alt="" align="middle" />
2714- </td><td>= No unread posts</td>
2715- <td>
2716- </tr>
2717+ <tr>
2718+ <td>
2719+ <img src="{{MEDIA_URL}}/forum/img/folder_new.png" style=":" alt="" align="middle" />
2720+ </td>
2721+ <td>= Unread posts</td>
2722+ <td>
2723+ <img src="{{MEDIA_URL}}/forum/img/folder.png" style="" alt="" align="middle" />
2724+ </td>
2725+ <td>= No unread posts</td>
2726+ <td>
2727+ </tr>
2728 </table>
2729 </div>
2730-
2731+</div>
2732 {% endblock %}
2733
2734 {% comment %}
2735
2736=== modified file 'templates/pybb/index.html'
2737--- templates/pybb/index.html 2009-03-23 20:34:20 +0000
2738+++ templates/pybb/index.html 2010-10-30 22:51:06 +0000
2739@@ -2,9 +2,13 @@
2740 {% load pybb_extras %}
2741
2742 {% block content %}
2743- {% for category in cats %}
2744+{% include "django_messages/inlines/navigation.html" %}
2745+<br />
2746+<br />
2747+<div class="box_item_model">
2748+{% for category in cats %}
2749 {% include 'pybb/inlines/display_category.html' %}
2750- {% endfor %}
2751+{% endfor %}
2752
2753 <table class="legend">
2754 <tr>
2755@@ -27,6 +31,6 @@
2756 </tr>
2757 {% endcomment %}
2758 </table>
2759-
2760+<div>
2761 {% endblock %}
2762
2763
2764=== modified file 'templates/pybb/inlines/add_post_form.html'
2765--- templates/pybb/inlines/add_post_form.html 2010-01-03 00:07:10 +0000
2766+++ templates/pybb/inlines/add_post_form.html 2010-10-30 22:51:06 +0000
2767@@ -1,5 +1,4 @@
2768 {% load i18n %}
2769-
2770 {% block extra_head %}
2771 <script type="text/javascript" src="/wlmedia/js/disableOnSubmit.js"></script>
2772 <script type="text/javascript">
2773@@ -7,42 +6,35 @@
2774 $('form').disableOnSubmit();
2775 });
2776 </script>
2777-
2778 {{ block.super }}
2779 {% endblock %}
2780- <form class="post-form" action="{{ form_url }}" method="post" enctype="multipart/form-data">
2781- <div class="preview-box" style="display: none">
2782- <div class="header"><h3 class="title">{% trans "Preview" %}</h3></div>
2783- <div class="content"></div>
2784- </div>
2785- <h3 class="title">{% if forum %}
2786- {% trans "New topic" %}
2787- {% else %}
2788- {%if post %}
2789- {% trans "Edit reply" %}
2790- {% else %}
2791- {% trans "New reply" %}
2792- {% endif %}
2793- {% endif %}</h3>
2794- <div class="content">
2795- <table width="100%" colspan="1" class="text">
2796- <tr>
2797- <td width="99%">
2798- {{ form.as_p }}
2799- </td>
2800- <td width="1%"> </td>
2801- </tr>
2802- </table>
2803- </div>
2804- <table class="bottom_line" width="100%">
2805- <tr>
2806- <td>
2807- <input type="submit" value="{% trans "Submit" %}" />
2808- <input class="preview-button" type="button" value="{% trans "Preview" %}" />
2809- </td>
2810- </tr>
2811- </table>
2812- </form>
2813+ <form class="post-form" action="{{ form_url }}" method="post" enctype="multipart/form-data">
2814+ <div class="preview-box" style="display: none">
2815+ <div class="header">
2816+ <h3 class="title">{% trans "Preview" %}</h3>
2817+ </div>
2818+ <div class="content">
2819+ </div>
2820+ </div>
2821+ <h3 class="title">
2822+ {% if forum %}
2823+ {% trans "New topic" %}
2824+ {% else %}
2825+ {%if post %}
2826+ {% trans "Edit reply" %}
2827+ {% else %}
2828+ {% trans "New reply" %}
2829+ {% endif %}
2830+ {% endif %}
2831+ </h3>
2832+ <div class="content">
2833+ {{ form.as_p }}
2834+ </div>
2835+ <div class="info_line show_left">
2836+ <input type="submit" class="button_send" value="" />
2837+ <input class="preview-button button_preview" type="button" value="" />
2838+ </div>
2839+ </form>
2840 <script type="text/javascript">
2841 $(function() {
2842 $('.post-form .preview-button').click(function() {
2843
2844=== modified file 'templates/pybb/inlines/display_category.html'
2845--- templates/pybb/inlines/display_category.html 2009-03-01 09:47:33 +0000
2846+++ templates/pybb/inlines/display_category.html 2010-10-30 22:51:06 +0000
2847@@ -3,26 +3,20 @@
2848
2849 How to display a Forum list in the index page
2850 {% endcomment %}
2851-
2852-<div class="index_category">
2853-
2854- <span class="title"> {{category.cat}} </span>
2855-
2856- <table cellspacing="1" width="100%">
2857- <tr align="center">
2858- <th width="5%">&nbsp;</th>
2859- <th width="57%" nowrap="nowrap" align="left">Forum</th>
2860- <th width="9%" nowrap="nowrap">Topics</th>
2861- <th width="9%" nowrap="nowrap">Posts</th>
2862- <th width="20%" nowrap="nowrap">Last Post</th>
2863+<div class="box_item_model index_category">
2864+ <h3 class="title">{{category.cat}} </h3>
2865+ <table class="full_site" cellspacing="1">
2866+ <tr class="show_center" cellspacing="0">
2867+ <td width="5%" class="info_line show_left">&nbsp;</td>
2868+ <td width="57%" nowrap="nowrap" class="info_line show_left">Forum</td>
2869+ <td width="9%" nowrap="nowrap" class="info_line show_left">Topics</td>
2870+ <td width="9%" nowrap="nowrap" class="info_line show_left">Posts</td>
2871+ <td width="20%" nowrap="nowrap" class="info_line show_left">Last Post</td>
2872 </tr>
2873-
2874 {# List all forums #}
2875 {% for forum in category.forums %}
2876 {% include 'pybb/inlines/forum_row.html' %}
2877 {% endfor %}
2878-
2879 </table>
2880-
2881 </div>
2882
2883
2884=== modified file 'templates/pybb/inlines/forum_row.html'
2885--- templates/pybb/inlines/forum_row.html 2009-03-16 17:28:02 +0000
2886+++ templates/pybb/inlines/forum_row.html 2010-10-30 22:51:06 +0000
2887@@ -1,12 +1,10 @@
2888 {% comment %}
2889 vim:ft=htmldjango:
2890 {% endcomment %}
2891-
2892 {% load humanize %}
2893 {% load pybb_extras %}
2894 {% load wlprofile %}
2895 {% load custom_date %}
2896-
2897 <tr>
2898 <td class="even" align="center" valign="middle">
2899 {% if forum|pybb_has_unreads:user %}
2900
2901=== modified file 'templates/pybb/inlines/post.html'
2902--- templates/pybb/inlines/post.html 2009-05-26 15:50:12 +0000
2903+++ templates/pybb/inlines/post.html 2010-10-30 22:51:06 +0000
2904@@ -8,7 +8,6 @@
2905 {% load wiki %}
2906 {% load wlprofile %}
2907 {% load custom_date %}
2908-
2909 <a name="post-{{ post.id }}"></a>
2910 <table class="{% cycle "odd" "even" %}" width="100%">
2911 <tr>
2912@@ -17,7 +16,9 @@
2913 <table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed; border: 0px;">
2914 <tr>
2915 <td style="text-align: left; border: 0px;">
2916- <a href="{{post.get_absolute_url}}">Permalink</a>
2917+ <a href="{{post.get_absolute_url}}">
2918+ <img src="{{MEDIA_URL}}/forum/img/en/permalink.png" height="25" alt ="{% trans "Permalink" %}" />
2919+ </a>
2920 </td>
2921 <td style="text-align: right; border: 0px;">
2922 <strong>Posted at:</strong> {{ post.created|custom_date:user}}
2923@@ -36,21 +37,40 @@
2924 </a>
2925 </div>
2926 {% endif %}
2927- <strong>Joined:</strong> {{ post.user.date_joined|custom_date:user|title }}<br />
2928- <strong>Posts:</strong> {{ post.user.wlprofile.post_count }}<br />
2929- {% if post.user.wlprofile.location %}
2930- <strong>Location:</strong> {{ post.user.wlprofile.location }}<br />
2931- {% endif %}
2932+ <strong>Joined:</strong> {{ post.user.date_joined|custom_date:user|title }}<br />
2933+ <strong>Posts:</strong> {{ post.user.wlprofile.post_count }}<br />
2934+ <img src="{{ MEDIA_URL }}img/{{ post.user.wlprofile.user_status.image }}" alt="Ranking" />
2935+ <br />
2936+ <strong>{{ post.user.wlprofile.user_status.text }}</strong><br />
2937+ {% if post.user.wlprofile.location %}
2938+ <strong>Location:</strong> {{ post.user.wlprofile.location }}<br />
2939+ {% endif %}
2940+ {% if post.user.wlprofile.get_ggzstats and post.user.wlprofile.get_ggzstats.ranking %}
2941+ <strong>GGZ ranking:</strong> {{ post.user.wlprofile.get_ggzstats.ranking|floatformat }}<br />
2942+ <strong>GGZ rating:</strong> {{ post.user.wlprofile.get_ggzstats.rating|floatformat }}<br />
2943+ <strong>GGZ win:</strong> {{ post.user.wlprofile.get_ggzstats.wins|floatformat }}<br />
2944+ <strong>GGZ loses:</strong> {{ post.user.wlprofile.get_ggzstats.losses|floatformat }}<br />
2945+ {% endif %}
2946 </div>
2947 </td>
2948- <td width="85%" class="content">
2949- {{ post.body_html|safe }}
2950- {% if not user.is_authenticated or user.pybb_profile.show_signatures %}
2951- {% if post.user.pybb_profile.signature %}
2952- <div class="signature">
2953- {{ post.user.pybb_profile.signature|urlize|linebreaks }}
2954- </div>
2955- {% endif %}
2956+ <td width="85%" class="content top">
2957+ {{ post.body_html|safe|linebreaks }}
2958+ {% if user.is_authenticated %}
2959+ {% ifequal user.wlprofile.show_signatures 1 %}
2960+ {% if post.user.wlprofile.signature %}
2961+ <div class="signature">
2962+ <span class="line">__________________</span>
2963+ {{ post.user.wlprofile.signature|urlize|linebreaks }}
2964+ </div>
2965+ {% endif %}
2966+ {% endifequal %}
2967+ {% else %}
2968+ {% if post.user.wlprofile.signature %}
2969+ <div class="signature">
2970+ <span class="line">__________________</span>
2971+ {{ post.user.wlprofile.signature|urlize|linebreaks }}
2972+ </div>
2973+ {% endif %}
2974 {% endif %}
2975 {% if post.updated %}
2976 <div class="updated-message"><strong>{% trans "Edited" %}:</strong> {{ post.updated|custom_date:user|title}}</div>
2977@@ -65,7 +85,9 @@
2978 </tr>
2979 <tr>
2980 <td class="toplink">
2981- <a href="#top">Top</a>
2982+ <a href="#top">
2983+ <img src="{{MEDIA_URL}}/forum/img/en/top.png" height="25" alt ="{% trans "Top" %}" />
2984+ </a>
2985 </td>
2986
2987 <td>
2988@@ -73,78 +95,28 @@
2989 {% if user.is_authenticated %}
2990 {% ifnotequal user post.user %}
2991 <a href="{% url messages_compose_to post.user %}">
2992- Send PM
2993+ <img src="{{MEDIA_URL}}/forum/img/en/send_pm.png" height="25" alt ="{% trans "Send PM" %}" />
2994 </a>
2995 {% endifnotequal %}
2996 {% endif %}
2997 {% if moderator or post|pybb_posted_by:user %}
2998 <a href="{% url pybb_edit_post post.id %}">
2999- <img src="{{MEDIA_URL}}/forum/img/en/p_edit.png" height="26" alt ="{% trans "Edit" %}" />
3000+ <img src="{{MEDIA_URL}}/forum/img/en/edit.png" height="25" alt ="{% trans "Edit" %}" />
3001 </a>
3002 {% endif %}
3003 {% if moderator or post|pybb_equal_to:last_post %}
3004 {% if moderator or post.user|pybb_equal_to:user %}
3005 <a href="{% url pybb_delete_post post.id %}">
3006- <img src="{{MEDIA_URL}}/forum/img/en/p_delete.png" height="26" alt ="{% trans "Delete" %}" />
3007+ <img src="{{MEDIA_URL}}/forum/img/en/delete.png" height="25" alt ="{% trans "Delete" %}" />
3008 </a>
3009 {% endif %}
3010- {% endif %}
3011 </div>
3012 <div class="tools" style="float: right;">
3013 <a href="{% url pybb_add_post topic.id %}?quote_id={{ post.id }}">
3014- <img src="{{MEDIA_URL}}/forum/img/en/p_quote.png" height="26" alt ="{% trans "Quote" %}" />
3015+ <img src="{{MEDIA_URL}}/forum/img/en/quote.png" height="25" alt ="{% trans "Quote" %}" />
3016 </a>
3017+ {% endif %}
3018 </div>
3019 </td>
3020 </tr>
3021 </table>
3022-
3023-{% comment %}
3024- {% if post.user.pybb_profile.avatar %}
3025- <div class="avatar">
3026- <a href="{% url pybb_profile post.user %}">
3027- <img src="{{ post.user.pybb_profile.avatar.url }}" />
3028- </a>
3029- </div>
3030- {% endif %}
3031- <div class="bottom">
3032- <a class="permalink" href="{{ post.get_absolute_url }}">#</a>
3033- <span class="updated">{% pybb_time post.created %}</span>
3034- </div>
3035- {% if user.is_authenticated %}
3036- <div class="pm-link">
3037- <a href="{% url pybb_create_pm %}?recipient={{ post.user.username }}">{% trans "Send PM" %}</a>
3038- </div>
3039- {% endif %}
3040- </div>
3041- </td>
3042- <td class="content" width="85%">
3043- {{ post.body_html|safe }}
3044- {% if not user.is_authenticated or user.pybb_profile.show_signatures %}
3045- {% if post.user.pybb_profile.signature %}
3046- <div class="signature">
3047- {{ post.user.pybb_profile.signature|urlize|linebreaks }}
3048- </div>
3049- {% endif %}
3050- {% endif %}
3051- {% if post.updated %}
3052- <div class="updated-message">{% trans "Edited" %} {% pybb_time post.updated %}</div>
3053- {% endif %}
3054-
3055- {% if post.attachment_cache %}
3056- {% for attach in post.attachment_cache %}
3057- {% trans "Attachment" %}: <a href="{{ attach.get_absolute_url }}">{{ attach.name }}</a> ({{ attach.size_display }})
3058- {% endfor %}
3059- {% endif %}
3060-
3061- <div class="post-related">
3062- <a href="{% url pybb_add_post topic.id %}?quote_id={{ post.id }}">{% trans "quote" %}</a>
3063- </div>
3064-
3065- </td>
3066- </tr>
3067- </table>
3068- <!--<div style="clear: both"></div>-->
3069- </div>
3070-</div>
3071-{% endcomment%}
3072
3073=== modified file 'templates/pybb/inlines/topic_row.html'
3074--- templates/pybb/inlines/topic_row.html 2009-03-16 17:28:02 +0000
3075+++ templates/pybb/inlines/topic_row.html 2010-10-30 22:51:06 +0000
3076@@ -1,12 +1,10 @@
3077 {% comment %}
3078 vim:ft=htmldjango:
3079 {% endcomment %}
3080-
3081 {% load humanize %}
3082 {% load pybb_extras %}
3083 {% load wlprofile %}
3084 {% load custom_date %}
3085-
3086 <tr class="topic_description {% cycle "odd" "even" %}">
3087 <td align="center" valign="middle">
3088 {% if topic|pybb_has_unreads:user %}
3089@@ -16,7 +14,17 @@
3090 {% endif %}
3091 </td>
3092 <td id="name">
3093- <span class="name"><a href="{{ topic.get_absolute_url }}">{{ topic.name }}</a></span>
3094+ <span class="name">
3095+ <a href="{{ topic.get_absolute_url }}">
3096+ {% comment %}
3097+ oehm ja, geht nicht weil ka muss ich guggn, die frage ist. soll es fuer alle gelten oder nur fuer eine topic
3098+ {% endcomment %}
3099+ {% if subscribed %}<img src="{{MEDIA_URL}}/forum/img/en/subscribe_small.png" height="20" alt="subscribe" style="float:left" />{% endif %}
3100+ {% if topic.sticky %}<img src="{{MEDIA_URL}}/forum/img/en/stick_topic_small.png" height="20" alt ="Sticky" style="float:left;" /> {% endif %}
3101+ {% if topic.closed %}<img src="{{MEDIA_URL}}/forum/img/en/close_small.png" height="20" alt ="Closed" style="float:left; " /> {% endif %}
3102+ &nbsp;{{ topic.name }}
3103+ </a>
3104+ </span>
3105 </td>
3106 <td><span class="creator">{{ topic.user|user_link }}</span></td>
3107 <td><span class="at">{{ topic.created|custom_date:user }}</span></td>
3108
3109=== added file 'templates/pybb/last_posts.html'
3110--- templates/pybb/last_posts.html 1970-01-01 00:00:00 +0000
3111+++ templates/pybb/last_posts.html 2010-10-30 22:51:06 +0000
3112@@ -0,0 +1,21 @@
3113+{% load i18n %}
3114+{% load wlprofile %}
3115+{% load custom_date %}
3116+{% load pybb_extras %}
3117+
3118+<div>
3119+<br />
3120+{% for post in posts %}
3121+ <table>
3122+ <tr>
3123+ <td>
3124+ <a href="{{ post.get_absolute_url }}" title="{{ post.topic.name }}">{{ post.topic.name|pybb_cut_string:21 }}</a> @<br />
3125+ <a href="{{ post.topic.get_absolute_url}}" title="{{ post.topic.forum.name }}">{{ post.topic.forum.name|pybb_cut_string:23 }}</a><br />
3126+ by {{ post.user|user_link }} at {{ post.created|custom_date:user }}
3127+ <br />
3128+ <br />
3129+ </td>
3130+ </tr>
3131+ </table>
3132+{% endfor %}
3133+<div>
3134
3135=== modified file 'templates/pybb/pagination.html'
3136--- templates/pybb/pagination.html 2010-01-02 18:24:49 +0000
3137+++ templates/pybb/pagination.html 2010-10-30 22:51:06 +0000
3138@@ -1,20 +1,41 @@
3139 {% load i18n %}
3140-<div class="pagination">
3141-
3142+<div class="pagination" style="float:left">
3143+ <span class="summary">{{ label }} <strong>{{ page.start_index }}</strong>&mdash;<strong>{{ page.end_index }}</strong> {% trans "of" %} <strong>{{ paginator.count }}</strong> {{ label }}&nbsp;&nbsp;&nbsp;&nbsp;</span>
3144 {% if page.has_previous %}
3145- <a href="{{ page.previous_link }}">&lt;{% trans "Back" %}</a>
3146+ {% ifequal page.previous_page_number 1 %}
3147+ <a href="?page={{ page.previous_page_number }}" class="prev">&lsaquo;&lsaquo; </a>
3148+ {% else %}
3149+ <a href="?page=1" class="prev">&lsaquo;&lsaquo;&lsaquo;&lsaquo; </a>
3150+ <a href="?page={{ page.previous_page_number }}" class="prev">&lsaquo;&lsaquo; </a>
3151+ {% endifequal %}
3152+ {% else %}
3153+ {% ifnotequal paginator.num_pages 1 %}
3154+ <span class="disabled prev">&lsaquo;&lsaquo; </span>
3155+ {% endifnotequal %}
3156 {% endif %}
3157-
3158-<span class="summary">{{ label }} <strong>{{ page.start_index }}</strong>&mdash;<strong>{{ page.end_index }}</strong> {% trans "of" %} <strong>{{ paginator.count }}</strong> {{ label }}
3159- {% if page.has_other_pages %}
3160- {% trans "in" %} <strong>{{ paginator.num_pages }}</strong>
3161- {% trans "pages" %}
3162- {% endif %}
3163- </span>
3164-
3165+ {% for pages in paginator.page_range %}
3166+ {% if pages %}
3167+ {% ifequal paginator.num_pages 1 %}
3168+ ...
3169+ {% else %}
3170+ {% ifequal pages page.number %}
3171+ <span class="current page">| {{ page.number }} |</span>
3172+ {% else %}
3173+ <a href="?page={{ pages }}" class="page">{{ pages }}</a>
3174+ {% endifequal %}
3175+ {% endifequal %}
3176+ {% endif %}
3177+ {% endfor %}
3178 {% if page.has_next %}
3179- <a href="{{ page.next_link }}">{% trans "Forward" %}&gt;</a>
3180+ {% ifequal page.next_page_number paginator.num_pages %}
3181+ <a href="?page={{ page.next_page_number }}" class="next"> &rsaquo;&rsaquo;</a>
3182+ {% else %}
3183+ <a href="?page={{ page.next_page_number }}" class="next"> &rsaquo;&rsaquo;</a>
3184+ <a href="?page={{ paginator.num_pages }}" class="next"> &rsaquo;&rsaquo;&rsaquo;&rsaquo;</a>
3185+ {% endifequal %}
3186+ {% else %}
3187+ {% ifnotequal paginator.num_pages 1 %}
3188+ <span class="disabled next"> &rsaquo;&rsaquo;</span>
3189+ {% endifnotequal %}
3190 {% endif %}
3191-
3192-
3193 </div>
3194
3195=== modified file 'templates/pybb/topic.html'
3196--- templates/pybb/topic.html 2010-01-03 00:07:10 +0000
3197+++ templates/pybb/topic.html 2010-10-30 22:51:06 +0000
3198@@ -13,70 +13,84 @@
3199 {% endblock %}
3200
3201 {% block content %}
3202-
3203-{% pybb_pagination _('Posts') %}
3204-
3205-<div class="posts">
3206- <a name="top" id="top"></a>
3207- <table cellspacing="1" width="100%">
3208- <tr align="center">
3209- <th>Author</th>
3210- <th width="85%" nowrap="nowrap">Message</th>
3211- </tr>
3212- </table>
3213-
3214- {% if first_post %}
3215- {% ifnotequal first_post posts.0 %}
3216- {% with first_post as post %}
3217- <div class="post first_post">
3218- {% include "pybb/inlines/post.html" %}
3219- </div>
3220- {% endwith %}
3221- {% endifnotequal %}
3222- {% endif %}
3223- {% for post in posts %}
3224- <div class="post">
3225- {% include "pybb/inlines/post.html" %}
3226- </div>
3227- {% endfor %}
3228-</div>
3229-
3230-{% pybb_pagination _('Posts') %}
3231-<div class="controls">
3232+{% include "django_messages/inlines/navigation.html" %}
3233+<br />
3234+<br />
3235+<div class="box_item_model">
3236+ <span class="title"><a href="/forum/">Forum</a> &rArr; <a href="{{ topic.forum.get_absolute_url }}">{{ topic.forum.name }}</a> &rArr; {{ topic }}</span>
3237+ <br />
3238+ {% pybb_pagination _('Posts') %}
3239+ <div class="posts" style="clear:left">
3240+ <a name="top" id="top"></a>
3241+ <table cellspacing="1" width="100%">
3242+ <tr align="center">
3243+ <th>Author</th>
3244+ <th width="85%" nowrap="nowrap">Message</th>
3245+ </tr>
3246+ </table>
3247+
3248+ {% if first_post %}
3249+ {% ifnotequal first_post posts.0 %}
3250+ {% with first_post as post %}
3251+ <div class="post first_post">
3252+ {% include "pybb/inlines/post.html" %}
3253+ </div>
3254+ {% endwith %}
3255+ {% endifnotequal %}
3256+ {% endif %}
3257+ {% for post in posts %}
3258+ <div class="post">
3259+ {% include "pybb/inlines/post.html" %}
3260+ </div>
3261+ {% endfor %}
3262+ </div>
3263+ {% pybb_pagination _('Posts') %}
3264+ <br />
3265+ <div class="controls">
3266+ <br />
3267 {% if moderator %}
3268- {% if topic.sticky %}
3269- <a href="{% url pybb_unstick_topic topic.id %}">{% trans "Unstick topic" %}</a>
3270- {% else %}
3271- <a href="{% url pybb_stick_topic topic.id %}">{% trans "Stick topic" %}</a>
3272- {% endif %}
3273- |
3274- {% if topic.closed %}
3275- <a href="{% url pybb_open_topic topic.id %}">{% trans "Open topic" %}</a>
3276- {% else %}
3277- <a href="{% url pybb_close_topic topic.id %}">{% trans "Close topic" %}</a>
3278- {% endif %}
3279- |
3280- {% endif %}
3281- {% comment %}
3282- TODO: subscribe
3283+ {% if topic.sticky %}
3284+ <a href="{% url pybb_unstick_topic topic.id %}">
3285+ <img src="{{MEDIA_URL}}/forum/img/en/unstick_topic.png" height="25" alr="{% trans "Unstick topic" %}" />
3286+ </a>
3287+ {% else %}
3288+ <a href="{% url pybb_stick_topic topic.id %}">
3289+ <img src="{{MEDIA_URL}}/forum/img/en/stick_topic.png" height="25" alt ="{% trans "Stick Topic" %}" />
3290+ </a>
3291+ {% endif %}
3292+ {% if topic.closed %}
3293+ <a href="{% url pybb_open_topic topic.id %}">
3294+ <img src="{{MEDIA_URL}}/forum/img/en/open_topic.png" height="25" alt="{% trans "Open topic" %}" />
3295+ </a>
3296+ {% else %}
3297+ <a href="{% url pybb_close_topic topic.id %}">
3298+ <img src="{{MEDIA_URL}}/forum/img/en/close_topic.png" height="25" alt ="{% trans "Close Topic" %}" />
3299+ </a>
3300+ {% endif %}
3301+ {% endif %}
3302+
3303+
3304 {% if user.is_authenticated %}
3305- {% if subscribed %}
3306- <a href="{% url pybb_delete_subscription topic.id %}?from_topic">{% trans "Unsubscribe" %}</a>
3307- {% else %}
3308- <a href="{% url pybb_add_subscription topic.id %}">{% trans "Subscribe" %}</a>
3309- {% endif %}
3310- {% endif %}
3311- {% endcomment %}
3312+ {% if subscribed %}
3313+ <a href="{% url pybb_delete_subscription topic.id %}?from_topic">
3314+ <img src="{{MEDIA_URL}}/forum/img/en/unsubscribe.png" height="25" alt ="{% trans "Unsubscribe" %}" />
3315+ </a>
3316+ {% else %}
3317+ <a href="{% url pybb_add_subscription topic.id %}">
3318+ <img src="{{MEDIA_URL}}/forum/img/en/subscribe.png" height="25" alt="{% trans "Subscribe" %}" /></a>
3319+ {% endif %}
3320+ {% endif %}
3321+
3322+ </div>
3323 </div>
3324-
3325 {% if user.is_authenticated %}
3326-{% if not topic.closed %}
3327-<br />
3328-<br />
3329-<div class="forum_item">
3330-{% include "pybb/inlines/add_post_form.html" %}
3331+ {% if not topic.closed %}
3332+<br />
3333+<br />
3334+<div class="box_item_model border">
3335+ {% include "pybb/inlines/add_post_form.html" %}
3336 </div>
3337-{% endif %}
3338+ {% endif %}
3339 {% endif %}
3340
3341 {% endblock %}
3342
3343=== added file 'templates/registration/base.html'
3344--- templates/registration/base.html 1970-01-01 00:00:00 +0000
3345+++ templates/registration/base.html 2010-10-30 22:51:06 +0000
3346@@ -0,0 +1,8 @@
3347+{% extends "base.html" %}
3348+{% comment %}
3349+ vim:ft=htmldjango
3350+{% endcomment %}
3351+
3352+{% block extra_head %}
3353+<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}/css/register.css" />{{ block.super}}
3354+{% endblock %}
3355
3356=== modified file 'templates/registration/login.html'
3357--- templates/registration/login.html 2009-02-20 11:19:12 +0000
3358+++ templates/registration/login.html 2010-10-30 22:51:06 +0000
3359@@ -1,26 +1,55 @@
3360+{% extends "registration/base.html" %}
3361
3362-{% extends "base.html" %}
3363+{% block title %}
3364+{{ block.super }} - Login
3365+{% endblock %}
3366
3367 {% block content %}
3368-
3369+{% include "django_messages/inlines/navigation.html" %}
3370+<br />
3371+<br />
3372+<div class="box_item_model fixed_site border">
3373+ <h3 class="title">Login</h3>
3374 {% if form.errors %}
3375-<p>Your username and password didn't match. Please try again.</p>
3376+ <div class="info_line show_center errormessage">
3377+ <br />
3378+ Your username and password didn't match.
3379+ <br />
3380+ Please try again.
3381+ <br />
3382+ <br />
3383+ </div>
3384 {% endif %}
3385-
3386-<form method="post" action=".">
3387-<table>
3388-<tr>
3389- <td>{{ form.username.label_tag }}</td>
3390- <td>{{ form.username }}</td>
3391-</tr>
3392-<tr>
3393- <td>{{ form.password.label_tag }}</td>
3394- <td>{{ form.password }}</td>
3395-</tr>
3396-</table>
3397-
3398-<input type="submit" value="login" />
3399-<input type="hidden" name="next" value="{{ next }}" />
3400-</form>
3401-
3402+ <div class="info_line show_center">
3403+ <br />
3404+ <form method="post" action=".">
3405+ <table>
3406+ <tr>
3407+ <td>
3408+ {{ form.username.label_tag }}:
3409+ </td>
3410+ <td>
3411+ {{ form.username }}
3412+ </td>
3413+ </tr>
3414+ <tr>
3415+ <td>
3416+ {{ form.password.label_tag }}:
3417+ </td>
3418+ <td>
3419+ {{ form.password }}
3420+ </td>
3421+ </tr>
3422+ <tr>
3423+ <td></td>
3424+ <td class="show_right">
3425+ <input type="submit" value="login" />
3426+ <input type="hidden" name="next" value="{{ next }}" />
3427+ </td>
3428+ </tr>
3429+ </table>
3430+ </form>
3431+ <br />
3432+ </div>
3433+</div>
3434 {% endblock %}
3435
3436=== modified file 'templates/registration/password_change_done.html'
3437--- templates/registration/password_change_done.html 2009-02-20 11:19:12 +0000
3438+++ templates/registration/password_change_done.html 2010-10-30 22:51:06 +0000
3439@@ -1,12 +1,27 @@
3440-{% extends "base.html" %}
3441+{% extends "registration/base.html" %}
3442+{% comment %}
3443+vim:ft=htmldjango:
3444+{% endcomment %}
3445+
3446+{% block title %}
3447+{{ block.super }} - Change Password
3448+{% endblock %}
3449+
3450 {% load i18n %}
3451
3452-{% block title %}{% trans 'Password change successful' %} - {{ block.super }}{% endblock %}
3453-
3454 {% block content %}
3455-
3456-<h1>{% trans 'Password change successful' %}</h1>
3457-
3458-<p>{% trans 'Your password was changed.' %}</p>
3459-
3460+{% include "django_messages/inlines/navigation.html" %}
3461+
3462+<br />
3463+<br />
3464+<div class="box_item_model fixed_site border">
3465+ <h3 class="title">Password change successful </h3>
3466+ <div class="info_line">
3467+ <br />
3468+ <div class="show_center errormessage">
3469+ Your password was changed.
3470+ </div>
3471+ <br />
3472+ </div>
3473+</div>
3474 {% endblock %}
3475
3476=== modified file 'templates/registration/password_change_form.html'
3477--- templates/registration/password_change_form.html 2009-02-20 11:19:12 +0000
3478+++ templates/registration/password_change_form.html 2010-10-30 22:51:06 +0000
3479@@ -1,24 +1,69 @@
3480-{% extends "base.html" %}
3481+{% extends "registration/base.html" %}
3482+{% comment %}
3483+vim:ft=htmldjango:
3484+{% endcomment %}
3485+
3486+{% block title %}
3487+{{ block.super }} - Change Password
3488+{% endblock %}
3489+
3490 {% load i18n %}
3491
3492-{% block title %}{% trans 'Password change' %} - {{block.super}}{% endblock %}
3493-
3494 {% block content %}
3495-
3496-<h1>{% trans 'Password change' %}</h1>
3497-
3498-<p>{% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}</p>
3499-
3500-<form action="" method="post">
3501-
3502-{{ form.old_password.errors }}
3503-<p class="aligned wide"><label for="id_old_password">{% trans 'Old password:' %}</label>{{ form.old_password }}</p>
3504-{{ form.new_password1.errors }}
3505-<p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
3506-{{ form.new_password2.errors }}
3507-<p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
3508-
3509-<p><input type="submit" value="{% trans 'Change my password' %}" /></p>
3510-</form>
3511-
3512+{% include "django_messages/inlines/navigation.html" %}
3513+
3514+<br />
3515+<br />
3516+<div class="box_item_model fixed_site border">
3517+ <h3 class="title">Password change</h3>
3518+ <div class="info_line">
3519+ <br />
3520+ <div class="show_center errormessage">
3521+ Please enter your old password,
3522+ <br />
3523+ for security's sake, and then enter your new password twice so we can verify you typed it in correctly.
3524+ </div>
3525+ <div >
3526+ <br />
3527+ <form action="" method="post">
3528+ <table>
3529+ <tr>
3530+ <td class="show_right" width="120">
3531+ <label for="id_old_password">{% trans 'Old password:' %}</label>
3532+ </td>
3533+ <td>
3534+ {{ form.old_password }}
3535+ <span class="errormessage">{{ form.old_password.errors }}</span>
3536+ </td>
3537+ </tr>
3538+ <tr>
3539+ <td class="show_right">
3540+ <label for="id_new_password1">{% trans 'New password:' %}</label>
3541+ </td>
3542+ <td>
3543+ {{ form.new_password1 }}
3544+ <span class="errormessage">{{ form.new_password1.errors }}</span>
3545+ </td>
3546+ </tr>
3547+ <tr>
3548+ <td class="show_right">
3549+ <label for="id_new_password2">{% trans 'Confirm password:' %}</label>
3550+ </td>
3551+ <td>
3552+ {{ form.new_password2 }}
3553+ <span class="errormessage">{{ form.new_password2.errors }}</span>
3554+ </td>
3555+ </tr>
3556+ <tr>
3557+ <td>&nbsp;</td>
3558+ <td>
3559+ <input type="submit" value="{% trans 'Change my password' %}" />
3560+ </td>
3561+ </tr>
3562+ </table>
3563+ </form>
3564+ <br />
3565+ </div>
3566+ </div>
3567+</div>
3568 {% endblock %}
3569
3570=== modified file 'templates/registration/password_reset_complete.html'
3571--- templates/registration/password_reset_complete.html 2009-02-20 11:25:20 +0000
3572+++ templates/registration/password_reset_complete.html 2010-10-30 22:51:06 +0000
3573@@ -1,12 +1,27 @@
3574-{% extends "base.html" %}
3575+{% extends "registration/base.html" %}
3576+{% comment %}
3577+vim:ft=htmldjango:
3578+{% endcomment %}
3579+
3580+{% block title %}
3581+{{ block.super }} - Change Password
3582+{% endblock %}
3583+
3584 {% load i18n %}
3585
3586-{% block title %}{% trans 'Password reset complete' %}{% endblock %}
3587-
3588 {% block content %}
3589-
3590-<h1>{% trans 'Password reset complete' %}</h1>
3591-
3592-<p>{% trans "Your password has been set. You may go ahead and log in now." %}</p>
3593-
3594+{% include "django_messages/inlines/navigation.html" %}
3595+
3596+<br />
3597+<br />
3598+<div class="box_item_model fixed_site border">
3599+ <h3 class="title">Password reset complete</h3>
3600+ <div class="info_line">
3601+ <br />
3602+ <div>
3603+ Your password has been set. You may go ahead and log in now.
3604+ </div>
3605+ <br />
3606+ </div>
3607+</div>
3608 {% endblock %}
3609
3610=== modified file 'templates/registration/password_reset_confirm.html'
3611--- templates/registration/password_reset_confirm.html 2009-02-20 11:23:56 +0000
3612+++ templates/registration/password_reset_confirm.html 2010-10-30 22:51:06 +0000
3613@@ -1,30 +1,44 @@
3614 {% extends "base.html" %}
3615+{% extends "registration/base.html" %}
3616+{% comment %}
3617+vim:ft=htmldjango:
3618+{% endcomment %}
3619+
3620+{% block title %}
3621+{{ block.super }} - Reset Password
3622+{% endblock %}
3623+
3624 {% load i18n %}
3625
3626-{% block title %}{% trans 'Password reset' %}{% endblock %}
3627-
3628 {% block content %}
3629+{% include "django_messages/inlines/navigation.html" %}
3630
3631+<br />
3632+<br />
3633+<div class="box_item_model fixed_site border">
3634+ <h3 class="title">Password reset</h3>
3635+ <div class="info_line">
3636+ <br />
3637 {% if validlink %}
3638-
3639-<h1>{% trans 'Enter new password' %}</h1>
3640-
3641-<p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
3642-
3643-<form action="" method="post">
3644-{{ form.new_password1.errors }}
3645-<p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
3646-{{ form.new_password2.errors }}
3647-<p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
3648-<p><input type="submit" value="{% trans 'Change my password' %}" /></p>
3649-</form>
3650-
3651+ <div class="show_center errormessage">
3652+ Please enter your new password twice so we can verify you typed it in correctly.
3653+ </div>
3654+ <div>
3655+ <br />
3656+ <form action="" method="post">
3657+ {{ form.new_password1.errors }}
3658+ <p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
3659+ {{ form.new_password2.errors }}
3660+ <p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
3661+ <p><input type="submit" value="{% trans 'Change my password' %}" /></p>
3662+ </form>
3663+ <br />
3664+ </div>
3665 {% else %}
3666-
3667-<h1>{% trans 'Password reset unsuccessful' %}</h1>
3668-
3669-<p>{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}</p>
3670-
3671+ <div class="show_center errormessage">
3672+ The password reset link was invalid, possibly because it has already been used. Please request a new password reset.
3673+ </div>
3674 {% endif %}
3675-
3676+ </div>
3677+</div>
3678 {% endblock %}
3679
3680=== modified file 'templates/registration/password_reset_done.html'
3681--- templates/registration/password_reset_done.html 2009-02-20 11:19:12 +0000
3682+++ templates/registration/password_reset_done.html 2010-10-30 22:51:06 +0000
3683@@ -1,12 +1,27 @@
3684-{% extends "base.html" %}
3685+{% extends "registration/base.html" %}
3686+{% comment %}
3687+vim:ft=htmldjango:
3688+{% endcomment %}
3689+
3690+{% block title %}
3691+{{ block.super }} - Reset Password
3692+{% endblock %}
3693+
3694 {% load i18n %}
3695
3696-{% block title %}{% trans 'Password reset successful' %}{% endblock %}
3697-
3698 {% block content %}
3699-
3700-<h1>{% trans 'Password reset successful' %}</h1>
3701-
3702-<p>{% trans "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly." %}</p>
3703-
3704+{% include "django_messages/inlines/navigation.html" %}
3705+
3706+<br />
3707+<br />
3708+<div class="box_item_model fixed_site border">
3709+ <h3 class="title">Password reset successful</h3>
3710+ <div class="info_line">
3711+ <br />
3712+ <div class="show_center errormessage">
3713+ We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly.
3714+ </div>
3715+ <br />
3716+ </div>
3717+</div>
3718 {% endblock %}
3719
3720=== modified file 'templates/registration/password_reset_form.html'
3721--- templates/registration/password_reset_form.html 2009-02-20 11:19:12 +0000
3722+++ templates/registration/password_reset_form.html 2010-10-30 22:51:06 +0000
3723@@ -1,19 +1,40 @@
3724-{% extends "base.html" %}
3725+{% extends "registration/base.html" %}
3726+{% comment %}
3727+vim:ft=htmldjango:
3728+{% endcomment %}
3729+
3730+{% block title %}
3731+{{ block.super }} - Register
3732+{% endblock %}
3733+
3734 {% load i18n %}
3735
3736-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password reset' %}</div>{% endblock %}
3737-
3738-{% block title %}{% trans "Password reset" %}{% endblock %}
3739-
3740 {% block content %}
3741-
3742-<h1>{% trans "Password reset" %}</h1>
3743-
3744-<p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one." %}</p>
3745-
3746-<form action="" method="post">
3747-{{ form.email.errors }}
3748-<p><label for="id_email">{% trans 'E-mail address:' %}</label> {{ form.email }} <input type="submit" value="{% trans 'Reset my password' %}" /></p>
3749-</form>
3750+{% include "django_messages/inlines/navigation.html" %}
3751+
3752+<br />
3753+<br />
3754+<div class="box_item_model fixed_site border">
3755+ <h3 class="title">Password reset</h3>
3756+ <div class="info_line">
3757+ <br />
3758+ <div class="show_center errormessage">
3759+ Forgotten your password?
3760+ <br />
3761+ Enter your e-mail address below,
3762+ <br />
3763+ and we'll e-mail instructions for setting a new one.
3764+ </div>
3765+ <div class="show_right">
3766+ <br />
3767+ <form action="" method="post">
3768+ {{ form.email.errors }}
3769+ <label for="id_email">{% trans 'E-mail address:' %}</label> {{ form.email }}
3770+ <input type="submit" value="{% trans 'Reset my password' %}" />
3771+ </form>
3772+ <br />
3773+ </div>
3774+ </div>
3775+</div>
3776
3777 {% endblock %}
3778
3779=== modified file 'templates/registration/registration_complete.html'
3780--- templates/registration/registration_complete.html 2009-02-20 10:11:49 +0000
3781+++ templates/registration/registration_complete.html 2010-10-30 22:51:06 +0000
3782@@ -1,13 +1,24 @@
3783-{% extends "base.html" %}
3784+{% extends "registration/base.html" %}
3785+{% comment %}
3786+vim:ft=htmldjango:
3787+{% endcomment %}
3788
3789 {% block title %}
3790-registration_complete.html | {{ block.super }}
3791-{% endblock %}
3792-
3793-{% block header %}
3794-<h1>registration_complete.html</h1>
3795+{{ block.super }} - Registration complete
3796 {% endblock %}
3797
3798 {% block content %}
3799-Thank you for signing up. An email with the activation code has been send to your inbox.
3800-{% endblock %}
3801\ No newline at end of file
3802+{% include "django_messages/inlines/navigation.html" %}
3803+
3804+<br />
3805+<br />
3806+<div class="box_item_model fixed_site border">
3807+ <h3 class="title">Registration</h3>
3808+ <div class="info_line">
3809+ <br />
3810+ <div class="show_center errormessage">
3811+ Thank you for signing up. An email with the activation code has been send to your inbox.
3812+ </div>
3813+ </div>
3814+</div>
3815+{% endblock %}
3816
3817=== modified file 'templates/registration/registration_form.html'
3818--- templates/registration/registration_form.html 2009-03-03 13:46:05 +0000
3819+++ templates/registration/registration_form.html 2010-10-30 22:51:06 +0000
3820@@ -1,4 +1,4 @@
3821-{% extends "base.html" %}
3822+{% extends "registration/base.html" %}
3823 {% comment %}
3824 vim:ft=htmldjango:
3825 {% endcomment %}
3826@@ -8,57 +8,85 @@
3827 {% endblock %}
3828
3829 {% block content %}
3830-<form action="{% url registration_register %}" method="POST">
3831-<table>
3832-<tr>
3833- <td align="right" valign="top">Username:</td>
3834- <td>
3835- {{ registration_form.username }} <br/>
3836- {% for error in registration_form.username.errors %}
3837- <span class="errormessage">{{ error }}</span>
3838- {% endfor %}
3839- </td>
3840-</tr>
3841-<tr>
3842- <td align="right" valign="top">Email:</td>
3843- <td>
3844- {{ registration_form.email }} <br/>
3845- {% for error in registration_form.email.errors %}
3846- <span class="errormessage">{{ error }}</span>
3847- {% endfor %}
3848- </td>
3849-</tr>
3850-<tr>
3851- <td align="right" valign="top">Password:</td>
3852- <td>
3853- {{ registration_form.password1 }} <br/>
3854- {% for error in registration_form.password1.errors %}
3855- <span class="errormessage">{{ error }}</span>
3856- {% endfor %}
3857- </td>
3858-</tr>
3859-<tr>
3860- <td align="right" valign="top">Password (again):</td>
3861- <td>
3862- {{ registration_form.password2 }} <br/>
3863- {% for error in registration_form.password2.errors %}
3864- <span class="errormessage">{{ error }}</span>
3865- {% endfor %}
3866- </td>
3867-</tr>
3868-<tr align="right">
3869- <td align="right" valign="top">Prove that you're no spambot:</td>
3870- <td>
3871- {{ registration_form.captcha|safe }} <br/>
3872- {% for error in registration_form.captcha.errors %}
3873- <span class="errormessage">{{ error }}</span>
3874- {% endfor %}
3875- </td>
3876-</tr>
3877-<tr>
3878- <td>&nbsp;</td>
3879- <td><input type="submit" value="Register" /></td>
3880-</tr>
3881-</table>
3882-</form>
3883+{% include "django_messages/inlines/navigation.html" %}
3884+
3885+<br />
3886+<br />
3887+<div class="box_item_model fixed_site border">
3888+ <h3 class="title">Registration</h3>
3889+ <div class="info_line">
3890+ <br />
3891+ <form action="{% url registration_register %}" method="POST">
3892+ <table>
3893+ <tr>
3894+ <td class="show_right">Username:</td>
3895+ <td class="show_left">
3896+ {{ registration_form.username }}
3897+ <br/>
3898+ {% for error in registration_form.username.errors %}
3899+ <span class="errormessage">
3900+ {{ error }}
3901+ </span>
3902+ {% endfor %}
3903+ </td>
3904+ </tr>
3905+ <tr>
3906+ <td class="show_right">Email:</td>
3907+ <td class="show_left">
3908+ {{ registration_form.email }}
3909+ <br/>
3910+ {% for error in registration_form.email.errors %}
3911+ <span class="errormessage">
3912+ {{ error }}
3913+ </span>
3914+ {% endfor %}
3915+ </td>
3916+ </tr>
3917+ <tr>
3918+ <td class="show_right">Password:</td>
3919+ <td class="show_left">
3920+ {{ registration_form.password1 }}
3921+ <br/>
3922+ {% for error in registration_form.password1.errors %}
3923+ <span class="errormessage">
3924+ {{ error }}
3925+ </span>
3926+ {% endfor %}
3927+ </td>
3928+ </tr>
3929+ <tr>
3930+ <td class="show_right">Password (again):</td>
3931+ <td class="show_left">
3932+ {{ registration_form.password2 }}
3933+ <br/>
3934+ {% for error in registration_form.password2.errors %}
3935+ <span class="errormessage">
3936+ {{ error }}
3937+ </span>
3938+ {% endfor %}
3939+ </td>
3940+ </tr>
3941+ <tr>
3942+ <td class="show_right">Prove that you're no spambot:</td>
3943+ <td class="show_left">
3944+ {{ registration_form.captcha|safe }}
3945+ <br/>
3946+ {% for error in registration_form.captcha.errors %}
3947+ <span class="errormessage">
3948+ {{ error }}
3949+ </span>
3950+ {% endfor %}
3951+ </td>
3952+ </tr>
3953+ <tr>
3954+ <td class="show_right">&nbsp;</td>
3955+ <td class="show_left">
3956+ <input type="submit" value="Register" />
3957+ </td>
3958+ </tr>
3959+ </table>
3960+ </form>
3961+ <br />
3962+ </div>
3963+</div>
3964 {% endblock %}
3965
3966=== modified file 'templates/right_boxes.html'
3967--- templates/right_boxes.html 2010-09-26 13:30:30 +0000
3968+++ templates/right_boxes.html 2010-10-30 22:51:06 +0000
3969@@ -3,11 +3,11 @@
3970
3971 This file is included by mainpage and contains all the left menu boxes
3972 on the site
3973-
3974 {% endcomment %}
3975 {% load inbox %}
3976 {% load i18n %}
3977-{% load wlprofile wlpoll wlevents %}
3978+{% load wlprofile wlpoll wlevents%}
3979+{% load pybb_extras %}
3980
3981 <!-- Search Box -->
3982 <h3 class="box_title">Search</h3>
3983@@ -29,10 +29,10 @@
3984 Help us to pay our Server!<br/>(: Consider a donation :) <br/><br/>
3985 <div>
3986 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
3987- <input type="hidden" name="cmd" value="_s-xclick">
3988- <input type="hidden" name="hosted_button_id" value="JH5R7YHSVRMRG">
3989- <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
3990- <img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1">
3991+ <input type="hidden" name="cmd" value="_s-xclick" />
3992+ <input type="hidden" name="hosted_button_id" value="JH5R7YHSVRMRG" />
3993+ <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" name="submit" alt="PayPal - The safer, easier way to pay online!" />
3994+ <img alt="" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1" />
3995 </form>
3996 </div>
3997 </div>
3998@@ -40,20 +40,22 @@
3999 <!-- Login Block / User informations -->
4000 {% if user.is_authenticated %}
4001 <h3 class="box_title">Account</h3>
4002- <div class="box_content" align="center">
4003- <p>
4004- You are logged in as<br/>
4005- <b>{{ user|user_link }}</b>
4006- </p>
4007-
4008- <p>
4009- <a href="{% url messages_inbox %}">{% inbox_count %} {% trans "new messages" %}</a>
4010- </p>
4011-
4012- <p>
4013- <a href="/accounts/logout/next={{request.path}}">Logout</a>
4014- </p>
4015-
4016+ <div class="box_content">
4017+ <p align="center">
4018+ Welcome <b>{{ user|user_link }}</b>,<br />
4019+ you've <a href="{% url messages_inbox %}">{% inbox_count %}</a> new messages
4020+ </p>
4021+ <ul>
4022+ <li>
4023+ <a href="{% url profile_edit %}">Edit Profile</a>
4024+ </li>
4025+ <li>
4026+ <a href="{% url notification_notices %} ">Notifications</a>
4027+ </li>
4028+ <li>
4029+ <a href="/accounts/logout/next={{ request.path }}">Logout</a>
4030+ </li>
4031+ </ul>
4032 </div>
4033 {% else %}
4034 <h3 class="box_title">Login</h3>
4035@@ -75,7 +77,6 @@
4036 </center>
4037 </div>
4038 {% endif %}
4039-
4040 <!-- Current polls if any -->
4041 {% get_open_polls as polls %}
4042 {% if polls.count %}
4043@@ -122,10 +123,10 @@
4044
4045 <!-- Logged in users -->
4046 {%load online_users %}
4047- <h3 class="box_title">Currently online</h3>
4048- <div class="box_content">
4049- {% online_users 10 %}
4050+ {% online_users 10 %}
4051+ <!-- Placeholder for The Last 5 Forum Posts -->
4052+ <h3 class="box_title">Last 5 Forum Posts</h3>
4053+ <div class="box_content">
4054+ {% pybb_last_posts %}
4055 </div>
4056-
4057-
4058
4059
4060=== modified file 'templates/threadedcomments/inlines/comments.html'
4061--- templates/threadedcomments/inlines/comments.html 2010-04-17 09:17:23 +0000
4062+++ templates/threadedcomments/inlines/comments.html 2010-10-30 22:51:06 +0000
4063@@ -27,36 +27,42 @@
4064 {% endif %}
4065 </div>
4066 {% endfor %}
4067- {% if user.is_authenticated %}
4068 <br />
4069 <br />
4070- <div class="news_item">
4071- <h3 class="title">Reply to Original:</h3>
4072- <form method="POST" action="{% get_comment_url object %}?next={{object.get_absolute_url}}">
4073- <div class="content">
4074- <table class="text" width="100%">
4075- <tr>
4076- <td width="99%">
4077- <span class=errorclass">{{ form.comment.errors }}</span>
4078- {{ form.comment }}
4079- </td>
4080- <td width="1%"></td>
4081- </tr>
4082- </table>
4083- </div>
4084- <table class="bottom_line" width="100%">
4085- <tr>
4086- <td class="admin">
4087- <input type="hidden" name="markup" value="1" />
4088- <input type="hidden" value="next" value="{{ object.get_absolute_url }}" />
4089- <input type="submit" value="Submit Comment" />
4090- </td>
4091- </tr>
4092- </table>
4093- </form>
4094- </div>
4095+ <div class="box_item_model fixed_site border">
4096+ {% if user.is_authenticated %}
4097+ <h3 class="title">Reply to Original:</h3>
4098+ <form method="POST" action="{% get_comment_url object %}?next={{object.get_absolute_url}}">
4099+ <div class="content">
4100+ <table class="text full_site">
4101+ <tr>
4102+ <td width="99%">
4103+ <span class="errormessage">{{ form.comment.errors }}</span>
4104+ {{ form.comment }}
4105+ </td>
4106+ <td width="1%"></td>
4107+ </tr>
4108+ </table>
4109+ </div>
4110+ <table class="info_line full_site">
4111+ <tr>
4112+ <td class="show_center">
4113+ <input type="hidden" name="markup" value="1" />
4114+ <input type="hidden" value="next" value="{{ object.get_absolute_url }}" />
4115+ <input type="submit" value="Submit Comment" />
4116+ </td>
4117+ </tr>
4118+ </table>
4119+ </form>
4120 {% else %}
4121- <p>Log in to post comments</p>
4122+ <h3 class="title">Comments</h3>
4123+ <div class="info_line errormessage show_center">
4124+ <br />
4125+ !!! Log in to post comments !!!
4126+ <br />
4127+ <br />
4128+ </div>
4129 {% endif %}
4130+ </div>
4131
4132
4133
4134=== modified file 'templates/threadedcomments/preview_comment.html'
4135--- templates/threadedcomments/preview_comment.html 2010-01-04 21:48:27 +0000
4136+++ templates/threadedcomments/preview_comment.html 2010-10-30 22:51:06 +0000
4137@@ -7,24 +7,22 @@
4138 <div id="comment_preview">{% auto_transform_markup comment %}</div>
4139 {% endif %}
4140 <form method="POST" action="">
4141- <div class="content">
4142+ <div class="content">
4143 <table class="text" width="100%">
4144- <tr>
4145- <td width="99%">
4146- <span class=errorclass">{{ form.comment.errors }}</span>
4147- {{ form.comment }}
4148- </td>
4149- <td width="1%"></td>
4150- </tr>
4151+ <tr>
4152+ <td width="99%">
4153+ <span class="errormessage">{{ form.comment.errors }}</span>
4154+ {{ form.comment }}
4155+ </td>
4156+ <td width="1%"></td>
4157+ </tr>
4158+ <tr>
4159+ <td class="bottom_line show_center">
4160+ <input type="hidden" name="markup" value="1" />
4161+ <input type="submit" value="Submit Comment" />
4162+ </td>
4163+ </tr>
4164 </table>
4165- </div>
4166- <table class="bottom_line" width="100%">
4167- <tr>
4168- <td class="admin">
4169- <input type="hidden" name="markup" value="1" />
4170- <input type="submit" value="Submit Comment" />
4171- </td>
4172- </tr>
4173- </table>
4174- </form>
4175+ </div>
4176+ </form>
4177 {% endblock %}
4178
4179=== added directory 'templates/wlggz'
4180=== added file 'templates/wlggz/base.html'
4181--- templates/wlggz/base.html 1970-01-01 00:00:00 +0000
4182+++ templates/wlggz/base.html 2010-10-30 22:51:06 +0000
4183@@ -0,0 +1,12 @@
4184+{% extends "base.html" %}
4185+{% comment %}
4186+ vim:ft=htmldjango
4187+{% endcomment %}
4188+
4189+{% block title %}
4190+GGZ statistics - {{ block.super }}
4191+{% endblock %}
4192+
4193+{% block extra_head %}
4194+<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}/css/ggz.css" />{{ block.super}}
4195+{% endblock %}
4196
4197=== added file 'templates/wlggz/edit_ggz.html'
4198--- templates/wlggz/edit_ggz.html 1970-01-01 00:00:00 +0000
4199+++ templates/wlggz/edit_ggz.html 2010-10-30 22:51:06 +0000
4200@@ -0,0 +1,43 @@
4201+{% extends "wlggz/base.html" %}
4202+
4203+{% load i18n %}
4204+
4205+{% block content %}
4206+{% include "django_messages/inlines/navigation.html" %}
4207+<br />
4208+<br />
4209+<div class="box_item_model fixed_site border">
4210+ <h3 class="title">{% trans "Set GGZ password" %}</h3>
4211+ <form method="post" enctype="multipart/form-data">
4212+ <div class="content">
4213+ <table cellspacing="1" class="text full_site">
4214+ {% if profile_form.errors %}
4215+ <tr>
4216+ <td class="even" colspan="2">{{ profile_form.errors }}</td>
4217+ </tr>
4218+ {% endif %}
4219+ {% for field in ggz_form %}
4220+ <tr>
4221+ {% if field.errors %}
4222+ <td colspan="2" class="{% cycle "odd" "even" %}">
4223+ <div class="errormessage">{{ field.errors }}</div>
4224+ </td>
4225+ </tr>
4226+ <tr>
4227+ {% endif %}
4228+ <td class="{% cycle "odd" "even" %}">{{ field.label_tag }}:</td>
4229+ <td class="{% cycle "odd" "even" %}">{{ field }}
4230+ {% ifequal field.name "time_display" %}
4231+ <a href="/wiki/HomepageDocuTimeDisplay">Documented here</a>
4232+ {% endifequal %}
4233+ </td>
4234+ </tr>
4235+ {% endfor %}
4236+ </table>
4237+ </div>
4238+ <div class="info_line">
4239+ <input type="submit" value="{% trans "Save" %}" />
4240+ </div>
4241+ </form>
4242+</div>
4243+{% endblock %}
4244
4245=== added file 'templates/wlggz/view_ggz_highscore.html'
4246--- templates/wlggz/view_ggz_highscore.html 1970-01-01 00:00:00 +0000
4247+++ templates/wlggz/view_ggz_highscore.html 2010-10-30 22:51:06 +0000
4248@@ -0,0 +1,43 @@
4249+{% extends "wlggz/base.html" %}
4250+
4251+{% load i18n %}
4252+
4253+{% block content %}
4254+{% load custom_date %}
4255+{% load wlprofile %}
4256+
4257+{% include "django_messages/inlines/navigation.html" %}
4258+
4259+<br />
4260+<br />
4261+<div class="box_item_model fixed_site border">
4262+ <h3 class="title">Top ten widelands players</h3>
4263+ <table cellspacing="1" class="text full_site">
4264+ <tr>
4265+ <td>User</td>
4266+ <td>ranking</td>
4267+ <td>rating</td>
4268+ <td>wins</td>
4269+ <td>losses</td>
4270+ </tr>
4271+ {% for userstat in ggzstats %}
4272+ <tr>
4273+ <td class="{% cycle "odd" "even" %}"><a href="{% url wlggz_userstats userstat.handle %}">{{ userstat.handle }}</a></td>
4274+ <td class="{% cycle "odd" "even" %}"> {{ userstat.ranking|floatformat }} </td>
4275+ <td class="{% cycle "odd" "even" %}"> {{ userstat.rating|floatformat }} </td>
4276+ <td class="{% cycle "odd" "even" %}"> {{ userstat.wins|floatformat }} </td>
4277+ <td class="{% cycle "odd" "even" %}"> {{ userstat.losses|floatformat }} </td>
4278+ </tr>
4279+ {% empty %}
4280+ <tr>
4281+ <td class="even show_center" colspan="5">
4282+ <br />
4283+ <b>Sorry, no ranking yet</b>
4284+ <br />
4285+ <br />
4286+ </td>
4287+ </tr>
4288+ {% endfor %}
4289+ </table>
4290+</div>
4291+{% endblock %}
4292
4293=== added file 'templates/wlggz/view_ggz_matches.html'
4294--- templates/wlggz/view_ggz_matches.html 1970-01-01 00:00:00 +0000
4295+++ templates/wlggz/view_ggz_matches.html 2010-10-30 22:51:06 +0000
4296@@ -0,0 +1,45 @@
4297+{% extends "wlggz/base.html" %}
4298+
4299+{% load i18n %}
4300+
4301+{% block content %}
4302+{% load custom_date %}
4303+{% load wlprofile %}
4304+
4305+{% include "django_messages/inlines/navigation.html" %}
4306+
4307+<br />
4308+<br />
4309+<div class="box_item_model fixed_site border">
4310+ <h3 class="title">Last 10 matches</h3>
4311+ <table cellspacing="1" class="text full_site">
4312+ <tr>
4313+ <td class="ggz_date">Date</td>
4314+ <td class="ggz_winner">Winner</td>
4315+ <td class="ggz_vs">Participants</td>
4316+ </tr>
4317+ {% for match in ggzmatches %}
4318+ <tr>
4319+ <td class="{% cycle "odd" "even" %}">{{ match.date_date }}</td>
4320+ <td class="{% cycle "odd" "even" %}">
4321+ {{ match.winner_as_userlink }}
4322+ </td>
4323+ <td class="{% cycle "odd" "even" %}">
4324+ {% for player in match.wlggz_matchplayers.all %}
4325+ {{ player.handle_as_userlink }}({{ player.result }}, {{ player.points }})
4326+ {% endfor %}
4327+ </td>
4328+ </tr>
4329+ {% empty %}
4330+ <tr>
4331+ <td class="even show_center" colspan="3">
4332+ <br />
4333+ <b>Sorry, no matches yet</b>
4334+ <br />
4335+ <br />
4336+ </td>
4337+ </tr>
4338+ {% endfor %}
4339+ </table>
4340+</div>
4341+{% endblock %}
4342
4343=== added file 'templates/wlggz/view_ggz_overview.html'
4344--- templates/wlggz/view_ggz_overview.html 1970-01-01 00:00:00 +0000
4345+++ templates/wlggz/view_ggz_overview.html 2010-10-30 22:51:06 +0000
4346@@ -0,0 +1,27 @@
4347+{% extends "wlggz/base.html" %}
4348+
4349+{% load i18n %}
4350+
4351+{% block content %}
4352+{% load custom_date %}
4353+
4354+{% include "django_messages/inlines/navigation.html" %}
4355+<br />
4356+<br />
4357+<div class="box_item_model fixed_site border">
4358+ <h3 class="title">{% trans "Available Links" %}</h3>
4359+ <div class="info_line show_left">
4360+ <br />
4361+ &nbsp;&nbsp;<a href="{% url wlggz_matches %}">Last matches</a><br />
4362+ &nbsp;&nbsp;<a href="{% url wlggz_ranking %}">GGZ ranking</a><br />
4363+ <br />
4364+ {% if user.is_authenticated %}
4365+ &nbsp;&nbsp;<a href="{% url wlggz_userstats %}">View your ggz statistics</a><br />
4366+ &nbsp;&nbsp;<a href="{% url wlggz_userinfo %}">About your ggz account</a><br />
4367+ &nbsp;&nbsp;<a href="{% url wlggz_changepw %}">Change your ggz password</a><br />
4368+ <br />
4369+ {% endif %}
4370+ </div>
4371+</div>
4372+
4373+{% endblock %}
4374
4375=== added file 'templates/wlggz/view_ggz_playerstats.html'
4376--- templates/wlggz/view_ggz_playerstats.html 1970-01-01 00:00:00 +0000
4377+++ templates/wlggz/view_ggz_playerstats.html 2010-10-30 22:51:06 +0000
4378@@ -0,0 +1,106 @@
4379+{% extends "wlggz/base.html" %}
4380+
4381+{% load i18n %}
4382+
4383+{% block content %}
4384+{% load custom_date %}
4385+{% load wlprofile %}
4386+
4387+{% include "django_messages/inlines/navigation.html" %}
4388+
4389+<br />
4390+<br />
4391+
4392+{% if ggzauth.user %}
4393+ <div class="box_item_model fixed_site border">
4394+ <h3 class="title">{% trans "GGZ results for" %} {{ ggzauth.user.username }}</h3>
4395+ <table class="info_line full_site">
4396+ <tr><td class="ggz_stats">Last ggz login:</td><td class="show_left"> {{ ggzauth.lastlogin }}</td></tr>
4397+ <tr><td class="ggz_stats">Ranking:</td><td class="show_left"> {{ ggzstats.ranking }}</td></tr>
4398+ <tr><td class="ggz_stats">Rating:</td><td class="show_left"> {{ ggzstats.rating|floatformat }}</td></tr>
4399+ <tr><td class="ggz_stats">wins:</td><td class="show_left"> {{ ggzstats.wins }}</td></tr>
4400+ <tr><td class="ggz_stats">losses:</td><td class="show_left"> {{ ggzstats.losses }}</td></tr>
4401+ </table>
4402+ </div>
4403+ <br />
4404+ <br />
4405+
4406+ <div class="box_item_model fixed_site border">
4407+ <h3 class="title">Last 10 matches of {{ ggzauth.user.username }}</h3>
4408+ {% if ggzmatches %}
4409+ <table width="100%" cellspacing="1" class="text">
4410+ <tr>
4411+ <td class="ggz_date">Date</td>
4412+ <td class="ggz_winner">Winner</td>
4413+ <td class="ggz_vs">Participants</td>
4414+ </tr>
4415+ {% for match in ggzmatches %}
4416+ <tr>
4417+ <td class="{% cycle "odd" "even" %}">{{ match.match.date_date }}</td>
4418+ <td class="{% cycle "odd" "even" %}">
4419+ {% if match.match.winner %}
4420+ {{ match.match.winner_as_userlink }}
4421+ {% endif %}
4422+ </td>
4423+ <td class="{% cycle "odd" "even" %}">
4424+ {% for player in match.match.wlggz_matchplayers.all %}
4425+ {{ player.handle_as_userlink }}
4426+ {% endfor %}
4427+ </td class="{% cycle "odd" "even" %}">
4428+ </tr>
4429+ {% endfor %}
4430+ </table>
4431+ {% else %}
4432+ <div class="info_line show_center">
4433+ <br />
4434+ <b>User has not participated in any matches</b>
4435+ <br />
4436+ <br />
4437+ </div>
4438+ {% endif %}
4439+ </div>
4440+ <br />
4441+ <br />
4442+ <div class="box_item_model fixed_site border">
4443+ <h3 class="title">Last 10 matches {{ ggzauth.user.username }} won</h3>
4444+ {% if ggzwonmatches %}
4445+ <table cellspacing="1" class="text full_site">
4446+ <tr>
4447+ <td class="ggz_date">Date</td>
4448+ <td class="ggz_winner">Winner</td>
4449+ <td class="ggz_vs">Participants</td>
4450+ </tr>
4451+ {% for match in ggzwonmatches %}
4452+ <tr>
4453+ <td class="{% cycle "odd" "even" %}">{{ match.date_date }}</td>
4454+ <td class="{% cycle "odd" "even" %}">{{ match.winner_as_userlink }}</td>
4455+ <td class="{% cycle "odd" "even" %}">
4456+ {% for player in match.wlggz_matchplayers.all %}
4457+ {{ player.handle_as_userlink }}
4458+ {% endfor %}
4459+ </td>
4460+ </tr>
4461+ {% endfor %}
4462+ </table>
4463+ {% else %}
4464+ <div class="info_line show_center">
4465+ <br />
4466+ <b>User has won no matches</b>
4467+ <br />
4468+ <br />
4469+ </div>
4470+ {% endif %}
4471+ </div>
4472+{% else %}
4473+ <div class="box_item_model">
4474+ <h3 class="title">{% trans "GGZ results for" %} {{ ggzauth.user.username }}</h3>
4475+ <div class="info_line show_center">
4476+ <br />
4477+ <b class="errormessage">User does not exist or has no ggz account
4478+ <br />
4479+ <br />
4480+ </table>
4481+ </div>
4482+{% endif %}
4483+
4484+{% endblock %}
4485
4486=== modified file 'templates/wlprofile/edit_profile.html'
4487--- templates/wlprofile/edit_profile.html 2010-01-02 21:19:28 +0000
4488+++ templates/wlprofile/edit_profile.html 2010-10-30 22:51:06 +0000
4489@@ -4,11 +4,11 @@
4490
4491 {% block content %}
4492 {% ifequal user profile.user %}
4493- {% include "messages/inlines/navigation.html" %}
4494+ {% include "django_messages/inlines/navigation.html" %}
4495 {% endifequal %}
4496 <br />
4497 <br />
4498-<div class="profile_item">
4499+<div class="box_item_model fixed_site border">
4500 <h3 class="title">{% trans "Profile editing" %}</h3>
4501 <div class="content">
4502 {% if profile.avatar %}
4503@@ -25,29 +25,54 @@
4504 {% endif %}
4505
4506 {% for field in profile_form %}
4507+ {% if field.errors %}
4508 <tr>
4509- {% if field.errors %}
4510 <td colspan="2" class="{% cycle "odd" "even" %}">
4511 <div class="errormessage">{{ field.errors }}</div>
4512 </td>
4513 </tr>
4514+ {% endif %}
4515+ {% ifequal field.name "delete_avatar" %}
4516+ {% if profile.avatar %}
4517 <tr>
4518+ <td class="{% cycle "odd" "even" %}">{{ field.label_tag }}:</td>
4519+ <td class="{% cycle "odd" "even" %}">{{ field }}
4520+ </tr>
4521 {% endif %}
4522- <td {% ifequal field.name "signature" %} valign="top" {% endifequal %}class="{% cycle "odd" "even" %}">{{ field.label_tag }}:</td>
4523- <td class="{% cycle "odd" "even" %}">{{ field }}
4524+ {% else %}
4525+ <tr>
4526+ <td class="{% cycle "odd" "even" %} {%ifequal field.name "signature" %}show_left{% endifequal %}">{{ field.label_tag }}:</td>
4527+ <td class="{% cycle "odd" "even" %}">{{ field }}
4528 {% ifequal field.name "time_display" %}
4529 <a href="/wiki/HomepageDocuTimeDisplay">Documented here</a>
4530 {% endifequal %}
4531 </td>
4532 </tr>
4533+ {% endifequal %}
4534 {% endfor %}
4535 </table>
4536- </div>
4537- <table class="bottom_line" width="100%">
4538- <tr>
4539- <td><input type="submit" value="{% trans "Save" %}" /></td>
4540- </tr>
4541- </table>
4542+ </div>
4543+ <div class="info_line">
4544+ <input type="submit" value="{% trans "Save" %}" />
4545+ </div>
4546 </form>
4547 </div>
4548+<br />
4549+<div class="box_item_model fixed_site border">
4550+ <div class="info_line show_left">
4551+ <a href="{% url auth_change_password %}">Change website password</a>
4552+ <br />
4553+ <br />
4554+ <b class="errormessage">WARNING: Passwords are transmitted in cleartext.</b>
4555+ </div>
4556+</div>
4557+<br />
4558+<div class="box_item_model fixed_site border">
4559+ <div class="info_line show_left">
4560+ <a href="{% url wlggz_changepw %}">Change online lobby password</a>
4561+ <br />
4562+ <br />
4563+ <b class="errormessage">WARNING: GGZ transmitts the password in cleartext. Choose a different password for online gaming.</b>
4564+ </div>
4565+</div>
4566 {% endblock %}
4567
4568=== modified file 'templates/wlprofile/view_profile.html'
4569--- templates/wlprofile/view_profile.html 2010-01-03 14:37:49 +0000
4570+++ templates/wlprofile/view_profile.html 2010-10-30 22:51:06 +0000
4571@@ -5,18 +5,17 @@
4572 {% block content %}
4573 {% load custom_date %}
4574
4575-{% ifequal user profile.user %}
4576-{% include "messages/inlines/navigation.html" %}
4577-{%endifequal%}
4578-<br />
4579-<br />
4580-<div class="profile_item">
4581+{% include "django_messages/inlines/navigation.html" %}
4582+
4583+<br />
4584+<br />
4585+<div class="box_item_model fixed_site border">
4586 <h3 class="title">{% trans "View Profile" %}</h3>
4587 <div class="content">
4588 {% if profile.avatar %}
4589 <img src="{{ profile.avatar.url }}" />
4590 {% endif %}
4591- <table width="100%" cellspacing="1" class="text">
4592+ <table cellspacing="1" class="text full_site">
4593 <tr>
4594 <td class="odd">User:</td>
4595 <td class="odd">{{ profile.user.username }}</td>
4596@@ -57,14 +56,19 @@
4597 <td class="even">Yahoo:</td>
4598 <td class="even">{{ profile.yahoo }}</td>
4599 </tr>
4600+ <tr>
4601+ <td class="odd show_left">Signature:</td>
4602+ <td class="odd show_left">{{ profile.signature|urlize|linebreaks }}</td>
4603+ </tr>
4604 {% ifequal user profile.user %}
4605 <tr>
4606- <td class="odd">Email:</td>
4607- <td class="odd">{{ profile.user.email }}</td>
4608+ <td class="even">Email:</td>
4609+ <td class="even">{{ profile.user.email }}</td>
4610 </tr>
4611 {% endifequal %}
4612 </table>
4613 </div>
4614+{% comment %}
4615 <table class="bottom_line" width="100%">
4616 <tr>
4617 <td>
4618@@ -76,5 +80,13 @@
4619 </td>
4620 </tr>
4621 </table>
4622+<table class="bottom_line" width="100%">
4623+ <tr>
4624+ <td>
4625+ <a href="{% url wlggz_userstats profile.user %}">View GGZ Statistics of this user</a>
4626+ </td>
4627+ </tr>
4628+</table>
4629+{% endcomment %}
4630 </div>
4631 {% endblock %}
4632
4633=== modified file 'templates/wlwebchat/index.html'
4634--- templates/wlwebchat/index.html 2010-09-06 19:10:18 +0000
4635+++ templates/wlwebchat/index.html 2010-10-30 22:51:06 +0000
4636@@ -18,7 +18,7 @@
4637
4638 <!-- Start of Webchat -->
4639 {% if user.is_anonymous %}
4640-<iframe src="http://webchat.freenode.net?nick=guest&channels=widelands&uio=d4" width="647" height="400"></iframe>
4641+<iframe src="http://webchat.freenode.net?nick=widelands_.&channels=widelands&uio=d4" width="647" height="400"></iframe>
4642 {% else %}
4643 <iframe src="http://webchat.freenode.net?nick={{ user.username }}&channels=widelands&uio=d4" width="100%" height="400"></iframe>
4644 {% endif %}
4645
4646=== modified file 'urls.py'
4647--- urls.py 2010-03-14 14:13:24 +0000
4648+++ urls.py 2010-10-30 22:51:06 +0000
4649@@ -22,6 +22,7 @@
4650 # Django builtin / Registration
4651 (r'^accounts/logout/(next=(?P<next_page>.*))?$', 'django.contrib.auth.views.logout'),
4652 url (r'^accounts/register/$', 'mainpage.views.register', name='registration_register'),
4653+ url(r'^accounts/changepw/$', 'django.contrib.auth.views.password_change', name="auth_change_password"),
4654 (r'^accounts/', include('registration.backends.default.urls')),
4655 (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds}),
4656
4657@@ -49,6 +50,7 @@
4658 url(r'^poll/', include("wlpoll.urls")),
4659 url(r'^maps/', include("wlmaps.urls")),
4660 url(r'^screenshots/', include("wlscreens.urls")),
4661+ url(r'^ggz/', include("wlggz.urls")),
4662 )
4663
4664 try:
4665
4666=== modified file 'wiki/feeds.py'
4667--- wiki/feeds.py 2010-01-01 21:35:23 +0000
4668+++ wiki/feeds.py 2010-10-30 22:51:06 +0000
4669@@ -9,15 +9,16 @@
4670 from django.template.loader import get_template
4671 from wiki.models import ChangeSet, Article
4672 from wiki.utils import get_ct
4673-import notification.atomformat as atom
4674+from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
4675
4676 ALL_ARTICLES = Article.objects.all()
4677 ALL_CHANGES = ChangeSet.objects.all()
4678
4679 class RssHistoryFeed(Feed):
4680
4681+ feed_type = Rss201rev2Feed
4682 title = 'History for all articles'
4683- link = '/wiki/'
4684+ link = '/wiki/feeds/rss'
4685 description = 'Recent changes in wiki'
4686
4687 def __init__(self, request,
4688@@ -49,37 +50,21 @@
4689 """
4690 return item.modified
4691
4692-
4693-class AtomHistoryFeed(atom.Feed):
4694-
4695- feed_title = 'History for all articles'
4696+ def item_author_name(self, item):
4697+ """
4698+ Takes the object returned by get_object and returns the feeds's
4699+ auhor's name as a Python string
4700+ """
4701+ if item.is_anonymous_change():
4702+ return _("Anonymous")
4703+ return item.editor.username
4704+
4705+
4706+class AtomHistoryFeed(RssHistoryFeed):
4707+
4708+ feed_type = Atom1Feed
4709 feed_subtitle = 'Recent changes in wiki'
4710-
4711- def __init__(self, request,
4712- group_slug=None, group_slug_field=None, group_qs=None,
4713- article_qs=ALL_ARTICLES, changes_qs=ALL_CHANGES,
4714- extra_context=None,
4715- title_template = u'feeds/history_title.html',
4716- description_template = u'feeds/history_description.html',
4717- *args, **kw):
4718-
4719- if group_slug is not None:
4720- group = get_object_or_404(group_qs,
4721- **{group_slug_field : group_slug})
4722- self.changes_qs = changes_qs.filter(article__content_type=get_ct(group),
4723- article__object_id=group.id)
4724- else:
4725- self.changes_qs = changes_qs
4726-
4727- self.title_template = get_template(title_template)
4728- self.description_template = get_template(description_template)
4729- super(AtomHistoryFeed, self).__init__('', request)
4730-
4731- def feed_id(self):
4732- return "feed_id"
4733-
4734- def items(self):
4735- return self.changes_qs.order_by('-modified')[:30]
4736+ link = '/wiki/feeds/atom'
4737
4738 def item_id(self, item):
4739 return "%s" % item.id
4740@@ -103,9 +88,19 @@
4741 c = Context({'obj' : item,})
4742 return ({'type': 'html'}, self.description_template.render(c))
4743
4744+ def item_author_name(self, item):
4745+ """
4746+ Takes the object returned by get_object and returns the feeds's
4747+ auhor's name as a Python string
4748+ """
4749+ if item.is_anonymous_change():
4750+ return _("Anonymous")
4751+ return item.editor.username
4752+
4753
4754 class RssArticleHistoryFeed(Feed):
4755
4756+ feed_type = Rss201rev2Feed
4757 def __init__(self, title, request,
4758 group_slug=None, group_slug_field=None, group_qs=None,
4759 article_qs=ALL_ARTICLES, changes_qs=ALL_CHANGES,
4760@@ -150,27 +145,8 @@
4761 return item.modified
4762
4763
4764-class AtomArticleHistoryFeed(atom.Feed):
4765-
4766- def __init__(self, title, request,
4767- group_slug=None, group_slug_field=None, group_qs=None,
4768- article_qs=ALL_ARTICLES, changes_qs=ALL_CHANGES,
4769- extra_context=None,
4770- title_template = u'feeds/history_title.html',
4771- description_template = u'feeds/history_description.html',
4772- *args, **kw):
4773-
4774- if group_slug is not None:
4775- group = get_object_or_404(group_qs,
4776- **{group_slug_field : group_slug})
4777- self.article_qs = article_qs.filter(content_type=get_ct(group),
4778- object_id=group.id)
4779- else:
4780- self.article_qs = article_qs
4781-
4782- self.title_template = get_template(title_template)
4783- self.description_template = get_template(description_template)
4784- super(AtomArticleHistoryFeed, self).__init__('', request)
4785+class AtomArticleHistoryFeed(RssArticleHistoryFeed):
4786+ feed_type = Atom1Feed
4787
4788 def get_object(self, bits):
4789 # We work around a bug here which is likely in atomformat.py;
4790@@ -190,9 +166,6 @@
4791 def feed_id(self):
4792 return "feed_id"
4793
4794- def items(self, obj):
4795- return ChangeSet.objects.filter(article__id__exact=obj.id).order_by('-modified')[:30]
4796-
4797 def item_id(self, item):
4798 return "%s" % item.id
4799
4800
4801=== added directory 'wlggz'
4802=== added file 'wlggz/__init__.py'
4803=== added file 'wlggz/admin.py'
4804--- wlggz/admin.py 1970-01-01 00:00:00 +0000
4805+++ wlggz/admin.py 2010-10-30 22:51:06 +0000
4806@@ -0,0 +1,27 @@
4807+#!/usr/bin/env python -tt
4808+# encoding: utf-8
4809+#
4810+# File: wlggz/admin.py
4811+#
4812+# Created 2010-06-03 by Timo Wingender <timo.wingender@gmx.de>
4813+#
4814+# Last Modified: $Date$
4815+#
4816+
4817+from django.utils.translation import ugettext_lazy as _
4818+from django.contrib import admin
4819+from models import GGZAuth
4820+
4821+class GGZAdmin(admin.ModelAdmin):
4822+ list_display = ['user', 'password', 'permissions', 'lastlogin']
4823+ list_per_page = 20
4824+ ordering = ['-user']
4825+ search_fields = ['user__username', 'user__first_name', 'user__last_name']
4826+ fieldsets = (
4827+ (None, {
4828+ 'fields': ('user', 'password', 'permissions')
4829+ }
4830+ ),
4831+ )
4832+
4833+admin.site.register(GGZAuth, GGZAdmin)
4834
4835=== added file 'wlggz/fields.py'
4836--- wlggz/fields.py 1970-01-01 00:00:00 +0000
4837+++ wlggz/fields.py 2010-10-30 22:51:06 +0000
4838@@ -0,0 +1,85 @@
4839+"""
4840+Details about AutoOneToOneField:
4841+ http://softwaremaniacs.org/blog/2007/03/07/auto-one-to-one-field/
4842+"""
4843+
4844+from StringIO import StringIO
4845+import logging
4846+
4847+from django.db.models import OneToOneField
4848+from django.db.models.fields.related import SingleRelatedObjectDescriptor
4849+from django.db import models
4850+from django.core.files.uploadedfile import SimpleUploadedFile
4851+
4852+
4853+class AutoSingleRelatedObjectDescriptor(SingleRelatedObjectDescriptor):
4854+ def __get__(self, instance, instance_type=None):
4855+ try:
4856+ return super(AutoSingleRelatedObjectDescriptor, self).__get__(instance, instance_type)
4857+ except self.related.model.DoesNotExist:
4858+ obj = self.related.model(**{self.related.field.name: instance})
4859+ obj.save()
4860+ return obj
4861+
4862+
4863+class AutoOneToOneField(OneToOneField):
4864+ """
4865+ OneToOneField creates dependent object on first request from parent object
4866+ if dependent oject has not created yet.
4867+ """
4868+
4869+ def contribute_to_related_class(self, cls, related):
4870+ setattr(cls, related.get_accessor_name(), AutoSingleRelatedObjectDescriptor(related))
4871+ #if not cls._meta.one_to_one_field:
4872+ #cls._meta.one_to_one_field = self
4873+
4874+
4875+class ExtendedImageField(models.ImageField):
4876+ """
4877+ Extended ImageField that can resize image before saving it.
4878+ """
4879+ def __init__(self, *args, **kwargs):
4880+ self.width = kwargs.pop('width', None)
4881+ self.height = kwargs.pop('height', None)
4882+ super(ExtendedImageField, self).__init__(*args, **kwargs)
4883+
4884+
4885+ def save_form_data(self, instance, data):
4886+ if data and self.width and self.height:
4887+ if instance.avatar:
4888+ instance.avatar.delete()
4889+
4890+ content = self.resize_image(data.read(), width=self.width, height=self.height)
4891+ data = SimpleUploadedFile(instance.user.username + ".png", content, data.content_type)
4892+ super(ExtendedImageField, self).save_form_data(instance, data)
4893+
4894+
4895+ def resize_image(self, rawdata, width, height):
4896+ """
4897+ Resize image to fit it into (width, height) box.
4898+ """
4899+
4900+ try:
4901+ import Image
4902+ except ImportError:
4903+ from PIL import Image
4904+
4905+ image = Image.open(StringIO(rawdata))
4906+ try:
4907+ oldw, oldh = image.size
4908+
4909+ if oldw > width or oldh > height:
4910+ if oldw >= oldh:
4911+ x = int(round((oldw - oldh) / 2.0))
4912+ image = image.crop((x, 0, (x + oldh) - 1, oldh - 1))
4913+ else:
4914+ y = int(round((oldh - oldw) / 2.0))
4915+ image = image.crop((0, y, oldw - 1, (y + oldw) - 1))
4916+ image = image.resize((width, height), resample=Image.ANTIALIAS)
4917+ except Exception, err:
4918+ logging.error(err)
4919+ return ''
4920+
4921+ string = StringIO()
4922+ image.save(string, format='PNG')
4923+ return string.getvalue()
4924
4925=== added file 'wlggz/forms.py'
4926--- wlggz/forms.py 1970-01-01 00:00:00 +0000
4927+++ wlggz/forms.py 2010-10-30 22:51:06 +0000
4928@@ -0,0 +1,43 @@
4929+#!/usr/bin/env python -tt
4930+# encoding: utf-8
4931+#
4932+# Created by Timo Wingender <timo.wingender@gmx.de> on 2010-06-02.
4933+#
4934+# Last Modified: $Date$
4935+#
4936+
4937+from django import forms
4938+from models import GGZAuth
4939+from django.utils.translation import ugettext_lazy as _
4940+
4941+import hashlib
4942+import base64
4943+import settings
4944+import re
4945+
4946+class EditGGZForm(forms.ModelForm):
4947+ password = forms.CharField(label=_(u'GGZ password'), widget = forms.PasswordInput(render_value = False), required=True)
4948+
4949+ class Meta:
4950+ model = GGZAuth
4951+ fields = [ 'password', ]
4952+
4953+ def __init__(self, *args, **kwargs):
4954+ instance = kwargs.pop("instance")
4955+
4956+ print "instance: %s, kwargs: %s" % (instance, kwargs)
4957+ super(EditGGZForm, self).__init__(instance=instance, *args,**kwargs)
4958+
4959+ def clean_password(self):
4960+ pw = self.cleaned_data['password']
4961+ print "pw: %s" % (pw)
4962+ pw_hash = hashlib.sha1(pw).digest()
4963+ pw_base64 = base64.standard_b64encode(pw_hash)
4964+ print "sha1: %s" % (pw_hash)
4965+ print "base: %s" % (pw_base64)
4966+ return pw_base64
4967+
4968+
4969+ def save(self):
4970+ super(EditGGZForm, self).save()
4971+
4972
4973=== added file 'wlggz/ggz_models.py'
4974--- wlggz/ggz_models.py 1970-01-01 00:00:00 +0000
4975+++ wlggz/ggz_models.py 2010-10-30 22:51:06 +0000
4976@@ -0,0 +1,189 @@
4977+#!/usr/bin/env python -tt
4978+# encoding: utf-8
4979+#
4980+# Created by Timo Wingender <timo.wingender@gmx.de> on 2010-06-03.
4981+#
4982+# Last Modified: $Date$
4983+#
4984+
4985+
4986+# This is an auto-generated and eddited representation for the ggzd tables.
4987+#
4988+
4989+from django.db import models
4990+from django.db.models import OneToOneField, ForeignKey
4991+from django.contrib.auth.models import User
4992+from django.core.urlresolvers import reverse
4993+from django.utils.safestring import mark_safe
4994+
4995+import datetime
4996+
4997+def ggz_userlink(user):
4998+ data = u'<a href="%s">%s</a>' % (\
4999+ reverse('wlggz_userstats', args=[user.username]), user.username)
5000+ return mark_safe(data)
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches