From: b Date: Tue, 12 Aug 2014 07:51:40 +0000 (+0000) Subject: v.1 i.0 X-Git-Tag: v1.0 X-Git-Url: http://bicyclesonthemoon.info/git-projects/?a=commitdiff_plain;h=6759a55759d97ad4840736320441b0751c183aef;p=ott%2Fmirror v.1 i.0 First publicly available version. git-svn-id: svn://botcastle1b/ottmirror@1 23ac2ed3-cec8-4626-8109-7118d8ca9799 --- 6759a55759d97ad4840736320441b0751c183aef diff --git a/botmlogo2.png b/botmlogo2.png new file mode 100644 index 0000000..520f68a Binary files /dev/null and b/botmlogo2.png differ diff --git a/index.htm b/index.htm new file mode 100644 index 0000000..f66b5f9 --- /dev/null +++ b/index.htm @@ -0,0 +1,258 @@ + + +The mirror • Bicycles on the Moon + + + +1190.bicyclesonthemoon.dnsd.info +

You can have your own OTT mirror now!

+
+

If you want to run your own copy of the ЯOЯЯIM TTO, you +can, because I made it available. Follow these instructions to download and +setup your own ЯOЯЯIM TTO.

+ +

Dependencies

+The mirror depends on some things: + + +

Downloading

+ + +

Preparing the enviroment

+

Go to where you downloaded the source. Open re.awk. At hte top of +the file there are some paths defined. You'll have to change some of these. They +have to be double-escaped. The directories should not end with a +"/".

+ + +

Setting up the server

+

You have to set up server so that some URLs will link to some CGI programs. +

+

That's how I did it in apache2:
+
+ +Alias /ott/log /eizm/log/ottmirror
+<Directory "/eizm/log/ottmirror">
+ Options Indexes
+ Order allow,deny
+ Allow from all
+</Directory>
+
+ScriptAlias /ott/view /eizm/pro/ottmirror/view
+ScriptAlias /ott/mview /eizm/pro/ottmirror/mview
+ScriptAlias /ott/update /eizm/pro/ottmirror/update
+ScriptAlias /ott/index /eizm/pro/ottmirror/index
+ScriptAlias /ott/post /eizm/pro/ottmirror/post
+ScriptAliasMatch ^/ott/?$ /eizm/pro/ottmirror/index
+
+

+ +

Commandline parameters for bot2

+

bot2 (bothasar_t) is the thread archiving bot.

+ + +

Commandline parameters for bot3

+

bot3 (bothasar_p) is the post bot.

+ + +

Scheduling the bots

+

The bots won't run on themselves. They need something that will start them at +regular time intervals. I will share my crontab configuration.

+

+20,50 * * * * /eizm/pro/ottmirror/bot2 -i2 -r -o1 -m5 -w9 -v5 -d -a +
+This bot runs every 30 minutes and updates the pages with new posts.
+
+26 23 * * * /eizm/pro/ottmirror/bot2 -i3 -r -o5 -m10 -p2 -w9 -v5 -d -a -b +
+This bots runs every day and reloads the pages with new posts and 4 previous +pages except the two last pages. Because there could be a delurker or someone +could make edits which we don't want to miss.
+
+23 * * * * /eizm/pro/ottmirror/bot2 -i1 -o0 -m3 -p2 -w9 -v5 -d -a -b +
+This bot runs every hour and goes slowly through the whole thread except the two +latest pages. Because there can be temporal edits. (like the 1300 and 1800 +repositories).
+
+While the thread being catched up for the first time I'd recommend running only +one copy of the bot at a faster rate than this.
+
+7,27,47 * * * * /eizm/pro/ottmirror/bot3 -w15
+This bot runs every +20 minutes and looks for new posts to be sent to the thread.
+
+0 0 * * 1 /bin/mv /eizm/log/ottmirror/bot2.log.1 /eizm/log/ottmirror/bot2.log.1.lastweek
+0 0 * * 1 /bin/mv /eizm/log/ottmirror/bot2.log.2 /eizm/log/ottmirror/bot2.log.2.lastweek
+0 0 * * 1 /bin/mv /eizm/log/ottmirror/bot2.log.3 /eizm/log/ottmirror/bot2.log.3.lastweek
+0 0 * * 1 /bin/mv /eizm/log/ottmirror/bot3.log /eizm/log/ottmirror/bot3.log.lastweek +

+This moves the log files once in a week. Otherwise they would grow to infinity. +

+ +

Bugs

+In line 180 of bot2.1.awk change "if(arr3[2]==404)" to +"if(arr3[2]>=400&&arr3[2]<500)". This will be fixed +in next update. +

Congratulations

+

If you managed to do everything described here you should have your own ЯOЯЯIM +TTO. Now wait for it until it catches the whole thread.
+

+

(Unless I forgot about something important here. Let me know if I did)

+Balthasar
+
+
+1190.bicyclesonthemoon.dnsd.info + + \ No newline at end of file diff --git a/ott.zip/end b/ott.zip/end new file mode 100644 index 0000000..8e6f805 --- /dev/null +++ b/ott.zip/end @@ -0,0 +1,175 @@ + + + + + +
+
+ + + + + + + +
+

Return to Board index

+
+ +
+ + + + +
+
+

Who is online

+

Users browsing this forum: NaN registered users and NaN guests

+

Forum permissions

+

You cannot read about your forum permissions

+ +
+

Return to 1190.bicyclesonthemoon.dnsd.info

+
+ + +
+ +
+ + diff --git a/ott.zip/info.htm b/ott.zip/info.htm new file mode 100644 index 0000000..7d6cde9 --- /dev/null +++ b/ott.zip/info.htm @@ -0,0 +1,195 @@ + + + + + + + + + + + +Mustardtime posting • ЯOЯЯIM TTO • Bicycles on the Moon + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+
+

Information

+ +###info +
+
+ + +
+ + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/ott.zip/np/end b/ott.zip/np/end new file mode 100644 index 0000000..cc60f9f --- /dev/null +++ b/ott.zip/np/end @@ -0,0 +1,126 @@ +
+
+###prev +###next + + +
+
+
+
+ + +###links +
+

Return to Individual XKCD Comic Threads

+
+
+ + + +
+
+

Who is online

+

Users browsing this forum: NaN registered users and NaN guests

+ +
+

Return to 1190.bicyclesonthemoon.dnsd.info

+
+ + +
+ +
+ + diff --git a/ott.zip/np/top b/ott.zip/np/top new file mode 100644 index 0000000..1d4bbee --- /dev/null +++ b/ott.zip/np/top @@ -0,0 +1,138 @@ + + + + + + + + + + + +ЯOЯЯIM TTO • 1190: "Time" • Bicycles on the Moon + + + + + + + + + + + + + +
+ + + +
+###title +

Wait for it.

+
This forum is for the individual discussion thread that goes with each new comic.
+

+Moderators: Moderators General, Magistrates, Prelates +

+
+ + + +###links +
+
+ diff --git a/ott.zip/post.htm b/ott.zip/post.htm new file mode 100644 index 0000000..9413fab --- /dev/null +++ b/ott.zip/post.htm @@ -0,0 +1,505 @@ + + + + + + + + + + + +Mustardtime posting • ЯOЯЯIM TTO • Bicycles on the Moon + + + + + + + + + + + + + + + + + + +
+ + + +
+ +

Post during mustardtime.

+ + +
+ +###HTML + +
+
+ +

Post a reply

+ + + +
+ +###wrong + +
+
+###subject +
+
+
+###username +
+
+
+
+
Warning: The mirror can't verify your username or password.
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + Smilies
+ + :D + + :) + + :( + + :o + + :shock: + + :? + + 8-) + + :lol: + + :x + + :P + + :oops: + + :cry: + + :evil: + + :twisted: + + :roll: + + :wink: + + :!: + + :?: + + :idea: + + :arrow: + + :| + + :mrgreen: + +
+
+ +
+###message +
+
+ + +
+
+ +
+
+
+ +  +   + +
+ +
+
+ +
+ +
+ +
+
+ +
+ +###disable_bbcode + +###disable_smilies + +###disable_magic_url + +###attach_sig + +###notify + +
+ + + + + + +
+
+ + + + +
+ + +

Top

+ + +
+ + +
+ + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/ott.zip/prosilver/imageset/en/button_pm_forward.gif b/ott.zip/prosilver/imageset/en/button_pm_forward.gif new file mode 100644 index 0000000..3384df3 Binary files /dev/null and b/ott.zip/prosilver/imageset/en/button_pm_forward.gif differ diff --git a/ott.zip/prosilver/imageset/en/button_pm_new.gif b/ott.zip/prosilver/imageset/en/button_pm_new.gif new file mode 100644 index 0000000..cc0381c Binary files /dev/null and b/ott.zip/prosilver/imageset/en/button_pm_new.gif differ diff --git a/ott.zip/prosilver/imageset/en/button_pm_reply.gif b/ott.zip/prosilver/imageset/en/button_pm_reply.gif new file mode 100644 index 0000000..3275b06 Binary files /dev/null and b/ott.zip/prosilver/imageset/en/button_pm_reply.gif differ diff --git a/ott.zip/prosilver/imageset/en/button_topic_locked.gif b/ott.zip/prosilver/imageset/en/button_topic_locked.gif new file mode 100644 index 0000000..b08918a Binary files /dev/null and b/ott.zip/prosilver/imageset/en/button_topic_locked.gif differ diff --git a/ott.zip/prosilver/imageset/en/button_topic_new.gif b/ott.zip/prosilver/imageset/en/button_topic_new.gif new file mode 100644 index 0000000..5b7b1e0 Binary files /dev/null and b/ott.zip/prosilver/imageset/en/button_topic_new.gif differ diff --git a/ott.zip/prosilver/imageset/en/button_topic_reply.gif b/ott.zip/prosilver/imageset/en/button_topic_reply.gif new file mode 100644 index 0000000..e900c80 Binary files /dev/null and b/ott.zip/prosilver/imageset/en/button_topic_reply.gif differ diff --git a/ott.zip/prosilver/imageset/en/button_topic_reply_mustard.gif b/ott.zip/prosilver/imageset/en/button_topic_reply_mustard.gif new file mode 100644 index 0000000..53374ab Binary files /dev/null and b/ott.zip/prosilver/imageset/en/button_topic_reply_mustard.gif differ diff --git a/ott.zip/prosilver/imageset/en/icon_contact_pm.gif b/ott.zip/prosilver/imageset/en/icon_contact_pm.gif new file mode 100644 index 0000000..ec19011 Binary files /dev/null and b/ott.zip/prosilver/imageset/en/icon_contact_pm.gif differ diff --git a/ott.zip/prosilver/imageset/en/icon_post_edit.gif b/ott.zip/prosilver/imageset/en/icon_post_edit.gif new file mode 100644 index 0000000..19006f9 Binary files /dev/null and b/ott.zip/prosilver/imageset/en/icon_post_edit.gif differ diff --git a/ott.zip/prosilver/imageset/en/icon_post_quote.gif b/ott.zip/prosilver/imageset/en/icon_post_quote.gif new file mode 100644 index 0000000..c3708a1 Binary files /dev/null and b/ott.zip/prosilver/imageset/en/icon_post_quote.gif differ diff --git a/ott.zip/prosilver/imageset/en/icon_user_online.gif b/ott.zip/prosilver/imageset/en/icon_user_online.gif new file mode 100644 index 0000000..6b571ff Binary files /dev/null and b/ott.zip/prosilver/imageset/en/icon_user_online.gif differ diff --git a/ott.zip/prosilver/imageset/icon_back_top.gif b/ott.zip/prosilver/imageset/icon_back_top.gif new file mode 100644 index 0000000..4d2b8f3 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_back_top.gif differ diff --git a/ott.zip/prosilver/imageset/icon_contact_aim.gif b/ott.zip/prosilver/imageset/icon_contact_aim.gif new file mode 100644 index 0000000..be039fc Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_contact_aim.gif differ diff --git a/ott.zip/prosilver/imageset/icon_contact_email.gif b/ott.zip/prosilver/imageset/icon_contact_email.gif new file mode 100644 index 0000000..caa3683 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_contact_email.gif differ diff --git a/ott.zip/prosilver/imageset/icon_contact_icq.gif b/ott.zip/prosilver/imageset/icon_contact_icq.gif new file mode 100644 index 0000000..48a0937 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_contact_icq.gif differ diff --git a/ott.zip/prosilver/imageset/icon_contact_jabber.gif b/ott.zip/prosilver/imageset/icon_contact_jabber.gif new file mode 100644 index 0000000..e335433 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_contact_jabber.gif differ diff --git a/ott.zip/prosilver/imageset/icon_contact_msnm.gif b/ott.zip/prosilver/imageset/icon_contact_msnm.gif new file mode 100644 index 0000000..b822535 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_contact_msnm.gif differ diff --git a/ott.zip/prosilver/imageset/icon_contact_www.gif b/ott.zip/prosilver/imageset/icon_contact_www.gif new file mode 100644 index 0000000..83cee97 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_contact_www.gif differ diff --git a/ott.zip/prosilver/imageset/icon_contact_yahoo.gif b/ott.zip/prosilver/imageset/icon_contact_yahoo.gif new file mode 100644 index 0000000..305f297 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_contact_yahoo.gif differ diff --git a/ott.zip/prosilver/imageset/icon_post_delete.gif b/ott.zip/prosilver/imageset/icon_post_delete.gif new file mode 100644 index 0000000..f51ffc2 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_post_delete.gif differ diff --git a/ott.zip/prosilver/imageset/icon_post_info.gif b/ott.zip/prosilver/imageset/icon_post_info.gif new file mode 100644 index 0000000..af089d8 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_post_info.gif differ diff --git a/ott.zip/prosilver/imageset/icon_post_report.gif b/ott.zip/prosilver/imageset/icon_post_report.gif new file mode 100644 index 0000000..72c6ae8 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_post_report.gif differ diff --git a/ott.zip/prosilver/imageset/icon_post_target.gif b/ott.zip/prosilver/imageset/icon_post_target.gif new file mode 100644 index 0000000..a29dbff Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_post_target.gif differ diff --git a/ott.zip/prosilver/imageset/icon_topic_attach.gif b/ott.zip/prosilver/imageset/icon_topic_attach.gif new file mode 100644 index 0000000..9a70638 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_topic_attach.gif differ diff --git a/ott.zip/prosilver/imageset/icon_topic_latest.gif b/ott.zip/prosilver/imageset/icon_topic_latest.gif new file mode 100644 index 0000000..d79d31a Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_topic_latest.gif differ diff --git a/ott.zip/prosilver/imageset/icon_user_warn.gif b/ott.zip/prosilver/imageset/icon_user_warn.gif new file mode 100644 index 0000000..9c4ad98 Binary files /dev/null and b/ott.zip/prosilver/imageset/icon_user_warn.gif differ diff --git a/ott.zip/prosilver/imageset/mustard.gif b/ott.zip/prosilver/imageset/mustard.gif new file mode 100644 index 0000000..347b1fc Binary files /dev/null and b/ott.zip/prosilver/imageset/mustard.gif differ diff --git a/ott.zip/prosilver/imageset/mustard_smaller.gif b/ott.zip/prosilver/imageset/mustard_smaller.gif new file mode 100644 index 0000000..02cacfd Binary files /dev/null and b/ott.zip/prosilver/imageset/mustard_smaller.gif differ diff --git a/ott.zip/prosilver/imageset/mustard_smallest.gif b/ott.zip/prosilver/imageset/mustard_smallest.gif new file mode 100644 index 0000000..31753a7 Binary files /dev/null and b/ott.zip/prosilver/imageset/mustard_smallest.gif differ diff --git a/ott.zip/prosilver/imageset/spacer.gif b/ott.zip/prosilver/imageset/spacer.gif new file mode 100644 index 0000000..cd29009 Binary files /dev/null and b/ott.zip/prosilver/imageset/spacer.gif differ diff --git a/ott.zip/prosilver/imageset/subforum_read.gif b/ott.zip/prosilver/imageset/subforum_read.gif new file mode 100644 index 0000000..595595c Binary files /dev/null and b/ott.zip/prosilver/imageset/subforum_read.gif differ diff --git a/ott.zip/prosilver/imageset/subforum_unread.gif b/ott.zip/prosilver/imageset/subforum_unread.gif new file mode 100644 index 0000000..b2b661d Binary files /dev/null and b/ott.zip/prosilver/imageset/subforum_unread.gif differ diff --git a/ott.zip/prosilver/imageset/topic_mustard.gif b/ott.zip/prosilver/imageset/topic_mustard.gif new file mode 100644 index 0000000..54faa1b Binary files /dev/null and b/ott.zip/prosilver/imageset/topic_mustard.gif differ diff --git a/ott.zip/prosilver/imageset/topic_read.gif b/ott.zip/prosilver/imageset/topic_read.gif new file mode 100644 index 0000000..0347ffc Binary files /dev/null and b/ott.zip/prosilver/imageset/topic_read.gif differ diff --git a/ott.zip/prosilver/imageset/topic_read_hot.gif b/ott.zip/prosilver/imageset/topic_read_hot.gif new file mode 100644 index 0000000..dcb6f3b Binary files /dev/null and b/ott.zip/prosilver/imageset/topic_read_hot.gif differ diff --git a/ott.zip/prosilver/imageset/topic_read_locked.gif b/ott.zip/prosilver/imageset/topic_read_locked.gif new file mode 100644 index 0000000..f08ce33 Binary files /dev/null and b/ott.zip/prosilver/imageset/topic_read_locked.gif differ diff --git a/ott.zip/prosilver/imageset/xkcdLogo_transparent.png b/ott.zip/prosilver/imageset/xkcdLogo_transparent.png new file mode 100644 index 0000000..f7a2127 Binary files /dev/null and b/ott.zip/prosilver/imageset/xkcdLogo_transparent.png differ diff --git a/ott.zip/prosilver/smilies/icon_arrow.gif b/ott.zip/prosilver/smilies/icon_arrow.gif new file mode 100644 index 0000000..2880055 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_arrow.gif differ diff --git a/ott.zip/prosilver/smilies/icon_biggrin.gif b/ott.zip/prosilver/smilies/icon_biggrin.gif new file mode 100644 index 0000000..d352772 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_biggrin.gif differ diff --git a/ott.zip/prosilver/smilies/icon_confused.gif b/ott.zip/prosilver/smilies/icon_confused.gif new file mode 100644 index 0000000..0c49e06 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_confused.gif differ diff --git a/ott.zip/prosilver/smilies/icon_cool.gif b/ott.zip/prosilver/smilies/icon_cool.gif new file mode 100644 index 0000000..cead030 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_cool.gif differ diff --git a/ott.zip/prosilver/smilies/icon_cry.gif b/ott.zip/prosilver/smilies/icon_cry.gif new file mode 100644 index 0000000..7d54b1f Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_cry.gif differ diff --git a/ott.zip/prosilver/smilies/icon_eek.gif b/ott.zip/prosilver/smilies/icon_eek.gif new file mode 100644 index 0000000..5d39781 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_eek.gif differ diff --git a/ott.zip/prosilver/smilies/icon_evil.gif b/ott.zip/prosilver/smilies/icon_evil.gif new file mode 100644 index 0000000..ab1aa8e Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_evil.gif differ diff --git a/ott.zip/prosilver/smilies/icon_exclaim.gif b/ott.zip/prosilver/smilies/icon_exclaim.gif new file mode 100644 index 0000000..6e50e2e Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_exclaim.gif differ diff --git a/ott.zip/prosilver/smilies/icon_idea.gif b/ott.zip/prosilver/smilies/icon_idea.gif new file mode 100644 index 0000000..a40ae0d Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_idea.gif differ diff --git a/ott.zip/prosilver/smilies/icon_lol.gif b/ott.zip/prosilver/smilies/icon_lol.gif new file mode 100644 index 0000000..374ba15 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_lol.gif differ diff --git a/ott.zip/prosilver/smilies/icon_mad.gif b/ott.zip/prosilver/smilies/icon_mad.gif new file mode 100644 index 0000000..1f6c3c2 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_mad.gif differ diff --git a/ott.zip/prosilver/smilies/icon_mrgreen.gif b/ott.zip/prosilver/smilies/icon_mrgreen.gif new file mode 100644 index 0000000..b54cd0f Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_mrgreen.gif differ diff --git a/ott.zip/prosilver/smilies/icon_neutral.gif b/ott.zip/prosilver/smilies/icon_neutral.gif new file mode 100644 index 0000000..4f31156 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_neutral.gif differ diff --git a/ott.zip/prosilver/smilies/icon_question.gif b/ott.zip/prosilver/smilies/icon_question.gif new file mode 100644 index 0000000..9d07226 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_question.gif differ diff --git a/ott.zip/prosilver/smilies/icon_razz.gif b/ott.zip/prosilver/smilies/icon_razz.gif new file mode 100644 index 0000000..29da2a2 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_razz.gif differ diff --git a/ott.zip/prosilver/smilies/icon_redface.gif b/ott.zip/prosilver/smilies/icon_redface.gif new file mode 100644 index 0000000..ad76283 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_redface.gif differ diff --git a/ott.zip/prosilver/smilies/icon_rolleyes.gif b/ott.zip/prosilver/smilies/icon_rolleyes.gif new file mode 100644 index 0000000..d7f5f2f Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_rolleyes.gif differ diff --git a/ott.zip/prosilver/smilies/icon_sad.gif b/ott.zip/prosilver/smilies/icon_sad.gif new file mode 100644 index 0000000..d2ac78c Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_sad.gif differ diff --git a/ott.zip/prosilver/smilies/icon_smile.gif b/ott.zip/prosilver/smilies/icon_smile.gif new file mode 100644 index 0000000..7b1f6d3 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_smile.gif differ diff --git a/ott.zip/prosilver/smilies/icon_surprised.gif b/ott.zip/prosilver/smilies/icon_surprised.gif new file mode 100644 index 0000000..cb21424 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_surprised.gif differ diff --git a/ott.zip/prosilver/smilies/icon_twisted.gif b/ott.zip/prosilver/smilies/icon_twisted.gif new file mode 100644 index 0000000..502fe24 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_twisted.gif differ diff --git a/ott.zip/prosilver/smilies/icon_wink.gif b/ott.zip/prosilver/smilies/icon_wink.gif new file mode 100644 index 0000000..d148288 Binary files /dev/null and b/ott.zip/prosilver/smilies/icon_wink.gif differ diff --git a/ott.zip/prosilver/template/editor.js b/ott.zip/prosilver/template/editor.js new file mode 100644 index 0000000..ff4d0fd --- /dev/null +++ b/ott.zip/prosilver/template/editor.js @@ -0,0 +1,459 @@ +/** +* bbCode control by subBlue design [ www.subBlue.com ] +* Includes unixsafe colour palette selector by SHS` +*/ + +// Startup variables +var imageTag = false; +var theSelection = false; + +var bbcodeEnabled = true; +// Check for Browser & Platform for PC & IE specific bits +// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html +var clientPC = navigator.userAgent.toLowerCase(); // Get client info +var clientVer = parseInt(navigator.appVersion); // Get browser version + +var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1)); +var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1)); +var baseHeight; + +/** +* Shows the help messages in the helpline window +*/ +function helpline(help) +{ + document.forms[form_name].helpbox.value = help_line[help]; +} + +/** +* Fix a bug involving the TextRange object. From +* http://www.frostjedi.com/terra/scripts/demo/caretBug.html +*/ +function initInsertions() +{ + var doc; + + if (document.forms[form_name]) + { + doc = document; + } + else + { + doc = opener.document; + } + + var textarea = doc.forms[form_name].elements[text_name]; + + if (is_ie && typeof(baseHeight) != 'number') + { + textarea.focus(); + baseHeight = doc.selection.createRange().duplicate().boundingHeight; + + if (!document.forms[form_name]) + { + document.body.focus(); + } + } +} + +/** +* bbstyle +*/ +function bbstyle(bbnumber) +{ + if (bbnumber != -1) + { + bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); + } + else + { + insert_text('[*]'); + document.forms[form_name].elements[text_name].focus(); + } +} + +/** +* Apply bbcodes +*/ +function bbfontstyle(bbopen, bbclose) +{ + theSelection = false; + + var textarea = document.forms[form_name].elements[text_name]; + + textarea.focus(); + + if ((clientVer >= 4) && is_ie && is_win) + { + // Get text selection + theSelection = document.selection.createRange().text; + + if (theSelection) + { + // Add tags around selection + document.selection.createRange().text = bbopen + theSelection + bbclose; + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + } + else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) + { + mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose); + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + + //The new position for the cursor after adding the bbcode + var caret_pos = getCaretPosition(textarea).start; + var new_pos = caret_pos + bbopen.length; + + // Open tag + insert_text(bbopen + bbclose); + + // Center the cursor when we don't have a selection + // Gecko and proper browsers + if (!isNaN(textarea.selectionStart)) + { + textarea.selectionStart = new_pos; + textarea.selectionEnd = new_pos; + } + // IE + else if (document.selection) + { + var range = textarea.createTextRange(); + range.move("character", new_pos); + range.select(); + storeCaret(textarea); + } + + textarea.focus(); + return; +} + +/** +* Insert text at position +*/ +function insert_text(text, spaces, popup) +{ + var textarea; + + if (!popup) + { + textarea = document.forms[form_name].elements[text_name]; + } + else + { + textarea = opener.document.forms[form_name].elements[text_name]; + } + if (spaces) + { + text = ' ' + text + ' '; + } + + // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way. + // Therefore we simply add a !is_ie here until IE fixes the text-selection completely. + if (!isNaN(textarea.selectionStart) && !is_ie) + { + var sel_start = textarea.selectionStart; + var sel_end = textarea.selectionEnd; + + mozWrap(textarea, text, ''); + textarea.selectionStart = sel_start + text.length; + textarea.selectionEnd = sel_end + text.length; + } + else if (textarea.createTextRange && textarea.caretPos) + { + if (baseHeight != textarea.caretPos.boundingHeight) + { + textarea.focus(); + storeCaret(textarea); + } + + var caret_pos = textarea.caretPos; + caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; + } + else + { + textarea.value = textarea.value + text; + } + if (!popup) + { + textarea.focus(); + } +} + +/** +* Add inline attachment at position +*/ +function attach_inline(index, filename) +{ + insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); + document.forms[form_name].elements[text_name].focus(); +} + +/** +* Add quote text to message +*/ +function addquote(post_id, username, l_wrote) +{ + var message_name = 'message_' + post_id; + var theSelection = ''; + var divarea = false; + + if (l_wrote === undefined) + { + // Backwards compatibility + l_wrote = 'wrote'; + } + + if (document.all) + { + divarea = document.all[message_name]; + } + else + { + divarea = document.getElementById(message_name); + } + + // Get text selection - not only the post content :( + // IE9 must use the document.selection method but has the *.getSelection so we just force no IE + if (window.getSelection && !is_ie && !window.opera) + { + theSelection = window.getSelection().toString(); + } + else if (document.getSelection && !is_ie) + { + theSelection = document.getSelection(); + } + else if (document.selection) + { + theSelection = document.selection.createRange().text; + } + + if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) + { + if (divarea.innerHTML) + { + theSelection = divarea.innerHTML.replace(/
/ig, '\n'); + theSelection = theSelection.replace(//ig, '\n'); + theSelection = theSelection.replace(/<\;/ig, '<'); + theSelection = theSelection.replace(/>\;/ig, '>'); + theSelection = theSelection.replace(/&\;/ig, '&'); + theSelection = theSelection.replace(/ \;/ig, ' '); + } + else if (document.all) + { + theSelection = divarea.innerText; + } + else if (divarea.textContent) + { + theSelection = divarea.textContent; + } + else if (divarea.firstChild.nodeValue) + { + theSelection = divarea.firstChild.nodeValue; + } + } + + if (theSelection) + { + if (bbcodeEnabled) + { + insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); + } + else + { + insert_text(username + ' ' + l_wrote + ':' + '\n'); + var lines = split_lines(theSelection); + for (i = 0; i < lines.length; i++) + { + insert_text('> ' + lines[i] + '\n'); + } + } + } + + return; +} + +function split_lines(text) +{ + var lines = text.split('\n'); + var splitLines = new Array(); + var j = 0; + for(i = 0; i < lines.length; i++) + { + if (lines[i].length <= 80) + { + splitLines[j] = lines[i]; + j++; + } + else + { + var line = lines[i]; + do + { + var splitAt = line.indexOf(' ', 80); + + if (splitAt == -1) + { + splitLines[j] = line; + j++; + } + else + { + splitLines[j] = line.substring(0, splitAt); + line = line.substring(splitAt); + j++; + } + } + while(splitAt != -1); + } + } + return splitLines; +} +/** +* From http://www.massless.org/mozedit/ +*/ +function mozWrap(txtarea, open, close) +{ + var selLength = (typeof(txtarea.textLength) == 'undefined') ? txtarea.value.length : txtarea.textLength; + var selStart = txtarea.selectionStart; + var selEnd = txtarea.selectionEnd; + var scrollTop = txtarea.scrollTop; + + if (selEnd == 1 || selEnd == 2) + { + selEnd = selLength; + } + + var s1 = (txtarea.value).substring(0,selStart); + var s2 = (txtarea.value).substring(selStart, selEnd); + var s3 = (txtarea.value).substring(selEnd, selLength); + + txtarea.value = s1 + open + s2 + close + s3; + txtarea.selectionStart = selStart + open.length; + txtarea.selectionEnd = selEnd + open.length; + txtarea.focus(); + txtarea.scrollTop = scrollTop; + + return; +} + +/** +* Insert at Caret position. Code from +* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 +*/ +function storeCaret(textEl) +{ + if (textEl.createTextRange) + { + textEl.caretPos = document.selection.createRange().duplicate(); + } +} + +/** +* Color pallette +*/ +function colorPalette(dir, width, height) +{ + var r = 0, g = 0, b = 0; + var numberList = new Array(6); + var color = ''; + + numberList[0] = '00'; + numberList[1] = '40'; + numberList[2] = '80'; + numberList[3] = 'BF'; + numberList[4] = 'FF'; + + document.writeln(''); + + for (r = 0; r < 5; r++) + { + if (dir == 'h') + { + document.writeln(''); + } + + for (g = 0; g < 5; g++) + { + if (dir == 'v') + { + document.writeln(''); + } + + for (b = 0; b < 5; b++) + { + color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); + document.write(''); + } + + if (dir == 'v') + { + document.writeln(''); + } + } + + if (dir == 'h') + { + document.writeln(''); + } + } + document.writeln('
'); + document.write('#' + color + ''); + document.writeln('
'); +} + + +/** +* Caret Position object +*/ +function caretPosition() +{ + var start = null; + var end = null; +} + + +/** +* Get the caret position in an textarea +*/ +function getCaretPosition(txtarea) +{ + var caretPos = new caretPosition(); + + // simple Gecko/Opera way + if(txtarea.selectionStart || txtarea.selectionStart == 0) + { + caretPos.start = txtarea.selectionStart; + caretPos.end = txtarea.selectionEnd; + } + // dirty and slow IE way + else if(document.selection) + { + + // get current selection + var range = document.selection.createRange(); + + // a new selection of the whole textarea + var range_all = document.body.createTextRange(); + range_all.moveToElementText(txtarea); + + // calculate selection start point by moving beginning of range_all to beginning of range + var sel_start; + for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) + { + range_all.moveStart('character', 1); + } + + txtarea.sel_start = sel_start; + + // we ignore the end value for IE, this is already dirty enough and we don't need it + caretPos.start = txtarea.sel_start; + caretPos.end = txtarea.sel_start; + } + + return caretPos; +} diff --git a/ott.zip/prosilver/template/forum_fn.js b/ott.zip/prosilver/template/forum_fn.js new file mode 100644 index 0000000..240fe7e --- /dev/null +++ b/ott.zip/prosilver/template/forum_fn.js @@ -0,0 +1,443 @@ +/** +* phpBB3 forum functions +*/ + +/** +* Window popup +*/ +function popup(url, width, height, name) +{ + if (!name) + { + name = '_popup'; + } + + window.open(url.replace(/&/g, '&'), name, 'height=' + height + ',resizable=yes,scrollbars=yes, width=' + width); + return false; +} + +/** +* Jump to page +*/ +function jumpto() +{ + var page = prompt(jump_page, on_page); + + if (page !== null && !isNaN(page) && page == Math.floor(page) && page > 0) + { + if (base_url.indexOf('?') == -1) + { + document.location.href = base_url + '?start=' + ((page - 1) * per_page); + } + else + { + document.location.href = base_url.replace(/&/g, '&') + '&start=' + ((page - 1) * per_page); + } + } +} + +/** +* Mark/unmark checklist +* id = ID of parent container, name = name prefix, state = state [true/false] +*/ +function marklist(id, name, state) +{ + var parent = document.getElementById(id); + if (!parent) + { + eval('parent = document.' + id); + } + + if (!parent) + { + return; + } + + var rb = parent.getElementsByTagName('input'); + + for (var r = 0; r < rb.length; r++) + { + if (rb[r].name.substr(0, name.length) == name) + { + rb[r].checked = state; + } + } +} + +/** +* Resize viewable area for attached image or topic review panel (possibly others to come) +* e = element +*/ +function viewableArea(e, itself) +{ + if (!e) return; + if (!itself) + { + e = e.parentNode; + } + + if (!e.vaHeight) + { + // Store viewable area height before changing style to auto + e.vaHeight = e.offsetHeight; + e.vaMaxHeight = e.style.maxHeight; + e.style.height = 'auto'; + e.style.maxHeight = 'none'; + e.style.overflow = 'visible'; + } + else + { + // Restore viewable area height to the default + e.style.height = e.vaHeight + 'px'; + e.style.overflow = 'auto'; + e.style.maxHeight = e.vaMaxHeight; + e.vaHeight = false; + } +} + +/** +* Set display of page element +* s[-1,0,1] = hide,toggle display,show +* type = string: inline, block, inline-block or other CSS "display" type +*/ +function dE(n, s, type) +{ + if (!type) + { + type = 'block'; + } + + var e = document.getElementById(n); + if (!s) + { + s = (e.style.display == '' || e.style.display == type) ? -1 : 1; + } + e.style.display = (s == 1) ? type : 'none'; +} + +/** +* Alternate display of subPanels +*/ +function subPanels(p) +{ + var i, e, t; + + if (typeof(p) == 'string') + { + show_panel = p; + } + + for (i = 0; i < panels.length; i++) + { + e = document.getElementById(panels[i]); + t = document.getElementById(panels[i] + '-tab'); + + if (e) + { + if (panels[i] == show_panel) + { + e.style.display = 'block'; + if (t) + { + t.className = 'activetab'; + } + } + else + { + e.style.display = 'none'; + if (t) + { + t.className = ''; + } + } + } + } +} + +/** +* Call print preview +*/ +function printPage() +{ + if (is_ie) + { + printPreview(); + } + else + { + window.print(); + } +} + +/** +* Show/hide groups of blocks +* c = CSS style name +* e = checkbox element +* t = toggle dispay state (used to show 'grip-show' image in the profile block when hiding the profiles) +*/ +function displayBlocks(c, e, t) +{ + var s = (e.checked == true) ? 1 : -1; + + if (t) + { + s *= -1; + } + + var divs = document.getElementsByTagName("DIV"); + + for (var d = 0; d < divs.length; d++) + { + if (divs[d].className.indexOf(c) == 0) + { + divs[d].style.display = (s == 1) ? 'none' : 'block'; + } + } +} + +function selectCode(a) +{ + // Get ID of code block + var e = a.parentNode.parentNode.getElementsByTagName('CODE')[0]; + + // Not IE and IE9+ + if (window.getSelection) + { + var s = window.getSelection(); + // Safari + if (s.setBaseAndExtent) + { + s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); + } + // Firefox and Opera + else + { + // workaround for bug # 42885 + if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) == '
') + { + e.innerHTML = e.innerHTML + ' '; + } + + var r = document.createRange(); + r.selectNodeContents(e); + s.removeAllRanges(); + s.addRange(r); + } + } + // Some older browsers + else if (document.getSelection) + { + var s = document.getSelection(); + var r = document.createRange(); + r.selectNodeContents(e); + s.removeAllRanges(); + s.addRange(r); + } + // IE + else if (document.selection) + { + var r = document.body.createTextRange(); + r.moveToElementText(e); + r.select(); + } +} + +/** +* Play quicktime file by determining it's width/height +* from the displayed rectangle area +*/ +function play_qt_file(obj) +{ + var rectangle = obj.GetRectangle(); + + if (rectangle) + { + rectangle = rectangle.split(','); + var x1 = parseInt(rectangle[0]); + var x2 = parseInt(rectangle[2]); + var y1 = parseInt(rectangle[1]); + var y2 = parseInt(rectangle[3]); + + var width = (x1 < 0) ? (x1 * -1) + x2 : x2 - x1; + var height = (y1 < 0) ? (y1 * -1) + y2 : y2 - y1; + } + else + { + var width = 200; + var height = 0; + } + + obj.width = width; + obj.height = height + 16; + + obj.SetControllerVisible(true); + obj.Play(); +} + +/** +* Check if the nodeName of elem is name +* @author jQuery +*/ +function is_node_name(elem, name) +{ + return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); +} + +/** +* Check if elem is in array, return position +* @author jQuery +*/ +function is_in_array(elem, array) +{ + for (var i = 0, length = array.length; i < length; i++) + // === is correct (IE) + if (array[i] === elem) + return i; + + return -1; +} + +/** +* Find Element, type and class in tree +* Not used, but may come in handy for those not using JQuery +* @author jQuery.find, Meik Sievertsen +*/ +function find_in_tree(node, tag, type, class_name) +{ + var result, element, i = 0, length = node.childNodes.length; + + for (element = node.childNodes[0]; i < length; element = node.childNodes[++i]) + { + if (!element || element.nodeType != 1) continue; + + if ((!tag || is_node_name(element, tag)) && (!type || element.type == type) && (!class_name || is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1)) + { + return element; + } + + if (element.childNodes.length) + result = find_in_tree(element, tag, type, class_name); + + if (result) return result; + } +} + +var in_autocomplete = false; +var last_key_entered = ''; + +/** +* Check event key +*/ +function phpbb_check_key(event) +{ + // Keycode is array down or up? + if (event.keyCode && (event.keyCode == 40 || event.keyCode == 38)) + in_autocomplete = true; + + // Make sure we are not within an "autocompletion" field + if (in_autocomplete) + { + // If return pressed and key changed we reset the autocompletion + if (!last_key_entered || last_key_entered == event.which) + { + in_autocompletion = false; + return true; + } + } + + // Keycode is not return, then return. ;) + if (event.which != 13) + { + last_key_entered = event.which; + return true; + } + + return false; +} + +/** +* Usually used for onkeypress event, to submit a form on enter +*/ +function submit_default_button(event, selector, class_name) +{ + // Add which for key events + if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode)) + event.which = event.charCode || event.keyCode; + + if (phpbb_check_key(event)) + return true; + + var current = selector['parentNode']; + + // Search parent form element + while (current && (!current.nodeName || current.nodeType != 1 || !is_node_name(current, 'form')) && current != document) + current = current['parentNode']; + + // Find the input submit button with the class name + //current = find_in_tree(current, 'input', 'submit', class_name); + var input_tags = current.getElementsByTagName('input'); + current = false; + + for (var i = 0, element = input_tags[0]; i < input_tags.length; element = input_tags[++i]) + { + if (element.type == 'submit' && is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1) + current = element; + } + + if (!current) + return true; + + // Submit form + current.focus(); + current.click(); + return false; +} + +/** +* Apply onkeypress event for forcing default submit button on ENTER key press +* The jQuery snippet used is based on http://greatwebguy.com/programming/dom/default-html-button-submit-on-enter-with-jquery/ +* The non-jQuery code is a mimick of the jQuery code ;) +*/ +function apply_onkeypress_event() +{ + // jQuery code in case jQuery is used + if (jquery_present) + { + jQuery('form input[type=text], form input[type=password]').live('keypress', function (e) + { + var default_button = jQuery(this).parents('form').find('input[type=submit].default-submit-action'); + + if (!default_button || default_button.length <= 0) + return true; + + if (phpbb_check_key(e)) + return true; + + if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) + { + default_button.click(); + return false; + } + + return true; + }); + + return; + } + + var input_tags = document.getElementsByTagName('input'); + + for (var i = 0, element = input_tags[0]; i < input_tags.length ; element = input_tags[++i]) + { + if (element.type == 'text' || element.type == 'password') + { + // onkeydown is possible too + element.onkeypress = function (evt) { submit_default_button((evt || window.event), this, 'default-submit-action'); }; + } + } +} + +/** +* Detect JQuery existance. We currently do not deliver it, but some styles do, so why not benefit from it. ;) +*/ +var jquery_present = typeof jQuery == 'function'; diff --git a/ott.zip/prosilver/template/styleswitcher.js b/ott.zip/prosilver/template/styleswitcher.js new file mode 100644 index 0000000..bbcac9b --- /dev/null +++ b/ott.zip/prosilver/template/styleswitcher.js @@ -0,0 +1,193 @@ + +function fontsizeup(event) +{ + // Skip tabs; 9 being the ASCII code for a tab + if (event && getKeyCode(event) == 9) + { + return true; + } + + var active = getActiveStyleSheet(); + + switch (active) + { + case 'A--': + setActiveStyleSheet('A-'); + break; + + case 'A-': + setActiveStyleSheet('A'); + break; + + case 'A': + setActiveStyleSheet('A+'); + break; + + case 'A+': + setActiveStyleSheet('A++'); + break; + + case 'A++': + setActiveStyleSheet('A'); + break; + + default: + setActiveStyleSheet('A'); + break; + } + + return false; +} + +function fontsizedown(event) +{ + // Skip tabs + if (event && getKeyCode(event) == 9) + { + return true; + } + + var active = getActiveStyleSheet(); + + switch (active) + { + case 'A++' : + setActiveStyleSheet('A+'); + break; + + case 'A+' : + setActiveStyleSheet('A'); + break; + + case 'A' : + setActiveStyleSheet('A-'); + break; + + case 'A-' : + setActiveStyleSheet('A--'); + break; + + case 'A--' : + break; + + default : + setActiveStyleSheet('A--'); + break; + } + + return false; +} + +function getKeyCode(event) +{ + // IE doesn't fire the onkeypress event for tabs + // Reference: http://www.quirksmode.org/js/keys.html + + var code = (event.keyCode) ? event.keyCode : 0; + + // Probably using FF + if (!code && event.charCode) + { + code = event.charCode; + } + + return code; +} + +function setActiveStyleSheet(title) +{ + var i, a, main; + + for (i = 0; (a = document.getElementsByTagName('link')[i]); i++) + { + if (a.getAttribute('rel').indexOf('style') != -1 && a.getAttribute('title')) + { + a.disabled = true; + if (a.getAttribute('title') == title) + { + a.disabled = false; + } + } + } +} + +function getActiveStyleSheet() +{ + var i, a; + + for (i = 0; (a = document.getElementsByTagName('link')[i]); i++) + { + if (a.getAttribute('rel').indexOf('style') != -1 && a.getAttribute('title') && !a.disabled) + { + return a.getAttribute('title'); + } + } + + return null; +} + +function getPreferredStyleSheet() +{ + return ('A-'); +} + +function createCookie(name, value, days) +{ + if (days) + { + var date = new Date(); + date.setTime(date.getTime() + (days*24*60*60*1000)); + var expires = '; expires=' + date.toGMTString(); + } + else + { + expires = ''; + } + + document.cookie = name + '=' + value + expires + style_cookie_settings; +} + +function readCookie(name) +{ + var nameEQ = name + '='; + var ca = document.cookie.split(';'); + + for (var i = 0; i < ca.length; i++) + { + var c = ca[i]; + + while (c.charAt(0) == ' ') + { + c = c.substring(1, c.length); + } + + if (c.indexOf(nameEQ) == 0) + { + return c.substring(nameEQ.length, c.length); + } + } + + return null; +} + +function load_cookie() +{ + var cookie = readCookie('style_cookie'); + var title = cookie ? cookie : getPreferredStyleSheet(); + setActiveStyleSheet(title); +} + +function unload_cookie() +{ + var title = getActiveStyleSheet(); + createCookie('style_cookie', title, 365); +} + +onload_functions.push('load_cookie()'); +onunload_functions.push('unload_cookie()'); + +/* +var cookie = readCookie("style"); +var title = cookie ? cookie : getPreferredStyleSheet(); +setActiveStyleSheet(title); +*/ diff --git a/ott.zip/prosilver/theme/images/arrow_down.gif b/ott.zip/prosilver/theme/images/arrow_down.gif new file mode 100644 index 0000000..e45c365 Binary files /dev/null and b/ott.zip/prosilver/theme/images/arrow_down.gif differ diff --git a/ott.zip/prosilver/theme/images/arrow_left.gif b/ott.zip/prosilver/theme/images/arrow_left.gif new file mode 100644 index 0000000..076a559 Binary files /dev/null and b/ott.zip/prosilver/theme/images/arrow_left.gif differ diff --git a/ott.zip/prosilver/theme/images/arrow_right.gif b/ott.zip/prosilver/theme/images/arrow_right.gif new file mode 100644 index 0000000..c5827a4 Binary files /dev/null and b/ott.zip/prosilver/theme/images/arrow_right.gif differ diff --git a/ott.zip/prosilver/theme/images/arrow_up.gif b/ott.zip/prosilver/theme/images/arrow_up.gif new file mode 100644 index 0000000..38b5a62 Binary files /dev/null and b/ott.zip/prosilver/theme/images/arrow_up.gif differ diff --git a/ott.zip/prosilver/theme/images/bg_button.gif b/ott.zip/prosilver/theme/images/bg_button.gif new file mode 100644 index 0000000..03172ff Binary files /dev/null and b/ott.zip/prosilver/theme/images/bg_button.gif differ diff --git a/ott.zip/prosilver/theme/images/bg_header.gif b/ott.zip/prosilver/theme/images/bg_header.gif new file mode 100644 index 0000000..351de9f Binary files /dev/null and b/ott.zip/prosilver/theme/images/bg_header.gif differ diff --git a/ott.zip/prosilver/theme/images/bg_list.gif b/ott.zip/prosilver/theme/images/bg_list.gif new file mode 100644 index 0000000..89f8963 Binary files /dev/null and b/ott.zip/prosilver/theme/images/bg_list.gif differ diff --git a/ott.zip/prosilver/theme/images/bg_menu.gif b/ott.zip/prosilver/theme/images/bg_menu.gif new file mode 100644 index 0000000..4a9f5a9 Binary files /dev/null and b/ott.zip/prosilver/theme/images/bg_menu.gif differ diff --git a/ott.zip/prosilver/theme/images/bg_menu_rtl.gif b/ott.zip/prosilver/theme/images/bg_menu_rtl.gif new file mode 100644 index 0000000..10add09 Binary files /dev/null and b/ott.zip/prosilver/theme/images/bg_menu_rtl.gif differ diff --git a/ott.zip/prosilver/theme/images/bg_tabs1.gif b/ott.zip/prosilver/theme/images/bg_tabs1.gif new file mode 100644 index 0000000..335a72c Binary files /dev/null and b/ott.zip/prosilver/theme/images/bg_tabs1.gif differ diff --git a/ott.zip/prosilver/theme/images/bg_tabs2.gif b/ott.zip/prosilver/theme/images/bg_tabs2.gif new file mode 100644 index 0000000..a2142d5 Binary files /dev/null and b/ott.zip/prosilver/theme/images/bg_tabs2.gif differ diff --git a/ott.zip/prosilver/theme/images/corners_left.gif b/ott.zip/prosilver/theme/images/corners_left.gif new file mode 100644 index 0000000..206e503 Binary files /dev/null and b/ott.zip/prosilver/theme/images/corners_left.gif differ diff --git a/ott.zip/prosilver/theme/images/corners_left.png b/ott.zip/prosilver/theme/images/corners_left.png new file mode 100644 index 0000000..256bde3 Binary files /dev/null and b/ott.zip/prosilver/theme/images/corners_left.png differ diff --git a/ott.zip/prosilver/theme/images/corners_left2.gif b/ott.zip/prosilver/theme/images/corners_left2.gif new file mode 100644 index 0000000..fa27ce3 Binary files /dev/null and b/ott.zip/prosilver/theme/images/corners_left2.gif differ diff --git a/ott.zip/prosilver/theme/images/corners_right.gif b/ott.zip/prosilver/theme/images/corners_right.gif new file mode 100644 index 0000000..0ba66d5 Binary files /dev/null and b/ott.zip/prosilver/theme/images/corners_right.gif differ diff --git a/ott.zip/prosilver/theme/images/corners_right.png b/ott.zip/prosilver/theme/images/corners_right.png new file mode 100644 index 0000000..df41823 Binary files /dev/null and b/ott.zip/prosilver/theme/images/corners_right.png differ diff --git a/ott.zip/prosilver/theme/images/corners_right2.gif b/ott.zip/prosilver/theme/images/corners_right2.gif new file mode 100644 index 0000000..2d68944 Binary files /dev/null and b/ott.zip/prosilver/theme/images/corners_right2.gif differ diff --git a/ott.zip/prosilver/theme/images/gradient.gif b/ott.zip/prosilver/theme/images/gradient.gif new file mode 100644 index 0000000..21dc11f Binary files /dev/null and b/ott.zip/prosilver/theme/images/gradient.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_bookmark.gif b/ott.zip/prosilver/theme/images/icon_bookmark.gif new file mode 100644 index 0000000..2644293 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_bookmark.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_bump.gif b/ott.zip/prosilver/theme/images/icon_bump.gif new file mode 100644 index 0000000..014cd9b Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_bump.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_faq.gif b/ott.zip/prosilver/theme/images/icon_faq.gif new file mode 100644 index 0000000..4e26460 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_faq.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_fontsize.gif b/ott.zip/prosilver/theme/images/icon_fontsize.gif new file mode 100644 index 0000000..1c7d835 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_fontsize.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_home.gif b/ott.zip/prosilver/theme/images/icon_home.gif new file mode 100644 index 0000000..8ae9004 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_home.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_logout.gif b/ott.zip/prosilver/theme/images/icon_logout.gif new file mode 100644 index 0000000..b8ad5c4 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_logout.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_members.gif b/ott.zip/prosilver/theme/images/icon_members.gif new file mode 100644 index 0000000..48e3e5f Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_members.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_pages.gif b/ott.zip/prosilver/theme/images/icon_pages.gif new file mode 100644 index 0000000..44cc345 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_pages.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_print.gif b/ott.zip/prosilver/theme/images/icon_print.gif new file mode 100644 index 0000000..a71dfdd Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_print.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_register.gif b/ott.zip/prosilver/theme/images/icon_register.gif new file mode 100644 index 0000000..9ecf126 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_register.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_search.gif b/ott.zip/prosilver/theme/images/icon_search.gif new file mode 100644 index 0000000..8492cd3 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_search.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_sendemail.gif b/ott.zip/prosilver/theme/images/icon_sendemail.gif new file mode 100644 index 0000000..f6b8aa1 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_sendemail.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_subscribe.gif b/ott.zip/prosilver/theme/images/icon_subscribe.gif new file mode 100644 index 0000000..5ca18af Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_subscribe.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_textbox_search.gif b/ott.zip/prosilver/theme/images/icon_textbox_search.gif new file mode 100644 index 0000000..b3b51d8 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_textbox_search.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_ucp.gif b/ott.zip/prosilver/theme/images/icon_ucp.gif new file mode 100644 index 0000000..2a5fcc3 Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_ucp.gif differ diff --git a/ott.zip/prosilver/theme/images/icon_unsubscribe.gif b/ott.zip/prosilver/theme/images/icon_unsubscribe.gif new file mode 100644 index 0000000..27013fc Binary files /dev/null and b/ott.zip/prosilver/theme/images/icon_unsubscribe.gif differ diff --git a/ott.zip/prosilver/theme/images/quote.gif b/ott.zip/prosilver/theme/images/quote.gif new file mode 100644 index 0000000..d199227 Binary files /dev/null and b/ott.zip/prosilver/theme/images/quote.gif differ diff --git a/ott.zip/prosilver/theme/images/quote_rtl.gif b/ott.zip/prosilver/theme/images/quote_rtl.gif new file mode 100644 index 0000000..ac719cf Binary files /dev/null and b/ott.zip/prosilver/theme/images/quote_rtl.gif differ diff --git a/ott.zip/prosilver/theme/large.css b/ott.zip/prosilver/theme/large.css new file mode 100644 index 0000000..dfb1d2c --- /dev/null +++ b/ott.zip/prosilver/theme/large.css @@ -0,0 +1,3 @@ +body { + font-size: 12px; +} \ No newline at end of file diff --git a/ott.zip/prosilver/theme/medium.css b/ott.zip/prosilver/theme/medium.css new file mode 100644 index 0000000..4c992f9 --- /dev/null +++ b/ott.zip/prosilver/theme/medium.css @@ -0,0 +1,3 @@ +body { + font-size: 11px; +} \ No newline at end of file diff --git a/ott.zip/prosilver/theme/normal.css b/ott.zip/prosilver/theme/normal.css new file mode 100644 index 0000000..d0783d1 --- /dev/null +++ b/ott.zip/prosilver/theme/normal.css @@ -0,0 +1,3 @@ +body { + font-size: 10px; +} \ No newline at end of file diff --git a/ott.zip/prosilver/theme/print.css b/ott.zip/prosilver/theme/print.css new file mode 100644 index 0000000..bc3ca80 --- /dev/null +++ b/ott.zip/prosilver/theme/print.css @@ -0,0 +1,139 @@ +/* Print Style Sheet +---------------------------------------- */ + + +/* Lots still TODO here! */ + +/* General markup styles */ +* { + padding: 0; + margin: 0; +} + +body { + font: 11pt Verdana, Arial, Helvetica, sans-serif; + color:#000000; +} + +a:link { color: #000000; text-decoration: none; } +a:visited { color: #000000; text-decoration: none; } +a:active { color: #000000; text-decoration: none; } + +img, .noprint, #sub-header, #sub-footer, .navbar, .box1, .divider, .signature { display: none; } +/* Display smilies (Bug #47265) */ +.content img { + display: inline; +} + +/* Container for the main body */ +#wrap { + margin: 0 2em; +} + +p { font-size: 85%; } +.copyright { font-size: 75%; } +.page-number { float:right; width: auto; text-align: right; font-size: 75%; } + +h1, h2, h3, h1 a, h2 a, h3 a { + font-family: "Trebuchet MS",georgia,Verdana,Sans-serif; + color: #000000; + background: none; + text-decoration: none; + font-weight: bold; +} + +h1 { font-size: 20pt; } +h2 { font-size: 16pt; margin-top: 1em; } +h3 { font-size: 14pt; margin-top: 1em; } + +.content { + font-size: 11pt; + line-height: 14pt; + margin-bottom: 1em; + font-family: "Lucida Grande", "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; + overflow: hidden; +} + +/* CSS2 Print tip from: http://www.alistapart.com/articles/goingtoprint/ */ +.postbody a:link, .postbody a:visited, .postbody a:hover, .postbody a:active { + text-decoration: underline; + padding: 0.1em 0.2em; + margin: -0.1em -0.2em; + color: #666; + background: none; + font-size: 100%; +} + +html>body .postbody a:link:after, html>body .postbody a:visited:after { + content: " (" attr(href) ") "; + font-size: 90%; + text-decoration: none; +} + +hr { + height: 1px; + background-color: #999999; + border-width: 0; +} + +.author { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 75%; + margin-bottom: 0.6em; +} + +.date { + font-family: Verdana, Arial, Helvetica, sans-serif; + float: right; + position: relative; + text-align: right; + font-size: 75%; +} + +/* Dont want to print url for names or titles in content area */ +.postbody .author a:link, .postbody .author a:visited, +html>body .postbody .author a:link:after, +html>body .postbody .author a:visited:after, +.postquote .quote-by a:link, .postquote .quote-by a:visited, +html>body .postquote .quote-by a:link:after, +html>body .postquote .quote-by a:visited:after, +html>body .postbody h1 a:link:after, html>body .postbody h2 a:link:after { + text-decoration: none; + content: ""; +} + +/* Poster profile */ +.postprofile { display: none; } +.grip-show { display:none; } + +/* Quote */ +.postquote, blockquote { + font-size: 85%; + margin: 1em 18% 1em 4%; + padding: 0.5em; + position: relative; + line-height: 1.5em; + border: 1px #999999 solid; +} + +.postquote img { display: none; } +.postquote span { display: block; } +.postquote span .postquote { font-size: 100%; } +.quote-by, blockquote cite { + color: black; + display : block; + font-weight: bold; +} + +/* List */ +ol, ul { + margin-left: 15pt +} + +/* Misc page elements */ +div.spacer { clear: both; } + +/* Accessibility tweaks: Mozilla.org */ +.skip_link { display: none; } + +dl.codebox dt { display: none; } diff --git a/ott.zip/prosilver/theme/style.php.css b/ott.zip/prosilver/theme/style.php.css new file mode 100644 index 0000000..b95d010 --- /dev/null +++ b/ott.zip/prosilver/theme/style.php.css @@ -0,0 +1,3822 @@ +/* phpBB3 Style Sheet + -------------------------------------------------------------- + Style name: prosilver (the default phpBB 3.0.x style) + Based on style: + Original author: Tom Beddard ( http://www.subblue.com/ ) + Modified by: phpBB Group ( http://www.phpbb.com/ ) + -------------------------------------------------------------- +*/ + +/* General Markup Styles +---------------------------------------- */ + +* { + /* Reset browsers default margin, padding and font sizes */ + margin: 0; + padding: 0; +} + +html { + font-size: 100%; + /* Always show a scrollbar for short pages - stops the jump when the scrollbar appears. non-IE browsers */ + height: 101%; +} + +body { + /* Text-Sizing with ems: http://www.clagnut.com/blog/348/ */ + font-family: Verdana, Helvetica, Arial, sans-serif; + color: #828282; + background-color: #FFFFFF; + /*font-size: 62.5%; This sets the default font size to be equivalent to 10px */ + font-size: 10px; + margin: 0; + padding: 12px 0; + /* This was suggested by mrob27 (http://forums.xkcd.com/viewtopic.php?p=3594769#p3594769): */ + -ie-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +h1 { + /* Forum name */ + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + margin-right: 200px; + color: #FFFFFF; + margin-top: 15px; + font-weight: bold; + font-size: 2em; +} + +h2 { + /* Forum header titles */ + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-weight: normal; + color: #3f3f3f; + font-size: 2em; + margin: 0.8em 0 0.2em 0; +} + +h2.solo { + margin-bottom: 1em; +} + +h3 { + /* Sub-headers (also used as post headers, but defined later) */ + font-family: Arial, Helvetica, sans-serif; + font-weight: bold; + text-transform: uppercase; + border-bottom: 1px solid #CCCCCC; + margin-bottom: 3px; + padding-bottom: 2px; + font-size: 1.05em; + color: #989898; + margin-top: 20px; +} + +h4 { + /* Forum and topic list titles */ + font-family: "Trebuchet MS", Verdana, Helvetica, Arial, Sans-serif; + font-size: 1.3em; +} + +p { + line-height: 1.3em; + font-size: 1.1em; + margin-bottom: 1.5em; +} + +img { + border-width: 0; +} + +hr { + /* Also see tweaks.css */ + border: 0 none #FFFFFF; + border-top: 1px solid #CCCCCC; + height: 1px; + margin: 5px 0; + display: block; + clear: both; +} + +hr.dashed { + border-top: 1px dashed #CCCCCC; + margin: 10px 0; +} + +hr.divider { + display: none; +} + +p.right { + text-align: right; +} + +/* Main blocks +---------------------------------------- */ +#wrap { + padding: 0 20px; + min-width: 650px; +} + +#simple-wrap { + padding: 6px 10px; +} + +#page-body { + margin: 4px 0; + clear: both; +} + +#page-footer { + clear: both; +} + +#page-footer h3 { + margin-top: 20px; +} + +#logo { + float: left; + width: auto; + padding: 10px 13px 0 10px; +} + +a#logo:hover { + text-decoration: none; +} + +/* Search box +--------------------------------------------- */ +#search-box { + color: #FFFFFF; + position: relative; + margin-top: 30px; + margin-right: 5px; + display: block; + float: right; + text-align: right; + white-space: nowrap; /* For Opera */ +} + +#search-box #keywords { + width: 95px; + background-color: #FFF; +} + +#search-box input { + border: 1px solid #b0b0b0; +} + +/* .button1 style defined later, just a few tweaks for the search button version */ +#search-box input.button1 { + padding: 1px 5px; +} + +#search-box li { + text-align: right; + margin-top: 4px; +} + +#search-box img { + vertical-align: middle; + margin-right: 3px; +} + +/* Site description and logo */ +#site-description { + float: left; + width: 70%; +} + +#site-description h1 { + margin-right: 0; +} + +/* Round cornered boxes and backgrounds +---------------------------------------- */ +.headerbar { + background: #ebebeb none repeat-x 0 0; + color: #FFFFFF; + margin-bottom: 4px; + padding: 0 5px; +} + +.navbar { + background-color: #ebebeb; + padding: 0 10px; +} + +.forabg { + background: #b1b1b1 none repeat-x 0 0; + margin-bottom: 4px; + padding: 0 5px; + clear: both; +} + +.forumbg { + background: #ebebeb none repeat-x 0 0; + margin-bottom: 4px; + padding: 0 5px; + clear: both; +} + +.panel { + margin-bottom: 4px; + padding: 0 10px; + background-color: #f3f3f3; + color: #3f3f3f; +} + +.post { + padding: 0 10px; + margin-bottom: 4px; + background-repeat: no-repeat; + background-position: 100% 0; +} + +.post:target .content { + color: #000000; +} + +.post:target h3 a { + color: #000000; +} + +.bg1 { background-color: #f7f7f7;} +.bg2 { background-color: #f2f2f2; } +.bg3 { background-color: #ebebeb; } + +.rowbg { + margin: 5px 5px 2px 5px; +} + +.ucprowbg { + background-color: #e2e2e2; +} + +.fieldsbg { + /*border: 1px #DBDEE2 solid;*/ + background-color: #eaeaea; +} + +span.corners-top, span.corners-bottom, span.corners-top span, span.corners-bottom span { + font-size: 1px; + line-height: 1px; + display: block; + height: 5px; + background-repeat: no-repeat; +} + +span.corners-top { + background-image: none; + background-position: 0 0; + margin: 0 -5px; +} + +span.corners-top span { + background-image: none; + background-position: 100% 0; +} + +span.corners-bottom { + background-image: none; + background-position: 0 100%; + margin: 0 -5px; + clear: both; +} + +span.corners-bottom span { + background-image: none; + background-position: 100% 100%; +} + +.headbg span.corners-bottom { + margin-bottom: -1px; +} + +.post span.corners-top, .post span.corners-bottom, .panel span.corners-top, .panel span.corners-bottom, .navbar span.corners-top, .navbar span.corners-bottom { + margin: 0 -10px; +} + +.rules span.corners-top { + margin: 0 -10px 5px -10px; +} + +.rules span.corners-bottom { + margin: 5px -10px 0 -10px; +} + +/* Horizontal lists +----------------------------------------*/ +ul.linklist { + display: block; + margin: 0; +} + +ul.linklist li { + display: block; + list-style-type: none; + float: left; + width: auto; + margin-right: 5px; + font-size: 1.1em; + line-height: 2.2em; +} + +ul.linklist li.rightside, p.rightside { + float: right; + margin-right: 0; + margin-left: 5px; + text-align: right; + font-weight: normal; +} + +ul.navlinks { + padding-bottom: 1px; + margin-bottom: 1px; + border-bottom: 1px solid #FFFFFF; + font-weight: bold; +} + +ul.navlinks2 { + padding-bottom: 1px; + margin-bottom: 1px; + font-weight: bold; +} + +ul.leftside { + float: left; + margin-left: 0; + margin-right: 5px; + text-align: left; +} + +ul.rightside { + float: right; + margin-left: 5px; + margin-right: -5px; + text-align: right; +} + +/* Table styles +----------------------------------------*/ +table.table1 { + /* See tweaks.css */ +} + +#ucp-main table.table1 { + padding: 2px; +} + +table.table1 thead th { + font-weight: normal; + text-transform: uppercase; + color: #FFFFFF; + line-height: 1.3em; + font-size: 1em; + padding: 0 0 4px 3px; +} + +table.table1 thead th span { + padding-left: 7px; +} + +table.table1 tbody tr { + border: 1px solid #cfcfcf; +} + +table.table1 tbody tr:hover, table.table1 tbody tr.hover { + background-color: #f6f6f6; + color: #000; +} + +table.table1 td { + color: #6a6a6a; + font-size: 1.1em; +} + +table.table1 tbody td { + padding: 5px; + border-top: 1px solid #FAFAFA; +} + +table.table1 tbody th { + padding: 5px; + border-bottom: 1px solid #000000; + text-align: left; + color: #333333; + background-color: #FFFFFF; +} + +/* Specific column styles */ +table.table1 .name { text-align: left; } +table.table1 .posts { text-align: center !important; width: 7%; } +table.table1 .joined { text-align: left; width: 15%; } +table.table1 .active { text-align: left; width: 15%; } +table.table1 .mark { text-align: center; width: 7%; } +table.table1 .info { text-align: left; width: 30%; } +table.table1 .info div { width: 100%; white-space: normal; overflow: hidden; } +table.table1 .autocol { line-height: 2em; white-space: nowrap; } +table.table1 thead .autocol { padding-left: 1em; } + +table.table1 span.rank-img { + float: right; + width: auto; +} + +table.info td { + padding: 3px; +} + +table.info tbody th { + padding: 3px; + text-align: right; + vertical-align: top; + color: #000000; + font-weight: normal; +} + +.forumbg table.table1 { + margin: 0; +} + +.forumbg-table > .inner { + margin: 0 -1px; +} + +.forumbg-table > .inner > span.corners-top { + margin: 0 -4px -1px -4px; +} + +.forumbg-table > .inner > span.corners-bottom { + margin: -1px -4px 0 -4px; +} + +/* Misc layout styles +---------------------------------------- */ +/* column[1-2] styles are containers for two column layouts + Also see tweaks.css */ +.column1 { + float: left; + clear: left; + width: 49%; +} + +.column2 { + float: right; + clear: right; + width: 49%; +} + +/* General classes for placing floating blocks */ +.left-box { + float: left; + width: auto; + text-align: left; +} + +.right-box { + float: right; + width: auto; + text-align: right; +} + +dl.details { + /*font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif;*/ + font-size: 1.1em; +} + +dl.details dt { + float: left; + clear: left; + width: 30%; + text-align: right; + color: #000000; + display: block; +} + +dl.details dd { + margin-left: 0; + padding-left: 5px; + margin-bottom: 5px; + color: #828282; + float: left; + width: 65%; +} + +/* Pagination +---------------------------------------- */ +.pagination { + height: 1%; /* IE tweak (holly hack) */ + width: auto; + text-align: right; + margin-top: 5px; + float: right; +} + +.pagination span.page-sep { + display: none; +} + +li.pagination { + margin-top: 0; +} + +.pagination strong, .pagination b { + font-weight: normal; +} + +.pagination span strong { + padding: 0 2px; + margin: 0 2px; + font-weight: normal; + color: #FFFFFF; + background-color: #bfbfbf; + border: 1px solid #bfbfbf; + font-size: 0.9em; +} + +.pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active { + font-weight: normal; + text-decoration: none; + color: #747474; + margin: 0 2px; + padding: 0 2px; + background-color: #eeeeee; + border: 1px solid #bababa; + font-size: 0.9em; + line-height: 1.5em; +} + +.pagination span a:hover { + border-color: #d2d2d2; + background-color: #d2d2d2; + color: #FFF; + text-decoration: none; +} + +.pagination img { + vertical-align: middle; +} + +/* Pagination in viewforum for multipage topics */ +.row .pagination { + display: block; + float: right; + width: auto; + margin-top: 0; + padding: 1px 0 1px 15px; + font-size: 0.9em; + background: none 0 50% no-repeat; +} + +.row .pagination span a, li.pagination span a { + background-color: #FFFFFF; +} + +.row .pagination span a:hover, li.pagination span a:hover { + background-color: #d2d2d2; +} + +/* Miscellaneous styles +---------------------------------------- */ +#forum-permissions { + float: right; + width: auto; + padding-left: 5px; + margin-left: 5px; + margin-top: 10px; + text-align: right; +} + +.copyright { + padding: 5px; + text-align: center; + color: #555555; +} + +.small { + font-size: 0.9em !important; +} + +.titlespace { + margin-bottom: 15px; +} + +.headerspace { + margin-top: 20px; +} + +.error { + color: #bcbcbc; + font-weight: bold; + font-size: 1em; +} + +.reported { + background-color: #f7f7f7; +} + +li.reported:hover { + background-color: #ececec; +} + +div.rules { + background-color: #ececec; + color: #bcbcbc; + padding: 0 10px; + margin: 10px 0; + font-size: 1.1em; +} + +div.rules ul, div.rules ol { + margin-left: 20px; +} + +p.rules { + background-color: #ececec; + background-image: none; + padding: 5px; +} + +p.rules img { + vertical-align: middle; + padding-top: 5px; +} + +p.rules a { + vertical-align: middle; + clear: both; +} + +#top { + position: absolute; + top: -20px; +} + +.clear { + display: block; + clear: both; + font-size: 1px; + line-height: 1px; + background: transparent; +} +/* Link Styles +---------------------------------------- */ + +/* Links adjustment to correctly display an order of rtl/ltr mixed content */ +a { + direction: ltr; + unicode-bidi: embed; +} + +a:link { color: #898989; text-decoration: none; } +a:visited { color: #898989; text-decoration: none; } +a:hover { color: #d3d3d3; text-decoration: underline; } +a:active { color: #d2d2d2; text-decoration: none; } + +/* Coloured usernames */ +.username-coloured { + font-weight: bold; + display: inline !important; + padding: 0 !important; +} + +/* Links on gradient backgrounds */ +#search-box a:link, .navbg a:link, .forumbg .header a:link, .forabg .header a:link, th a:link { + color: #FFFFFF; + text-decoration: none; +} + +#search-box a:visited, .navbg a:visited, .forumbg .header a:visited, .forabg .header a:visited, th a:visited { + color: #FFFFFF; + text-decoration: none; +} + +#search-box a:hover, .navbg a:hover, .forumbg .header a:hover, .forabg .header a:hover, th a:hover { + color: #ffffff; + text-decoration: underline; +} + +#search-box a:active, .navbg a:active, .forumbg .header a:active, .forabg .header a:active, th a:active { + color: #ffffff; + text-decoration: none; +} + +/* Links for forum/topic lists */ +a.forumtitle { + font-family: "Trebuchet MS", Helvetica, Arial, Sans-serif; + font-size: 1.2em; + font-weight: bold; + color: #898989; + text-decoration: none; +} + +/* a.forumtitle:visited { color: #898989; } */ + +a.forumtitle:hover { + color: #bcbcbc; + text-decoration: underline; +} + +a.forumtitle:active { + color: #898989; +} + +a.topictitle { + font-family: "Trebuchet MS", Helvetica, Arial, Sans-serif; + font-size: 1.2em; + font-weight: bold; + color: #898989; + text-decoration: none; +} + +/* a.topictitle:visited { color: #d2d2d2; } */ + +a.topictitle:hover { + color: #bcbcbc; + text-decoration: underline; +} + +a.topictitle:active { + color: #898989; +} + +/* Post body links */ +.postlink { + text-decoration: none; + color: #d2d2d2; + border-bottom: 1px solid #d2d2d2; + padding-bottom: 0; +} + +/* .postlink:visited { color: #bdbdbd; } */ + +.postlink:active { + color: #d2d2d2; +} + +.postlink:hover { + background-color: #f6f6f6; + text-decoration: none; + color: #404040; +} + +.signature a, .signature a:visited, .signature a:hover, .signature a:active { + border: none; + text-decoration: underline; + background-color: transparent; +} + +/* Profile links */ +.postprofile a:link, .postprofile a:visited, .postprofile dt.author a { + font-weight: bold; + color: #898989; + text-decoration: none; +} + +.postprofile a:hover, .postprofile dt.author a:hover { + text-decoration: underline; + color: #d3d3d3; +} + +/* CSS spec requires a:link, a:visited, a:hover and a:active rules to be specified in this order. */ +/* See http://www.phpbb.com/bugs/phpbb3/59685 */ +.postprofile a:active { + font-weight: bold; + color: #898989; + text-decoration: none; +} + + +/* Profile searchresults */ +.search .postprofile a { + color: #898989; + text-decoration: none; + font-weight: normal; +} + +.search .postprofile a:hover { + color: #d3d3d3; + text-decoration: underline; +} + +/* Back to top of page */ +.back2top { + clear: both; + height: 11px; + text-align: right; +} + +a.top { + background: none no-repeat top left; + text-decoration: none; + width: 11px; + height: 11px; + display: block; + float: right; + overflow: hidden; + letter-spacing: 1000px; + text-indent: 11px; +} + +a.top2 { + background: none no-repeat 0 50%; + text-decoration: none; + padding-left: 15px; +} + +/* Arrow links */ +a.up { background: none no-repeat left center; } +a.down { background: none no-repeat right center; } +a.left { background: none no-repeat 3px 60%; } +a.right { background: none no-repeat 95% 60%; } + +a.up, a.up:link, a.up:active, a.up:visited { + padding-left: 10px; + text-decoration: none; + border-bottom-width: 0; +} + +a.up:hover { + background-position: left top; + background-color: transparent; +} + +a.down, a.down:link, a.down:active, a.down:visited { + padding-right: 10px; +} + +a.down:hover { + background-position: right bottom; + text-decoration: none; +} + +a.left, a.left:active, a.left:visited { + padding-left: 12px; +} + +a.left:hover { + color: #d2d2d2; + text-decoration: none; + background-position: 0 60%; +} + +a.right, a.right:active, a.right:visited { + padding-right: 12px; +} + +a.right:hover { + color: #d2d2d2; + text-decoration: none; + background-position: 100% 60%; +} + +/* invisible skip link, used for accessibility */ +.skiplink { + position: absolute; + left: -999px; + width: 990px; +} + +/* Feed icon in forumlist_body.html */ +a.feed-icon-forum { + float: right; + margin: 3px; +} +/* Content Styles +---------------------------------------- */ + +ul.topiclist { + display: block; + list-style-type: none; + margin: 0; +} + +ul.forums { + background: #f9f9f9 none repeat-x 0 0; +} + +ul.topiclist li { + display: block; + list-style-type: none; + color: #777777; + margin: 0; +} + +ul.topiclist dl { + position: relative; +} + +ul.topiclist li.row dl { + padding: 2px 0; +} + +ul.topiclist dt { + display: block; + float: left; + width: 50%; + font-size: 1.1em; + padding-left: 5px; + padding-right: 5px; +} + +ul.topiclist dd { + display: block; + float: left; + border-left: 1px solid #FFFFFF; + padding: 4px 0; +} + +ul.topiclist dfn { + /* Labels for post/view counts */ + position: absolute; + left: -999px; + width: 990px; +} + +ul.topiclist li.row dt a.subforum { + background-image: none; + background-position: 0 50%; + background-repeat: no-repeat; + position: relative; + white-space: nowrap; + padding: 0 0 0 12px; +} + +.forum-image { + float: left; + padding-top: 5px; + margin-right: 5px; +} + +li.row { + border-top: 1px solid #FFFFFF; + border-bottom: 1px solid #8f8f8f; +} + +li.row strong { + font-weight: normal; + color: #000000; +} + +li.row:hover { + background-color: #f6f6f6; +} + +li.row:hover dd { + border-left-color: #CCCCCC; +} + +li.header dt, li.header dd { + line-height: 1em; + border-left-width: 0; + margin: 2px 0 4px 0; + color: #FFFFFF; + padding-top: 2px; + padding-bottom: 2px; + font-size: 1em; + font-family: Arial, Helvetica, sans-serif; + text-transform: uppercase; +} + +li.header dt { + font-weight: bold; +} + +li.header dd { + margin-left: 1px; +} + +li.header dl.icon { + min-height: 0; +} + +li.header dl.icon dt { + /* Tweak for headers alignment when folder icon used */ + padding-left: 0; + padding-right: 50px; +} + +/* Forum list column styles */ +dl.icon { + min-height: 35px; + background-position: 10px 50%; /* Position of folder icon */ + background-repeat: no-repeat; +} + +dl.icon dt { + padding-left: 45px; /* Space for folder icon */ + background-repeat: no-repeat; + background-position: 5px 95%; /* Position of topic icon */ +} + +dd.posts, dd.topics, dd.views { + width: 8%; + text-align: center; + line-height: 2.2em; + font-size: 1.2em; +} + +/* List in forum description */ +dl.icon dt ol, +dl.icon dt ul { + list-style-position: inside; + margin-left: 1em; +} + +dl.icon dt li { + display: list-item; + list-style-type: inherit; +} + +dd.lastpost { + width: 25%; + font-size: 1.1em; +} + +dd.redirect { + font-size: 1.1em; + line-height: 2.5em; +} + +dd.moderation { + font-size: 1.1em; +} + +dd.lastpost span, ul.topiclist dd.searchby span, ul.topiclist dd.info span, ul.topiclist dd.time span, dd.redirect span, dd.moderation span { + display: block; + padding-left: 5px; +} + +dd.time { + width: auto; + line-height: 200%; + font-size: 1.1em; +} + +dd.extra { + width: 12%; + line-height: 200%; + text-align: center; + font-size: 1.1em; +} + +dd.mark { + float: right !important; + width: 9%; + text-align: center; + line-height: 200%; + font-size: 1.2em; +} + +dd.info { + width: 30%; +} + +dd.option { + width: 15%; + line-height: 200%; + text-align: center; + font-size: 1.1em; +} + +dd.searchby { + width: 47%; + font-size: 1.1em; + line-height: 1em; +} + +ul.topiclist dd.searchextra { + margin-left: 5px; + padding: 0.2em 0; + font-size: 1.1em; + color: #333333; + border-left: none; + clear: both; + width: 98%; + overflow: hidden; +} + +/* Container for post/reply buttons and pagination */ +.topic-actions { + margin-bottom: 3px; + font-size: 1.1em; + height: 28px; + min-height: 28px; +} +div[class].topic-actions { + height: auto; +} + +/* Post body styles +----------------------------------------*/ +.postbody { + padding: 0; + line-height: 1.48em; + color: #333333; + width: 76%; + float: left; + clear: both; +} + +.postbody .ignore { + font-size: 1.1em; +} + +.postbody h3.first { + /* The first post on the page uses this */ + font-size: 1.7em; +} + +.postbody h3 { + /* Postbody requires a different h3 format - so change it here */ + font-size: 1.5em; + padding: 2px 0 0 0; + margin: 0 0 0.3em 0 !important; + text-transform: none; + border: none; + font-family: "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif; + line-height: 125%; +} + +.postbody h3 img { + /* Also see tweaks.css */ + vertical-align: bottom; +} + +.postbody .content { + font-size: 1.3em; +} + +.search .postbody { + width: 68% +} + +/* Topic review panel +----------------------------------------*/ +#review { + margin-top: 2em; +} + +#topicreview { + padding-right: 5px; + overflow: auto; + height: 300px; +} + +#topicreview .postbody { + width: auto; + float: none; + margin: 0; + height: auto; +} + +#topicreview .post { + height: auto; +} + +#topicreview h2 { + border-bottom-width: 0; +} + +.post-ignore .postbody { + display: none; +} + +/* MCP Post details +----------------------------------------*/ +#post_details +{ + /* This will only work in IE7+, plus the others */ + overflow: auto; + max-height: 300px; +} + +#expand +{ + clear: both; +} + +/* Content container styles +----------------------------------------*/ +.content { + min-height: 3em; + overflow: hidden; + line-height: 1.4em; + font-family: "Lucida Grande", "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif; + font-size: 1em; + color: #333333; + padding-bottom: 1px; +} + +.content h2, .panel h2 { + font-weight: normal; + color: #989898; + border-bottom: 1px solid #CCCCCC; + font-size: 1.6em; + margin-top: 0.5em; + margin-bottom: 0.5em; + padding-bottom: 0.5em; +} + +.panel h3 { + margin: 0.5em 0; +} + +.panel p { + font-size: 1.2em; + margin-bottom: 1em; + line-height: 1.4em; +} + +.content p { + font-family: "Lucida Grande", "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif; + font-size: 1.2em; + margin-bottom: 1em; + line-height: 1.4em; +} + +dl.faq { + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + font-size: 1.1em; + margin-top: 1em; + margin-bottom: 2em; + line-height: 1.4em; +} + +dl.faq dt { + font-weight: bold; + color: #333333; +} + +.content dl.faq { + font-size: 1.2em; + margin-bottom: 0.5em; +} + +.content li { + list-style-type: inherit; +} + +.content ul, .content ol { + margin-bottom: 1em; + margin-left: 3em; +} + +.posthilit { + background-color: #f3f3f3; + color: #BCBCBC; + padding: 0 2px 1px 2px; +} + +.announce, .unreadpost { + /* Highlight the announcements & unread posts box */ + border-left-color: #BCBCBC; + border-right-color: #BCBCBC; +} + +/* Post author */ +p.author { + margin: 0 15em 0.6em 0; + padding: 0 0 5px 0; + font-family: Verdana, Helvetica, Arial, sans-serif; + font-size: 1em; + line-height: 1.2em; +} + +/* Post signature */ +.signature { + margin-top: 1.5em; + padding-top: 0.2em; + font-size: 1.1em; + border-top: 1px solid #CCCCCC; + clear: left; + line-height: 140%; + overflow: hidden; + width: 100%; +} + +dd .signature { + margin: 0; + padding: 0; + clear: none; + border: none; +} + +.signature li { + list-style-type: inherit; +} + +.signature ul, .signature ol { + margin-bottom: 1em; + margin-left: 3em; +} + +/* Post noticies */ +.notice { + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + width: auto; + margin-top: 1.5em; + padding-top: 0.2em; + font-size: 1em; + border-top: 1px dashed #CCCCCC; + clear: left; + line-height: 130%; +} + +/* Jump to post link for now */ +ul.searchresults { + list-style: none; + text-align: right; + clear: both; +} + +/* BB Code styles +----------------------------------------*/ +/* Quote block */ +blockquote { + background: #ebebeb none 6px 8px no-repeat; + border: 1px solid #dbdbdb; + font-size: 0.95em; + margin: 0.5em 1px 0 25px; + overflow: hidden; + padding: 5px; +} + +blockquote blockquote { + /* Nested quotes */ + background-color: #bababa; + font-size: 1em; + margin: 0.5em 1px 0 15px; +} + +blockquote blockquote blockquote { + /* Nested quotes */ + background-color: #e4e4e4; +} + +blockquote cite { + /* Username/source of quoter */ + font-style: normal; + font-weight: bold; + margin-left: 20px; + display: block; + font-size: 0.9em; +} + +blockquote cite cite { + font-size: 1em; +} + +blockquote.uncited { + padding-top: 25px; +} + +/* Code block */ +dl.codebox { + padding: 3px; + background-color: #FFFFFF; + border: 1px solid #d8d8d8; + font-size: 1em; +} + +dl.codebox dt { + text-transform: uppercase; + border-bottom: 1px solid #CCCCCC; + margin-bottom: 3px; + font-size: 0.8em; + font-weight: bold; + display: block; +} + +blockquote dl.codebox { + margin-left: 0; +} + +dl.codebox code { + /* Also see tweaks.css */ + overflow: auto; + display: block; + height: auto; + max-height: 200px; + white-space: normal; + padding-top: 5px; + font: 0.9em Monaco, "Andale Mono","Courier New", Courier, mono; + line-height: 1.3em; + color: #8b8b8b; + margin: 2px 0; +} + +.syntaxbg { color: #FFFFFF; } +.syntaxcomment { color: #000000; } +.syntaxdefault { color: #bcbcbc; } +.syntaxhtml { color: #000000; } +.syntaxkeyword { color: #585858; } +.syntaxstring { color: #a7a7a7; } + +/* Attachments +----------------------------------------*/ +.attachbox { + float: left; + width: auto; + margin: 5px 5px 5px 0; + padding: 6px; + background-color: #FFFFFF; + border: 1px dashed #d8d8d8; + clear: left; +} + +.pm-message .attachbox { + background-color: #f3f3f3; +} + +.attachbox dt { + font-family: Arial, Helvetica, sans-serif; + text-transform: uppercase; +} + +.attachbox dd { + margin-top: 4px; + padding-top: 4px; + clear: left; + border-top: 1px solid #d8d8d8; +} + +.attachbox dd dd { + border: none; +} + +.attachbox p { + line-height: 110%; + color: #666666; + font-weight: normal; + clear: left; +} + +.attachbox p.stats +{ + line-height: 110%; + color: #666666; + font-weight: normal; + clear: left; +} + +.attach-image { + margin: 3px 0; + width: 100%; + max-height: 350px; + overflow: auto; +} + +.attach-image img { + border: 1px solid #999999; +/* cursor: move; */ + cursor: default; +} + +/* Inline image thumbnails */ +div.inline-attachment dl.thumbnail, div.inline-attachment dl.file { + display: block; + margin-bottom: 4px; +} + +div.inline-attachment p { + font-size: 100%; +} + +dl.file { + font-family: Verdana, Arial, Helvetica, sans-serif; + display: block; +} + +dl.file dt { + text-transform: none; + margin: 0; + padding: 0; + font-weight: bold; + font-family: Verdana, Arial, Helvetica, sans-serif; +} + +dl.file dd { + color: #666666; + margin: 0; + padding: 0; +} + +dl.thumbnail img { + padding: 3px; + border: 1px solid #666666; + background-color: #FFF; +} + +dl.thumbnail dd { + color: #666666; + font-style: italic; + font-family: Verdana, Arial, Helvetica, sans-serif; +} + +.attachbox dl.thumbnail dd { + font-size: 100%; +} + +dl.thumbnail dt a:hover { + background-color: #EEEEEE; +} + +dl.thumbnail dt a:hover img { + border: 1px solid #d2d2d2; +} + +/* Post poll styles +----------------------------------------*/ +fieldset.polls { + font-family: "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif; +} + +fieldset.polls dl { + margin-top: 5px; + border-top: 1px solid #e2e2e2; + padding: 5px 0 0 0; + line-height: 120%; + color: #666666; +} + +fieldset.polls dl.voted { + font-weight: bold; + color: #000000; +} + +fieldset.polls dt { + text-align: left; + float: left; + display: block; + width: 30%; + border-right: none; + padding: 0; + margin: 0; + font-size: 1.1em; +} + +fieldset.polls dd { + float: left; + width: 10%; + border-left: none; + padding: 0 5px; + margin-left: 0; + font-size: 1.1em; +} + +fieldset.polls dd.resultbar { + width: 50%; +} + +fieldset.polls dd input { + margin: 2px 0; +} + +fieldset.polls dd div { + text-align: right; + font-family: Arial, Helvetica, sans-serif; + color: #FFFFFF; + font-weight: bold; + padding: 0 2px; + overflow: visible; + min-width: 2%; +} + +.pollbar1 { + background-color: #aaaaaa; + border-bottom: 1px solid #747474; + border-right: 1px solid #747474; +} + +.pollbar2 { + background-color: #bebebe; + border-bottom: 1px solid #8c8c8c; + border-right: 1px solid #8c8c8c; +} + +.pollbar3 { + background-color: #D1D1D1; + border-bottom: 1px solid #aaaaaa; + border-right: 1px solid #aaaaaa; +} + +.pollbar4 { + background-color: #e4e4e4; + border-bottom: 1px solid #bebebe; + border-right: 1px solid #bebebe; +} + +.pollbar5 { + background-color: #f8f8f8; + border-bottom: 1px solid #D1D1D1; + border-right: 1px solid #D1D1D1; +} + +/* Poster profile block +----------------------------------------*/ +.postprofile { + /* Also see tweaks.css */ + margin: 5px 0 10px 0; + min-height: 80px; + color: #666666; + border-left: 1px solid #FFFFFF; + width: 22%; + float: right; + display: inline; +} +.pm .postprofile { + border-left: 1px solid #DDDDDD; +} + +.postprofile dd, .postprofile dt { + line-height: 1.2em; + margin-left: 8px; +} + +.postprofile strong { + font-weight: normal; + color: #000000; +} + +.avatar { + border: none; + margin-bottom: 3px; +} + +.online { + background-image: none; + background-position: 100% 0; + background-repeat: no-repeat; +} + +/* Poster profile used by search*/ +.search .postprofile { + width: 30%; +} + +/* pm list in compose message if mass pm is enabled */ +dl.pmlist dt { + width: 60% !important; +} + +dl.pmlist dt textarea { + width: 95%; +} + +dl.pmlist dd { + margin-left: 61% !important; + margin-bottom: 2px; +} +/* Button Styles +---------------------------------------- */ + +/* Rollover buttons + Based on: http://wellstyled.com/css-nopreload-rollovers.html +----------------------------------------*/ +.buttons { + float: left; + width: auto; + height: auto; +} + +/* Rollover state */ +.buttons div { + float: left; + margin: 0 5px 0 0; + background-position: 0 100%; +} + +/* Rolloff state */ +.buttons div a { + display: block; + width: 100%; + height: 100%; + background-position: 0 0; + position: relative; + overflow: hidden; +} + +/* Hide text and hide off-state image when rolling over (prevents flicker in IE) */ +/*.buttons div span { display: none; }*/ +/*.buttons div a:hover { background-image: none; }*/ +.buttons div span { position: absolute; width: 100%; height: 100%; cursor: pointer;} +.buttons div a:hover span { background-position: 0 100%; } + +/* Big button images */ +.reply-icon span { background: transparent none 0 0 no-repeat; } +.post-icon span { background: transparent none 0 0 no-repeat; } +.locked-icon span { background: transparent none 0 0 no-repeat; } +.pmreply-icon span { background: none 0 0 no-repeat; } +.newpm-icon span { background: none 0 0 no-repeat; } +.forwardpm-icon span { background: none 0 0 no-repeat; } + +/* Set big button dimensions */ +.buttons div.reply-icon { width: 96px; height: 25px; } +.buttons div.mustardreply-icon { width: 96px; height: 25px; } +.buttons div.post-icon { width: 96px; height: 25px; } +.buttons div.locked-icon { width: 88px; height: 25px; } +.buttons div.pmreply-icon { width: 96px; height: 25px; } +.buttons div.newpm-icon { width: 84px; height: 25px; } +.buttons div.forwardpm-icon { width: 96px; height: 25px; } + +/* Sub-header (navigation bar) +--------------------------------------------- */ +a.print, a.sendemail, a.fontsize { + display: block; + overflow: hidden; + height: 18px; + text-indent: -5000px; + text-align: left; + background-repeat: no-repeat; +} + +a.print { + background-image: none; + width: 22px; +} + +a.sendemail { + background-image: none; + width: 22px; +} + +a.fontsize { + background-image: none; + background-position: 0 -1px; + width: 29px; +} + +a.fontsize:hover { + background-position: 0 -20px; + text-decoration: none; +} + +/* Icon images +---------------------------------------- */ +.sitehome, .icon-faq, .icon-members, .icon-home, .icon-ucp, .icon-register, .icon-logout, +.icon-bookmark, .icon-bump, .icon-subscribe, .icon-unsubscribe, .icon-pages, .icon-search { + background-position: 0 50%; + background-repeat: no-repeat; + background-image: none; + padding: 1px 0 0 17px; +} + +/* Poster profile icons +----------------------------------------*/ +ul.profile-icons { + padding-top: 10px; + list-style: none; +} + +/* Rollover state */ +ul.profile-icons li { + float: left; + margin: 0 6px 3px 0; + background-position: 0 100%; +} + +/* Rolloff state */ +ul.profile-icons li a { + display: block; + width: 100%; + height: 100%; + background-position: 0 0; +} + +/* Hide text and hide off-state image when rolling over (prevents flicker in IE) */ +ul.profile-icons li span { display:none; } +ul.profile-icons li a:hover { background: none; } + +/* Positioning of moderator icons */ +.postbody ul.profile-icons { + float: right; + width: auto; + padding: 0; +} + +.postbody ul.profile-icons li { + margin: 0 3px; +} + +/* Profile & navigation icons */ +.email-icon, .email-icon a { background: none top left no-repeat; } +.aim-icon, .aim-icon a { background: none top left no-repeat; } +.yahoo-icon, .yahoo-icon a { background: none top left no-repeat; } +.web-icon, .web-icon a { background: none top left no-repeat; } +.msnm-icon, .msnm-icon a { background: none top left no-repeat; } +.icq-icon, .icq-icon a { background: none top left no-repeat; } +.jabber-icon, .jabber-icon a { background: none top left no-repeat; } +.pm-icon, .pm-icon a { background: none top left no-repeat; } +.quote-icon, .quote-icon a { background: none top left no-repeat; } + +/* Moderator icons */ +.report-icon, .report-icon a { background: none top left no-repeat; } +.warn-icon, .warn-icon a { background: none top left no-repeat; } +.edit-icon, .edit-icon a { background: none top left no-repeat; } +.delete-icon, .delete-icon a { background: none top left no-repeat; } +.info-icon, .info-icon a { background: none top left no-repeat; } + +/* Set profile icon dimensions */ +ul.profile-icons li.email-icon { width: 20px; height: 20px; } +ul.profile-icons li.aim-icon { width: 20px; height: 20px; } +ul.profile-icons li.yahoo-icon { width: 20px; height: 20px; } +ul.profile-icons li.web-icon { width: 20px; height: 20px; } +ul.profile-icons li.msnm-icon { width: 20px; height: 20px; } +ul.profile-icons li.icq-icon { width: 20px; height: 20px; } +ul.profile-icons li.jabber-icon { width: 20px; height: 20px; } +ul.profile-icons li.pm-icon { width: 28px; height: 20px; } +ul.profile-icons li.quote-icon { width: 54px; height: 20px; } +ul.profile-icons li.report-icon { width: 20px; height: 20px; } +ul.profile-icons li.edit-icon { width: 42px; height: 20px; } +ul.profile-icons li.delete-icon { width: 20px; height: 20px; } +ul.profile-icons li.info-icon { width: 20px; height: 20px; } +ul.profile-icons li.warn-icon { width: 20px; height: 20px; } + +/* Fix profile icon default margins */ +ul.profile-icons li.edit-icon { margin: 0 0 0 3px; } +ul.profile-icons li.quote-icon { margin: 0 0 0 10px; } +ul.profile-icons li.info-icon, ul.profile-icons li.report-icon { margin: 0 3px 0 0; } +/* Control Panel Styles +---------------------------------------- */ + + +/* Main CP box +----------------------------------------*/ +#cp-menu { + float:left; + width: 19%; + margin-top: 1em; + margin-bottom: 5px; +} + +#cp-main { + float: left; + width: 81%; +} + +#cp-main .content { + padding: 0; +} + +#cp-main h3, #cp-main hr, #cp-menu hr { + border-color: #bfbfbf; +} + +#cp-main .panel p { + font-size: 1.1em; +} + +#cp-main .panel ol { + margin-left: 2em; + font-size: 1.1em; +} + +#cp-main .panel li.row { + border-bottom: 1px solid #cbcbcb; + border-top: 1px solid #F9F9F9; +} + +ul.cplist { + margin-bottom: 5px; + border-top: 1px solid #cbcbcb; +} + +#cp-main .panel li.header dd, #cp-main .panel li.header dt { + color: #000000; + margin-bottom: 2px; +} + +#cp-main table.table1 { + margin-bottom: 1em; +} + +#cp-main table.table1 thead th { + color: #333333; + font-weight: bold; + border-bottom: 1px solid #333333; + padding: 5px; +} + +#cp-main table.table1 tbody th { + font-style: italic; + background-color: transparent !important; + border-bottom: none; +} + +#cp-main .pagination { + float: right; + width: auto; + padding-top: 1px; +} + +#cp-main .postbody p { + font-size: 1.1em; +} + +#cp-main .pm-message { + border: 1px solid #e2e2e2; + margin: 10px 0; + background-color: #FFFFFF; + width: auto; + float: none; +} + +.pm-message h2 { + padding-bottom: 5px; +} + +#cp-main .postbody h3, #cp-main .box2 h3 { + margin-top: 0; +} + +#cp-main .buttons { + margin-left: 0; +} + +#cp-main ul.linklist { + margin: 0; +} + +/* MCP Specific tweaks */ +.mcp-main .postbody { + width: 100%; +} + +.tabs-container h2 { + float: left; + margin-bottom: 0px; +} + +.tabs-container #minitabs { + float: right; + margin-top: 19px; +} + +.tabs-container:after { + display: block; + clear: both; + content: ''; +} + +/* CP tabbed menu +----------------------------------------*/ +#tabs { + line-height: normal; + margin: 20px 0 -1px 7px; + min-width: 570px; +} + +#tabs ul { + margin:0; + padding: 0; + list-style: none; +} + +#tabs li { + display: inline; + margin: 0; + padding: 0; + font-size: 1em; + font-weight: bold; +} + +#tabs a { + float: left; + background: none no-repeat 0% -35px; + margin: 0 1px 0 0; + padding: 0 0 0 5px; + text-decoration: none; + position: relative; + cursor: pointer; +} + +#tabs a span { + float: left; + display: block; + background: none no-repeat 100% -35px; + padding: 6px 10px 6px 5px; + color: #828282; + white-space: nowrap; +} + +#tabs a:hover span { + color: #bcbcbc; +} + +#tabs .activetab a { + background-position: 0 0; + border-bottom: 1px solid #ebebeb; +} + +#tabs .activetab a span { + background-position: 100% 0; + padding-bottom: 7px; + color: #333333; +} + +#tabs a:hover { + background-position: 0 -70px; +} + +#tabs a:hover span { + background-position:100% -70px; +} + +#tabs .activetab a:hover { + background-position: 0 0; +} + +#tabs .activetab a:hover span { + color: #000000; + background-position: 100% 0; +} + +/* Mini tabbed menu used in MCP +----------------------------------------*/ +#minitabs { + line-height: normal; + margin: -20px 7px 0 0; +} + +#minitabs ul { + margin:0; + padding: 0; + list-style: none; +} + +#minitabs li { + display: block; + float: right; + padding: 0 10px 4px 10px; + font-size: 1em; + font-weight: bold; + background-color: #f2f2f2; + margin-left: 2px; +} + +#minitabs a { +} + +#minitabs a:hover { + text-decoration: none; +} + +#minitabs li.activetab { + background-color: #F9F9F9; +} + +#minitabs li.activetab a, #minitabs li.activetab a:hover { + color: #333333; +} + +/* UCP navigation menu +----------------------------------------*/ +/* Container for sub-navigation list */ +#navigation { + width: 100%; + padding-top: 36px; +} + +#navigation ul { + list-style:none; +} + +/* Default list state */ +#navigation li { + margin: 1px 0; + padding: 0; + font-weight: bold; + display: inline; +} + +/* Link styles for the sub-section links */ +#navigation a { + display: block; + padding: 5px; + margin: 1px 0; + text-decoration: none; + font-weight: bold; + color: #333; + background: #cfcfcf none repeat-y 100% 0; +} + +#navigation a:hover { + text-decoration: none; + background-color: #c6c6c6; + color: #bcbcbc; + background-image: none; +} + +#navigation #active-subsection a { + display: block; + color: #d3d3d3; + background-color: #F9F9F9; + background-image: none; +} + +#navigation #active-subsection a:hover { + color: #d3d3d3; +} + +/* Preferences pane layout +----------------------------------------*/ +#cp-main h2 { + border-bottom: none; + padding: 0; + margin-left: 10px; + color: #333333; +} + +#cp-main .panel { + background-color: #F9F9F9; +} + +#cp-main .pm { + background-color: #FFFFFF; +} + +#cp-main span.corners-top, #cp-menu span.corners-top { + background-image: none; +} + +#cp-main span.corners-top span, #cp-menu span.corners-top span { + background-image: none; +} + +#cp-main span.corners-bottom, #cp-menu span.corners-bottom { + background-image: none; +} + +#cp-main span.corners-bottom span, #cp-menu span.corners-bottom span { + background-image: none; +} + +/* Topicreview */ +#cp-main .panel #topicreview span.corners-top, #cp-menu .panel #topicreview span.corners-top { + background-image: none; +} + +#cp-main .panel #topicreview span.corners-top span, #cp-menu .panel #topicreview span.corners-top span { + background-image: none; +} + +#cp-main .panel #topicreview span.corners-bottom, #cp-menu .panel #topicreview span.corners-bottom { + background-image: none; +} + +#cp-main .panel #topicreview span.corners-bottom span, #cp-menu .panel #topicreview span.corners-bottom span { + background-image: none; +} + +/* Friends list */ +.cp-mini { + background-color: #f9f9f9; + padding: 0 5px; + margin: 10px 15px 10px 5px; +} + +.cp-mini span.corners-top, .cp-mini span.corners-bottom { + margin: 0 -5px; +} + +dl.mini dt { + font-weight: bold; + color: #676767; +} + +dl.mini dd { + padding-top: 4px; +} + +.friend-online { + font-weight: bold; +} + +.friend-offline { + font-style: italic; +} + +/* PM Styles +----------------------------------------*/ +#pm-menu { + line-height: 2.5em; +} + +/* PM panel adjustments */ +.reply-all a.left { + background-position: 3px 60%; +} + +.reply-all a.left:hover { + background-position: 0px 60%; +} + +.reply-all { + font-size: 11px; + padding-top: 5px; +} + +/* PM Message history */ +.current { + color: #999999; +} + +/* Defined rules list for PM options */ +ol.def-rules { + padding-left: 0; +} + +ol.def-rules li { + line-height: 180%; + padding: 1px; +} + +/* PM marking colours */ +.pmlist li.bg1 { + padding: 0 3px; +} + +.pmlist li.bg2 { + padding: 0 3px; +} + +.pmlist li.pm_message_reported_colour, .pm_message_reported_colour { + border-left-color: #bcbcbc; + border-right-color: #bcbcbc; +} + +.pmlist li.pm_marked_colour, .pm_marked_colour { + padding: 0; + border: solid 3px #ffffff; + border-width: 0 3px; +} + +.pmlist li.pm_replied_colour, .pm_replied_colour { + padding: 0; + border: solid 3px #c2c2c2; + border-width: 0 3px; +} + +.pmlist li.pm_friend_colour, .pm_friend_colour { + padding: 0; + border: solid 3px #bdbdbd; + border-width: 0 3px; +} + +.pmlist li.pm_foe_colour, .pm_foe_colour { + padding: 0; + border: solid 3px #000000; + border-width: 0 3px; +} + +.pm-legend { + border-left-width: 10px; + border-left-style: solid; + border-right-width: 0; + margin-bottom: 3px; + padding-left: 3px; +} + +/* Avatar gallery */ +#gallery label { + position: relative; + float: left; + margin: 10px; + padding: 5px; + width: auto; + background: #FFFFFF; + border: 1px solid #CCC; + text-align: center; +} + +#gallery label:hover { + background-color: #EEE; +} +/* Form Styles +---------------------------------------- */ + +/* General form styles +----------------------------------------*/ +fieldset { + border-width: 0; + font-family: Verdana, Helvetica, Arial, sans-serif; + font-size: 1.1em; +} + +input { + font-weight: normal; + cursor: pointer; + vertical-align: middle; + padding: 0 3px; + font-size: 1em; + font-family: Verdana, Helvetica, Arial, sans-serif; +} + +select { + font-family: Verdana, Helvetica, Arial, sans-serif; + font-weight: normal; + cursor: pointer; + vertical-align: middle; + border: 1px solid #666666; + padding: 1px; + background-color: #FAFAFA; + font-size: 1em; +} + +option { + padding-right: 1em; +} + +option.disabled-option { + color: graytext; +} + +textarea { + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + width: 60%; + padding: 2px; + font-size: 1em; + line-height: 1.4em; +} + +label { + cursor: default; + padding-right: 5px; + color: #676767; +} + +label input { + vertical-align: middle; +} + +label img { + vertical-align: middle; +} + +/* Definition list layout for forms +---------------------------------------- */ +fieldset dl { + padding: 4px 0; +} + +fieldset dt { + float: left; + width: 40%; + text-align: left; + display: block; +} + +fieldset dd { + margin-left: 41%; + vertical-align: top; + margin-bottom: 3px; +} + +/* Specific layout 1 */ +fieldset.fields1 dt { + width: 15em; + border-right-width: 0; +} + +fieldset.fields1 dd { + margin-left: 15em; + border-left-width: 0; +} + +fieldset.fields1 { + background-color: transparent; +} + +fieldset.fields1 div { + margin-bottom: 3px; +} + +/* Set it back to 0px for the reCaptcha divs: PHPBB3-9587 */ +fieldset.fields1 #recaptcha_widget_div div { + margin-bottom: 0; +} + +/* Specific layout 2 */ +fieldset.fields2 dt { + width: 15em; + border-right-width: 0; +} + +fieldset.fields2 dd { + margin-left: 16em; + border-left-width: 0; +} + +/* Form elements */ +dt label { + font-weight: bold; + text-align: left; +} + +dd label { + white-space: nowrap; + color: #333; +} + +dd input, dd textarea { + margin-right: 3px; +} + +dd select { + width: auto; +} + +dd textarea { + width: 85%; +} + +/* Hover effects */ +fieldset dl:hover dt label { + color: #000000; +} + +fieldset.fields2 dl:hover dt label { + color: inherit; +} + +#timezone { + width: 95%; +} + +* html #timezone { + width: 50%; +} + +/* Quick-login on index page */ +fieldset.quick-login { + margin-top: 5px; +} + +fieldset.quick-login input { + width: auto; +} + +fieldset.quick-login input.inputbox { + width: 15%; + vertical-align: middle; + margin-right: 5px; + background-color: #f3f3f3; +} + +fieldset.quick-login label { + white-space: nowrap; + padding-right: 2px; +} + +/* Display options on viewtopic/viewforum pages */ +fieldset.display-options { + text-align: center; + margin: 3px 0 5px 0; +} + +fieldset.display-options label { + white-space: nowrap; + padding-right: 2px; +} + +fieldset.display-options a { + margin-top: 3px; +} + +/* Display actions for ucp and mcp pages */ +fieldset.display-actions { + text-align: right; + line-height: 2em; + white-space: nowrap; + padding-right: 1em; +} + +fieldset.display-actions label { + white-space: nowrap; + padding-right: 2px; +} + +fieldset.sort-options { + line-height: 2em; +} + +/* MCP forum selection*/ +fieldset.forum-selection { + margin: 5px 0 3px 0; + float: right; +} + +fieldset.forum-selection2 { + margin: 13px 0 3px 0; + float: right; +} + +/* Jumpbox */ +fieldset.jumpbox { + text-align: right; + margin-top: 15px; + height: 2.5em; +} + +fieldset.quickmod { + width: 50%; + float: right; + text-align: right; + height: 2.5em; +} + +/* Submit button fieldset */ +fieldset.submit-buttons { + text-align: center; + vertical-align: middle; + margin: 5px 0; +} + +fieldset.submit-buttons input { + vertical-align: middle; + padding-top: 3px; + padding-bottom: 3px; +} + +/* Posting page styles +----------------------------------------*/ + +/* Buttons used in the editor */ +#format-buttons { + margin: 15px 0 2px 0; +} + +#format-buttons input, #format-buttons select { + vertical-align: middle; +} + +/* Main message box */ +#message-box { + width: 80%; +} + +#message-box textarea { + font-family: "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif; + width: 450px; + height: 270px; + min-width: 100%; + max-width: 100%; + font-size: 1.2em; + color: #333333; +} + +/* Emoticons panel */ +#smiley-box { + width: 18%; + float: right; +} + +#smiley-box img { + margin: 3px; +} + +/* Input field styles +---------------------------------------- */ +.inputbox { + background-color: #FFFFFF; + border: 1px solid #c0c0c0; + color: #333333; + padding: 2px; + cursor: text; +} + +.inputbox:hover { + border: 1px solid #eaeaea; +} + +.inputbox:focus { + border: 1px solid #eaeaea; + color: #4b4b4b; +} + +input.inputbox { width: 85%; } +input.medium { width: 50%; } +input.narrow { width: 25%; } +input.tiny { width: 125px; } +input.np { width: 37px; } + +textarea.inputbox { + width: 85%; +} + +.autowidth { + width: auto !important; +} + +/* Form button styles +---------------------------------------- */ +input.button1, input.button2 { + font-size: 1em; +} + +a.button1, input.button1, input.button3, a.button2, input.button2 { + width: auto !important; + padding-top: 1px; + padding-bottom: 1px; + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + color: #000; + background: #FAFAFA none repeat-x top left; +} + +a.button1, input.button1 { + font-weight: bold; + border: 1px solid #666666; +} + +input.button3 { + padding: 0; + margin: 0; + line-height: 5px; + height: 12px; + background-image: none; + font-variant: small-caps; +} + +/* Alternative button */ +a.button2, input.button2, input.button3 { + border: 1px solid #666666; +} + +/* button in the style of the form buttons */ +a.button1, a.button1:link, a.button1:visited, a.button1:active, a.button2, a.button2:link, a.button2:visited, a.button2:active { + text-decoration: none; + color: #000000; + padding: 2px 8px; + line-height: 250%; + vertical-align: text-bottom; + background-position: 0 1px; +} + +/* Hover states */ +a.button1:hover, input.button1:hover, a.button2:hover, input.button2:hover, input.button3:hover { + border: 1px solid #BCBCBC; + background-position: 0 100%; + color: #BCBCBC; +} + +input.disabled { + font-weight: normal; + color: #666666; +} + +/* Topic and forum Search */ +.search-box { + margin-top: 3px; + margin-left: 5px; + float: left; +} + +.search-box input { +} + +input.search { + background-image: none; + background-repeat: no-repeat; + background-position: left 1px; + padding-left: 17px; +} + +.full { width: 95%; } +.medium { width: 50%;} +.narrow { width: 25%;} +.tiny { width: 10%;} +/* Style Sheet Tweaks + +These style definitions are mainly IE specific +tweaks required due to its poor CSS support. +-------------------------------------------------*/ + +* html table, * html select, * html input { font-size: 100%; } +* html hr { margin: 0; } +* html span.corners-top, * html span.corners-bottom { background-image: url("/ott/prosilver/theme/images/corners_left.gif"); } +* html span.corners-top span, * html span.corners-bottom span { background-image: url("/ott/prosilver/theme/images/corners_right.gif"); } + +table.table1 { + width: 99%; /* IE < 6 browsers */ + /* Tantek hack */ + voice-family: "\"}\""; + voice-family: inherit; + width: 100%; +} +html>body table.table1 { width: 100%; } /* Reset 100% for opera */ + +* html ul.topiclist li { position: relative; } +* html .postbody h3 img { vertical-align: middle; } + +/* Form styles */ +html>body dd label input { vertical-align: text-bottom; } /* Align checkboxes/radio buttons nicely */ + +* html input.button1, * html input.button2 { + padding-bottom: 0; + margin-bottom: 1px; +} + +/* Misc layout styles */ +* html .column1, * html .column2 { width: 45%; } + +/* Nice method for clearing floated blocks without having to insert any extra markup (like spacer above) + From http://www.positioniseverything.net/easyclearing.html +#tabs:after, #minitabs:after, .post:after, .navbar:after, fieldset dl:after, ul.topiclist dl:after, ul.linklist:after, dl.polls:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +}*/ + +.clearfix, #tabs, #minitabs, fieldset dl, ul.topiclist dl, dl.polls { + height: 1%; + overflow: hidden; +} + +/* viewtopic fix */ +* html .post { + height: 25%; + overflow: hidden; +} + +/* navbar fix */ +* html .clearfix, * html .navbar, ul.linklist { + height: 4%; + overflow: hidden; +} + +/* Simple fix so forum and topic lists always have a min-height set, even in IE6 + From http://www.dustindiaz.com/min-height-fast-hack */ +dl.icon { + min-height: 35px; + height: auto !important; + height: 35px; +} + +* html li.row dl.icon dt { + height: 35px; + overflow: visible; +} + +* html #search-box { + width: 25%; +} + +/* Correctly clear floating for details on profile view */ +*:first-child+html dl.details dd { + margin-left: 30%; + float: none; +} + +* html dl.details dd { + margin-left: 30%; + float: none; +} + +/* Headerbar height fix for IE7 and below */ +* html #site-description p { + margin-bottom: 1.0em; +} + +*:first-child+html #site-description p { + margin-bottom: 1.0em; +} + +/* #minitabs fix for IE */ +.tabs-container { + zoom: 1; +} + +#minitabs { + white-space: nowrap; + *min-width: 50%; +} +/* +-------------------------------------------------------------- +Colours and backgrounds for common.css +-------------------------------------------------------------- */ + +html, body { + color: #536482; + background-color: #FFFFFF; +} + +h1 { + color: #FFFFFF; +} + +h2 { + color: #28313F; +} + +h3 { + border-bottom-color: #CCCCCC; + color: #115098; +} + +hr { + border-color: #FFFFFF; + border-top-color: #CCCCCC; +} + +hr.dashed { + border-top-color: #CCCCCC; +} + +/* Search box +--------------------------------------------- */ + +#search-box { + color: #FFFFFF; +} + +#search-box #keywords { + background-color: #FFF; +} + +#search-box input { + border-color: #0075B0; +} + +/* Round cornered boxes and backgrounds +---------------------------------------- */ +.headerbar { + background-color: #12A3EB; + background-image: url("/ott/prosilver/theme/images/bg_header.gif"); + color: #FFFFFF; +} + +.navbar { + background-color: #cadceb; +} + +.forabg { + background-color: #0076b1; + background-image: url("/ott/prosilver/theme/images/bg_list.gif"); +} + +.forumbg { + background-color: #12A3EB; + background-image: url("/ott/prosilver/theme/images/bg_header.gif"); +} + +.panel { + background-color: #ECF1F3; + color: #28313F; +} + +.post:target .content { + color: #000000; +} + +.post:target h3 a { + color: #000000; +} + +.bg1 { background-color: #ECF3F7; } +.bg2 { background-color: #e1ebf2; } +.bg3 { background-color: #cadceb; } + +.ucprowbg { + background-color: #DCDEE2; +} + +.fieldsbg { + background-color: #E7E8EA; +} + +span.corners-top { + background-image: url("/ott/prosilver/theme/images/corners_left.png"); +} + +span.corners-top span { + background-image: url("/ott/prosilver/theme/images/corners_right.png"); +} + +span.corners-bottom { + background-image: url("/ott/prosilver/theme/images/corners_left.png"); +} + +span.corners-bottom span { + background-image: url("/ott/prosilver/theme/images/corners_right.png"); +} + +/* Horizontal lists +----------------------------------------*/ + +ul.navlinks { + border-bottom-color: #FFFFFF; +} + +/* Table styles +----------------------------------------*/ +table.table1 thead th { + color: #FFFFFF; +} + +table.table1 tbody tr { + border-color: #BFC1CF; +} + +table.table1 tbody tr:hover, table.table1 tbody tr.hover { + background-color: #CFE1F6; + color: #000; +} + +table.table1 td { + color: #536482; +} + +table.table1 tbody td { + border-top-color: #FAFAFA; +} + +table.table1 tbody th { + border-bottom-color: #000000; + color: #333333; + background-color: #FFFFFF; +} + +table.info tbody th { + color: #000000; +} + +/* Misc layout styles +---------------------------------------- */ +dl.details dt { + color: #000000; +} + +dl.details dd { + color: #536482; +} + +.sep { + color: #1198D9; +} + +/* Pagination +---------------------------------------- */ + +.pagination span strong { + color: #FFFFFF; + background-color: #4692BF; + border-color: #4692BF; +} + +.pagination span a, .pagination span a:link, .pagination span a:visited { + color: #5C758C; + background-color: #ECEDEE; + border-color: #B4BAC0; +} + +.pagination span a:hover { + border-color: #368AD2; + background-color: #368AD2; + color: #FFF; +} + +.pagination span a:active { + color: #5C758C; + background-color: #ECEDEE; + border-color: #B4BAC0; +} + +/* Pagination in viewforum for multipage topics */ +.row .pagination { + background-image: url("/ott/prosilver/theme/images/icon_pages.gif"); +} + +.row .pagination span a, li.pagination span a { + background-color: #FFFFFF; +} + +.row .pagination span a:hover, li.pagination span a:hover { + background-color: #368AD2; +} + +/* Miscellaneous styles +---------------------------------------- */ + +.copyright { + color: #555555; +} + +.error { + color: #BC2A4D; +} + +.reported { + background-color: #F7ECEF; +} + +li.reported:hover { + background-color: #ECD5D8 !important; +} +.sticky, .announce { + /* you can add a background for stickies and announcements*/ +} + +div.rules { + background-color: #ECD5D8; + color: #BC2A4D; +} + +p.rules { + background-color: #ECD5D8; + background-image: none; +} + +/* +-------------------------------------------------------------- +Colours and backgrounds for links.css +-------------------------------------------------------------- */ + +a:link { color: #105289; } +a:visited { color: #105289; } +a:hover { color: #D31141; } +a:active { color: #368AD2; } + +/* Links on gradient backgrounds */ +#search-box a:link, .navbg a:link, .forumbg .header a:link, .forabg .header a:link, th a:link { + color: #FFFFFF; +} + +#search-box a:visited, .navbg a:visited, .forumbg .header a:visited, .forabg .header a:visited, th a:visited { + color: #FFFFFF; +} + +#search-box a:hover, .navbg a:hover, .forumbg .header a:hover, .forabg .header a:hover, th a:hover { + color: #A8D8FF; +} + +#search-box a:active, .navbg a:active, .forumbg .header a:active, .forabg .header a:active, th a:active { + color: #C8E6FF; +} + +/* Links for forum/topic lists */ +a.forumtitle { + color: #105289; +} + +/* a.forumtitle:visited { color: #105289; } */ + +a.forumtitle:hover { + color: #BC2A4D; +} + +a.forumtitle:active { + color: #105289; +} + +a.topictitle { + color: #105289; +} + +/* a.topictitle:visited { color: #368AD2; } */ + +a.topictitle:hover { + color: #BC2A4D; +} + +a.topictitle:active { + color: #105289; +} + +/* Post body links */ +.postlink { + color: #368AD2; + border-bottom-color: #368AD2; +} + +.postlink:visited { + color: #5D8FBD; + border-bottom-color: #5D8FBD; +} + +.postlink:active { + color: #368AD2; +} + +.postlink:hover { + background-color: #D0E4F6; + color: #0D4473; +} + +.signature a, .signature a:visited, .signature a:hover, .signature a:active { + background-color: transparent; +} + +/* Profile links */ +.postprofile a:link, .postprofile a:visited, .postprofile dt.author a { + color: #105289; +} + +.postprofile a:hover, .postprofile dt.author a:hover { + color: #D31141; +} + +.postprofile a:active { + color: #105289; +} + +/* Profile searchresults */ +.search .postprofile a { + color: #105289; +} + +.search .postprofile a:hover { + color: #D31141; +} + +/* Back to top of page */ +a.top { + background-image: url("/ott/prosilver/imageset/icon_back_top.gif"); +} + +a.top2 { + background-image: url("/ott/prosilver/imageset/icon_back_top.gif"); +} + +/* Arrow links */ +a.up { background-image: url("/ott/prosilver/theme/images/arrow_up.gif") } +a.down { background-image: url("/ott/prosilver/theme/images/arrow_down.gif") } +a.left { background-image: url("/ott/prosilver/theme/images/arrow_left.gif") } +a.right { background-image: url("/ott/prosilver/theme/images/arrow_right.gif") } + +a.up:hover { + background-color: transparent; +} + +a.left:hover { + color: #368AD2; +} + +a.right:hover { + color: #368AD2; +} + + +/* +-------------------------------------------------------------- +Colours and backgrounds for content.css +-------------------------------------------------------------- */ + +ul.forums { + background-color: #eef5f9; + background-image: url("/ott/prosilver/theme/images/gradient.gif"); +} + +ul.topiclist li { + color: #4C5D77; +} + +ul.topiclist dd { + border-left-color: #FFFFFF; +} + +.rtl ul.topiclist dd { + border-right-color: #fff; + border-left-color: transparent; +} + +ul.topiclist li.row dt a.subforum.read { + background-image: url("/ott/prosilver/imageset/subforum_read.gif"); +} + +ul.topiclist li.row dt a.subforum.unread { + background-image: url("/ott/prosilver/imageset/subforum_unread.gif"); +} + +li.row { + border-top-color: #FFFFFF; + border-bottom-color: #00608F; +} + +li.row strong { + color: #000000; +} + +li.row:hover { + background-color: #F6F4D0; +} + +li.row:hover dd { + border-left-color: #CCCCCC; +} + +.rtl li.row:hover dd { + border-right-color: #CCCCCC; + border-left-color: transparent; +} + +li.header dt, li.header dd { + color: #FFFFFF; +} + +/* Forum list column styles */ +ul.topiclist dd.searchextra { + color: #333333; +} + +/* Post body styles +----------------------------------------*/ +.postbody { + color: #333333; +} + +/* Content container styles +----------------------------------------*/ +.content { + color: #333333; +} + +.content h2, .panel h2 { + color: #115098; + border-bottom-color: #CCCCCC; +} + +dl.faq dt { + color: #333333; +} + +.posthilit { + background-color: #F3BFCC; + color: #BC2A4D; +} + +/* Post signature */ +.signature { + border-top-color: #CCCCCC; +} + +/* Post noticies */ +.notice { + border-top-color: #CCCCCC; +} + +/* BB Code styles +----------------------------------------*/ +/* Quote block */ +blockquote { + background-color: #EBEADD; + background-image: url("/ott/prosilver/theme/images/quote.gif"); + border-color:#DBDBCE; +} + +.rtl blockquote { + background-image: url("/ott/prosilver/theme/images/quote_rtl.gif"); +} + +blockquote blockquote { + /* Nested quotes */ + background-color:#EFEED9; +} + +blockquote blockquote blockquote { + /* Nested quotes */ + background-color: #EBEADD; +} + +/* Code block */ +dl.codebox { + background-color: #FFFFFF; + border-color: #C9D2D8; +} + +dl.codebox dt { + border-bottom-color: #CCCCCC; +} + +dl.codebox code { + color: #2E8B57; +} + +.syntaxbg { color: #FFFFFF; } +.syntaxcomment { color: #FF8000; } +.syntaxdefault { color: #0000BB; } +.syntaxhtml { color: #000000; } +.syntaxkeyword { color: #007700; } +.syntaxstring { color: #DD0000; } + +/* Attachments +----------------------------------------*/ +.attachbox { + background-color: #FFFFFF; + border-color: #C9D2D8; +} + +.pm-message .attachbox { + background-color: #F2F3F3; +} + +.attachbox dd { + border-top-color: #C9D2D8; +} + +.attachbox p { + color: #666666; +} + +.attachbox p.stats { + color: #666666; +} + +.attach-image img { + border-color: #999999; +} + +/* Inline image thumbnails */ + +dl.file dd { + color: #666666; +} + +dl.thumbnail img { + border-color: #666666; + background-color: #FFFFFF; +} + +dl.thumbnail dd { + color: #666666; +} + +dl.thumbnail dt a:hover { + background-color: #EEEEEE; +} + +dl.thumbnail dt a:hover img { + border-color: #368AD2; +} + +/* Post poll styles +----------------------------------------*/ + +fieldset.polls dl { + border-top-color: #DCDEE2; + color: #666666; +} + +fieldset.polls dl.voted { + color: #000000; +} + +fieldset.polls dd div { + color: #FFFFFF; +} + +.rtl .pollbar1, .rtl .pollbar2, .rtl .pollbar3, .rtl .pollbar4, .rtl .pollbar5 { + border-right-color: transparent; +} + +.pollbar1 { + background-color: #AA2346; + border-bottom-color: #74162C; + border-right-color: #74162C; +} + +.rtl .pollbar1 { + border-left-color: #74162C; +} + +.pollbar2 { + background-color: #BE1E4A; + border-bottom-color: #8C1C38; + border-right-color: #8C1C38; +} + +.rtl .pollbar2 { + border-left-color: #8C1C38; +} + +.pollbar3 { + background-color: #D11A4E; + border-bottom-color: #AA2346; + border-right-color: #AA2346; +} + +.rtl .pollbar3 { + border-left-color: #AA2346; +} + +.pollbar4 { + background-color: #E41653; + border-bottom-color: #BE1E4A; + border-right-color: #BE1E4A; +} + +.rtl .pollbar4 { + border-left-color: #BE1E4A; +} + +.pollbar5 { + background-color: #F81157; + border-bottom-color: #D11A4E; + border-right-color: #D11A4E; +} + +.rtl .pollbar5 { + border-left-color: #D11A4E; +} + +/* Poster profile block +----------------------------------------*/ +.postprofile { + color: #666666; + border-left-color: #FFFFFF; +} + +.rtl .postprofile { + border-right-color: #FFFFFF; + border-left-color: transparent; +} + +.pm .postprofile { + border-left-color: #DDDDDD; +} + +.rtl .pm .postprofile { + border-right-color: #DDDDDD; + border-left-color: transparent; +} + +.postprofile strong { + color: #000000; +} + +.online { + background-image: url("/ott/prosilver/imageset/en/icon_user_online.gif"); +} + +/* +-------------------------------------------------------------- +Colours and backgrounds for buttons.css +-------------------------------------------------------------- */ + +/* Big button images */ +.reply-icon span { background-image: url("/ott/prosilver/imageset/en/button_topic_reply.gif"); } +.mustardreply-icon span { background-image: url("/ott/prosilver/imageset/en/button_topic_reply_mustard.gif"); } +.post-icon span { background-image: url("/ott/prosilver/imageset/en/button_topic_new.gif"); } +.locked-icon span { background-image: url("/ott/prosilver/imageset/en/button_topic_locked.gif"); } +.pmreply-icon span { background-image: url("/ott/prosilver/imageset/en/button_pm_reply.gif") ;} +.newpm-icon span { background-image: url("/ott/prosilver/imageset/en/button_pm_new.gif") ;} +.forwardpm-icon span { background-image: url("/ott/prosilver/imageset/en/button_pm_forward.gif") ;} + +a.print { + background-image: url("/ott/prosilver/theme/images/icon_print.gif"); +} + +a.sendemail { + background-image: url("/ott/prosilver/theme/images/icon_sendemail.gif"); +} + +a.fontsize { + background-image: url("/ott/prosilver/theme/images/icon_fontsize.gif"); +} + +/* Icon images +---------------------------------------- */ +.sitehome { background-image: url("/ott/prosilver/theme/images/icon_home.gif"); } +.icon-faq { background-image: url("/ott/prosilver/theme/images/icon_faq.gif"); } +.icon-members { background-image: url("/ott/prosilver/theme/images/icon_members.gif"); } +.icon-home { background-image: url("/ott/prosilver/theme/images/icon_home.gif"); } +.icon-ucp { background-image: url("/ott/prosilver/theme/images/icon_ucp.gif"); } +.icon-register { background-image: url("/ott/prosilver/theme/images/icon_register.gif"); } +.icon-logout { background-image: url("/ott/prosilver/theme/images/icon_logout.gif"); } +.icon-bookmark { background-image: url("/ott/prosilver/theme/images/icon_bookmark.gif"); } +.icon-bump { background-image: url("/ott/prosilver/theme/images/icon_bump.gif"); } +.icon-subscribe { background-image: url("/ott/prosilver/theme/images/icon_subscribe.gif"); } +.icon-unsubscribe { background-image: url("/ott/prosilver/theme/images/icon_unsubscribe.gif"); } +.icon-pages { background-image: url("/ott/prosilver/theme/images/icon_pages.gif"); } +.icon-search { background-image: url("/ott/prosilver/theme/images/icon_search.gif"); } + +/* Profile & navigation icons */ +.email-icon, .email-icon a { background-image: url("/ott/prosilver/imageset/icon_contact_email.gif"); } +.aim-icon, .aim-icon a { background-image: url("/ott/prosilver/imageset/icon_contact_aim.gif"); } +.yahoo-icon, .yahoo-icon a { background-image: url("/ott/prosilver/imageset/icon_contact_yahoo.gif"); } +.web-icon, .web-icon a { background-image: url("/ott/prosilver/imageset/icon_contact_www.gif"); } +.msnm-icon, .msnm-icon a { background-image: url("/ott/prosilver/imageset/icon_contact_msnm.gif"); } +.icq-icon, .icq-icon a { background-image: url("/ott/prosilver/imageset/icon_contact_icq.gif"); } +.jabber-icon, .jabber-icon a { background-image: url("/ott/prosilver/imageset/icon_contact_jabber.gif"); } +.pm-icon, .pm-icon a { background-image: url("/ott/prosilver/imageset/en/icon_contact_pm.gif"); } +.quote-icon, .quote-icon a { background-image: url("/ott/prosilver/imageset/en/icon_post_quote.gif"); } + +/* Moderator icons */ +.report-icon, .report-icon a { background-image: url("/ott/prosilver/imageset/icon_post_report.gif"); } +.edit-icon, .edit-icon a { background-image: url("/ott/prosilver/imageset/en/icon_post_edit.gif"); } +.delete-icon, .delete-icon a { background-image: url("/ott/prosilver/imageset/icon_post_delete.gif"); } +.info-icon, .info-icon a { background-image: url("/ott/prosilver/imageset/icon_post_info.gif"); } +.warn-icon, .warn-icon a { background-image: url("/ott/prosilver/imageset/icon_user_warn.gif"); } /* Need updated warn icon */ + +/* +-------------------------------------------------------------- +Colours and backgrounds for cp.css +-------------------------------------------------------------- */ + +/* Main CP box +----------------------------------------*/ + +#cp-main h3, #cp-main hr, #cp-menu hr { + border-color: #A4B3BF; +} + +#cp-main .panel li.row { + border-bottom-color: #B5C1CB; + border-top-color: #F9F9F9; +} + +ul.cplist { + border-top-color: #B5C1CB; +} + +#cp-main .panel li.header dd, #cp-main .panel li.header dt { + color: #000000; +} + +#cp-main table.table1 thead th { + color: #333333; + border-bottom-color: #333333; +} + +#cp-main .pm-message { + border-color: #DBDEE2; + background-color: #FFFFFF; +} + +/* CP tabbed menu +----------------------------------------*/ +#tabs a { + background-image: url("/ott/prosilver/theme/images/bg_tabs1.gif"); +} + +#tabs a span { + background-image: url("/ott/prosilver/theme/images/bg_tabs2.gif"); + color: #536482; +} + +#tabs a:hover span { + color: #BC2A4D; +} + +#tabs .activetab a { + border-bottom-color: #CADCEB; +} + +#tabs .activetab a span { + color: #333333; +} + +#tabs .activetab a:hover span { + color: #000000; +} + +/* Mini tabbed menu used in MCP +----------------------------------------*/ +#minitabs li { + background-color: #E1EBF2; +} + +#minitabs li.activetab { + background-color: #F9F9F9; +} + +#minitabs li.activetab a, #minitabs li.activetab a:hover { + color: #333333; +} + +/* UCP navigation menu +----------------------------------------*/ + +/* Link styles for the sub-section links */ +#navigation a { + color: #333; + background-color: #B2C2CF; + background-image: url("/ott/prosilver/theme/images/bg_menu.gif"); +} + +.rtl #navigation a { + background-image: url("/ott/prosilver/theme/images/bg_menu_rtl.gif"); + background-position: 0 100%; +} + +#navigation a:hover { + background-image: none; + background-color: #aabac6; + color: #BC2A4D; +} + +#navigation #active-subsection a { + color: #D31141; + background-color: #F9F9F9; + background-image: none; +} + +#navigation #active-subsection a:hover { + color: #D31141; +} + +/* Preferences pane layout +----------------------------------------*/ +#cp-main h2 { + color: #333333; +} + +#cp-main .panel { + background-color: #F9F9F9; +} + +#cp-main .pm { + background-color: #FFFFFF; +} + +#cp-main span.corners-top, #cp-menu span.corners-top { + background-image: url("/ott/prosilver/theme/images/corners_left2.gif"); +} + +#cp-main span.corners-top span, #cp-menu span.corners-top span { + background-image: url("/ott/prosilver/theme/images/corners_right2.gif"); +} + +#cp-main span.corners-bottom, #cp-menu span.corners-bottom { + background-image: url("/ott/prosilver/theme/images/corners_left2.gif"); +} + +#cp-main span.corners-bottom span, #cp-menu span.corners-bottom span { + background-image: url("/ott/prosilver/theme/images/corners_right2.gif"); +} + +/* Topicreview */ +#cp-main .panel #topicreview span.corners-top, #cp-menu .panel #topicreview span.corners-top { + background-image: url("/ott/prosilver/theme/images/corners_left.gif"); +} + +#cp-main .panel #topicreview span.corners-top span, #cp-menu .panel #topicreview span.corners-top span { + background-image: url("/ott/prosilver/theme/images/corners_right.gif"); +} + +#cp-main .panel #topicreview span.corners-bottom, #cp-menu .panel #topicreview span.corners-bottom { + background-image: url("/ott/prosilver/theme/images/corners_left.gif"); +} + +#cp-main .panel #topicreview span.corners-bottom span, #cp-menu .panel #topicreview span.corners-bottom span { + background-image: url("/ott/prosilver/theme/images/corners_right.gif"); +} + +/* Friends list */ +.cp-mini { + background-color: #eef5f9; +} + +dl.mini dt { + color: #425067; +} + +/* PM Styles +----------------------------------------*/ +/* PM Message history */ +.current { + color: #000000 !important; +} + +/* PM marking colours */ +.pmlist li.pm_message_reported_colour, .pm_message_reported_colour { + border-left-color: #BC2A4D; + border-right-color: #BC2A4D; +} + +.pmlist li.pm_marked_colour, .pm_marked_colour { + border-color: #FF6600; +} + +.pmlist li.pm_replied_colour, .pm_replied_colour { + border-color: #A9B8C2; +} + +.pmlist li.pm_friend_colour, .pm_friend_colour { + border-color: #5D8FBD; +} + +.pmlist li.pm_foe_colour, .pm_foe_colour { + border-color: #000000; +} + +/* Avatar gallery */ +#gallery label { + background-color: #FFFFFF; + border-color: #CCC; +} + +#gallery label:hover { + background-color: #EEE; +} + +/* +-------------------------------------------------------------- +Colours and backgrounds for forms.css +-------------------------------------------------------------- */ + +/* General form styles +----------------------------------------*/ +select { + border-color: #666666; + background-color: #FAFAFA; + color: #000; +} + +label { + color: #425067; +} + +option.disabled-option { + color: graytext; +} + +/* Definition list layout for forms +---------------------------------------- */ +dd label { + color: #333; +} + +/* Hover effects */ +fieldset dl:hover dt label { + color: #000000; +} + +fieldset.fields2 dl:hover dt label { + color: inherit; +} + +/* Quick-login on index page */ +fieldset.quick-login input.inputbox { + background-color: #F2F3F3; +} + +/* Posting page styles +----------------------------------------*/ + +#message-box textarea { + color: #333333; +} + +/* Input field styles +---------------------------------------- */ +.inputbox { + background-color: #FFFFFF; + border-color: #B4BAC0; + color: #333333; +} + +.inputbox:hover { + border-color: #11A3EA; +} + +.inputbox:focus { + border-color: #11A3EA; + color: #0F4987; +} + +/* Form button styles +---------------------------------------- */ + +a.button1, input.button1, input.button3, a.button2, input.button2 { + color: #000; + background-color: #FAFAFA; + background-image: url("/ott/prosilver/theme/images/bg_button.gif"); +} + +a.button1, input.button1 { + border-color: #666666; +} + +input.button3 { + background-image: none; +} + +/* Alternative button */ +a.button2, input.button2, input.button3 { + border-color: #666666; +} + +/* button in the style of the form buttons */ +a.button1, a.button1:link, a.button1:visited, a.button1:active, a.button2, a.button2:link, a.button2:visited, a.button2:active { + color: #000000; +} + +/* Hover states */ +a.button1:hover, input.button1:hover, a.button2:hover, input.button2:hover, input.button3:hover { + border-color: #BC2A4D; + color: #BC2A4D; +} + +input.search { + background-image: url("/ott/prosilver/theme/images/icon_textbox_search.gif"); +} + +input.disabled { + color: #666666; +} diff --git a/ott.zip/top b/ott.zip/top new file mode 100644 index 0000000..fe1ea0b --- /dev/null +++ b/ott.zip/top @@ -0,0 +1,153 @@ + + + + + + + + + + + +ЯOЯЯIM TTO • Bicycles on the Moon + + + + + + + + + + + + + +
+ + + +
+ +

The ЯOЯЯIM TTO

+
+
This forum is for the individual discussion thread that goes with each new comic.

Moderators: Moderators General, Magistrates, Prelates

+
+
+ +
+ +
+ + + + + + + +
+ + +
+
+
    +
  • +
    +
    Topics
    +
    Replies
    +
    Views
    +
    Last post
    +
    +
  • +
+
    diff --git a/ott.zip/update.htm b/ott.zip/update.htm new file mode 100644 index 0000000..6b8b75a --- /dev/null +++ b/ott.zip/update.htm @@ -0,0 +1,17 @@ + + + + Update • ЯOЯЯIM TTO • Bicycles on the Moon + + + + + 1190.bicyclesonthemoon.dnsd.info +

    The ЯOЯЯIM TTO

    +
    + Update a Newpage
    + NP = + +
    + + diff --git a/pro.zip/bot2.1.awk b/pro.zip/bot2.1.awk new file mode 100644 index 0000000..c22e9df --- /dev/null +++ b/pro.zip/bot2.1.awk @@ -0,0 +1,385 @@ +# bothasar_t +# relinking, archiving avatars, attachments, images + +BEGIN { +# print download + related=0 + related2=0 + related3=0 + related4=0 + related5=0 + related6=0 + np=0 + p=0 +###USERAGENT2a + arr[0]=0 + arr2[0]=0 +###findpost_path +###imgformat_path +###wayback +###fora + + if (wait=="") + { + wait=15 + } + printf("")>outfile + + # So many facepalms for this part, why is there no better solution? + for(i=0;i<256;++i) + { + ch=sprintf("%c",i) + hex=sprintf("%02X",i); + ch2hex[ch]=hex + } +}; +{ + gsub(/href=\"\./, "href=\"" fora, $0) + gsub(/src=\"\./, "src=\"" fora, $0) + gsub(/action=\"\./, "action=\"" fora, $0) + gsub(/(&|\?)sid=................................/, "", $0) + gsub(/\">/, "\" >", $0) + gsub(/\" \/>/, "\" />", $0) + # print $0 + + for (i=1;i<=NF;++i) + { + related=0 + related2=0 + related3=0 + related4=0 + related5=0 + related6=0 + np=0 + p=0 + + if ($i ~ /^id=.p[0-9]/) + { + split($i, arr, "\"p?") + id=arr[2] + } + + # relink OTT links to mirror links + if($i ~ /###links_regexp;/) + { + split($i, arr, "#|\?|&|\"|\"") + for(j=1;j in arr;++j) + { + split(arr[j], arr2, "=") + if(arr2[1]=="t") + { + if(arr2[2]==###threadID;) + related=1 + else + { + related=0 + break + } + } + else if(arr2[1]=="start") + { + np=(arr2[2]/40)+1 + } + else if(arr2[1]=="p") + { + p=arr2[2] + if((related==0)||(np==0)) + { + printf("%s %s > %s\n",findpost_path,p,tempfile)|"sh" + close("sh") + getline np " tempfile2) + d="" + h404="" + ext="" + cdf="" + ctf="" + while((getline hline < tempfile2)>0) + { + if (tolower(hline) ~ /^ *http/) + { + split(hline, arr3, " ") + if(arr3[2]==404) + { + h404=1 + break + } + else if((arr3[2]!=200)||(r!=0)) + { + printf ("\nHTTP %s %s", arr3[2], arr2[2]) + exit 1 + } + else + { + d=1 + } + } + else if(tolower(hline) ~ /^ *content-disposition/) + { + split(hline, arr3, " ") + for(k=1;k in arr3;++k) + { + if(arr3[k] ~ /filename/) + { + split(arr3[k],arr4,"\.") + for(l=1;l in arr4;++l) + ext=("." tolower(arr4[l])) + cdf=1 + } + } + } + # only if content-disposition fails: + else if((cdf=="")&&(tolower(hline) ~ /^ *content-type/)) + { + split(hline, arr3, " ") + if (arr3[2] ~ /image\/png/) + ext=".png" + else if (arr3[2] ~ /image\/jpeg/) + ext=".jpg" + else if (arr3[2] ~ /image\/gif/) + ext=".gif" + else + { + printf ("\nCONTENT %s %s", arr3[2], arr2[2]) + ctf=1 + } + break + } + } + close (tempfile2) + if((ctf!="")&&(cdf=="")) + { + printf("\nCONTENT RECOGNITION FAIL.") + exit 1 + } + if ((h404=="")&&(d!="")) + { + if ((system ("mv " tempfile " " arr2[1] ext))==0) + { + related4=1 + printf ("\nsaved attachment %s%s", arr2[2],ext) + } + else + { + printf ("\nCOPY FAIL %s", arr2[2]) + exit 1 + } + system ("sleep " wait) + } + } + } + + # download and relink images + else if(($i ~ /src=.https?:\/\//)&&($(i-1) ~ /240;++j) + { + imgdir = (imgdir substr(esc,1+200*j,200) "/") + } + imgname = substr(esc,1+200*j) + + if (system("[ -f " imagepath imgdir imgname ".* ]")==0) + { + related6=1 + ext="" + } + else if (tolower(download3)=="yes") + { + ext="" + r=system ("wget -q --no-check-certificate -t 3 -S -U " useragent " -O " tempfile " \"" arr[2] "\" 2> " tempfile2) + if(r) + r=system ("wget -q --no-check-certificate -t 3 -S -U " useragent " -O " tempfile " \"" wayback arr[2] "\" 2> " tempfile2) + if(r) + printf("\nfailed to download %s",arr[2]) + else + { + r=system(imgformat_path " " tempfile) + if(r==1) + ext=".gif" + else if(r==2) + ext=".png" + else if(r==3) + ext=".jpg" + else if(r==4) + ext=".bmp" + else + { + ext="" + printf("\nfailed to determine format: %s", arr[2]) + } + if(ext!="") + { + if ((system ("mkdir -p " imagepath imgdir))==0) + { + if ((system ("mv " tempfile " " imagepath imgdir imgname ext))==0) + { + related6=1 + printf ("\nsaved image %s", arr[2]) + } + else + { + printf ("\nCOPY FAIL %s %s",arr[2], imagepath imgdir imgname ext) + } + } + else + { + printf ("\nMKDIR FAIL %s %s",arr[2], imagepath imgdir) + } + } + system ("sleep " wait) + } + } + } + + # apply the prepared changes + if (related==1) + { + printf("href=\"/ott/view") >> outfile + if(np>0) + { + printf("?np=%s",np) >> outfile + if(p>0) + { + printf("&p=%s#p%s",p,p) >> outfile + } + } + printf("\"")>outfile + } + else if (related2==1) + { + printf("%s/ott/prosilver%s",arr[1],arr[2]) >> outfile + } + else if (related5==1) + { + printf("%s/ott/prosilver/smilies%s",arr[1],arr[2]) >> outfile + } + else if (related3==1) + { + printf("%s\"/ott/avatar/%s\"%s", arr[1],arr2[2],arr[3]) >> outfile + } + else if (related4==1) + { + printf("%s\"/ott/attachment/%s\"\n",arr[1],arr2[2]) >> outfile + } + else if (related6==1) + { + printf("%s\"/ott/image/%s\"\n",arr[1],imgdir imgname) >>outfile + } + else + { + printf("%s", $i) >> outfile + } + if(i==NF) + printf("\n") >> outfile + else + printf(" ") >> outfile + } + + # add quote button + if($0 ~ /
    " >> outfile + print "
  • " >> outfile + print "
" >> outfile + } +}; +#END { +# exit related +#} +function escapename(name) +{ + len=length(name) + escaped="" + for(iii=1;iii<=len;++iii) + { + ch=substr(name,iii,1); + if (ch ~ /[a-z]|[A-Z]|[0-9]/) + escaped = escaped ch + else + escaped = escaped "_" ch2hex[ch] + } + return escaped +}; \ No newline at end of file diff --git a/pro.zip/bot2.1.cpp b/pro.zip/bot2.1.cpp new file mode 100644 index 0000000..1545582 --- /dev/null +++ b/pro.zip/bot2.1.cpp @@ -0,0 +1,527 @@ + // The One True Thread mirror bot + // aka. bothasar_t' aka. bot2 +// ~~ bicyclesonthemoon + +#include +#include +#include +#include +#include + +#define DOWNLOAD_MSTD 1 +#define NP_PREP_MSTD 2 +#define LATEST_MSTD 3 +#define STOP_MSTD 4 + +#define LINE_LIMIT 16000 + +###USERAGENT2 + +###ICT_ADDRESS +###OTT_ADDRESS +###FORA_ADDRESS + +###LAST_PATH +###LOG_PATH +###NP_PATH +###NP_PATH_1 +###NP_PATH_2 +###NP_PATH_3 +###STOP_PATH +###LIST_PATH +###SIG_PATH +###INF_PATH +###UP_PATH +###IND_PATH +###TOP_PATH +###END_PATH +###AV_PATH +###ATT_PATH +###IMG_PATH +###LAST_PAGE + +###WGET_PATH +###MAWK_PATH +###RM_PATH +###AWK_LATEST +###AWK_LIST +###AWK_BOT2 +###AWK_UPLOAD +###AWK_INDEX + +FILE *cwfile; +FILE *stopfile; +bool logopen=false; +char stoppath[256]; +char nppath [256]; +char nppath1[256]; +char nppath2[256]; +char nppath3[256]; +pid_t sub; +int r; + +int main(int argc, char *argv[]); +int longline(const char *in,const char *out, unsigned long limit); +void end(int m); + +int main(int argc, char *argv[]) +{ + time_t t; + + int yarg; + + bool fi=false; + bool fs=false; + bool fm=false; + bool fw=false; + bool fv=false; + bool fo=false; + bool fp=false; + bool recentbot=false; + bool newlog=false; + bool text=false; + bool down=false; + bool down2=false; + bool down3=false; + + unsigned short botID=0; + unsigned long start=1; + unsigned long max=1; + unsigned long posts=0xffffffff; + unsigned long npwait=3; + unsigned long await=15; + unsigned long offset=1; + unsigned long avoid=0; + + unsigned long i,np,last,last2; + + char argp1 [256]; + char argp2[256]; + char argp3[256]; + char argp4[256]; + char argp5[256]; + char argp6[256]; + char argp7[256]; + char temp [256]; + char URL [256]; + + time(&t); + opterr=0; + + while((yarg = getopt(argc,argv,"i:s:m:o:w:v:p:rntdab")) != -1) + { + switch(yarg) + { + case 'i': + fi=true; + if(optarg!=NULL) + sscanf(optarg,"%hu",&botID); + break; + case 's': + fs=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&start); + break; + case 'm': + fm=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&max); + break; + case 'o': + fo=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&offset); + break; + case 'w': + fw=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&npwait); + break; + case 'v': + fv=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&await); + break; + case 'p': + fp=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&avoid); + break; + case 'r': + recentbot=true; + break; + case 'n': + newlog=true; + break; + case 't': + text=true; + break; + case 'd': + down=true; + break; + case 'a': + down2=true; + break; + case 'b': + down3=true; + break; + default: + + break; + } + } + if(!fi) + botID=0; + if(!fo) + offset=1; + if(!fs) + { + sprintf(argp1,"%s%hu",LAST_PATH,botID); + if((cwfile=fopen(argp1,"rt"))!=NULL) + { + fgets(temp,255,cwfile); + sscanf(temp,"%lu",&start); + fclose(cwfile); + start=((start>offset)?(start+1-offset):1); + } + else + start=1; + } + if(!fm) + max=1; + if(!fw) + npwait=3; + if(!fv) + await=15; + if(!fp) + avoid=0; + if(!text) + { + sprintf(argp1,"%s%hu",LOG_PATH,botID); + if(freopen(argp1,newlog?"wt":"at",stdout)!=NULL) + logopen=true; + } + setvbuf(stdout, NULL, _IONBF, 0); + dup2(fileno(stdout),fileno(stderr)); + + printf("\n%s",ctime(&t)); + printf("ID=%hu, offset=%lu, start=%lu, max=%lu, NP wait=%lus, A wait=%lus, present=%s -%lu, save_avatars=%s, save_attachments=%s, save_otherimg=%s",botID,offset,start,max,npwait,await,(recentbot?"YES":"NO"),avoid,(down?"YES":"NO"),(down2?"YES":"NO"),(down3?"YES":"NO")); + + + sprintf(nppath ,"%s%hu",NP_PATH ,botID); + sprintf(nppath1,"%s%hu",NP_PATH_1,botID); + sprintf(nppath2,"%s%hu",NP_PATH_2,botID); + sprintf(nppath3,"%s%hu",NP_PATH_3,botID); + sprintf(stoppath,"%s%hu",STOP_PATH,botID); + + stopfile=fopen(stoppath,"wt"); + if (stopfile==NULL) + end(STOP_MSTD); + if (lockf(fileno(stopfile),F_TLOCK,0)!=0) + end(STOP_MSTD); + fprintf(stopfile,"%hu.FULL STOPFULL STOP\n",botID); + + for(i=0,last2=0xffffffff,np=start;(iavoid)?(last-avoid):0; + printf("."); + if(np>last2) + { + printf("break(%lu)",last2); + continue; + } + + // List of posts + // Yes, this could be done in the next script (It ewen was) but it has to be done BEFORE it. + sprintf(argp1,"outfile=%s%lu",LIST_PATH,np); + sub=fork(); + if(!sub) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_LIST,"-v",argp1,nppath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + end(NP_PREP_MSTD); + printf("."); + + // relink, convert, download things + sprintf(argp1,"outfile=%s",nppath1); + sprintf(argp2,"tempfile=%s",nppath2); + sprintf(argp5,"imagepath=%s",IMG_PATH); + sprintf(argp3,"avatarpath=%s",AV_PATH); + sprintf(argp4,"attachmentpath=%s",ATT_PATH); + sprintf(argp6,"wait=%lu",await); + sprintf(argp7,"tempfile2=%s",nppath3); + sub=fork(); + if(!sub) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_BOT2,"-v",argp1,"-v",argp2,"-v",argp3,"-v",argp4,"-v",argp5,"-v",argp6,"-v",argp7,"-v",(down?"download=YES":"download=NO"),"-v",(down2?"download2=YES":"download3=NO"),"-v",(down3?"download3=YES":"download3=NO"),nppath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + end(NP_PREP_MSTD); + printf(".OK, upload"); + + // upload the newpage + sprintf(argp1 ,"outfile=%s%lu",UP_PATH,np); + sprintf(argp2,"sig=%s",SIG_PATH); + sprintf(argp3,"otterinf=%s",INF_PATH); + + sub=fork(); + if(!sub) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_UPLOAD,"-v",argp1,"-v",argp2,"-v",argp3,nppath1,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + end(NP_PREP_MSTD); + printf(" OK."); + + if((np==last2)&&(!recentbot)) + np=0L; + + sprintf(argp1,"%s%hu",LAST_PATH,botID); + if((cwfile=fopen(argp1,"wt"))!=NULL) + { + fprintf(cwfile,"%lu\n",np); + fclose(cwfile); + } + else + end(LATEST_MSTD); + } + + cwfile=fopen(LAST_PAGE,"wt"); + if(cwfile==NULL) + end(LATEST_MSTD); + fprintf(cwfile,"%lu\n",last); + fprintf(cwfile,"%lu\n",posts); + fclose(cwfile); + + if(recentbot) + { + // download index + printf("\nindex download"); + sub=fork(); + if(!sub) + { + r=execl(WGET_PATH,WGET_PATH, "-q","-t", "3","-U", USERAGENT, "-O", nppath,ICT_ADDRESS, (char *)0); + exit(r); + } + waitpid(sub,&r,0); + + printf(" OK, prepare"); + // cut out only what's needed + sprintf(argp1,"outfile=%s",nppath3); + sub=fork(); + if(!sub) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_INDEX,"-v",argp1,nppath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + end(NP_PREP_MSTD); + printf("."); + + // relink + sprintf(argp1,"outfile=%s",IND_PATH); + sprintf(argp2,"tempfile=%s",nppath2); + sprintf(argp3,"avatarpath=%s",AV_PATH); + sprintf(argp5,"imagepath=%s",IMG_PATH); + sprintf(argp4,"attachmentpath=%s",ATT_PATH); + sprintf(argp6,"wait=%lu",await); + sprintf(argp7,"tempfile2=%s",nppath1); + sub=fork(); + if(!sub) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_BOT2,"-v",argp1,"-v",argp2,"-v",argp3,"-v",argp4,"-v",argp5,"-v",argp6,"-v",argp7,"-v","download=NO","-v","download2=NO","-v","download3=NO",nppath3,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + end(NP_PREP_MSTD); + printf(".OK"); + + } + + end(0); +} + +//This function wouldn't be here if itt weren't for this post: http://forums.xkcd.com/viewtopic.php?p=3619766#p3619766 +int longline(const char *in,const char *out, unsigned long limit) +{ + FILE *infile; + FILE *outfile; + bool tag; + unsigned long counter=0; + char ch; + + outfile=fopen(out,"wt"); + if(outfile==NULL) + return 1; + infile=fopen(in,"rt"); + if(infile==NULL) + { + fclose(outfile); + return 1; + } + + while(!feof(infile)) + { + ch=(char)(fgetc(infile)); + fputc(ch,outfile); + ++counter; + switch(ch) + { + case '<': + tag=true; + break; + case '>': + tag=false; + if(counter>=limit) + { + fputc('\n',outfile); + counter=0; + } + break; + case ' ': + if((!tag) && (counter>= limit)) + if(counter>=limit) + { + fputc('\n',outfile); + counter=0; + } + break; + case '\r': + case '\n': + counter=0; + break; + default: + break; + } + + } + return 0; +} + +void end(int m) +{ + switch(m) + { + case STOP_MSTD: + printf("\nFULL STOPFULL STOP\n"); + break; + case DOWNLOAD_MSTD: + printf("\ndownload fail.\n"); + break; + case NP_PREP_MSTD: + printf("\nnewpage prepare fail.\n"); + break; + case LATEST_MSTD: + printf("\nnewestpage fail.\n"); + break; + case 0: + printf("\nOK\n"); + break; + default: + printf("\nCh*rping m*stard!\n"); + } + if(logopen) + fclose(stdout); + if(m != STOP_MSTD) + { + sub=fork(); + if(!sub) + { + r=execl(RM_PATH,RM_PATH,"-f",nppath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + sub=fork(); + if(!sub) + { + r=execl(RM_PATH,RM_PATH,"-f",nppath1,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + sub=fork(); + if(!sub) + { + r=execl(RM_PATH,RM_PATH,"-f",nppath2,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + sub=fork(); + if(!sub) + { + r=execl(RM_PATH,RM_PATH,"-f",nppath3,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + + + lockf(fileno(stopfile),F_ULOCK,0); + fclose(stopfile); + + sub=fork(); + if(!sub) + { + r=execl(RM_PATH,RM_PATH,"-f",stoppath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + } + exit(m); +} \ No newline at end of file diff --git a/pro.zip/bot3.1.cpp b/pro.zip/bot3.1.cpp new file mode 100644 index 0000000..4d4c2ea --- /dev/null +++ b/pro.zip/bot3.1.cpp @@ -0,0 +1,446 @@ + // The One True Thread post bot + // aka. bothasar_p' aka. bot3 +// ~~ bicyclesonthemoon + +#include +#include +#include +#include +#include + +#define OK 0 +#define POST_MSTD 256 +#define INDELIVERABLE 512 +#define NOPOSTS 3 +#define STOP_MSTD 4 +#define NAME_MSTD 5 + +###USERAGENT3 +###NAME_PATH +###LASTTIME_PATH +###LOG_PATH3 +###TEMPFILE_PATH +###POSTDATA_PATH +###COOKIE_PATH +###STOP_PATH3 +###POST_PATH3 +###LIST_PATH3 +###LAST_PATH3 +###IND_PATH3 +###OK_PATH3 +###PM_PATH3 +###FAIL_PATH3 + +###WGET_PATH +###MAWK_PATH +###RM_PATH +###MV_PATH +###AWK_POST +###AWK_PM + +FILE *cwfile; +FILE *stopfile; +FILE *listfile; +bool listopen=false; +bool logopen=false; +pid_t sub; +int r; + +int main(int argc, char *argv[]); +void end(int m); + +int main(int argc, char *argv[]) +{ + time_t t; + + int yarg; + + bool fm=false; + bool fw=false; + + bool newlog=false; + bool text=false; + + unsigned long max=0xffffffff; + // unsigned long posts=0xffffffff; + unsigned long pwait=5; + + unsigned long np, lastnp, firstnp, i; + unsigned short p, lastp, firstp; + + char name[256]; + char pass[256]; + char listpath[256]; + char postpath[256]; + char postname[256]; + char argp1 [256]; + char argp2[256]; + char argp3[256]; + char argp4[256]; + char argp5[256]; + + time(&t); + opterr=0; + + //t -nolog + //n -newlog + //w -wait + //m -maxposts + + while((yarg = getopt(argc,argv,"m:w:nt")) != -1) + { + switch(yarg) + { + case 'm': + fm=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&max); + break; + case 'w': + fw=true; + if(optarg!=NULL) + sscanf(optarg,"%lu",&pwait); + break; + case 'n': + newlog=true; + break; + case 't': + text=true; + break; + default: + + break; + } + } + + if(!fm) + max=0xffffffff; + if(!fw) + pwait=15; + if(!text) + { + if(freopen(LOG_PATH,newlog?"wt":"at",stdout)!=NULL) + logopen=true; + } + + setvbuf(stdout, NULL, _IONBF, 0); + dup2(fileno(stdout),fileno(stderr)); + printf("\n%s",ctime(&t)); + printf("max=%lu, P wait=%lus",max,pwait); + + + stopfile=fopen(STOP_PATH,"wt"); + if (stopfile==NULL) + end(STOP_MSTD); + if (lockf(fileno(stopfile),F_TLOCK,0)!=0) + end(STOP_MSTD); + fprintf(stopfile,"%hu.FULL STOPFULL STOP\n",0); + + cwfile=fopen(NAME_PATH,"rt"); + if(cwfile==NULL) + end(NAME_MSTD); + if(fgets(argp1,255,cwfile)!=NULL) + sscanf(argp1,"%s",name); + else + end(NAME_MSTD); + if(fgets(argp1,255,cwfile)!=NULL) + sscanf(argp1,"%s",pass); + else + end(NAME_MSTD); + fclose(cwfile); + + cwfile=fopen(LAST_PATH,"rt"); + if(cwfile==NULL) + end(NOPOSTS); + if(fgets(argp1,255,cwfile)!=NULL) + sscanf(argp1,"%lu",&lastnp); + else + end(NOPOSTS); + if(fgets(argp1,255,cwfile)!=NULL) + sscanf(argp1,"%hu",&lastp); + else + end(NOPOSTS); + fclose(cwfile); + + printf(". Last page: %lu with last post %hu",lastnp,lastp); + + cwfile=fopen(LASTTIME_PATH,"rt"); + if(cwfile==NULL) + { + firstnp=1; + firstp=0; + } + else + { + if(fgets(argp1,255,cwfile)!=NULL) + { + sscanf(argp1,"%lu",&firstnp); + if(fgets(argp1,255,cwfile)!=NULL) + sscanf(argp1,"%hu",&firstp); + else + firstp=0; + } + else + { + firstnp=1; + firstp=0; + } + + fclose(cwfile); + } + printf(" Start after np %lu, post %hu.",firstnp,firstp); + for(i=0,np=firstnp;np<=lastnp;++np) + { + p=0; + printf("\nnp%lu:",np); + + sprintf(listpath,"%s%lu",LIST_PATH,np); + listfile=fopen(listpath,"rt"); + if(listfile==NULL) + { + printf("\nNo posts."); + continue; + } + listopen=true; + + for(p=1;fgets(argp1,255,listfile)!=NULL;++p) + { + if((np==firstnp&&p<=firstp)||(np==lastnp&&p>lastp)) + continue; + if(np!=firstnp||p!=firstp+1) + sleep(pwait); + sscanf(argp1,"%s",postname); + printf("\n%hu: m%s: ",p,postname); + + sprintf(postpath,"%s%s",POST_PATH,postname); + sprintf(argp1 ,"postfile=%s",POSTDATA_PATH); + sprintf(argp2,"cookiefile=%s",COOKIE_PATH); + sprintf(argp3,"tempfile=%s",TEMPFILE_PATH); + sprintf(argp4,"name=%s",name); + sprintf(argp5,"pass=%s",pass); + + sub=fork(); + if(!sub) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_POST,"-v",argp1,"-v",argp2,"-v",argp3,postpath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + switch(r) + { + case POST_MSTD: + end(POST_MSTD); + break; + case OK: + printf("Ok."); + cwfile=fopen(LASTTIME_PATH,"wt"); + if(cwfile==NULL) + { + printf("\nCAN'T SAVE PROGRESS: NP%lu P%hu",np,p); + end(STOP_MSTD); + } + fprintf(cwfile,"%lu\n%hu\n",np,p); + fclose(cwfile); + sub=fork(); + if(!sub) + { + r=execl(MV_PATH,MV_PATH,postpath,OK_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + break; + case INDELIVERABLE: + default: + sleep(pwait); + printf("send a PM: "); + sub=fork(); + if(!sub) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_PM,"-v",argp1,"-v",argp2,"-v",argp3,"-v",argp4,"-v",argp5,postpath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + switch(r) + { + case POST_MSTD: + end(POST_MSTD); + break; + case OK: + printf("Ok."); + cwfile=fopen(LASTTIME_PATH,"wt"); + if(cwfile==NULL) + { + printf("\nCAN'T SAVE PROGRESS: NP%lu P%hu",np,p); + end(STOP_MSTD); + } + fprintf(cwfile,"%lu\n%hu\n",np,p); + fclose(cwfile); + sub=fork(); + if(!sub) + { + r=execl(MV_PATH,MV_PATH,postpath,PM_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + break; + case INDELIVERABLE: + default: + printf("Indeliverable."); + cwfile=fopen(LASTTIME_PATH,"wt"); + if(cwfile==NULL) + { + printf("\nCAN'T SAVE PROGRESS: NP%lu P%hu",np,p); + end(STOP_MSTD); + } + fprintf(cwfile,"%lu\n%hu\n",np,p); + fclose(cwfile); + sub=fork(); + if(!sub) + { + r=execl(MV_PATH,MV_PATH,postpath,FAIL_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + break; + } + break; + } + + } + listopen=false; + fclose(listfile); + if(np]*>/," ",$0) + for(i=1;i<=NF;i++) + { + if((tolower($i) ~ /page/) && (tolower($(i+2)) ~ /of/)) + { + print $(i+3) >outfile + print posts >> outfile + a=0; + exit a; + } + } + } +}; +END { + exit a +} diff --git a/pro.zip/findpost.1.cpp b/pro.zip/findpost.1.cpp new file mode 100644 index 0000000..f1e4c3e --- /dev/null +++ b/pro.zip/findpost.1.cpp @@ -0,0 +1,89 @@ +###POSTLIST_PATH + +#include + +int main(int argc, char *argv[]) +{ + unsigned long to_find; + unsigned long postnumber; + unsigned long pagenumber=0; + unsigned long pagenumber2; + char path[256]; + char text[256]; + FILE *file; + + if (argc<2) + { + printf("0\n"); + return 0; + } + sscanf(argv[1],"%lu",&to_find); + + for(short i=31;i>=0;--i) + { + pagenumber2 = pagenumber + (1L << i); + sprintf(path,"%s%lu",POSTLIST_PATH,pagenumber2); + file=fopen(path,"rt"); + if(file==NULL) + continue; + fgets(text,255,file); + fclose(file); + sscanf(text,"%lu",&postnumber); + if(postnumber==to_find) + { + printf("%lu\n",pagenumber2); + return pagenumber2; + } + else if(postnumberto_find) + // { + // fclose(file); + // printf("0\n"); + // return 0; + // } + } + printf("0\n"); + fclose(file); + return 0; +} \ No newline at end of file diff --git a/pro.zip/image.cpp b/pro.zip/image.cpp new file mode 100644 index 0000000..efc0a1f --- /dev/null +++ b/pro.zip/image.cpp @@ -0,0 +1,45 @@ +#define NO_IDEA 0 +#define GIF 1 +#define PNG 2 +#define JPG 3 +#define BMP 4 + +#define MAGIC_BMP "\x42\x4d" +#define MAGIC_JPG "\xff\xd8\xff" +#define MAGIC_PNG "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a" +#define MAGIC_GIF7 "\x47\x49\x46\x38\x37\x61" +#define MAGIC_GIF9 "\x47\x49\x46\x38\x39\x61" + +#include +#include + +int main (int argc, char **argv) +{ + FILE *file; + char test[9]; + if (argc<2) + return NO_IDEA; + + file=fopen(argv[1],"rb"); + if(file==NULL) + return NO_IDEA; + + fread(test,1,8,file); + fclose(file); + + test[8]='\0'; + if(strcmp(test,MAGIC_PNG)==0) + return PNG; + test[6]='\0'; + if(strcmp(test,MAGIC_GIF7)==0) + return GIF; + if(strcmp(test,MAGIC_GIF9)==0) + return GIF; + test[3]='\0'; + if(strcmp(test,MAGIC_JPG)==0) + return JPG; + test[2]='\0'; + if(strcmp(test,MAGIC_BMP)==0) + return BMP; + return NO_IDEA; +} \ No newline at end of file diff --git a/pro.zip/index.1.awk b/pro.zip/index.1.awk new file mode 100644 index 0000000..fe9f4dd --- /dev/null +++ b/pro.zip/index.1.awk @@ -0,0 +1,32 @@ +BEGIN{ + related=1 +#1=no 0=yes + where=0 + printf("%s","") > outfile +}; +{ + if((related!=0)&& ($0 ~ /
  • outfile + } + + if ($0 ~ /t=###threadID;/) + { + related=0 + } + + if(where==1) + { + print $0 >> outfile + } + + if($0 ~ /<\/li>/) + { + where=0 + close(outfile) + } +}; +END{ + exit related +} \ No newline at end of file diff --git a/pro.zip/index.1.cpp b/pro.zip/index.1.cpp new file mode 100644 index 0000000..c2e15aa --- /dev/null +++ b/pro.zip/index.1.cpp @@ -0,0 +1,69 @@ + // The One True Thread mirror + // display the index +// ~~ bicyclesonthemoon + +#include +#include +#include +#include +#include + +###RM_PATH +###CAT_PATH + +###TOP_PATH +###OTTFRONT_PATH +###MFRONT_PATH +###END_PATH + +int main() +{ + s_cgi *cgi; + pid_t sub; + int r; + cgi=cgiInit(); + + printf("Content-type: text/html\n\n"); + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(CAT_PATH,CAT_PATH,TOP_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard
    "); + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(CAT_PATH,CAT_PATH,OTTFRONT_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("
  • Ch*rpin* M*stard
  • "); + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(CAT_PATH,CAT_PATH,MFRONT_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(CAT_PATH,CAT_PATH,END_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("
    Ch*rpin* M*stard
    "); + return 0; +} diff --git a/pro.zip/list.awk b/pro.zip/list.awk new file mode 100644 index 0000000..5087bce --- /dev/null +++ b/pro.zip/list.awk @@ -0,0 +1,14 @@ +BEGIN{ + printf("%s","") > outfile +}; +{ + for (i=1;i<=NF;++i) + { + if ($i ~ /^id=\"p[0-9]/) + #"# + { + split($i, arr, "\"p?") + print arr[2] >> outfile + } + } +} \ No newline at end of file diff --git a/pro.zip/makefile b/pro.zip/makefile new file mode 100644 index 0000000..c58dad8 --- /dev/null +++ b/pro.zip/makefile @@ -0,0 +1,79 @@ +CC=g++ +CF=-g -Wall +LF1=-lcgi +AI=mawk -f + + + +all: bot2 bot3 findpost image view mview index update post enable + +bot2: bot2.cpp bot2.awk findlatest.awk list.awk upload.awk index.awk makefile + $(CC) $(CF) -o bot2 bot2.cpp + +bot3: bot3.cpp post.awk pm.awk makefile + $(CC) $(CF) -o bot3 bot3.cpp + +findpost: findpost.cpp makefile + $(CC) $(CF) -o findpost findpost.cpp + +image: image.cpp makefile + $(CC) $(CF) -o image image.cpp + +view: view.cpp view.awk makefile + $(CC) $(CF) -o view view.cpp $(LF1) + +mview: mview.cpp view.awk mview.awk makefile + $(CC) $(CF) -o mview mview.cpp $(LF1) + +update: update.cpp bot2 makefile + $(CC) $(CF) -o update update.cpp $(LF1) + +index: index.cpp makefile + $(CC) $(CF) -o index index.cpp $(LF1) + +post: post.cpp preview.awk view.awk makefile + $(CC) $(CF) -o post post.cpp $(LF1) + +enable: post update view mview + chmod u+s post update view mview + + + +bot2.cpp: bot2.1.cpp re.awk makefile + $(AI) re.awk bot2.1.cpp > bot2.cpp + +bot3.cpp: bot3.1.cpp re.awk makefile + $(AI) re.awk bot3.1.cpp > bot3.cpp + +findpost.cpp: findpost.1.cpp re.awk makefile + $(AI) re.awk findpost.1.cpp > findpost.cpp + +index.cpp: index.1.cpp re.awk makefile + $(AI) re.awk index.1.cpp > index.cpp + +mview.cpp: mview.1.cpp re.awk makefile + $(AI) re.awk mview.1.cpp > mview.cpp + +post.cpp: post.1.cpp re.awk makefile + $(AI) re.awk post.1.cpp > post.cpp + +update.cpp: update.1.cpp re.awk makefile + $(AI) re.awk update.1.cpp > update.cpp + +view.cpp: view.1.cpp re.awk makefile + $(AI) re.awk view.1.cpp > view.cpp + +bot2.awk: bot2.1.awk re.awk makefile + $(AI) re.awk bot2.1.awk > bot2.awk + +index.awk: index.1.awk re.awk makefile + $(AI) re.awk index.1.awk > index.awk + +pm.awk: pm.1.awk re.awk makefile + $(AI) re.awk pm.1.awk > pm.awk + +post.awk: post.1.awk re.awk makefile + $(AI) re.awk post.1.awk > post.awk + +preview.awk: preview.1.awk re.awk makefile + $(AI) re.awk preview.1.awk > preview.awk diff --git a/pro.zip/mview.1.cpp b/pro.zip/mview.1.cpp new file mode 100644 index 0000000..2863841 --- /dev/null +++ b/pro.zip/mview.1.cpp @@ -0,0 +1,260 @@ + // The One True Thread mirror + // Send a newpage. +// ~~ bicyclesonthemoon + +#include +#include +#include +#include +#include + +###RM_PATH +###CAT_PATH +###MAWK_PATH + +###NP_TOP_PATH +###NP_END_PATH +###INFO_PATH +###POST_PATH3 +###POSTLIST_PATH3 +###LAST_PATH3 + +###AWK_VIEW +###AWK_MVIEW +###TEMP_PATH3v + +unsigned long p2np(unsigned long p) +{ + FILE *file; + char path[256]; + char text[256]; + unsigned long np=0; + unsigned long np2; + unsigned long pp; + + for(short i=31;i>=0;--i) + { + np2 = np + (1L << i); + sprintf(path,"%s%lu",POSTLIST_PATH,np2); + file=fopen(path,"rt"); + if(file==NULL) + continue; + fgets(text,255,file); + fclose(file); + sscanf(text,"%lu",&pp); + if(pp==p) + return np2; + else if(ppThere are no posts in this Otherthread.

    Return to the ЯOЯЯIM TTO

    "); + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_VIEW,"-v",path,INFO_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("%s",path); + return 0; + } + + arg=cgiGetValue(cgi,"np"); + if(arg!=NULL) + sscanf(arg,"%lu",&np); + else + { + arg=cgiGetValue(cgi,"start"); + if(arg!=NULL) + { + sscanf(arg,"%lu",&start); + np=start/40L+1L; + } + else + { + arg=cgiGetValue(cgi,"p"); + if(arg!=NULL) + { + sscanf(arg,"%lu",&p); + np=p2np(p);//not really + } + else + np=1L; + } + } + if(np>last) + np=last; + if(npNext",np+1); + else + sprintf(right,"%s","right="); + if(np>1) + sprintf(left,"left=Previous",np-1); + else + sprintf(left,"%s","left="); + + sprintf(path2,"%s%lu",TEMP_PATH,(unsigned long)getpid()); + sprintf(links,"links=%s",path2); + file=fopen(path2,"wt"); + if(file!=NULL) + { + fprintf(file,"
    \n"); + fprintf(file,"%lu posts\n",ps); + fprintf(file,"• "); + fprintf(file,"Page %lu of %lu",np,last); + if(np>1) + { + fprintf(file,"1"); + fprintf(file,(np>6)?" ... ":", "); + } + for(unsigned long i=((np>6)?((np%lu, ",i,i); + fprintf(file,"%lu",np); + for(unsigned long i=np+1;i<=((np+6<=last)?((np==1)?(np+4):(np+3)):(last-1));++i) + fprintf(file,", %lu",i,i); + if(np ... ":", "); + fprintf(file,"%lu",last,last); + } + fprintf(file,"\n
    \n"); + fclose(file); + } + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_VIEW,"-v",left,"-v",right,"-v",links,"-v","title=

    Mustardtime Otherthread

    ",NP_TOP_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard

    "); + + sprintf(path2,"%s%lu",POSTLIST_PATH,np); + file=fopen(path2,"rt"); + if(file!=NULL) + { + for(unsigned short i=0;fgets(path,255,file)!=NULL;++i) + { + sscanf(path,"%s",path2); + sprintf(path,"%s%s",POST_PATH,path2); + sprintf(bg,"bg=%hu",2-(i&1)); + sprintf(page,"np=%lu",np); + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_MVIEW,"-v",bg,"-v",page,path,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + { + printf("
    \n",path2,2-(i&1)); + printf("
    \n"); + printf("%hu: POST NOT FOUND.\n",i); + printf("\n
    \n"); + printf("
    \n"); + } + } + fclose(file); + } + else + { + printf("
    \n",np); + printf("
    \n"); + printf("PAGE NOT FOUND.\n"); + printf("\n
    \n"); + printf("
    \n"); + } + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_VIEW,"-v",left,"-v",right,"-v",links,NP_END_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard

    "); + + sprintf(path2,"%s%lu",TEMP_PATH,(unsigned long)getpid()); + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(RM_PATH,RM_PATH,"-f",path2,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard! file not deleted!

    "); + + return 0; +} diff --git a/pro.zip/mview.awk b/pro.zip/mview.awk new file mode 100644 index 0000000..5a1c4bf --- /dev/null +++ b/pro.zip/mview.awk @@ -0,0 +1,17 @@ +BEGIN{ + FS="=" +}; +{ + argtab[$1]=$2 +}; +END{ + printf("
    \n",argtab["timenumber"],bg); + printf("
    \n"); + printf("
    \n"); + printf("

    %s

    \n",argtab["timenumber"],argtab["subject_h"]) + printf("

    \"Post\"by %s » %s

    \n",np,argtab["timenumber"],argtab["timenumber"],argtab["username_h"],argtab["timetext"]) + printf("
    %s
    \n
    \n",argtab["HTML"]) + printf("
    %s
    \n",argtab["timenumber"],argtab["username_h"]) + printf("\n
    \n
    \n") + printf("
    \n") +} diff --git a/pro.zip/pm.1.awk b/pro.zip/pm.1.awk new file mode 100644 index 0000000..9593047 --- /dev/null +++ b/pro.zip/pm.1.awk @@ -0,0 +1,137 @@ +BEGIN{ + FS="=" +###fora +###USERAGENT3a + prefix1="This%20is%20an%20automaticly%20generated%20message%20from%20the%20%5Burl%3D###own_url_encoded;%5D%D0%AFO%D0%AF%D0%AFIM%20TTO%5B%2Furl%5D.%0AYour%20post%20couldn%27t%20be%20posted.%0AThe%20%5Burl%3D###own_url_encoded;%2Flog%2Fbot3.log%5Dlog%5B%2Furl%5D%20may%20help%20you%20determine%20the%20reasons%20for%20this.%5Bquote%3D%22%5Bcolor%3D%230000FF%5D" + prefix2="%5B%2Fcolor%5D%22%5D" + postfix="%5B%2Fquote%5D%5Bright%5D%5Bsize%3D85%5D--%20posted%20by%20###bot3name_encoded;%5B%2Fsize%5D%5B%2Fright%5D" + OK=0 + MUSTARD=1 + INDELIVERABLE=2 +}; +{ + argtab[$1]=$2 +}; +END{ + if(system("wget -q -t 3 --save-cookies=" cookiefile " -U " useragent " -O " tempfile " " fora "/ucp.php?mode=login")) + { + print "Pre-login fail." + exit MUSTARD + } + while((getline cookie < cookiefile)>0) + { + if(cookie ~ /_sid/) + { + split(cookie,arr,"_sid[ \t]*") + SID=arr[2] + } + } + close(cookiefile) + print "username=" name "&password=" pass "&sid=" SID "&login=Login" > postfile + close(postfile) + if(system("wget -q -t 3 --save-cookies=" cookiefile " --post-file=" postfile " -U " useragent " -O " tempfile " \"" fora "/ucp.php?mode=login\"")) + { + print "Login fail." + exit MUSTARD + } + + while((getline temp < tempfile)>0) + { + if (temp ~ /
    0) + { + if(temp ~ /name=.form_token/) + { + split(temp,arr,"(value=\")|(\" ?/>)") + argtab["form_token"]=arr[2] + } + if(temp ~ /name=.creation_time/) + { + split(temp,arr,"(value=\")|(\" ?/>)") + argtab["creation_time"]=arr[2] + } + if(temp ~ /name=.address_list/) + { + split(temp,arr,"(address_list\[u\]\[)|(\]\")") + argtab["address_list"]=arr[2] + } + if (temp ~ /

    postfile + printf ("&subject=Mirrorpost%%20failed")>postfile + if("&addbbcode20" in argtab) + printf ("&addbbcode20=%s",argtab["addbbcode20"])>>postfile + printf ("&message=%s%s%%3A%%20%s%s%s%s",prefix1,argtab["timenumber"],argtab["subject"],prefix2,argtab["message"],postfix)>>postfile + printf ("&address_list%%5Bu%%5D%%5B%s%%5D=to",argtab["address_list"])>>postfile + printf ("&post=Submit")>postfile + if("disable_smilies" in argtab) + printf ("&disable_smilies=%s",argtab["disable_smilies"])>>postfile + if("disable_magic_url" in argtab) + printf ("&disable_magic_url=%s",argtab["disable_magic_url"])>>postfile + printf ("&creation_time=%s",argtab["creation_time"])>>postfile + printf ("&form_token=%s",argtab["form_token"])>>postfile + close(postfile) + + if(system("wget -q -t 3 --load-cookies=" cookiefile " --save-cookies=" cookiefile " --post-file=" postfile " -U " useragent " -O " tempfile " \""fora "/ucp.php?i=pm&mode=compose&action=post\"")) + { + print "Submit fail." + exit MUSTARD + } + + while((getline temp < tempfile)>0) + { + if (temp ~ /

    information/) + { + success=1 + } + } + close(tempfile) + + if (success!=1) + { + print "Sent back to preview!" + exit INDELIVERABLE + } + + while((getline cookie < cookiefile)>0) + { + if(cookie ~ /_sid/) + { + split(cookie,arr,"_sid[ \t]*") + SID=arr[2] + break + } + } + close(cookiefile) + if(system("wget -q -t 3 -U " useragent " -O " cookiefile " \"" fora "/ucp.php?mode=logout&sid=" SID"\"")) + { + print "Logout fail." + } +} diff --git a/pro.zip/post.1.awk b/pro.zip/post.1.awk new file mode 100644 index 0000000..d17b2cb --- /dev/null +++ b/pro.zip/post.1.awk @@ -0,0 +1,133 @@ +BEGIN{ + FS="=" +###fora +###USERAGENT3a +}; +{ + argtab[$1]=$2 +}; +END{ + if(system("wget -q -t 3 --save-cookies=" cookiefile " -U " useragent " -O " tempfile " " fora "/ucp.php?mode=login")) + { + print "Pre-login fail." + exit 1 + } + while((getline cookie < cookiefile)>0) + { + if(cookie ~ /_sid/) + { + split(cookie,arr,"_sid[ \t]*") + SID=arr[2] + } + } + close(cookiefile) + print "username=" argtab["username"] "&password=" argtab["password"] "&sid=" SID "&login=Login" > postfile + close(postfile) + if(system("wget -q -t 3 --save-cookies=" cookiefile " --post-file=" postfile " -U " useragent " -O " tempfile " \"" fora "/ucp.php?mode=login\"")) + { + print "Login fail." + exit 1 + } + + while((getline temp < tempfile)>0) + { + if (temp ~ /

    0) + { + if(temp ~ /name=.form_token/) + { + split(temp,arr,"(value=\")|(\" ?/>)") + argtab["form_token"]=arr[2] + } + if(temp ~ /name=.creation_time/) + { + split(temp,arr,"(value=\")|(\" ?/>)") + argtab["creation_time"]=arr[2] + } + if (tolower(temp) ~ /

    information/) + { + print "Unexpected h2: information\n" + getline temp < tempfile + print temp + exit 1 + } + } + close(tempfile) + + printf ("subject=%s",argtab["subject"])>postfile + if("&addbbcode20" in argtab) + printf ("&addbbcode20=%s",argtab["addbbcode20"])>>postfile + printf ("&message=%s",argtab["message"])>>postfile + printf ("&post=%s","Submit")>>postfile + if("disable_bbcode" in argtab) + printf ("&disable_bbcode=%s",argtab["disable_bbcode"])>>postfile + if("disable_smilies" in argtab) + printf ("&disable_smilies=%s",argtab["disable_smilies"])>>postfile + if("disable_magic_url" in argtab) + printf ("&disable_magic_url=%s",argtab["disable_magic_url"])>>postfile + if("attach_sig" in argtab) + printf ("&attach_sig=%s",argtab["attach_sig"])>>postfile + if("notify" in argtab) + printf ("¬ify=%s",argtab["notify"])>>postfile + printf ("&creation_time=%s",argtab["creation_time"])>>postfile + printf ("&form_token=%s",argtab["form_token"])>>postfile + close(postfile) + + if(system("wget -q -t 3 --load-cookies=" cookiefile " --save-cookies=" cookiefile " --post-file=" postfile " -U " useragent " -O " tempfile " \""fora "/posting.php?mode=reply&f=7&t=101043\"")) + { + print "Submit fail." + exit 1 + } + + while((getline temp < tempfile)>0) + { + if (temp ~ /

    information/) + { + success=1 + } + } + close(tempfile) + + if (success!=1) + { + print "Sent back to preview!" + exit INDELIVERABLE + } + + while((getline cookie < cookiefile)>0) + { + if(cookie ~ /_sid/) + { + split(cookie,arr,"_sid[ \t]*") + SID=arr[2] + break + } + } + close(cookiefile) + if(system("wget -q -t 3 -U " useragent " -O " tempfile " \"" fora "/ucp.php?mode=logout&sid=" SID"\"")) + { + print "Logout fail." + } + + +} diff --git a/pro.zip/post.1.cpp b/pro.zip/post.1.cpp new file mode 100644 index 0000000..c3091c9 --- /dev/null +++ b/pro.zip/post.1.cpp @@ -0,0 +1,446 @@ + // The One True Thread mirror + // make a post. +// ~~ bicyclesonthemoon + +#include +#include +#include +#include +#include +#include +#include + +###RM_PATH +###MV_PATH +###CAT_PATH +###MAWK_PATH + +###POST_PATH +###INFO_PATH +###MPOST_PATH +###MLIST_PATH +###MLAST_PATH +###MFRONT_PATH + +###AWK_PREVIEW +###AWK_VIEW +###TEMP_PATHp + +s_cgi *cgi; +pid_t sub; +int r; +FILE *tempfile; +FILE *postfile; +bool tf=false; +bool pf=false; +char temppath[256]=""; +char postpath[256]=""; + +char zero='\0'; +char *username = &zero; +char *password = &zero; +char *subject = &zero; +char *message = &zero; +char *addbbcode20 = &zero; +char *disable_bbcode = &zero; +char *disable_smilies = &zero; +char *disable_magic_url = &zero; +char *attach_sig = &zero; +char *notify = &zero; +char *Preview = &zero; +char *post =&zero; +char wrong[256]; + +void submit(); +void preview (const char *text); +void writeArg(FILE *file,const char *name,const char *value, bool all); +void writeArg(FILE *file,const char *name,const char *value, char *insert); +void writeArgH(FILE *file,const char *name,const char *value, bool br); +void writeArgH(FILE *file,const char *value); +void end(int m); + +void end(int m) +{ + if(tf) + fclose(tempfile); + if(pf) + fclose(postfile); + sub=fork(); + if(sub==0) + { + r=execl(RM_PATH,RM_PATH,"-f",temppath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(pf) + { + sub=fork(); + if(sub==0) + { + r=execl(RM_PATH,RM_PATH,"-f",postpath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + } + exit(m); +} + +void writeArg(FILE *file,const char *name,const char *value, bool all=false) +{ + unsigned short length, i, v; + fprintf(file,"%s=",name); + for(i=0, length=strlen(value);i='0'&&value[i]<='9')||(value[i]>='A'&&value[i]<='Z')||(value[i]>='a'&&value[i]<='z') + ||value[i]=='.'||value[i]=='~'||value[i]=='-'||value[i]=='_')&&(!all)) + fputc(v,file); + else + fprintf(file,"%%%02X",v); + } + fputc('\n',file); +} + +void writeArg(FILE *file,const char *name,const char *value, char *insert) +{ + unsigned short length, i, v; + fprintf(file,"%s=",name); + for(i=0, length=strlen(insert);i='0'&&insert[i]<='9')||(insert[i]>='A'&&insert[i]<='Z')||(insert[i]>='a'&&insert[i]<='z') + ||insert[i]=='.'||insert[i]=='~'||insert[i]=='-'||insert[i]=='_') + fputc(v,file); + else + fprintf(file,"%%%02X",v); + } + for(i=0, length=strlen(value);i='0'&&value[i]<='9')||(value[i]>='A'&&value[i]<='Z')||(value[i]>='a'&&value[i]<='z') + ||value[i]=='.'||value[i]=='~'||value[i]=='-'||value[i]=='_') + fputc(v,file); + else + fprintf(file,"%%%02X",v); + } + fputc('\n',file); +} + +void writeArgH(FILE *file,const char *name,const char *value, bool br=false) +{ + unsigned short length, i, v; + fprintf(file,"%s=",name); + for(i=0, length=strlen(value);i"); + case '\"': + case '&': + case '<': + case '>': + case ' ': + case '\r': + case '=': + fprintf(file,"&#%hu;",v); + break; + default: + fputc(v,file); + } + } + fputc('\n',file); +} + +void writeArgH(FILE *file,const char *value) +{ + unsigned short length, i, v; + for(i=0, length=strlen(value);i': + case ' ': + case '\r': + case '\n': + case '=': + fprintf(file,"&#%hu;",v); + break; + default: + fputc(v,file); + } + } +} + +void submit() +{ + time_t posttime; + char timetext[32]; + char timenumber[32]; + char botinfo[256]; + char arg1[256]; + + unsigned long lastpage; + unsigned short postslast; + char listpath[256]; + + posttime=time(NULL); + sprintf(timenumber,"%llu",(unsigned long long)posttime); + + strftime(timetext,31,"%a %b %d, %Y %I:%M %p %Z",gmtime(&posttime)); + sprintf(botinfo,"[size=80][Posted from the Mirror at %s][/size]\r\n",timetext); + sprintf(postpath,"%s%s",MPOST_PATH,timenumber); + + tempfile=fopen(temppath,"wt"); + if(tempfile==NULL) + preview("Couldn't create file."); + tf=true; + writeArgH(tempfile,"timenumber",timenumber); + writeArgH(tempfile,"timetext",timetext); + writeArgH(tempfile,"HTML",message,true); + writeArgH(tempfile,"username_h",username); + writeArgH(tempfile,"subject_h",subject); + writeArg (tempfile,"username",username); + writeArg (tempfile,"password",password,true); + writeArg (tempfile,"subject",subject); + writeArg (tempfile,"addbbcode20",addbbcode20); + writeArg (tempfile,"message",message,botinfo); + if(disable_bbcode[0]!='\0') + writeArg(tempfile,"disable_bbcode",disable_bbcode); + if(disable_smilies[0]!='\0') + writeArg(tempfile,"disable_smilies",disable_smilies); + if(disable_magic_url[0]!='\0') + writeArg(tempfile,"disable_magic_url",disable_magic_url); + if(attach_sig[0]!='\0') + writeArg(tempfile,"attach_sig",attach_sig); + if(notify[0]!='\0') + writeArg(tempfile,"notify",notify); + fclose(tempfile); + tf=false; + + sub=fork(); + if(sub==0) + { + r=execl(MV_PATH,MV_PATH,temppath,postpath,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("Couldn't add post to queue."); + + tempfile=fopen(MLAST_PATH,"rt"); + if(tempfile==NULL) + { + lastpage=1; + postslast=1; + } + else + { + tf=true; + if(fgets(listpath,255,tempfile)) + sscanf(listpath,"%lu",&lastpage); + if(fgets(listpath,255,tempfile)) + sscanf(listpath,"%hu",&postslast); + if(postslast>=40) + { + ++lastpage; + postslast=0; + } + else + ++postslast; + fclose(tempfile); + tf=false; + } + tempfile=fopen(MLAST_PATH,"wt"); + if(tempfile==NULL) + { + pf=true; + preview("Couldn't update list."); + } + fprintf(tempfile,"%lu\n%hu\n%s\n",lastpage,postslast,timenumber); + fclose(tempfile); + + sprintf(listpath,"%s%lu",MLIST_PATH,lastpage); + tempfile=fopen(listpath,"at"); + if(tempfile==NULL) + { + pf=true; + preview("Couldn't update list."); + } + fprintf(tempfile,"%s\n",timenumber); + + tempfile=fopen(MFRONT_PATH,"wt"); + if(tempfile!=NULL) + { + fprintf(tempfile,"

  • \n"); + fprintf(tempfile,"
    \n"); + fprintf(tempfile,"
    Mustardtime Otherthread\n"); + fprintf(tempfile,"
    \nMustardtime posts will be shown here, before they are posted to the OTT.
    \nIt's not ready yet. Wait for it.\n
    \n"); + fprintf(tempfile,""); + if(lastpage>5) + fprintf(tempfile,"1 ... "); + for(unsigned long i=((lastpage>5)?(lastpage-2):1);i%lu, ",i,i); + fprintf(tempfile,"%lu",lastpage,lastpage); + fprintf(tempfile,"\"Attachment(s)\" by bothasar_p » Sat Apr 05, 2014 9:40 pm UTC
    \n"); + fprintf(tempfile,"
    %lu Replies
    \n",(unsigned long)((lastpage-1)*40+postslast)); + fprintf(tempfile,"
    NaN Views
    \n"); + fprintf(tempfile,"
    Last post by "); + writeArgH(tempfile,username); + fprintf(tempfile,"\n\"View
    %s
    \n",lastpage,timenumber,timenumber,timetext); + fprintf(tempfile,"
    \n
    \n
  • \n"); + } + fclose(tempfile); + sprintf(arg1,"info=

    This message has been posted successfully.

    View your submitted message

    Return to the ЯOЯЯIM TTO

    ",lastpage,timenumber,timenumber); + + printf("Content-type: text/html\n\n"); + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_VIEW,"-v",arg1,INFO_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("%s",arg1); + end(0); +} +void preview (const char *text) +{ + char arg1[256]; + tempfile=fopen(temppath,"wt"); + if(tempfile==NULL) + end(1); + tf=true; + + writeArgH(tempfile,"HTML",((strlen(message)>0)?("Sorry, no preview."):(""))); + writeArgH(tempfile,"wrong",text); + writeArgH(tempfile,"username",username); + writeArgH(tempfile,"subject",subject); + writeArgH(tempfile,"message",message); + // writeArgH(tempfile,"addbbcode20",addbbcode20); + writeArgH(tempfile,"disable_bbcode",disable_bbcode); + writeArgH(tempfile,"disable_smilies",disable_smilies); + writeArgH(tempfile,"disable_magic_url",disable_magic_url); + writeArgH(tempfile,"attach_sig",attach_sig); + writeArgH(tempfile,"notify",notify); + // writeArgH(tempfile,"Preview",Preview); + // writeArgH(tempfile,"post",post); + + fclose(tempfile); + tf=false; + + printf("Content-type: text/html\n\n"); + sprintf(arg1,"argfile=%s",temppath); + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_PREVIEW,"-v",arg1,POST_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard

    "); + end(0); +} + +int main() +{ + bool missing=false; + + + char *arg; + + cgi=cgiInit(); + + sprintf(temppath,"%s%lu",TEMP_PATH,(unsigned long)getpid()); + + arg=cgiGetValue(cgi,"password"); + if(arg!=NULL) + password=arg; + else + { + missing=true; + strcpy(wrong,"Password is missing."); + } + + arg=cgiGetValue(cgi,"username"); + if(arg!=NULL) + username=arg; + else + { + missing=true; + strcpy(wrong,"Username is missing."); + } + + arg=cgiGetValue(cgi,"subject"); + if(arg!=NULL) + subject=arg; + else + { + missing=true; + strcpy(wrong,"Subject was missing. Replaced with default value."); + } + + arg=cgiGetValue(cgi,"message"); + if(arg!=NULL) + message=arg; + else + { + missing=true; + strcpy(wrong,"Post is empty."); + } + + arg=cgiGetValue(cgi,"addbbcode20"); + if(arg!=NULL) + addbbcode20=arg; + + arg=cgiGetValue(cgi,"disable_bbcode"); + if(arg!=NULL) + disable_bbcode=arg; + + arg=cgiGetValue(cgi,"disable_smilies"); + if(arg!=NULL) + disable_smilies=arg; + + arg=cgiGetValue(cgi,"disable_magic_url"); + if(arg!=NULL) + disable_magic_url=arg; + + arg=cgiGetValue(cgi,"attach_sig"); + if(arg!=NULL) + attach_sig=arg; + + arg=cgiGetValue(cgi,"notify"); + if(arg!=NULL) + notify=arg; + + arg=cgiGetValue(cgi,"Preview"); + if(arg!=NULL) + Preview=arg; + + arg=cgiGetValue(cgi,"post"); + if(arg!=NULL) + post=arg; + + if(strcmp(post,"Submit")==0) + { + if(missing) + preview(wrong); + else + submit(); + } + else + preview(""); + + return 0; + +} diff --git a/pro.zip/preview.1.awk b/pro.zip/preview.1.awk new file mode 100644 index 0000000..9da7025 --- /dev/null +++ b/pro.zip/preview.1.awk @@ -0,0 +1,52 @@ +BEGIN{ + HTML="
    \n
    \n
    \n

    Preview: %s

    %s
    \n" + wrong="

    %s

    \n" + subject="
    \n" + username="
    \n" + message="\n" + disable_bbcode="
    \n" + disable_smilies="
    \n" + disable_magic_url="
    \n" + attach_sig="
    \n" + notify="
    \n" + + print "" + close(argfile) +}; +{ + if ($0 ~ /^###HTML/) + { + if((argtab["HTML"]!="")&&(argtab["wrong"]=="")) + printf(HTML,argtab["subject"],argtab["HTML"]) + } + else if ($0 ~ /^###wrong/) + { + if(argtab["wrong"]!="") + printf(wrong,argtab["wrong"]) + } + else if ($0 ~ /^###subject/) + printf(subject,((argtab["subject"]=="")?"###default_subject;":argtab["subject"])) + else if ($0 ~ /^###username/) + printf(username,argtab["username"]) + else if ($0 ~ /^###message/) + printf(message,argtab["message"]) + else if ($0 ~ /^###disable_bbcode/) + printf(disable_bbcode,(argtab["disable_bbcode"]=="on")?"checked=\"checked\"":"") + else if ($0 ~ /^###disable_smilies/) + printf(disable_smilies,(argtab["disable_smilies"]=="on")?"checked=\"checked\"":"") + else if ($0 ~ /^###disable_magic_url/) + printf(disable_magic_url,(argtab["disable_magic_url"]=="on")?"checked=\"checked\"":"") + else if ($0 ~ /^###attach_sig/) + printf(attach_sig,(argtab["attach_sig"]=="on")?"checked=\"checked\"":"") + else if ($0 ~ /^###notify/) + printf(notify,(argtab["notify"]=="on")?"checked=\"checked\"":"") + else + print $0 +}; \ No newline at end of file diff --git a/pro.zip/re.awk b/pro.zip/re.awk new file mode 100644 index 0000000..26da2ff --- /dev/null +++ b/pro.zip/re.awk @@ -0,0 +1,557 @@ +BEGIN{ +#set your paths here +#and remember about doubleescaping! + + + tmppath= "/eizm/tmp/ottmirror" + propath= "/eizm/pro/ottmirror" + mempath= "/eizm/mem/ottmirror" + logpath= "/eizm/log/ottmirror" + mirrpath= "/eizm/www/time/ott" + + wgetpath= "/usr/bin/wget" + mawkpath= "/usr/bin/mawk" + mvpath= "/bin/mv" + rmpath= "/bin/rm" + catpath= "/bin/cat" + + useragent2="bothasar_t (http://1190.bicyclesonthemoon.dnsd.info/ott/; Time thread mirror bot)" + useragent3="bothasar_p (http://1190.bicyclesonthemoon.dnsd.info/ott/; Time thread post bot)" + + ictaddr= "http://forums.xkcd.com/viewforum.php?f=7" + ottaddr= "http://forums.xkcd.com/viewtopic.php?f=7&t=101043&start=" + foraaddr= "http://forums.xkcd.com" + waybaddr= "http://web.archive.org/web/" + + threadID= "101043" + links_regexp= "href=.http:\\/\\/((for(ums3?|a)\\.xkcd\\.com)|echochamber\\.me)\\/viewtopic\\.php" + prosilver_regexp= "((url.\\.)|(((href)|(src))=.http:\\/\\/((for(ums3?|a)\\.xkcd\\.com)|echochamber\\.me)))\\/styles\\/prosilver" + prosilver_regexp2="((\\.)|(http:\\/\\/((for(ums3?|a)\\.xkcd\\.com)|echochamber\\.me)))\\/styles\\/prosilver" + smiley_regexp= "((url.\\.)|(((href)|(src))=.http:\\/\\/((for(ums3?|a)\\.xkcd\\.com)|echochamber\\.me)))\\/images\\/smilies" + smiley_regexp2= "((\\.)|(http:\\/\\/((for(ums3?|a)\\.xkcd\\.com)|echochamber\\.me)))\\/images\\/smilies" + avatar_regexp= "((src)|(href))=.http:\\/\\/((for(ums3?|a)\\.xkcd\\.com)|echochamber\\.me)\\/download\\/file.php\\?avatar=" + attachment_regexp="((src)|(href))=.http:\\/\\/(www\\.)?((for(ums3?|a)\\.xkcd\\.com)|echochamber\\.me)\\/download\\/file.php\\?(mode=view\\&)?id=" + own_image_regexp= "(1190.bicyclesonthemoon.dnsd.info)|(1190-botm.dnsdynamic.com)\\/ott\\/image\\/" + own_url_encoded= "http%3A%2F%2F1190.bicyclesonthemoon.dnsd.info%2Fott" + bot3name_encoded= "bothasar_p" + default_subject= "Re: 1190: \\"Time\\"" + + + #don't touch anything below this line + + USERAGENT2="#define USERAGENT \"" useragent2 "\"" + USERAGENT3="#define USERAGENT \"" useragent3 "\"" + USERAGENT2a="\tuseragent=\"\\\""useragent2 "\\\"\"" + USERAGENT3a="\tuseragent=\"\\\""useragent3 "\\\"\"" + ICT_ADDRESS="#define ICT_ADDRESS \"" ictaddr "\"" + OTT_ADDRESS="#define OTT_ADDRESS \"" ottaddr "\"" + FORA_ADDRESS="#define FORA_ADDRESS \"" foraaddr "\"" + wayback ="\twayback=\"" waybaddr "\"" + fora ="\tfora=\"" foraaddr "\"" + + WGET_PATH="#define WGET_PATH \"" wgetpath "\"" + MAWK_PATH="#define MAWK_PATH \"" mawkpath "\"" + RM_PATH="#define RM_PATH \"" rmpath "\"" + MV_PATH="#define MV_PATH \"" mvpath "\"" + CAT_PATH="#define CAT_PATH \"" catpath "\"" + + LAST_PATH="#define LAST_PATH \"" mempath "/lasttime.\"" + NAME_PATH="#define NAME_PATH \"" mempath "/name\"" + LASTTIME_PATH="#define LASTTIME_PATH \"" mempath "/bot3last\"" + POST_PATH3="#define POST_PATH \"" mempath "/mpost/\"" + LIST_PATH3="#define LIST_PATH \"" mempath "/mlist/\"" + LAST_PATH3="#define LAST_PATH \"" mempath "/mlist/last\"" + OK_PATH3="#define OK_PATH \"" mempath "/mpost/ok/\"" + PM_PATH3="#define PM_PATH \"" mempath "/mpost/pm/\"" + FAIL_PATH3="#define FAIL_PATH \"" mempath "/mpost/fail/\"" + POSTLIST_PATH3="#define POSTLIST_PATH \"" mempath "/mlist/\"" + MPOST_PATH="#define MPOST_PATH \"" mempath "/mpost/\"" + MLIST_PATH="#define MLIST_PATH \"" mempath "/mlist/\"" + MLAST_PATH="#define MLAST_PATH \"" mempath "/mlist/last\"" + MSTD_LAST_PATH="#define MSTD_LAST_PATH \"" mempath "/mlist/last\"" + + LOG_PATH="#define LOG_PATH \"" logpath "/bot2.log.\"" + LOG_PATH3="#define LOG_PATH \"" logpath "/bot3.log\"" + + NP_PATH="#define NP_PATH \"" tmppath "/np.p0.\"" + NP_PATH_1="#define NP_PATH_1 \"" tmppath "/np.p1.\"" + NP_PATH_2="#define NP_PATH_2 \"" tmppath "/np.p2.\"" + NP_PATH_3="#define NP_PATH_3 \"" tmppath "/np.p3.\"" + STOP_PATH="#define STOP_PATH \"" tmppath "/fullstop.\"" + TEMPFILE_PATH="#define TEMPFILE_PATH \"" tmppath "/bot3temp\"" + POSTDATA_PATH="#define POSTDATA_PATH \"" tmppath "/bot3post\"" + COOKIE_PATH="#define COOKIE_PATH \"" tmppath "/bot3cook\"" + STOP_PATH3="#define STOP_PATH \"" tmppath "/bot3stop\"" + TEMP_PATH3v="#define TEMP_PATH \"" tmppath "/mview.\"" + TEMP_PATHp="#define TEMP_PATH \"" tmppath "/preview.\"" + TEMP_PATHv="#define TEMP_PATH \"" tmppath "/view.\"" + + LIST_PATH="#define LIST_PATH \"" mirrpath "/postlist/\"" + SIG_PATH="#define SIG_PATH \"" mirrpath "/sig/\"" + INF_PATH="#define INF_PATH \"" mirrpath "/otterinf/\"" + UP_PATH="#define UP_PATH \"" mirrpath "/np/\"" + IND_PATH="#define IND_PATH \"" mirrpath "/ottfront\"" + TOP_PATH="#define TOP_PATH \"" mirrpath "/top\"" + END_PATH="#define END_PATH \"" mirrpath "/end\"" + AV_PATH="#define AV_PATH \"" mirrpath "/avatar/\"" + ATT_PATH="#define ATT_PATH \"" mirrpath "/attachment/\"" + IMG_PATH="#define IMG_PATH \"" mirrpath "/image/\"" + LAST_PAGE="#define LAST_PAGE \"" mirrpath "/np/last\"" + IND_PATH3="#define IND_PATH \"" mirrpath "/mfront\"" + POSTLIST_PATH="#define POSTLIST_PATH \"" mirrpath "/postlist/\"" + OTTFRONT_PATH="#define OTTFRONT_PATH \"" mirrpath "/ottfront\"" + MFRONT_PATH="#define MFRONT_PATH \"" mirrpath "/mfront\"" + NP_TOP_PATH="#define NP_TOP_PATH \"" mirrpath "/np/top\"" + NP_END_PATH="#define NP_END_PATH \"" mirrpath "/np/end\"" + INFO_PATH="#define INFO_PATH \"" mirrpath "/info.htm\"" + POST_PATH="#define POST_PATH \"" mirrpath "/post.htm\"" + NP_LAST_PATH="#define NP_LAST_PATH \"" mirrpath "/np/last\"" + SIG_PATHe="#define SIG_PATH \"sig=" mirrpath "/sig/\"" + INF_PATHe="#define INF_PATH \"otterinf=" mirrpath "/otterinf/\"" + + AWK_LATEST="#define AWK_LATEST \"" propath "/findlatest.awk\"" + AWK_LIST="#define AWK_LIST \"" propath "/list.awk\"" + AWK_BOT2="#define AWK_BOT2 \"" propath "/bot2.awk\"" + AWK_UPLOAD="#define AWK_UPLOAD \"" propath "/upload.awk\"" + AWK_INDEX="#define AWK_INDEX \"" propath "/index.awk\"" + AWK_POST="#define AWK_POST \"" propath "/post.awk\"" + AWK_PM="#define AWK_PM \"" propath "/pm.awk\"" + AWK_VIEW="#define AWK_VIEW \"" propath "/view.awk\"" + AWK_MVIEW="#define AWK_MVIEW \"" propath "/mview.awk\"" + AWK_PREVIEW="#define AWK_PREVIEW \"" propath "/preview.awk\"" + BOT_PATH="#define BOT_PATH \"" propath "/bot2\"" + findpost_path="\tfindpost_path=\"" propath "/findpost\"" + imgformat_path="\timgformat_path=\"" propath "/image\"" + +}; +{ + gsub(/\r/,"",$0) + if($1 ~ /^###USERAGENT2$/) + { + print USERAGENT2 + next; + } + if($1 ~ /^###USERAGENT3$/) + { + print USERAGENT3 + next + } + if($1 ~ /^###USERAGENT2$/) + { + print USERAGENT2 + next; + } + if($1 ~ /^###ICT_ADDRESS$/) + { + print ICT_ADDRESS + next + } + if($1 ~ /^###OTT_ADDRESS$/) + { + print OTT_ADDRESS + next + } + if($1 ~ /^###FORA_ADDRESS$/) + { + print FORA_ADDRESS + next + } + if($1 ~ /^###USERAGENT2a$/) + { + print USERAGENT2a + next; + } + if($1 ~ /^###USERAGENT3a$/) + { + print USERAGENT3a + next; + } + if($1 ~ /^###wayback$/) + { + print wayback + next; + } + if($1 ~ /^###fora$/) + { + print fora + next; + } + + + + if($1 ~ /^###WGET_PATH$/) + { + print WGET_PATH + next + } + if($1 ~ /^###MAWK_PATH$/) + { + print MAWK_PATH + next + } + if($1 ~ /^###RM_PATH$/) + { + print RM_PATH + next + } + if($1 ~ /^###MV_PATH$/) + { + print MV_PATH + next + } + if($1 ~ /^###CAT_PATH$/) + { + print CAT_PATH + next + } + + + + if($1 ~ /^###LAST_PATH$/) + { + print LAST_PATH + next + } + if($1 ~ /^###NAME_PATH$/) + { + print NAME_PATH + next + } + if($1 ~ /^###LASTTIME_PATH$/) + { + print LASTTIME_PATH + next + } + if($1 ~ /^###POST_PATH3$/) + { + print POST_PATH3 + next + } + if($1 ~ /^###LIST_PATH3$/) + { + print LIST_PATH3 + next + } + if($1 ~ /^###LAST_PATH3$/) + { + print LAST_PATH3 + next + } + if($1 ~ /^###OK_PATH3$/) + { + print OK_PATH3 + next + } + if($1 ~ /^###PM_PATH3$/) + { + print PM_PATH3 + next + } + if($1 ~ /^###FAIL_PATH3$/) + { + print FAIL_PATH3 + next + } + if($1 ~ /^###POSTLIST_PATH3$/) + { + print POSTLIST_PATH3 + next + } + if($1 ~ /^###MPOST_PATH$/) + { + print MPOST_PATH + next + } + if($1 ~ /^###MLIST_PATH$/) + { + print MLIST_PATH + next + } + if($1 ~ /^###MLAST_PATH$/) + { + print MLAST_PATH + next + } + if($1 ~ /^###MSTD_LAST_PATH$/) + { + print MSTD_LAST_PATH + next + } + + + + if($1 ~ /^###LOG_PATH$/) + { + print LOG_PATH + next + } + if($1 ~ /^###LOG_PATH3$/) + { + print LOG_PATH3 + next + } + + + + if($1 ~ /^###NP_PATH$/) + { + print NP_PATH + next + } + if($1 ~ /^###NP_PATH_1$/) + { + print NP_PATH_1 + next + } + if($1 ~ /^###NP_PATH_2$/) + { + print NP_PATH_2 + next + } + if($1 ~ /^###NP_PATH_3$/) + { + print NP_PATH_3 + next + } + if($1 ~ /^###STOP_PATH$/) + { + print STOP_PATH + next + } + if($1 ~ /^###TEMPFILE_PATH$/) + { + print TEMPFILE_PATH + next + } + if($1 ~ /^###POSTDATA_PATH$/) + { + print POSTDATA_PATH + next + } + if($1 ~ /^###COOKIE_PATH$/) + { + print COOKIE_PATH + next + } + if($1 ~ /^###STOP_PATH3$/) + { + print STOP_PATH3 + next + } + if($1 ~ /^###TEMP_PATH3v$/) + { + print TEMP_PATH3v + next + } + if($1 ~ /^###TEMP_PATHp$/) + { + print TEMP_PATHp + next + } + if($1 ~ /^###TEMP_PATHv$/) + { + print TEMP_PATHv + next + } + + + + if($1 ~ /^###LIST_PATH$/) + { + print LIST_PATH + next + } + if($1 ~ /^###SIG_PATH$/) + { + print SIG_PATH + next + } + if($1 ~ /^###INF_PATH$/) + { + print INF_PATH + next + } + if($1 ~ /^###UP_PATH$/) + { + print UP_PATH + next + } + if($1 ~ /^###IND_PATH$/) + { + print IND_PATH + next + } + if($1 ~ /^###TOP_PATH$/) + { + print TOP_PATH + next + } + if($1 ~ /^###END_PATH$/) + { + print END_PATH + next + } + if($1 ~ /^###AV_PATH$/) + { + print AV_PATH + next + } + if($1 ~ /^###ATT_PATH$/) + { + print ATT_PATH + next + } + if($1 ~ /^###IMG_PATH$/) + { + print IMG_PATH + next + } + if($1 ~ /^###LAST_PAGE$/) + { + print LAST_PAGE + next + } + if($1 ~ /^###IND_PATH3$/) + { + print IND_PATH3 + next + } + if($1 ~ /^###POSTLIST_PATH$/) + { + print POSTLIST_PATH + next + } + if($1 ~ /^###OTTFRONT_PATH$/) + { + print OTTFRONT_PATH + next + } + if($1 ~ /^###MFRONT_PATH$/) + { + print MFRONT_PATH + next + } + if($1 ~ /^###NP_TOP_PATH$/) + { + print NP_TOP_PATH + next + } + if($1 ~ /^###NP_END_PATH$/) + { + print NP_END_PATH + next + } + if($1 ~ /^###INFO_PATH$/) + { + print INFO_PATH + next + } + if($1 ~ /^###POST_PATH$/) + { + print POST_PATH + next + } + if($1 ~ /^###NP_LAST_PATH$/) + { + print NP_LAST_PATH + next + } + if($1 ~ /^###SIG_PATHe$/) + { + print SIG_PATHe + next + } + if($1 ~ /^###INF_PATHe$/) + { + print INF_PATHe + next + } + + + + if($1 ~ /^###AWK_LATEST$/) + { + print AWK_LATEST + next + } + if($1 ~ /^###AWK_LIST$/) + { + print AWK_LIST + next + } + if($1 ~ /^###AWK_BOT2$/) + { + print AWK_BOT2 + next + } + if($1 ~ /^###AWK_UPLOAD$/) + { + print AWK_UPLOAD + next + } + if($1 ~ /^###AWK_INDEX$/) + { + print AWK_INDEX + next + } + if($1 ~ /^###AWK_POST$/) + { + print AWK_POST + next + } + if($1 ~ /^###AWK_PM$/) + { + print AWK_PM + next + } + if($1 ~ /^###AWK_VIEW$/) + { + print AWK_VIEW + next + } + if($1 ~ /^###AWK_MVIEW$/) + { + print AWK_MVIEW + next + } + if($1 ~ /^###AWK_PREVIEW$/) + { + print AWK_PREVIEW + next + } + if($1 ~ /^###BOT_PATH$/) + { + print BOT_PATH + next + } + if($1 ~ /^###findpost_path$/) + { + print findpost_path + next + } + if($1 ~ /^###imgformat_path$/) + { + print imgformat_path + next + } + + if($0 ~ /###[^#;]*;/) + { + gsub(/###threadID;/,threadID,$0) + gsub(/###links_regexp;/,links_regexp,$0) + gsub(/###prosilver_regexp;/,prosilver_regexp,$0) + gsub(/###prosilver_regexp2;/,prosilver_regexp2,$0) + gsub(/###smiley_regexp;/,smiley_regexp,$0) + gsub(/###smiley_regexp2;/,smiley_regexp2,$0) + gsub(/###avatar_regexp;/,avatar_regexp,$0) + gsub(/###attachment_regexp;/,attachment_regexp,$0) + gsub(/###own_image_regexp;/,own_image_regexp,$0) + gsub(/###foraaddr;/,foraaddr,$0) + gsub(/###own_url_encoded;/,own_url_encoded,$0) + gsub(/###bot3name_encoded;/,bot3name_encoded,$0) + gsub(/###default_subject;/,default_subject,$0) + + } + + print $0 +}; \ No newline at end of file diff --git a/pro.zip/update.1.cpp b/pro.zip/update.1.cpp new file mode 100644 index 0000000..de7d861 --- /dev/null +++ b/pro.zip/update.1.cpp @@ -0,0 +1,45 @@ + // The One True Thread mirror + // Update a newpage. +// ~~ bicyclesonthemoon + +#include +#include +#include +#include +#include + +###BOT_PATH +#define UPDATE_PATH "/ott/update.htm" + +int main() +{ + s_cgi *cgi; + pid_t sub; + int r; + + char *arg; + + cgi=cgiInit(); + arg=cgiGetValue(cgi,"np"); + if(arg!=NULL) + { + printf("Content-type: text\n\n"); + fflush(stdout); + dup2(fileno(stdout),fileno(stderr)); + sub=fork(); + if(sub==0) + { + printf("%s\n",BOT_PATH); + r=execl(BOT_PATH,BOT_PATH,"-i","4","-s",arg,"-m","1","-w","15","-v","15","-d","-a","-b","-t",(char *)0); + printf("AAA\n"); + exit(r); + } + waitpid(sub,&r,0); + printf("%x\n",r); + } + else + { + cgiRedirect(UPDATE_PATH); + } + return 0; +} diff --git a/pro.zip/upload.awk b/pro.zip/upload.awk new file mode 100644 index 0000000..5fe1ed1 --- /dev/null +++ b/pro.zip/upload.awk @@ -0,0 +1,104 @@ +BEGIN{ +#parametrse: +#outfile +#otterinf/ +#sig/ + sig2="" + otterinf2="" +# print(outfile " " sig " " otterinf) + printf("%s","") > outfile + where=0 +#0 - nphead +#1 - content +#2 - c(post) +#3 - c(postcontent) +#4 - c(sig) +#5 - c(info) +#6 - END + +}; +{ + if((where==6) && ($0 == "

    ")) + { + exit + } + + if(($0 ~ /
    > outfile + printf ("%s","") > sig2 + } + + if($0 ~ /
    > outfile + printf ("%s","") > otterinf2 + } + + if($0 ~ /
    > outfile + } + + if(where==4) + { + print $0 >> sig2 + } + + if(where==5) + { + print $0 >> otterinf2 + } +}; \ No newline at end of file diff --git a/pro.zip/view.1.cpp b/pro.zip/view.1.cpp new file mode 100644 index 0000000..854e384 --- /dev/null +++ b/pro.zip/view.1.cpp @@ -0,0 +1,233 @@ + // The One True Thread mirror + // Send a newpage. +// ~~ bicyclesonthemoon + +#include +#include +#include +#include +#include + +#define RM_PATH "/bin/rm" +#define CAT_PATH "/bin/cat" +#define MAWK_PATH "/usr/bin/mawk" + +###NP_TOP_PATH +###NP_END_PATH +###UP_PATH +###POSTLIST_PATH +###SIG_PATHe +###INF_PATHe +###NP_LAST_PATH +###MSTD_LAST_PATH + +###AWK_VIEW +###TEMP_PATHv + +unsigned long p2np(unsigned long p) +{ + FILE *file; + char path[256]; + char text[256]; + unsigned long np=0; + unsigned long np2; + unsigned long pp; + + for(short i=31;i>=0;--i) + { + np2 = np + (1L << i); + sprintf(path,"%s%lu",POSTLIST_PATH,np2); + file=fopen(path,"rt"); + if(file==NULL) + continue; + fgets(text,255,file); + fclose(file); + sscanf(text,"%lu",&pp); + if(pp==p) + return np2; + else if(pplast) + np=last; + if(npNext",np+1); + else + sprintf(right,"%s",mustard?"right=Mustardtime Otherthread":"right="); + if(np>1) + sprintf(left,"left=Previous",np-1); + else + sprintf(left,"%s","left="); + + sprintf(path2,"%s%lu",TEMP_PATH,(unsigned long)getpid()); + sprintf(links,"links=%s",path2); + file=fopen(path2,"wt"); + if(file!=NULL) + { + fprintf(file,"
    \n"); + fprintf(file,"%lu posts\n",ps); + fprintf(file,"• "); + fprintf(file,"Page %lu of %lu",np,last); + if(np>1) + { + fprintf(file,"1"); + fprintf(file,(np>6)?" ... ":", "); + } + for(unsigned long i=((np>6)?((np%lu, ",i,i); + fprintf(file,"%lu",np); + for(unsigned long i=np+1;i<=((np+6<=last)?((np==1)?(np+4):(np+3)):(last-1));++i) + fprintf(file,", %lu",i,i); + if(np ... ":", "); + fprintf(file,"%lu",last,last); + } + if(mustard) + { + fprintf(file,", \"Mustardtime\" \"Otherthread\" \"\""); + } + fprintf(file,"\n
    \n"); + fclose(file); + } + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_VIEW,"-v",SIG_PATH,"-v",INF_PATH,"-v",left,"-v",right,"-v",links,"-v","title=

    1190: "Time"

    ",NP_TOP_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard

    "); + + sprintf(path,"%s%lu",UP_PATH,np); + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_VIEW,"-v",SIG_PATH,"-v",INF_PATH,"-v",left,"-v",right,"-v",links,path,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + { + printf("
    \n",np); + printf("
    \n"); + printf("PAGE NOT FOUND.\n"); + printf("\n
    \n"); + printf("
    \n"); + } + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(MAWK_PATH,MAWK_PATH,"-f",AWK_VIEW,"-v",SIG_PATH,"-v",INF_PATH,"-v",left,"-v",right,"-v",links,NP_END_PATH,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard

    "); + + fflush(stdout); + sub=fork(); + if(sub==0) + { + r=execl(RM_PATH,RM_PATH,"-f",path2,(char *)0); + exit(r); + } + waitpid(sub,&r,0); + if(r) + printf("

    Ch*rpin* M*stard! file not deleted!

    "); + + return 0; +} diff --git a/pro.zip/view.awk b/pro.zip/view.awk new file mode 100644 index 0000000..b40847c --- /dev/null +++ b/pro.zip/view.awk @@ -0,0 +1,36 @@ +{ + if ($0 ~ /^###sig&/) + { + split ($0 ,arr,"&") + system("cat " sig arr[2]) + } + else if ($0 ~ /^###inf&/) + { + split ($0 ,arr,"&") + system("cat " otterinf arr[2]) + } + else if ($0 ~ /^###prev/) + { + print left + } + else if ($0 ~ /^###next/) + { + print right + } + else if ($0 ~ /^###links/) + { + system ("cat " links); + } + else if ($0 ~ /^###info/) + { + print info; + } + else if ($0 ~ /^###title/) + { + print title; + } + else + { + print $0 + } +};