From 6759a55759d97ad4840736320441b0751c183aef Mon Sep 17 00:00:00 2001 From: b Date: Tue, 12 Aug 2014 07:51:40 +0000 Subject: [PATCH] v.1 i.0 First publicly available version. git-svn-id: svn://botcastle1b/ottmirror@1 23ac2ed3-cec8-4626-8109-7118d8ca9799 --- botmlogo2.png | Bin 0 -> 1268 bytes index.htm | 258 ++ ott.zip/end | 175 + ott.zip/info.htm | 195 + ott.zip/np/end | 126 + ott.zip/np/top | 138 + ott.zip/post.htm | 505 +++ .../imageset/en/button_pm_forward.gif | Bin 0 -> 2168 bytes .../prosilver/imageset/en/button_pm_new.gif | Bin 0 -> 2005 bytes .../prosilver/imageset/en/button_pm_reply.gif | Bin 0 -> 2126 bytes .../imageset/en/button_topic_locked.gif | Bin 0 -> 1923 bytes .../imageset/en/button_topic_new.gif | Bin 0 -> 2737 bytes .../imageset/en/button_topic_reply.gif | Bin 0 -> 2135 bytes .../en/button_topic_reply_mustard.gif | Bin 0 -> 2749 bytes .../prosilver/imageset/en/icon_contact_pm.gif | Bin 0 -> 677 bytes .../prosilver/imageset/en/icon_post_edit.gif | Bin 0 -> 853 bytes .../prosilver/imageset/en/icon_post_quote.gif | Bin 0 -> 1109 bytes .../imageset/en/icon_user_online.gif | Bin 0 -> 423 bytes ott.zip/prosilver/imageset/icon_back_top.gif | Bin 0 -> 204 bytes .../prosilver/imageset/icon_contact_aim.gif | Bin 0 -> 546 bytes .../prosilver/imageset/icon_contact_email.gif | Bin 0 -> 523 bytes .../prosilver/imageset/icon_contact_icq.gif | Bin 0 -> 562 bytes .../imageset/icon_contact_jabber.gif | Bin 0 -> 1014 bytes .../prosilver/imageset/icon_contact_msnm.gif | Bin 0 -> 588 bytes .../prosilver/imageset/icon_contact_www.gif | Bin 0 -> 590 bytes .../prosilver/imageset/icon_contact_yahoo.gif | Bin 0 -> 541 bytes .../prosilver/imageset/icon_post_delete.gif | Bin 0 -> 528 bytes ott.zip/prosilver/imageset/icon_post_info.gif | Bin 0 -> 501 bytes .../prosilver/imageset/icon_post_report.gif | Bin 0 -> 474 bytes .../prosilver/imageset/icon_post_target.gif | Bin 0 -> 186 bytes .../prosilver/imageset/icon_topic_attach.gif | Bin 0 -> 144 bytes .../prosilver/imageset/icon_topic_latest.gif | Bin 0 -> 186 bytes ott.zip/prosilver/imageset/icon_user_warn.gif | Bin 0 -> 481 bytes ott.zip/prosilver/imageset/mustard.gif | Bin 0 -> 1716 bytes .../prosilver/imageset/mustard_smaller.gif | Bin 0 -> 1662 bytes .../prosilver/imageset/mustard_smallest.gif | Bin 0 -> 1516 bytes ott.zip/prosilver/imageset/spacer.gif | Bin 0 -> 807 bytes ott.zip/prosilver/imageset/subforum_read.gif | Bin 0 -> 124 bytes .../prosilver/imageset/subforum_unread.gif | Bin 0 -> 124 bytes ott.zip/prosilver/imageset/topic_mustard.gif | Bin 0 -> 5143 bytes ott.zip/prosilver/imageset/topic_read.gif | Bin 0 -> 679 bytes ott.zip/prosilver/imageset/topic_read_hot.gif | Bin 0 -> 1469 bytes .../prosilver/imageset/topic_read_locked.gif | Bin 0 -> 664 bytes .../imageset/xkcdLogo_transparent.png | Bin 0 -> 4430 bytes ott.zip/prosilver/smilies/icon_arrow.gif | Bin 0 -> 170 bytes ott.zip/prosilver/smilies/icon_biggrin.gif | Bin 0 -> 172 bytes ott.zip/prosilver/smilies/icon_confused.gif | Bin 0 -> 171 bytes ott.zip/prosilver/smilies/icon_cool.gif | Bin 0 -> 172 bytes ott.zip/prosilver/smilies/icon_cry.gif | Bin 0 -> 498 bytes ott.zip/prosilver/smilies/icon_eek.gif | Bin 0 -> 170 bytes ott.zip/prosilver/smilies/icon_evil.gif | Bin 0 -> 236 bytes ott.zip/prosilver/smilies/icon_exclaim.gif | Bin 0 -> 236 bytes ott.zip/prosilver/smilies/icon_idea.gif | Bin 0 -> 176 bytes ott.zip/prosilver/smilies/icon_lol.gif | Bin 0 -> 336 bytes ott.zip/prosilver/smilies/icon_mad.gif | Bin 0 -> 174 bytes ott.zip/prosilver/smilies/icon_mrgreen.gif | Bin 0 -> 349 bytes ott.zip/prosilver/smilies/icon_neutral.gif | Bin 0 -> 171 bytes ott.zip/prosilver/smilies/icon_question.gif | Bin 0 -> 248 bytes ott.zip/prosilver/smilies/icon_razz.gif | Bin 0 -> 176 bytes ott.zip/prosilver/smilies/icon_redface.gif | Bin 0 -> 650 bytes ott.zip/prosilver/smilies/icon_rolleyes.gif | Bin 0 -> 485 bytes ott.zip/prosilver/smilies/icon_sad.gif | Bin 0 -> 171 bytes ott.zip/prosilver/smilies/icon_smile.gif | Bin 0 -> 174 bytes ott.zip/prosilver/smilies/icon_surprised.gif | Bin 0 -> 174 bytes ott.zip/prosilver/smilies/icon_twisted.gif | Bin 0 -> 238 bytes ott.zip/prosilver/smilies/icon_wink.gif | Bin 0 -> 170 bytes ott.zip/prosilver/template/editor.js | 459 ++ ott.zip/prosilver/template/forum_fn.js | 443 ++ ott.zip/prosilver/template/styleswitcher.js | 193 + ott.zip/prosilver/theme/images/arrow_down.gif | Bin 0 -> 113 bytes ott.zip/prosilver/theme/images/arrow_left.gif | Bin 0 -> 111 bytes .../prosilver/theme/images/arrow_right.gif | Bin 0 -> 111 bytes ott.zip/prosilver/theme/images/arrow_up.gif | Bin 0 -> 113 bytes ott.zip/prosilver/theme/images/bg_button.gif | Bin 0 -> 182 bytes ott.zip/prosilver/theme/images/bg_header.gif | Bin 0 -> 690 bytes ott.zip/prosilver/theme/images/bg_list.gif | Bin 0 -> 664 bytes ott.zip/prosilver/theme/images/bg_menu.gif | Bin 0 -> 354 bytes .../prosilver/theme/images/bg_menu_rtl.gif | Bin 0 -> 345 bytes ott.zip/prosilver/theme/images/bg_tabs1.gif | Bin 0 -> 1520 bytes ott.zip/prosilver/theme/images/bg_tabs2.gif | Bin 0 -> 420 bytes .../prosilver/theme/images/corners_left.gif | Bin 0 -> 55 bytes .../prosilver/theme/images/corners_left.png | Bin 0 -> 195 bytes .../prosilver/theme/images/corners_left2.gif | Bin 0 -> 112 bytes .../prosilver/theme/images/corners_right.gif | Bin 0 -> 56 bytes .../prosilver/theme/images/corners_right.png | Bin 0 -> 201 bytes .../prosilver/theme/images/corners_right2.gif | Bin 0 -> 111 bytes ott.zip/prosilver/theme/images/gradient.gif | Bin 0 -> 549 bytes .../prosilver/theme/images/icon_bookmark.gif | Bin 0 -> 218 bytes ott.zip/prosilver/theme/images/icon_bump.gif | Bin 0 -> 148 bytes ott.zip/prosilver/theme/images/icon_faq.gif | Bin 0 -> 255 bytes .../prosilver/theme/images/icon_fontsize.gif | Bin 0 -> 559 bytes ott.zip/prosilver/theme/images/icon_home.gif | Bin 0 -> 306 bytes .../prosilver/theme/images/icon_logout.gif | Bin 0 -> 219 bytes .../prosilver/theme/images/icon_members.gif | Bin 0 -> 264 bytes ott.zip/prosilver/theme/images/icon_pages.gif | Bin 0 -> 167 bytes ott.zip/prosilver/theme/images/icon_print.gif | Bin 0 -> 424 bytes .../prosilver/theme/images/icon_register.gif | Bin 0 -> 231 bytes .../prosilver/theme/images/icon_search.gif | Bin 0 -> 334 bytes .../prosilver/theme/images/icon_sendemail.gif | Bin 0 -> 531 bytes .../prosilver/theme/images/icon_subscribe.gif | Bin 0 -> 216 bytes .../theme/images/icon_textbox_search.gif | Bin 0 -> 335 bytes ott.zip/prosilver/theme/images/icon_ucp.gif | Bin 0 -> 254 bytes .../theme/images/icon_unsubscribe.gif | Bin 0 -> 214 bytes ott.zip/prosilver/theme/images/quote.gif | Bin 0 -> 153 bytes ott.zip/prosilver/theme/images/quote_rtl.gif | Bin 0 -> 154 bytes ott.zip/prosilver/theme/large.css | 3 + ott.zip/prosilver/theme/medium.css | 3 + ott.zip/prosilver/theme/normal.css | 3 + ott.zip/prosilver/theme/print.css | 139 + ott.zip/prosilver/theme/style.php.css | 3822 +++++++++++++++++ ott.zip/top | 153 + ott.zip/update.htm | 17 + pro.zip/bot2.1.awk | 385 ++ pro.zip/bot2.1.cpp | 527 +++ pro.zip/bot3.1.cpp | 446 ++ pro.zip/findlatest.awk | 30 + pro.zip/findpost.1.cpp | 89 + pro.zip/image.cpp | 45 + pro.zip/index.1.awk | 32 + pro.zip/index.1.cpp | 69 + pro.zip/list.awk | 14 + pro.zip/makefile | 79 + pro.zip/mview.1.cpp | 260 ++ pro.zip/mview.awk | 17 + pro.zip/pm.1.awk | 137 + pro.zip/post.1.awk | 133 + pro.zip/post.1.cpp | 446 ++ pro.zip/preview.1.awk | 52 + pro.zip/re.awk | 557 +++ pro.zip/update.1.cpp | 45 + pro.zip/upload.awk | 104 + pro.zip/view.1.cpp | 233 + pro.zip/view.awk | 36 + 133 files changed, 10368 insertions(+) create mode 100644 botmlogo2.png create mode 100644 index.htm create mode 100644 ott.zip/end create mode 100644 ott.zip/info.htm create mode 100644 ott.zip/np/end create mode 100644 ott.zip/np/top create mode 100644 ott.zip/post.htm create mode 100644 ott.zip/prosilver/imageset/en/button_pm_forward.gif create mode 100644 ott.zip/prosilver/imageset/en/button_pm_new.gif create mode 100644 ott.zip/prosilver/imageset/en/button_pm_reply.gif create mode 100644 ott.zip/prosilver/imageset/en/button_topic_locked.gif create mode 100644 ott.zip/prosilver/imageset/en/button_topic_new.gif create mode 100644 ott.zip/prosilver/imageset/en/button_topic_reply.gif create mode 100644 ott.zip/prosilver/imageset/en/button_topic_reply_mustard.gif create mode 100644 ott.zip/prosilver/imageset/en/icon_contact_pm.gif create mode 100644 ott.zip/prosilver/imageset/en/icon_post_edit.gif create mode 100644 ott.zip/prosilver/imageset/en/icon_post_quote.gif create mode 100644 ott.zip/prosilver/imageset/en/icon_user_online.gif create mode 100644 ott.zip/prosilver/imageset/icon_back_top.gif create mode 100644 ott.zip/prosilver/imageset/icon_contact_aim.gif create mode 100644 ott.zip/prosilver/imageset/icon_contact_email.gif create mode 100644 ott.zip/prosilver/imageset/icon_contact_icq.gif create mode 100644 ott.zip/prosilver/imageset/icon_contact_jabber.gif create mode 100644 ott.zip/prosilver/imageset/icon_contact_msnm.gif create mode 100644 ott.zip/prosilver/imageset/icon_contact_www.gif create mode 100644 ott.zip/prosilver/imageset/icon_contact_yahoo.gif create mode 100644 ott.zip/prosilver/imageset/icon_post_delete.gif create mode 100644 ott.zip/prosilver/imageset/icon_post_info.gif create mode 100644 ott.zip/prosilver/imageset/icon_post_report.gif create mode 100644 ott.zip/prosilver/imageset/icon_post_target.gif create mode 100644 ott.zip/prosilver/imageset/icon_topic_attach.gif create mode 100644 ott.zip/prosilver/imageset/icon_topic_latest.gif create mode 100644 ott.zip/prosilver/imageset/icon_user_warn.gif create mode 100644 ott.zip/prosilver/imageset/mustard.gif create mode 100644 ott.zip/prosilver/imageset/mustard_smaller.gif create mode 100644 ott.zip/prosilver/imageset/mustard_smallest.gif create mode 100644 ott.zip/prosilver/imageset/spacer.gif create mode 100644 ott.zip/prosilver/imageset/subforum_read.gif create mode 100644 ott.zip/prosilver/imageset/subforum_unread.gif create mode 100644 ott.zip/prosilver/imageset/topic_mustard.gif create mode 100644 ott.zip/prosilver/imageset/topic_read.gif create mode 100644 ott.zip/prosilver/imageset/topic_read_hot.gif create mode 100644 ott.zip/prosilver/imageset/topic_read_locked.gif create mode 100644 ott.zip/prosilver/imageset/xkcdLogo_transparent.png create mode 100644 ott.zip/prosilver/smilies/icon_arrow.gif create mode 100644 ott.zip/prosilver/smilies/icon_biggrin.gif create mode 100644 ott.zip/prosilver/smilies/icon_confused.gif create mode 100644 ott.zip/prosilver/smilies/icon_cool.gif create mode 100644 ott.zip/prosilver/smilies/icon_cry.gif create mode 100644 ott.zip/prosilver/smilies/icon_eek.gif create mode 100644 ott.zip/prosilver/smilies/icon_evil.gif create mode 100644 ott.zip/prosilver/smilies/icon_exclaim.gif create mode 100644 ott.zip/prosilver/smilies/icon_idea.gif create mode 100644 ott.zip/prosilver/smilies/icon_lol.gif create mode 100644 ott.zip/prosilver/smilies/icon_mad.gif create mode 100644 ott.zip/prosilver/smilies/icon_mrgreen.gif create mode 100644 ott.zip/prosilver/smilies/icon_neutral.gif create mode 100644 ott.zip/prosilver/smilies/icon_question.gif create mode 100644 ott.zip/prosilver/smilies/icon_razz.gif create mode 100644 ott.zip/prosilver/smilies/icon_redface.gif create mode 100644 ott.zip/prosilver/smilies/icon_rolleyes.gif create mode 100644 ott.zip/prosilver/smilies/icon_sad.gif create mode 100644 ott.zip/prosilver/smilies/icon_smile.gif create mode 100644 ott.zip/prosilver/smilies/icon_surprised.gif create mode 100644 ott.zip/prosilver/smilies/icon_twisted.gif create mode 100644 ott.zip/prosilver/smilies/icon_wink.gif create mode 100644 ott.zip/prosilver/template/editor.js create mode 100644 ott.zip/prosilver/template/forum_fn.js create mode 100644 ott.zip/prosilver/template/styleswitcher.js create mode 100644 ott.zip/prosilver/theme/images/arrow_down.gif create mode 100644 ott.zip/prosilver/theme/images/arrow_left.gif create mode 100644 ott.zip/prosilver/theme/images/arrow_right.gif create mode 100644 ott.zip/prosilver/theme/images/arrow_up.gif create mode 100644 ott.zip/prosilver/theme/images/bg_button.gif create mode 100644 ott.zip/prosilver/theme/images/bg_header.gif create mode 100644 ott.zip/prosilver/theme/images/bg_list.gif create mode 100644 ott.zip/prosilver/theme/images/bg_menu.gif create mode 100644 ott.zip/prosilver/theme/images/bg_menu_rtl.gif create mode 100644 ott.zip/prosilver/theme/images/bg_tabs1.gif create mode 100644 ott.zip/prosilver/theme/images/bg_tabs2.gif create mode 100644 ott.zip/prosilver/theme/images/corners_left.gif create mode 100644 ott.zip/prosilver/theme/images/corners_left.png create mode 100644 ott.zip/prosilver/theme/images/corners_left2.gif create mode 100644 ott.zip/prosilver/theme/images/corners_right.gif create mode 100644 ott.zip/prosilver/theme/images/corners_right.png create mode 100644 ott.zip/prosilver/theme/images/corners_right2.gif create mode 100644 ott.zip/prosilver/theme/images/gradient.gif create mode 100644 ott.zip/prosilver/theme/images/icon_bookmark.gif create mode 100644 ott.zip/prosilver/theme/images/icon_bump.gif create mode 100644 ott.zip/prosilver/theme/images/icon_faq.gif create mode 100644 ott.zip/prosilver/theme/images/icon_fontsize.gif create mode 100644 ott.zip/prosilver/theme/images/icon_home.gif create mode 100644 ott.zip/prosilver/theme/images/icon_logout.gif create mode 100644 ott.zip/prosilver/theme/images/icon_members.gif create mode 100644 ott.zip/prosilver/theme/images/icon_pages.gif create mode 100644 ott.zip/prosilver/theme/images/icon_print.gif create mode 100644 ott.zip/prosilver/theme/images/icon_register.gif create mode 100644 ott.zip/prosilver/theme/images/icon_search.gif create mode 100644 ott.zip/prosilver/theme/images/icon_sendemail.gif create mode 100644 ott.zip/prosilver/theme/images/icon_subscribe.gif create mode 100644 ott.zip/prosilver/theme/images/icon_textbox_search.gif create mode 100644 ott.zip/prosilver/theme/images/icon_ucp.gif create mode 100644 ott.zip/prosilver/theme/images/icon_unsubscribe.gif create mode 100644 ott.zip/prosilver/theme/images/quote.gif create mode 100644 ott.zip/prosilver/theme/images/quote_rtl.gif create mode 100644 ott.zip/prosilver/theme/large.css create mode 100644 ott.zip/prosilver/theme/medium.css create mode 100644 ott.zip/prosilver/theme/normal.css create mode 100644 ott.zip/prosilver/theme/print.css create mode 100644 ott.zip/prosilver/theme/style.php.css create mode 100644 ott.zip/top create mode 100644 ott.zip/update.htm create mode 100644 pro.zip/bot2.1.awk create mode 100644 pro.zip/bot2.1.cpp create mode 100644 pro.zip/bot3.1.cpp create mode 100644 pro.zip/findlatest.awk create mode 100644 pro.zip/findpost.1.cpp create mode 100644 pro.zip/image.cpp create mode 100644 pro.zip/index.1.awk create mode 100644 pro.zip/index.1.cpp create mode 100644 pro.zip/list.awk create mode 100644 pro.zip/makefile create mode 100644 pro.zip/mview.1.cpp create mode 100644 pro.zip/mview.awk create mode 100644 pro.zip/pm.1.awk create mode 100644 pro.zip/post.1.awk create mode 100644 pro.zip/post.1.cpp create mode 100644 pro.zip/preview.1.awk create mode 100644 pro.zip/re.awk create mode 100644 pro.zip/update.1.cpp create mode 100644 pro.zip/upload.awk create mode 100644 pro.zip/view.1.cpp create mode 100644 pro.zip/view.awk diff --git a/botmlogo2.png b/botmlogo2.png new file mode 100644 index 0000000000000000000000000000000000000000..520f68accaa38c9a2407e7ba234ffbaca774cc10 GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0y~yU}Ofeg*ZTD#wYJ$AjMc5kDpCNqx?ldK!%26;H0wXO1<_qXd1LmnTPZ!6K2=}*PZ~2-HIM%%Td%tpN zjcmut&&P$5rH!{-x+QzuF*{p_MWiwJvGq1--kpp+S5E%%`#AY&an12*8{XHrezS;{ zdCnhqlvA8dq+(&?(blvVLQNK)dabXrGX5WJ=6(|?;owyj^DCC`(ge;coHGsVOB`Y^ zmdZ=5<-M%?ny=RVo9OQTi}%&DKd(!AT6JGQ=5O)0*z2|zoEGl;x75`KmF;b{U5k`clw#{ehfQ1xJy{2yCgrDa#RP3pZdHzK2UsBOv9^4m4J0~`;R$v z9WWHHJL(`5b7l_vn~Le|v+lcYjZ6fFVnfbSCM|#{0eys)9t*ibr@oaHeEc#=IuZWGati10MGoF~x)wLJS{%U3l zi+*oo@r^x3{!wMj?&SH7>c@-Od$*e%FR4jfAX$B%N%md-rw>#8k3ZlRoWr&{vN>fP PD3y7-`njxgN@xNA;~vlk literal 0 HcmV?d00001 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: +
    +
  • OS:
    +The mirror was written and tested on Debian, and then Cubian. Other versions of +GNU/Linux should be okay.
  • +
  • a www server:
    +I use apache2. Any other server that supports CGI should be okay.
  • +
  • AWK interpreter: mawk
    +gawk should be compatible, so you can use it too.
  • +
  • C++ compiler: g++
    +The mirror is written in C++, but doesn't use anything C++-specific. I may +convert it to C in the future.
  • +
  • CGI library: cgilib
    +There is a bug in cgilib. At least the version from the Debian repository. +Change line 146 of cgi.h from "extern }" to "}"
  • +
  • wget
  • +
  • Something to schedlue the bots
    +The bots aren't daemons and need something to start them in regular time +intervals. I use cron.
  • +
+ +

Downloading

+
    +
  • Create a directory where the mirror will be hosted. Download +ott.zip and put its contents there. Remember that the +mirror must be hosted at "something.example.com/ott" +
  • +
  • Create a directory for the source. Download pro.zip +and put its contents there. Don't build it yet.
+ +

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 +"/".

+
    +
  • Set wgetpath to point to wget. Set mawkpath to +point to mawk.
  • +
  • Create a directory where the programs will be run from. Can be the same +where you downloaded the source. Set propath to point there.
  • +
  • Create a directory for temporary files. Only you should have read access +there. While someone makes a post, their password can be found in a temporary +file. Set tmppath to point there.
  • +
  • Create a directory where the bots will remember things. Set +mempath to point there. Create a file named "name" +there. Put your URL-encoded xkcd fora login in the first line and your +URL-encoded password in the second line. Only you should have read access to the +file.
    +Create the following subdirectories: +
      +
    • mlist
    • +
    • mpost
    • +
    • mpost/fail
    • +
    • mpost/ok
    • +
    • mpost/pm
    • +
    +Only you should have read access to mpost. Passwords can be found +there.
  • +
  • Create a directory where the bots will write their reports. set +logpath to point there. +
  • Set mirrpath to point at the directory where the mirror is +hosted. That's where you put the contents of ott.zip
  • +
  • Set your useragents. useragent2 is used by bothasar_t, the +mirror bot. useragent3 is used by bothasar_p, the post bot.
  • +
  • Set own_image_regexp to match the URL where the images are +archived. The URL should be something like +"something.example.com/ott/image/".
  • +
  • Set own_url_encoded to your URL-encoded mirror URL.
  • +
  • Now save the file and build the programs using the makefile. +
  • +
  • Copy the binaries and AWK scripts to where propath points to. +Unless it's the same directory.
  • +
  • Go to where the mirrpath points to. You may want to edit the +following files: +
      +
    • np/top - the newpage top.
    • +
    • np/end - the newpage bottom.
    • +
    • top - the indexpage top.
    • +
    • end - the indexpage bottom.
    • +
    • post.htm - the post page.
    • +
    • info.htm - the information page.
    • +
    • update.htm - the update page.
    • +
    +so that you can set your own title image, links, etc.
    +Some lines look like ###this. Don't change them. The programs will +place their content there.
  • +
+ +

Setting up the server

+

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

    +
  • "/ott/log" should link to "logpath".
  • +
  • "/ott/view" should link to "propath/view".
  • +
  • "/ott/mview" should link to "propath/mview".
  • +
  • "/ott/update" should link to "propath/update".
  • +
  • "/ott/index" should link to "propath/index".
  • +
  • "/ott/post" should link to "propath/post".
  • +
  • "/ott" should link to "propath/index".
  • +
+

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.

+
    +
  • parameters with a numeric value: +
      +
    • -i - the bot ID
      + There can be multiple copies of the bot. Each should have its own ID. They + have their own tempfiles, their own logs, and their own memory of what was + the last newpage. The bot will refuse to start when there is another bot + with the same ID still running. The default value is 0. Don't use the value + 4 because it's already used in update.1.cpp.
    • +
    • -o - offset from the prievious page
      + It determines where to start relative to the last page saved on the previous + run (of the same ID). 0 means downloading the next page, 1 the same page, + 2 the previous page, 3 the previousprevious page, and so on. If this is the + first run, it will start from the first page. The default value is 1.
    • +
    • -m - maximal number of pages in one run
      + The bot will not download more pages than this. The default value is 1.
    • +
    • -p - distance from the last page
      + The bot will always stay at least this many pages away from the latest page + on the thread. Default value is 0.
    • +
    • -s - start position override
      + The bot will start from this page regardless of where it stopped last time +
    • +
    • -w - wait between pages
      + Time in seconds to wait between downloading pages. The default value is 3. +
    • +
    • -v - wait after download
      + Time in seconds to wait after downloading an avatar, attachment or image. + The default value is 15.
    • +
  • +
  • parameters without a value: +
      +
    • -d - download avatars
      + If this option is set, the bot will download avatars.
    • +
    • -a - download attachments
      + If this option is set, the bot will download attachments.
    • +
    • -b - download images
      + If this option is set, the bot will download images that aren't avatars or + attachments.
    • +
    • -t - stdout
      + If this option is set, the bot will write to standard output instead of the + log file.
    • +
    • -n - new log
      + If this option is set, the bot will replace the old log. Otherwise it will add + to it.
    • +
    • -r - stay in present
      + If this option is set, after reaching the last page the bot will stay there + and will also download the index. Otherwise it will continue from the first + page.
    • +
    +
  • +
+ +

Commandline parameters for bot3

+

bot3 (bothasar_p) is the post bot.

+
    +
  • parameters with a numeric value: +
      +
    • -w - wait between posts
      + Time in seconds to wait between sending posts. Or between a failed post and + sending a PM. The default value is 15. +
    • +
  • +
  • parameters without a value: +
      +
    • -t - stdout
      + If this option is set, the bot will write to standard output instead of the + log file.
    • +
    • -n - new log
      + If this option is set, the bot will replace the old log. Otherwise it will add + to it.
    • +
    +
  • +
+ +

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 0000000000000000000000000000000000000000..3384df34be5926db98693854fd66da017ec9d013 GIT binary patch literal 2168 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3275b06d525af8176c4d76059a11d1e6916cb68d GIT binary patch literal 2126 zcmV-U2(kA^Nk%w1VPF6<0OkMy?%Ut!)!Fvr=lk*V?c?RnV|><#n%Ih*;kv`-zsTdf z#q!kK@8;<3Fn|6>fYYr-rwQf-rxXg#sEu=#Ma`-*yGCCwApXA+H$wriOA@T%IT2I>gDtL>-PKk`S{7k!pFnE=H%k#+9<3>gnm}=;-K=kB?+zWZ~lFA^8LW004ggEC2ui z0AK(z000O7fPX|{U|WWVh>41ejE#n}-l@ zTyWrkLy(6QGdciJF`|PuFEUE_08yiZ3q9JHbZ|hWMvE>XPMq;@hJy+hAFffeMkh~* z5B<3rI+Wvw9ycmz80vsTkEcD{P@FL|q#G3up3bPyfoW3`9ULsBNTMtWs${`B=t_~O z%?d;RXA)(z#?KlzbnUVs>c-!jzkfplP7vX*0~LS`M~EQgjbN;RZTfga5pd~SX;TsD2GslG&D$qcN2I??}10(1l z;twCTFvkWJoZ!G5Dq`4x12lXHBMl!oaDt2@}_kur^-* zkQe$x$CFPw00WeCNLl3xR8~190T4{!039kq34;R!RQY9;6PTH$npsk`rkh#5fn*x}n2N1ZhgAE1-P=^B{>|p2)gSwEX3>4LYf&+%S0Ko@&Hd^TfgAy9TrZQxz zr=ApTx~ZU+ehSB&NuCDBr~cUC>Z>9^Kv4!fxVjP$4j}Mq1`gQaLPijX@G3>GPB4KT zD+x>NtG1dX1G2p`YeyWY_R&Wib1>`A9o%;7?YH2DEAF`DmTT@D3Ys^^xBlSa?z`~D zEAPDY)@$#*_~wg;KY8@)@4o;CEbzbt7i{ps2rT z%pH4l?D5AShb;2QB$sUR$tT~j3@c@DjPlDc$1HQozKn4R7i5^C^Ugf?Yzi4%sPab< zV=xoR(MTt)G$dM#QN$mAC@}>TOjK?4)mUe(_10W>?e*7PLotOCeZ z-WgXtImVoK?)m2xm!WyWq?c~`=?9B0xx8_3Q^p!|;L*k>v%~K0>_Kf}MjLdBn1IG_L{Bw-0^kU|rBzufO|1Wg9j*JNJGW}4vJ*q1#18TT&9qO5!6Wb?023wc+UX>pwM|j zX#`TLAzjiV4NiR5QNVuT$YS|6kp_R3FC1^M zA8+U>%1x+&Jeo^P8bHv>2Ac4i60D#FU8#ot9n^yh2qXx&p~Z~)@0=^N-)ktM!V;jg ze3{{BJ=s`>*JzF}Y)C^1BtVe@EP$pa@m>!0a)wo!Pb4L)NP|Sn;07~L;Grv#pBDMT zO9zN^h-7`E5!Sj^XOLBMKv7K^j_3+Cv>}?Fh$b2yB8)P?!jD?L>n8R(S2N(X6Myw9 zP!7w9#O`&mpm;1qq{ooTTK2M-RfzQX!P(Aw_Otqs9y>-$+R~a<9isai8n(gO*1Gn! z*FXd0=H?1y*!H%#4nouG*Ghg(e{34@ii@6TrsY<~sMeV0%IojvEL7 EJ6a7+7XSbN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b08918a24f3c8d82d357b6abecef1a016f54488a GIT binary patch literal 1923 zcmV-}2YmQPNk%w1VORh%0Oo%H|NsB#>FK;GP5k`)3Xagn!@v6a`uX|!`}_O&`1tDT z>g((4?Ck9A?d|vX_wn)Z=;-M5^z`%d^YHNS_4W1k_V(`X?(gsK+l`H zgviZogMop8If2InNUbj~FM@)C*MF45MPuo>!~#XD?Be9e;qZflgX`??GBPsq)Z5Q) zg&rP1$yIUHhnlRctn%pV&1-|@-PKk`S{$SuMm;Z+Lov4*4rMJ)X{p6 z%*e#UL}KKsxX8r8?b_dc!{*R#hIzr|-L1Iz`1i`<@y=s>*p#H}&eg<4WXfN7>g?{* zdywO^zKqK0;_~^(Q*V&W>fP`7;osfm$j{Bm#>~mZ_xJYt`T6hM;Nafe=H%k%)Y*y1 z=p>reA(_41ejE#Wbx8o5oSmMZprN9pq@|llbyHbr zMF1ZIu(7hUw6(UkxVgHp9{@#YPzJBN#Kp$Pv>ygg1po-o(9zP<)YaD4*xAznh5!cN z;Njxq600RmfNU)&6emoK;G`P=!!-o(Z z2oMm_fg39&N?398aEKKzCA^4vIMHF3jAACL6tG94N)2DSRCJ(2hme~!XFl9lp{LKE z6(#~5QbK?a9|B4YsW7CB(J)1s^b|^^s1lbcvZfFdR6tgzCAt8uU~`9AAv(tX+()6U z+qV?|Cc;I^q%9KxVJL+0+Lnp{FKs7MaauR70Jw(TrZ9?Fg$c7eOsGKoc3*_cm@`M1 zsJVuKBbSc|s1d<4Xw91i+!4SBGiS}OBZwY>TEz@7xM!$9oq3;x-@t=Qm?)e$aN@>= z4_6sw$nTZLlP?!8*|CZ0CX@r;_n^D??++$|_uQm=lhF^zd*>3Q`@|cGKfM4EVkGI3MDGI&jmErXyXMFg`i^ydVE+Rgd^Z^0S-}A_ymYb&^QtQ zjYyz{KtvQH zM3JVL6OBoP0DD3gf|)9f@I@MBTCk#vETT~8nEN!~=%bKED(R$@R%+>`FUX+jrZT)x z={^jED(a}DmTKy$sHUpws-^C;z^kyvD(kGY)@tjmxaK#x8DE9|hu7HjOW z!EzH!0|7Ma?6c5DEA6z@R%`9G&o;0OD*!Ny?YH2DD{i*F_;CpwZJ46&y6m>=NgHrX z(Z?Tbys<_k_~xtczKN{y1{;6;VT2uX5Mc1Z2q&!Y!VEX;@WT)rJck`d{6WV55^@;f z?#3K-5u5M?LJ)L+fhw)mUe3E7bs`>cA!rkov#@B8YIn1EP*SfCvLn z5bD-M6Y-TMEEL-9B0Y2ODUh!3G>u&_DzvYyg4=AlQ(A z1%nF!Km|Q0Zo`=vWImAwTlC;~q&M6E!|JIE&h(;;5))nFGLq?NVfp!SWc`pgab@YtX|9WvZUT^)TE3yO>;m2`1q+8jw5x3*WFH01XGw zAOHpi9KeA9AoMa32fwqBK=J-Wfd2p(+-|^)8Gym{asY!2c&|oWi;;{7r=SmjKmZ&# z!3o|MzXwKe0tax#*Cz5i44kcaoX8*pC#X9SFen2n(1HqAkO2iIh-(Hq5aGO2yzUfl zh7UMFKO`VJ_>n+=XW9e~Yv>&hWFP|`Na7Ja5JMX>O*`8m9B>>6!M0G4iX5PT1Ps6e z4`z-A>Z5@Hp0~U)N|6Fr3=R@kz(zJ25sExy8gDRDJa8aje9ti72JX1NXY@b-K#-s2 zYA1l?5e^*pJ0$;Zhk(o=F^P~g;vDtIG|ISzj2PemA#tZW5+s1&1P|Om@CqqH%^5%n zoty~sn)kdd=#B#kcncC^KucO0(UKJ4np%9)!-?1c0fW(zW~OX4w2Ck`3FCkEhv1FVg02Y84%%O(N@gmV+*G$#PW z=?PfiO&Jx5!4da)#2A2+YX=FaKnF@tfpRS$2u-L$7g`UlspFv#ji^M;u{4+sKpPm% zs75zRjR6FWWUfGlNJmOiUI4%hSGbrN^5C(Sx|9@oFvAkg@P{*8fesPNsZMvw(}dCC J3N#G_06Tv4yea?y literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5b7b1e0e605dd5aed90d5c0067c15c3b480c6d37 GIT binary patch literal 2737 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 NjtvP)Xl@_?06RStF?j$0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..53374abd2b60832248210cfb1e251de53069f790 GIT binary patch literal 2749 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 B*6jcQ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ec190118fe5be0251bd9a36552de1b5fa0c74cc8 GIT binary patch literal 677 zcmV;W0$Tk?Nk%w1VH^M`0K@Ew70gh<>cVxiju-eC>9CEV@a(plgb6-a8M|s8LOBwdOS3S#=+qYn#W6X*=$g- z+Xk})fnZP&2}}qQavcy54^R(YUkr#I2oVSyd=Lf*9uG8zhY(Fq2??4Hkdh623w)WI zov8~DPYACNkbMsb2DzArBN4s`9b9dZvcg2js%GiuDZuYt#pAVZ4$SfPUm6ev^wn*89QrOTHvW5Q(V;eySZICJW}>C%GF zpFo2O4cgMD1fL9YF*s_0sZ*m+TS}NJA(VgtLM~9<%9X0rsZB5hAb@pg*Rv8@ZdhyJ zLID5*$Qqd1scwZ%8`64MyTO2fzXarNm;hkF009sN5P)zsz=REI*Cq`dSV+Xe0R|Kv zFjn*9mL4r8@M}212784$a5j8ZGlvE(FS-Ii;L?Hy5jGQ`V3@4y3N61)7*t>^Sp*ew z515kpDp>#!IJETjtT^1tjxraB@IbTo0Nh$~LlB_A-?(xiP?!=yOaxjUXc?f4{`mX4 zhcwk~`GArE!vJE103yc}Xkbf9G?3IHCAmbQo*3#Z(b5qVR%irh4rHj|h8%XNA#60s LB;tr4ga80L?XxS0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..19006f95a7b5b7fa8e6427210f9a45f041963b9e GIT binary patch literal 853 zcmV-b1FHN-Nk%w1VJZM90M!5h`|bBDowvPSHL(~&2@^@ev{OO znbnY?*_EZ>oUGHCr`4OO-lVeRs<`RN(c#3)?b+V++VE+uF~Z7 z0AH~KQER?d|RA>gwg?<>TYy;Nalj-{0BU+1A$9&d$z{kB^0gg>-auYHDg$R#r+% zO55J!A^8LW002J#EC2ui04e||000L6z@KnPEE41ej4E|HLKZkZJUlms zjhUK=D3CNRlrcOzEGwoE1*ruAEUEe^ z5C#d!3@ieu2@n;+*ttR%Cn>@&;4j4C-~|le3I;Fc;q2t#+Cn-gF!lBet^zOx3-$Q> z{p#_vM=;)xc`*_y#5bW~LVgL;#en#5fx?Rh=gHW}5#NK45@fs@@W229kqbETI_wo2X;B5__39yoXqu>r=<&!9txt`i~>3C$izSb!;`#T{Xnq|<^ zG+IF3;NgRb7&2Z&a1{VWO%}!@7ujp3bhxov%-7}76BaK-wXc1a8V5L5fK7C1hKH4DiWB- zf`j`Na2^a25>!uuLoE1m&I;QRAfh7{ni8OSD-c-XI|R!2!-Cidqr!IGMeyA!;*n=w zFgwNwn~MuhD5MI*sZv}`Bu1bDa@;K`z?d!?mAo literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c3708a1477407397362a5516d5fdb73d7f5cc34b GIT binary patch literal 1109 zcmV-b1giT-Nk%w1VKx9L0M!5h`|+Yzjs$Pw^ zim=iEYQ+F$yZ~6F2T_tDW1KUH(JyhTQI*kVp3iWo*s{*%%-rhT>h<#T^VHPS$;rt7 z|Ns8}{{8*^`uh6#`1tkp_3-fU?d|RA>gwj^=Huhz;Nak!o12f1kA;PWW@ctmQc^`l zMcdxvA^8LW002J#EC2ui05$+9000L6z@KnPEE41ejEXyZF+4pQE-frR zJT)&coSmMZprN9jf;&GiZage88g4r-qp`BFEvBeEJUK9}xHT~`4F?4a6u$)!#>f;4 z1qTf=5CziGG1JYz*fF(U8n`PlHn=)3G64q<0t*N-G6ezb?lK4q1P=!R6A%o?0__YC z5c;tjxDCgQ7nNqjs02gCi~|g2%#ct(zzla1-9?iik--6p0SZXG7+|DHiQ9(kXhEZ; zOB(K6#*7IwKuDK2Y2<`CZNba`mMMj-tUgfG7h4L_-!W z(13sh3K@*n2>N5Cjk9QNG%x@`K>-A36C}__)dm6u0w5S@aJE4Kv;`PA2p}NsS+Xl{ zC|<1iYJmg>D&QcHpuk?m65JwP9CEQW12`DpK->a{>C>o9LrBfKwd>ZTTU3}$yS8K; zwsY&=ZMzhaEscT;ACBlzku7QLJGtcSRe`e!7#!HCbR&<2_STk z0u7>7XyJtzGA0NKr-0!9K?f&T&|e24z;J^ND!kA_3>3=Hf($pf2qO*Jyr6;&E+Uen zAT}~)Lkk?X5Mc)-c=tgE64oF?FvCnRLkk5w@MM%TOu&pYDm-9K0Z>kJzzc=}=>-QL zqF_M^BM=z_1`Zq`Km_Wj*pv!TI`G0g5eRUA0{}d*&jS%a$-o1E%3wnchmOTz1y8>4 zLJb(e0Lu(6Kor9a0~8QwQ!X~8?wjw5+57?nLM^xu!3!~5TnWb=tJuOOzo^Ku$cKQ8&BPAQ;_}O$Y)AwL bt{Q0bf&0yz-_AVuOkd9D1ub;YK>z?d4CnHx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6b571ffce0d515170d728074029583feeb3f08da GIT binary patch literal 423 zcmV;Y0a*S=Nk%w1VLAXh0J9GOzS!%9$Llq&>k^~uAE)c5(d$>Z>p-#VZNTfC&g)FI z>$BDCkjm?M!|Tf2>i_@%A^8LW000jFEC2ui06G9V000F4(8)<_eK_mQyU$h_eq{NH z=wz;JnzAtIqH)d5qOD{2xZ6F;4;Z8jYenM`mQ*cUD8OMbKwO?H5kMedFa%a5wiId* z01^g4I3`yRhe=?~Zl5S~bb)}77Or+46$S)T23rFSb%8e&2?z;W1OtC)VvHLWTLN z{^;3DK%osg_C9<2@%H2APv3l4y?Mvo2ancl+4=wf|CJlJz5Du;0XICMAjY5r zQUbD*fz@+CswH=jVvlmv`H;Quzw|JzInX40fZ6mw<1uZg1p-Rz*)}CDu;6u8RCu^V lg<Do>+gcbHtO1Z@Tm=9C literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..be039fcde28e1e6b73245800200bbdbb38a44e61 GIT binary patch literal 546 zcmV+-0^R*bNk%w1VH5x;0K@&dJrZBht~$$j8Iv z?dT>Mgf2$7LAPp2T)}J9taDLjE)coTTulE2#$>-4;Bv|JY1b- zjisce2vDC%2T=hJxDT%#0S0iP4LotVx*ZJ-9R>jb2*(`{0mjG9($o;s4G-AV+uhzB zA}8V{A0Hm)=;`X{=I0t7@A2^S^6nb<_z)Ih4fy!>{va&a03bkx4*uSGP{6REg#;TM zH~=uAA;WVP8CFQ(fB}OH6)j@SXaNBRj~gPNWIP9hNaWZB?agN+wFcFgdnXoGXuDrkuKF#`q+03u8~N6dl%suutN(12h{o&a}^eF;E2+L*tZeFEC5`A1Aq$?5pZw}6oA|?=Y()D kAU3Xq$yp~;5ONO3i+!B`0ua#>Wt9O%FoWp)zr|@(9F5Gw70gh2@YEZ6}QQNy| zjd(`S&(F5Dw*UYCA^8LW0018VEC2ui02BZy000I5;Ma|0X_Deat!(R3*Z9uvSlxK8 zsAqqdynuYEx=>1_XN-5Lsyh0zr6p26`h9W^`);mrDi%dk_%-b!=ac1`rUFiF1s2 ztO5s{ryZsN2DP@gwE(6g5xu^@z`i36#Kp$P#Ul^P%+1cs$_Uca)YS+N9U>>&B_AIi z;Njxq;olw;=;`X~6X6o?@bU8S;1UTDartHYaSjO*;O-sZkbxk<3o!2pGn6*5Sa`O=~W z3_uMiKmZPb0-Y>1xV-2xC5LAe=qA6D-iXZiQX|r{Wc^zZ_tIJECAg;ldIXFi@<3!jZv8B1@he8QhM`I*QVu NLDU?%&*ee@06Y2#?CJmj literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..48a09373ebb2fdf4404a8de6db6b8616ea895d0e GIT binary patch literal 562 zcmV-20?qwLNk%w1VH5x;0K@o z`-GjnyTs1{OalP_007zm0I2~62nOHZ+u7OH>+9+90m1+fPhw6h%-7#AJI2nHSk1DkZT2=O+%Q2vg9scV zK!6Zo!oqzXE=q{t;DJO34jNq0r%;|k421-*KyVPD0mugYCS1TM5JSrd92>ZNsB^%C ze=!3*c!^VDgrO`o0OgQ@BS@AOEF676k;6}U+&0{dV4*^VqBsp*z}i8=fCvBpMDXgg zV+0Cg31XOlRxMbUFEb33OCdl}2M}E1eBhD7UPBou^c_kOZ~y@TD8P^>NkRs^6bTbh z3}b@4ED|Uj4e7zJWYC|pNcQU?vEn66`Nk%w1VH5x;0OkMy?D6*6N zrFfvJcd@*5mzsBri+8-bbg8FulahD4wREK(cIkG*Voj>#>4;nHUIDz+s``w>O{!7O8ed-+s9wQzOUHV(#y)lcbx z;osZZ*weg}vXWf2mSMf8gwMaE|FcEjqe|AbhRU>)&!}|cAh3*m6%V!v0|U4V9xIEZ91_9|2zvpzyE@CUi_Oml0Mob) zG1rV76vC(m1i2AN;)@{}<_rnB3LWe{qdp!N5EH`%4I+5BmoEf|3J4b*aKORC2Py3s z9kIY7M2sCESRj$|3LiE`Ot@b;0D$89Hy| zbg8k�V0t!>oXj)yWDlXW+O|{v?HS5;DAyZc_dF@#J!Z$SCo=wTl*FvWi)uga{k$ z%7x4TKg0|kDokX>#0pDHaYh|!%#qs-G~l2{4o3hHL|8$r;6oBbaM6YuUZi2e7jbOy z5)dndwL%pw6j((bONekn6ezR+gJ@Nh=*J2`fT9EyO01B>9wMM11{F;(0R#|N9Z3aK z6?#pf!;dPc-~t#*_|O89e)yneC`n8K#11NmAjJ`2@X&*nS1qBYno58{r5G{90D}@r ktVtK0bSB~E9Zb03LKsQlxq}~8U4<1`h=yh8AAtY>J2fv0)c^nh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b82253599bb00d665e3e626999f546159fc701e1 GIT binary patch literal 588 zcmV-S0<--`Nk%w1VH5x;0K@#G+}zmI)X?hc=+Dl{ z!>iq0abwrBM6xDC>|FJ zI30z4K#$K=OBF;NVG2Nfe^C`o2m%KL19~2GbB_j#1qKF>g$e~3WeWue2NeYenW&uz z85tuB7?}i+UIqecMUAc8yy?1&T4LA2xZV4+|jNK z9ytuI-P_&g=+fNg=N!-EHUFa&&f?_mZB6(lIQ@Bl&tjM*N^3iR;MB9j0N8bEN+06z@Z@p17Wl}h+vm+g9Hiy0JxBW<%KU2W(vJaGXY`%0xpnc zQMaZ{2Llc#P+UOsq&OOC0%(v|XioqOG;kmr=Yj^?4_x;QkU&G6do)zo)}R5x0yxBF a&-So`28-Jlc36Eu{l&q40|$Nx0RTH3g!NPa literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..83cee9728d7cd0cad1ad53b0148266c353d614a7 GIT binary patch literal 590 zcmV-U0{ zs(6#OOk8o0sL6zmoZsvFey7=2Y=>ujmy5XUt} z;^E%U&(F5Dw*UYCA^8LW0018VEC2ui02BZy000I5;Ma|0X_8{bVc6QTZk&zWS|0|r zNK{g&Hd>8SpgfL`L13`3427H=GPzVLJT>8=VLVV25y@cekZ3p~RUy%M5F`?XVkt>T z9J5X)(?}>16cP~;0t{hr3}|`=4G4k}3KTj50}+M{c^L)?2@47cfRYUgf(#5ABN`SB zeVz#h1r4#Kn5i9|opK2itYD_6sTvLo#GVR$zNTiu7I1QKWtP7e8W+LQg0#OC)Fspo zmeRir+|?u27wH=kzXJ>s7U|aK^70!M`0@4g`~CeRB2J(~XX3*L4+s+~T$u3SLJJ!9 zNbF#N;RX*IHl%9+fq(!ApgLT*coE|U3mrJiN}4bsfJ*`eMwZN&lFLdZE&~u~(4l0! z4hkSpfG~j)fSd#n9JqkcLWTqg5EKOfK!5<30HP{5&@{sW0$?EspsHkmRRjV!Ak<($ zfz>erCUhJFU;tGNYukeLhyVgnv{vil^}zNMSOEke6kA|*?BFv|_X(tiZ!NvRtGU;)K)SaiYtgY)SPufswNo%@OdAx|A z$7qhg!_L;O#LwX1+vVlq+}zmN+11t6(aOrl?Ck2$&&tov$>QPM($USky0*EvwB+O8 z85D+M%XN+*5XWYrY(TV#v>NgShm#9NM4_aR z6YNf8zh}S|2?`W*2n%_9d{t=*4tsQRBNCF69d|I2bPp1dladp65t0}R3ly6j5*Voy z9)ODt9it5q7$X?B6@E-f2@Den3#qoZ7#0!~$SV{N9SXA*BNfuq)Ya1?7TMa{+}haP z;M*M{C*>s{A0F!K?CtC69vboU^7ZuW8u|MB{QBw{00Rmf7*O4W2yWbTAXv~t1Ooyh z3V=u;7O_nhGN{8qfWU!>1_)#bFrcJK0ul_GR*>{DBnOfpAsXOdaKZ!(5LyO!FhIb8 z0xciZv?(C~!~+8i{KU}n08J0uDnuY4@qiNuJqbYANDPAtnGIk(IAFko19hGD0Qh)d z0t5*c1{}z6K^-3m0ANlW5CB<8FzVbmSZkng;R8Db44|;pL&66E)D@Uq00V^q1szPH literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f51ffc24a66aa8374563b0429def4ea73a2caa80 GIT binary patch literal 528 zcmV+r0`L7tNk%w1VH5x;0M!5hzAH`GJz?T*iROcv=!~K1k)`y=()ZTg)i77mFILSi zRLCt-#4J$3D^J!oT-{c7-(i2{eU|R5yz#on`Qz!9mzk)ltpET2{{H^`{r&v>{QCO( z`1ttu_xJYp_VxAk^Yioa^78QT@b2#J?Ck98>+9<3>gnm}n-&(F`y%*?pBxUsRZudlDGtE-`*p^}o4i;Iheg@u2Ae|UI!c6N4kb#-QD zX4~H5A^8LW002J#EC2ui02BZy000L6z@KnPEEQ@5<{(8sk!Jdm&t6t z;BYrb%xOC4v>L4;Z#N)N$hM2mcBc5oEzEI7BQicdJ2ZnhfE;{3IUXk`CKZE&JC7$G zi#Z=CoG3bzohTofAt@>_w@Q@RJqpJ_Hf>`1t}p^FuxY z5D*9)NHBl`A4GgSAjojw0)+k+3Y0)WU;zpN1U^hCalnNO6bgJapb?@Fg##sg{8+Ih zM}h}d65JRudrcNIY5;S$lK&K=I4YF$8 S3V`5CA)xnhd7^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..af089d8656eff258d13e35630d5843c198263f1a GIT binary patch literal 501 zcmV_{rvp= z`uh6#`1tqt_xASo_4W1g^78QT@b2#J?Ck98>+9<3>gnm}J)YaD4*hdyS+}+;Z7DPJ{5as6QqFZI?+pYP7zGdS z3wDHK=dJ<<3KaMWm{*U;J$(cOJmBXb;J_j~+P#ZlumD3O_Y4f+H$i~KBpDGvH1ILW ry$A#d7&tjBqXd2}hix0+prSw$YAJI*+m;}}&uZI_W?RZMNe}=#(S7ef##MOPBup_wU!QUr%eNy?giW`}gnv|NsB|`SW2N|5JLw z*UVy$xTPG^4ZNfucEuq4<;$0U|Ni~?%n%-?e4RdId`TlKNVMT!#3%NPQbmi z=IeGzZ*Sc{U=jIb!=8QGzE=&xTU%Sx($au#U?2i0{$ycfU@&IT0jUM~iGl6=ftdv! zI#T@}$_mGFtmZN#`8ceNT5Fi8V)UYF|Lr#gI}K;>_ME=Cq0@C~Y>SPqd&$uwsVfeo zZ~4KhnCEUNBqSgp&(qOX;p#0ZBBG`~NwV3)P*_-5M^AZnpO>MGLYIQf3{S&a@tQ^M z-f~Jxa;rRz4Mlg0Zt(DymEFF>*!%F26DLodK6BQc(dgo(%a<8lj8s`}-M({6!{|CU zpTU!-&$u`rIA7p@CMNcb*XY{A$4}VVpT2nI^5*G}r%x_wD>=(p3aOlU>->oSm~|1; zWD%L=j?6u+o;MO1Bm~19MSmDPYTCxc+}3wQtxJVX_h@(J=>-Q%+%~JNQ(&+L0Hwa& AfdBvi literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a29dbffa35b6e29b3f4bc03cb984c37733de9234 GIT binary patch literal 186 zcmZ?wbhEHbESeik9aio!&ggCw3w0OZaAKId efQzS!(W^+NO`FkkA^*1&o@Und!JMW_4Aua&@kmkt literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9a70638650757f26e65f15d58350abcd43ef939e GIT binary patch literal 144 zcmZ?wbhEHbWM|-FSj58c|NnnuW8<{6w3#z!0@(~Op!mftIS}0tioUo0OwgP7XSbN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d79d31ac43e29f51e34c0cf43f91ec4ecfc3c3ac GIT binary patch literal 186 zcmZ?wbhEHb-+!z|DQj9{`>du*s)_@zkYr4?4m@Mcle&@Hje)@$00s?2x&QzG literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9c4ad98e5c2db247b94fa65fbd1f051a379b39b3 GIT binary patch literal 481 zcmZ?wbhEHb6k*U{xXQqA!!GGzX6xhP-e=9TUi2*da^lkWYj>|2gkRDRJF6FRP}~22 zw%>K@g!_s057Jv6=5$P(K6AyYHUIzr|M&0T-@kwV{Q2|i*RLNxetiG_{oA*1U%!6+ z^y$-w4WTv%9GP*9McpP!bN=HlXV``%*)+(7Xs3nK%A8G{Z; z3CK?jZ2uf)7kKDM^`CfR@TkajitDqKM=gA@Q*@4|ZZ*`F@L9@L8mY74+RW7{aaLO+ zo;$hiGMX9SD|TpezmJrXlCe&+RH>_;w6wCazHVPny^D{GimIx%)=U+dPA5HCS+%96 zrc2cpPl?l$Q`gwIe4~cCT&JGAyyl+0`*uyyQ#gF&=+P-YzNb!~_K!V(;o_ys7X?gA z1TI`-VZ3qPgo&4j(s@oGzc>aj1?@Vv_bJfyXY*VuyWg9von7=;Up^;IUxA($mv*#m@*Q Sy`6P-wz+oD?VZLP4AuaD&E~8C literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/imageset/mustard.gif b/ott.zip/prosilver/imageset/mustard.gif new file mode 100644 index 0000000000000000000000000000000000000000..347b1fcba8a1710bedefd8423e3ceecbc90b3af2 GIT binary patch literal 1716 zcmcIlYfKzf6#ixz0fp8WE7BF)p=lbT3l8-~gSD^=Y`3NBW`PQX#4NM3Ffz=pvyW0F zO+#Y~D3(&vm{vpjz>sK+MjJ6U(Hde&q@fK`H8wTYKcex8Au-a7=k6@*m^S*$o6OyB z&iT$c-?_W@tlLvlwk5C%d6)xkvthgE(Op&W`L~6i*qVsPp4SWdy6))f#>l|~#|Fh$ zk9uEw`N20%;N9^ZlV>pnOqDz|RbD>z;p*x4aOo^APhj>0zC7-@HkteFXPBSGFV|}p zuHcWav3MOz-(cxGEX~6(4EztP@K64BU?U2RC6CMHcRSssV(Dh;OAJIJs!aeowU|zJ zp|Po1$odL4tVIs&$O%Z%NTttL%S18m&EgiXfMeF#;#>P~j<8sAf>Egx;IaYR??E{# z0U1l=54VvJfM@mA?1@EUg!eP7oAwcgTTMKkwAcGx#5qTJwG`1Af0}Ta)E)>@pFCkl zn_(ffT5zWtr^3l~7wx&S)=)>En@H3?Ia-~0D*TvbijL3li*)OZLN z(Q`GV*EE=zdq9bK>P>9ht*PGH6wcRLy-yLQ{2U*NIsGZz8%@-)oJsq$fgL`=cH;Ou z!aEr!kMvY@x7R;yVovRDcX?Czb3N{7bvF>_Ohiq7VWiFWDVm@{h5`+;L7Mdz?B%;8@tFRRSdu)L;5mY-=d^Gl?*lDsO~$l6IyvMJKK%rCa8 z3u#046_3Db$i^Y>qNPpQQmPoOl#sQ}+D{Nx=}k@+TrS6?q)VlbkGL0l&gHN8ggJhq zWj6Ohk5vwdUyfaF%RFk5@pF)6MmQuR3QA`p|i=-vaa zaAdEpw6({C&7%0YP)TD;7Cf3%;&KQ9RTYxHsG!SHSx?Bp5=27}(=epPOn@@z*KCxN(|9Tm?Q>*^LL-{{k`xD~2Q6^X-R+Cx6RVN(P6%uN!Y{5eM4N zzca5EyfC)k`FcI?uFmG04>_Aop1-KQziOlFbjw?fj;u^{#I>-118R1M{iTln1hR$f zfx;td|FMBSsB1=X|LE~C`&i%bSmDTv>MPvA#M=Uw(euH+jLbVX6n+%`B)2Q`?zQ)= SU$=g`piA$++&@!^^1lH9`g5-U literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/imageset/mustard_smaller.gif b/ott.zip/prosilver/imageset/mustard_smaller.gif new file mode 100644 index 0000000000000000000000000000000000000000..02cacfdeea9f6dc518e1838285c7c7525a237187 GIT binary patch literal 1662 zcmah~e{2(F7=ErCZe(?_h-1vm+-8_#X}8;4WP~ucwX7CKtz~6{Xk2%_+fHs>y=#Xo z!;Gmhgeh!baQX)*UC3{)LnHexmrtFBkqY;g~+X=-1Qpemj$UdD8Lcx7^i>k6)j{ z%ukq^c9@qr^9E;{CR2C6RWidb0BTWU-VS)ZVSkgqTCA=C=8MrpLURZ}PdurUU1;C9 zNyzyD4lF?)ijWtTj6`E7)WRw-?%kDcT>!_d=RNoK-yLDI*#T8av%my33%9FMH0&oUDAs%)&zU~VWD^{pj)B?nz`6SEs~x z7tMJDRzo)54BoP}DceeU&`Akd+pPUQ!WzBF>4LN6n3Qa(?C}wIV&FvKoKKkIk3WCj zIWb_DL*i#+XWO!lnzdy=ddbGKAGXXt##i$JzK&l3fq$BB;OluGy{+V1<{~1bP{kI~ zt&{pF^$^Ea@@BM}|2bV)_l3x}c9CsE-%CFG92fV$B zt-9LPofK+Bakrab8WumB=1sbT zIitXx5!3wVL({x-kVISp#x-{10rtOu2ih9m3tfMxNG+Xw?(Zd@N0+vK@owO=_M^_T z9sQrQS3SIadd;@BW4XRlfswkJuS@F-TVi?7Xxw!7HCIhZRaHritH8Z%*%L~^0=GC? R?a8Ul&vQB#7S=Xm<-eK)Y_9+S literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/imageset/mustard_smallest.gif b/ott.zip/prosilver/imageset/mustard_smallest.gif new file mode 100644 index 0000000000000000000000000000000000000000..31753a7b6096d716d65edf2724537e2486635a8b GIT binary patch literal 1516 zcmah}U1$_n6#njZLXsvHf2!TCVn;^;#~d-JkXC93c}aQwh~#}Cc^d_OyLZ0flaQ!kvXzL?(p<(|&3M%bmZb1sce z|9Wrqn=gXjo~yWWo?W>( z!g{0O<^C5Ve3qJwt@Z<~3JCm@;kF9A@s#|zUJ?RGqTbuv@@Ag!Zh|TujNKh7yT|GQMQjw!Xe@$x8ynmXBO#c+0obiiHDiKqc0LK;+s|>DeBHA&WNeI zAB?mGe!vFk;Lu=zJG9A2B8o5?V8TKUS#oJa(a6dLiL4rIY_7 zSx!hPmnt70aj)(i3zmHHE$Q;68?{$=`sI-L$=J!ZyrULv`Hx=p@%)F)rMXg*6qA~z zWss#+Qj4@wYNNO1QfDcmhZJhqM!GFhpQ0WN43f8~)p_o8;oUd-)6iXta)Vo%DvKGA zuyR>V=dQ!sUgP#L{|}1U;`uigfb%x+&WB~&!=yV$*sSrgE&nmF;!m0hzm#otbR}k< z0xmCA3)Vof9%DZPdA^9?8lMR6Kbwpl3{>n3?5<{5{vYvbI~@Q3 literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/imageset/spacer.gif b/ott.zip/prosilver/imageset/spacer.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd29009a65a4c35c56a9c296731e1ae8650fd789 GIT binary patch literal 807 zcmc(ev9VP_3`6y2UO*edqfQtYvn%VZ`yDQgw4er)UO?E4 zG}?&ude0I+aCWBTh&{G)+1Z^EH2%S&yR*F@2^#-k(M{6WB}?Lfl40@y3ddLk8ZD?9 zg$ociBaL=%^s=MQ51jIZB#U7`y9^j^TNb@FZ#UFVO{XJzi2OxCoPcgy&uO1 reI`&k%nR$;Tn^vIGfg}7`&j|NsB~{rmg(@6Vq&HJ;oW`jcTFl9ETMcWETo?RWY^} Y%5-WovMn&HJ;oW`jcTFl9ETMcWETo?RWY^} Y%5-WovMn<{9 literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/imageset/topic_mustard.gif b/ott.zip/prosilver/imageset/topic_mustard.gif new file mode 100644 index 0000000000000000000000000000000000000000..54faa1b80d93973d791caaab07862fcaa7d74969 GIT binary patch literal 5143 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 literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/imageset/topic_read.gif b/ott.zip/prosilver/imageset/topic_read.gif new file mode 100644 index 0000000000000000000000000000000000000000..0347ffc1e997c86bc14a14a8bc7829594770dce5 GIT binary patch literal 679 zcmV;Y0$BY=Nk%w1VH*G&0M$PLzt-x++3ZJ&!Zdxn$<*Kc{QT+b?(FUGHhxyEqS_Up3eRK{#ljD zDtEc+^7uZ4z$SFKaiPlQ>FgnLx8daI{r>*>`udrfnRRt_b)w7f@bY)0%liBK-{I!B z(B_i5+)<9h`1$$!`~2(d@8aX=puE+cz~6VN)AaTB=IHC^>Fn|H^zQHR>g@0T|NmxY zX4~H5A^sLTLr+jyJ~A*cH6ULM{;jxE9vAJ4-mMi1IprTL0U=vXE&S+8xFc}cQQcTOd(j5%=gD%!n zG(IX(AOZ_L8ap^MEQ^aXI6E373m$<)EdzxR1~U$wo}M!X4?PPXZ$kquJrE%lBd@Tr zBNjOi7YzeLC>shIJQfxw!o$MAzz8xI3L9TPAB8$N2nZ(C*45M5I66H57(X-u5HUPB z=I7|?<}w8e0tpN@JvRn9_V@Vt_686n84MmI^w5C^kB@^06Z$AU84L6MHOlb6m26qXZ6)JI~tJkk!yO!woP09o_Fd#q>skW_J7=4(b zYCu9mTDN%H!q5<-K?EWMp7kKH0*2wkh+(X_KuW}^Au2p9Akm}1iV~PJmsnB2(1Hk+ zo~ZcHz>Fac1yXC!aHazV5uu?Fh%f;_2g+y+t(g$vF&q>aJY;Y|ApnIf5irDtQ{+el N4iR2}Z~`U>06UTeNSpuw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..dcb6f3bd60fa0397eb22bf686f5a9fbca112bc05 GIT binary patch literal 1469 zcmZvadpMH|9LHbQyNxlo?O4$<d13MjBIjC?u4d; zT#`y0omzEb&bl}uQWzD(+=sdBIO{oooSx_O-|xTg_w)JwoSYpkt^73r4WJJKg34Yx zF`tT-S3ZqTJs%W`#cKut z^_Jh$)0=VUFTvEz(fmJI>FLumbF*`cQ`56T;oRs)!Q8^4P&mK3D%OgAz#Eq#Pf~AtjBX7qS-7}xfFDwNI2XAd{y&wLly@fjL;N?lPb8|2wl3+3b0BEmm z1LXk-Fp=I;NDTmhZ*j__40jcs-|5IR?ry<(ipML z6E!}PkzFZ}Nl#ZXYffvr!|u#bB6SHWMmZ?#ZeI>PE&C=FOY*9TjkcvBSSxtJhpxK@ zj5h544RW@MaxV*U@VLI$fU?mWFI8A?J14m_{T98>?=!T0eW6%ztYl0T_S+u+lXHIpuDaIC))%%!LAR z{PpgMY-)o?0x>v%7paQiN4XD#i(Uy*FLeFA%*Yr$!ew>O%q+SM&ED>U;Etx&5z$mQ zlNnEw&CH5dm(8GpU>-y!)8yUVARHRf)R33Q{7RwPeJePMqZPugaKo_r<~qlsc3r(G znn?1keB;ONoY~vbGv8dNcNQVIx5Iz<%;W0TUoPsj|8D%F3&@+;I346qP)bo^5Ex3< zo>w5a3;b$sK%R$IVNs!nV_BKHC)pG9K!epaRUi)1lQ+_`(K3?PgT5+(kkTsv7%6=y zXJk&+N*kW0W{+cwu6O&fom6~pKV>u-M9|9zn&@GXvCjn~qLS~*6Y7zKzr!V7t925@ zFxbSG01j=J;Up3-WzrOG-<8)GI10Alajy?jGSdTmTOJzwj^W z8Jv;R?1S-f<<|n12sQB1nrpdfn{o6A-S?rJ$CwP13B0}WL;cFW(Do6S=sdw5KeqC4 zm?+$kn3$*}sU&+-jpKJi>5y^ymvBg#ijf+C2uf7bcx$M_^ai}Truw4I(XjfMggc?W zjW$1kAi1@zoq`E#pkt^AbVnx|@wF8s07`#COP|T1kAmm{5)t+`_JMZ*u zfcP=BAji;u=m#ys|9=^-joXW%U_9-m0=d~-zO3jPt{jp-_xu zsi~^*@$;adq3G!8>g(>Y&E_yLFxlJQI)T1_fPnAt@yg52+}+@gkB|NR{qywo*Vx+r z{{H6X=RSnM*4Nqh_xSz({CewhQR;- z|NsC0A^8LW3IIO}IS-18IT|J^G6pYSL^BzL zF$9T=iWr_b1Tj7a0dGSYGd?jI3azdRp0Ns{Eg>003lj+{AQ&RQp0KgLzaT9M6O;jj z9U8+T!=BKd8XZ0q0Y5kw6*V9l;NjEK!x|tP2^U5>J`s3$zXZ|5o_G~I2nan6Egc~L zAbyRDB@n|u2tKw2py0zFz=F{V{*)G`Yfu zr3*NGR5*E3rA?C+5?;tBg8{aL4nI5C5h(B@PzEycZMzo%f>Wm=Y(@ncK}9+z%X~11 zz%_yh6EgKOEO=+at&L4^kXZm{^+07Qqg$SD2D5JH9u27hBj@b|%mVHb8| zsMryL1Q7sPWz>ivc*RqvE6l1GRqDxt7Y1bb*ieIk>C+5qZ1AzeKnA@;ri3t4NX3TR yDmM3V00;~K5)&vS5RHcQ8X6=_!HM$%!GRDI9Bd)+dN~v$$ODj|vA_wKAOJhRlSdB# literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/imageset/xkcdLogo_transparent.png b/ott.zip/prosilver/imageset/xkcdLogo_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a212729b465d7da113d62c25203d060bd0a637 GIT binary patch literal 4430 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 UwDJq3ApigX07*qoM6N<$g5mv9rT_o{ literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_arrow.gif b/ott.zip/prosilver/smilies/icon_arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..2880055cc0f11c60f5688ade044df280856df9a7 GIT binary patch literal 170 zcmZ?wbhEHbtSLu;wYQ>TAs=jBP*FkflM?zCbCrVb+sjSbO~t9>%IUtM${ Pu}&Z@V%kj=CI)K&O7cC% literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_biggrin.gif b/ott.zip/prosilver/smilies/icon_biggrin.gif new file mode 100644 index 0000000000000000000000000000000000000000..d3527723c6d8a0ddfa7ca0bfe1ab8fce0055918c GIT binary patch literal 172 zcmZ?wbhEHbgxLc6$23b2ZD19|4%af-@@>3F2nzSlmGt}{{R2@|NpQ5 zKLsg(0L7myj0_CC3_2h#$P5OS$PJ#HS#x(>T`Hg?&Q{P6{IT@*|fe Qt&nb$oR(_V$-rO@0AZ~_>i_@% literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_confused.gif b/ott.zip/prosilver/smilies/icon_confused.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c49e06983f1fff4bc0834b4d86ce39b8a36a914 GIT binary patch literal 171 zcmZ?wbhEHbZXiyV-#U P9L#x)b-Z(h7#XYqI2k)k literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_cool.gif b/ott.zip/prosilver/smilies/icon_cool.gif new file mode 100644 index 0000000000000000000000000000000000000000..cead0306c0e38e57bdb0cc85a407b995dcbdc656 GIT binary patch literal 172 zcmZ?wbhEHb+|z`)C(1LA_rU|@;d;3=6kcSq>7bCTj>1sqIsoCSRx)8`fJ$~w+{ zJX`yX^?~=R4m2(o_)+HS{ItMiUIk0)fwE>-?dDgxjscmQ{AM&TEaGA7z8`VSO88#> SHjRW8(oK@nQq4LU7_0%kd_$xF literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_cry.gif b/ott.zip/prosilver/smilies/icon_cry.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d54b1f994bb20c2a17c6e9e53edb39e0444b380 GIT binary patch literal 498 zcmZ?wbhEHbivPL&TtkAL9RpmA^bD98ftnS6varfA2r%e?3<5cWfi*@! zrOPq0Pa{O{R3VSL)CLZwJI;bVj@ow|9P^f2{b_KV;g#sD#JTIhK{X4eRSZoFOA4&E zE?xGWjgRM;Ia^8kzR>%TOS23r6eRl<`~6;g|7yg@*31^DX`|+%tO&MH1Y{u#11keN z5Hhd|DyTR-@tBu#X^wBxK7*WjP8?uWTo6?pKs7*@va%&Sa#%9C1z8HDof#;_rJ&H~ zFsWx*ry9h3B%L5>ZUqL1B|!6=oIFuX25Dyj%JU{%Vn~@hA!8Mj(`_aU6Ueh0) literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_eek.gif b/ott.zip/prosilver/smilies/icon_eek.gif new file mode 100644 index 0000000000000000000000000000000000000000..5d3978106a2da37441ed17c9d05383b367570d46 GIT binary patch literal 170 zcmZ?wbhEHbd`4m;$l6XN^_D8SRJJ2FugV_ z;@-1W`~Ak%x7W!T7_8VEVD?C1V$(vmHm-x7t|ENQXTMbHG-$9e9m-TqP;V|s+-sI@ SDB66dp*Gz_Y_|#%gEasOPe3vN literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_evil.gif b/ott.zip/prosilver/smilies/icon_evil.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab1aa8e123fe263608d06126ce08c560ad419f97 GIT binary patch literal 236 zcmZ?wbhEHbgxLc6$23bKgaO@B*VYC4FCTM|KGy!A1Lx~^8f$G|7kJ& z%VnN6ZQB2*4FCVX1}P;4DE?$&WMB|r&;e-z*~!3~slec{BxBNqoiq9;sWfXDwJwx! zTfpypu*1~B&zIRcFi`x-!pOiN%b)||f$U^p%}h}5a*XWD2sb-X$e}K^frar-lVFcywmLVPpS#r! z1_#Bw>()y8Q=}6Xa7!$m)>9ItA-k>bRM`by3r4gxLc6$23b2ZD19|4%af-@@?!ukgRQ4FCU4{{R2@|EEBy z*B}*Op!k!8k%57iK?lSGnZdvkyTOw)YwnKFWkE{fYz4;!=ddvOIHYqKtO`15eTQk+ zwr{=ctfC9V1Rm6}I;$2M@y*$pa`Z}#oqrI+!z(?kVh8VTo6X#$!E$I32lMi<45x(( UGxi&cHs4b?vq7goSdhUQ00}uk)&Kwi literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_lol.gif b/ott.zip/prosilver/smilies/icon_lol.gif new file mode 100644 index 0000000000000000000000000000000000000000..374ba150fb238d6a33605bb26e86d4449625a46c GIT binary patch literal 336 zcmZ?wbhEHbgxLc6$23b2ZD19|4%af-@@>3F2n!7!vFtG{{R2@|NpQ5 zKLsg(0LA~@ey$E)D;vwK1$ZJE z)->GK{b0hvv^Z;7;HB1zIS=v}c`BF7qB`mkh55UYFL448CX~YJS?+%vC0^DXyTAT=mC2Y$ux)_YXI57TebiI literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_mad.gif b/ott.zip/prosilver/smilies/icon_mad.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f6c3c2fb401596ec44f4a1189bde2cbc45364aa GIT binary patch literal 174 zcmZ?wbhEHb3F2nzSlmGt}{tp7j|Nnpe z|0z%&3KV~`FfuUkGU$N#ATtF%wyNW~cLKD&UCI$nR5;ND%aoaG8jR+sH5 z;LGade6U~GQPko`gGJNAq7#;kr@G#2#;~znnVhs^*T0km#>C~4JR&=FdsEeR+|3R= Q;9xFbtmB<4#K>R`0GZ1@LjV8( literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_question.gif b/ott.zip/prosilver/smilies/icon_question.gif new file mode 100644 index 0000000000000000000000000000000000000000..9d072265bb9d7d5d4eeaaa9aadb44a49a60e5fe3 GIT binary patch literal 248 zcmZ?wbhEHbgxLc6~q5?4F69u{F}@0e+$F^zrz3jO@4oyp}v#>2=1R{ z`2YX-`F#xhd<^^7GyH$bps&p^e-cpewY&^Nd^p4X4Gi!1Fzlbske>!pj|LQfvM@3* zNHOSu#6fm4u$C@R>vD+fTM_1WrjSFOYeSph9VW&ehisimT`Ynp-iELv_k~jmS4OEzz h1Q^5k8{BNVn8hT-nI{@Cu+CwP)wEG_S5{=O1_1NkQKJ9= literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_razz.gif b/ott.zip/prosilver/smilies/icon_razz.gif new file mode 100644 index 0000000000000000000000000000000000000000..29da2a2fccc79981bc54db7513ca6d2374592f9d GIT binary patch literal 176 zcmZ?wbhEHb^3h|5y0`zsdjqAOHXV zwXw1B|EEADAfWh@g^_`Qk3k2-0hz(T5_`c@GHdRQt4o8V#Kj6YnC2W7^l?<@Q2(%O z^|TpzE=L6K%vq%4Qv0AgI88 ZPHWn(3w4)`M4Rs!oY|mbDlEug4FCb$KH>lX literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_redface.gif b/ott.zip/prosilver/smilies/icon_redface.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad7628320c3d15756c84794c8c0523f1072da640 GIT binary patch literal 650 zcmZ?wbhEHb&Qw$Gs7{2#K|NnmWcSgp)ZKdDmF#NyN{%1+%|LxoV z&6x4L*vr+`_5YJ6|9^e`f9A~pR}4QI8vg%z`Rh8vzsC$emo5AMNBH0A=KudDKaP*T z>0!pe!0`X+%wGqqfegj}+zPv3R$%UgcxPlMx(u7qxxxfZd?$&YQ;PGndxWo3ZY ziH`8-T?`B&DNk$k=JGRs=w-6FQO@h2ko&aap$ji#VOF!1O><{wyHRCMkfx2Ai?Slv zYA%q~j0}tnyg^Qv|J?fJ`y}Jo`B}5IcZU0i%+^)m>vp{!Bqu6#)+xQyYu&8=mRY(7 z)}5aCNL5gG*%{+AHF>K87ridk_T^KXg3qiu^$yZP~SpxtUz5smy literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_rolleyes.gif b/ott.zip/prosilver/smilies/icon_rolleyes.gif new file mode 100644 index 0000000000000000000000000000000000000000..d7f5f2f4b18f8a141c7a5dd1e09ff106a2f9fa1e GIT binary patch literal 485 zcmZ?wbhEHbgxLc6$23bKgaO@B*Xvz|NqTp_`ikW|G&xq{~!PVSNQ)^ zpx|qe3NTRo&+X?L671|4;A*62z|05~RQ$=p%EiFTpaW6>GM0fQZi6Rh*4!PT(*&f% z*$TRZ<}@?I^CYG*?eW$Pd$isBan+(fO1gn0b6dW=x%w~q}~tKE&`I~ zWZ+_80zw8BmJOU2m9Ux1yJ3o3D&v+$ZG#t4ZLVMy3?Qu_ZQMY+8CYaDcq&S-H42Fh z{c)CE%Sn@EnS+n-#i)qLlhWcv5Vs)dU<2w9+u*4hy}}}Vq4ah~j;>ScENX^v3nduQ d4TmZP8gAjeGaoDCD!-THXQ zaD}Q`!Ef~@t%4VS^H`jpHe@qRnmW&T1rN_M_11z^Th4v=m-`t@{9)jl*%hj`3F2nzSlmGt}{tp7jjg5`} z|9}1eDNqRrDE?$&WMJT9&;fBkW-zcsU+|R7ntLO3**QsZu>uaJIn9DTj_MrhAC|2y zn^DM@#l<(@zDcWq`B+oyDaGR~0+SdoFXD`_(PqAxy<2o0Q>0^(jhH~$tb+>(~Mkip?iSJVUgxLc6$23bKgaNIF2n!7!vD80{0DM@;NRr`CxMLP|FjsU zO`B$HZ2T{m`TzgdAk{j*8D$QDUE*nK$ z7w|KG>@aokb7%R&!0WI`LE+V`jZbtHGVEq^HDzd8gshBhJhWk{9N&@6Gj#R{?N7d_ u@Ss3Q_U6Qmr`{j;vSH$AZf0`Va5JoNi_%bKV4KJmrQFw{HdRBB!5RP#AxjVd literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/smilies/icon_wink.gif b/ott.zip/prosilver/smilies/icon_wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1482880421dde677d3302940aa875ff22a11b06 GIT binary patch literal 170 zcmZ?wbhEHba9D@n#Zhbsv zutHU>;J1F0R>6zE2`tV}8xE^#?@bGklrZsUYAp!;dbG*vY{CM88Jk-qvwbqQUtQFY Pm?x1IA$CiJiNP8Goi0B( literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e45c365ecc48ece968e99c88ebde7c2e487268c9 GIT binary patch literal 113 zcmZ?wbhEHbWMg1sXkcV8Ha2EpU{L&LW#jB05NYR}UrUX)*2prhcJlcNv>k}p;WN-a(;Doah#V^I9b!pOkD$e;r>31})C0|OIR4}ZeU N)fX>VFK1w|1^|_$9lHPk literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..076a5596f1e8009581a8d943af4cad96a9f15493 GIT binary patch literal 111 zcmZ?wbhEHbWMN=qXkcV8Ha2EpU{L&LW#jB05NYR}UrUX)*2prhcJlcNv>k}p;WN-a(;Doah#V^I9b!pOkD$e;r>i2-CT0~3c2L)(hX J=K+ii)&Nry91Z{g literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c5827a401f4d9796b0c94f52ff7173d01564efad GIT binary patch literal 111 zcmZ?wbhEHbWMN=qXkcV8Ha2EpU{L&LW#jB05NYR}UrUX)*2prhcJlcNv>k}p;WN-a(;Doah#V^I9b!pOkD$e;r>i2-CT0}}^}P}_>k J=K+ii)&NlC8`uB< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..38b5a62c171be2186622b4b06f92443cbda37e3f GIT binary patch literal 113 zcmZ?wbhEHbWMg1sXkcV8Ha2EpU{L&LW#jB05NYR}UrUX)*2prhcJlcNv>k}p;WN-a(;Doah#V^I9b!pOkD$e;r>31})C0|OIRPd>wn NoeQOERxmJF0|1h+9W(#{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..03172ff5c674ae95000d265bff3e5068cab73af0 GIT binary patch literal 182 zcmV;n07?HxNk%w1VFUme0K@ln-?Cj_0=;r6<;o#x!?(XE| z<gwv++S>pB|L^bbA^8LV00000EC2ui00aOS000FupeK4-sVxFUNfH2ba934PwB4Iy kAy$z63IYUzDIOk-hJnN66fV%gBr*9|uh^`1%MAelJFawYMF0Q* literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..351de9f46ac2941ac16afc674c99f8ac66767091 GIT binary patch literal 690 zcmZ?wbhEHbWMzn9c*elMRI`(*dIxLMLEh zKjWEtlc{<;@3dQNZAY1^wlS1#6qxr^VD4j{DL1$$UgnwrM3)$=wy`wqWv<`DKkET! z_ZjXmwYqtvo;-I?>Na+vxBquyukctd^7KH^Zjh~o_K|` z=PX<6QMT42jOCjJ<~`w^aYtb86PAX3+>@^{*X|Nr@SL%7EB~BFj1^n>XFp`F+by{8 z1w;8Jp+&D41{qNN$pUtf4u}NB2?P882D7Fn!PZv4j?S)bhu&Vf2@|{~Pnqg5ea1|Q z*|P=a&C^-9kax)v#^uY^R;^-KyVh;P#!Wt3wr-Q!vBPlpZpnT7Tn--OIC4bs_;Hm} zr+)sJYuD^=-n6@OhyVV4`A3f|o<3!H@j~_WYtwh{j6Qxe{_=(O`*)dN zzij{hWn*BRCt(rL?%1p)q;}@ugomx|{JI`fA{HjO%1IcO-Pp0Q!@b|csjbFwl1l4j zb;%VWI~S*Vvl}F?n_*ep;5*x?=$Xxd$?0A5?cF&Vx zD(whe?YJpz>Vc`NyVu7Dc8Km?kaJTx^2u* Gum%8ywf-3Z literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..89f8963fde57e8227f4ef1677724e16d1c664151 GIT binary patch literal 664 zcmZ?wbhEHbWMzn9c*elM+I)zqdOLI79=5h)oZV*x7rx}5{gA8wB4^(PrkWkB%?Ej> z-C}Jzz}9+%z2hYB^gA4#rx?pOv$Y)Io_vjO#$ADVPZ`QKGS}?no_K|^Y8z|IVYZgT zJX5Z7_MT&JJH|ij0bAQqrkb5>tw%Y!PVr2=$v@{2*M!T=^?L;7KH=y-!`gU&rD1Q@ zx&H$5pYhGSFSPhIN9Rew1)bABq^oqG| zH)qdTrs^H+9Vgh^k26+mVXoc9Shu6*;Rz@0k=_wVyPdSw6f*>i`N zuU^Z&earmegTm*}O5eWm{`@KQ=a2ON|0WzF919j4Y~~VDn{sf1VskrxsK=Cy#fy%1 zn;T`_*|8|uT~@)l%f@lil7`9Zl`CRS26ddCZjc-|!_v6LcQ$9yvo8lXFF()V(9E^g xam$K}JRTGIB2R5ud08@GA=^x^t*b(1A~t9B9+;{r+2%Kp*Ivkm(G!x)huUC(DtHpS|hA?AHC$vIEeJ3%Gc^M^IXfCYKS3KrMMp+S2}=-73Qto~RajVDTwh>fWM*h*Yiw_A zaSe2JcNcjDdnJ8;DuIJDG&YD4ii4t8uXA;?c(r}FfV;dg rz5s}djE)$@LdHXsm6yw#&7RPq8`Gp3)*_%%rL9#rZ?eGM2>}2*&P}f% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..335a72c7116fb0aa27b4fd853d9533526a811497 GIT binary patch literal 1520 zcmVG0w2`|tAh z!qVN!)7{6=+uY{v&DP)P^ZfVw{_XVpfq|}%G~S!|Npwo z+1>5?A^8LV00000EC2ui0A2xU000L6z+P`-Voi?7q;kn@I-k&}bV{vSuh^`1%k6rz zJsfB?qL|O41ejE#(BSV%Upt9x5m@{kM%(=7Y&!9t#9!C>oFt6t4|HHrYRW6PdRySDAy zxO3~?&AYen-@t~;D7`cXyAbeCaBNG7S|l1w(~WRp4|Amx-)R%zvxSZ1l^mRxq}<(FWFDdw1D zmTBghXr_tg3=6dB=9_TFDd(JY)@kRRc;>0+o_zM{=bwNED(Iku4*G!sh$gD&qKr1` z=%bKED(R$@R%+>`m}aW!rkr-_>8GB4aKNafmTKy$sHUpws;su^>Z`EED(kGY)@tjm zxaO*Bt{Cv(>#x8DE9|hu7HjOW$R?}ovdlK??6c5DEA6z@R!eOL)@G~iw%m5>?YH2D zD=x9vj%)6@=%%ax?z-$!yF!3Za; z@WTHx?C`@7Lws<=6jyAqy%S%o@x~m7n{me=hb*$QACGME$td$6#L6tU?DESn$1L;A zG}mnN%{b?*^Ugf??DNk+2QBmv7jWRi(MTt)^wLZ>?ex=7M=kZ#R99{F)mUe(_10W> z?X}iD82$CwWS4FB*=VP&_S$SOeL>rB$1V5Vbk}XS*D&0z_uhQ>?f2h+2QK*Fgcol3 z;fN=$_~MK=?)c-7M=tr~lvi%~<(Ox#`R1H=?)m4Shc5c)q?c~`>8Pi!`s%E=?)vMn z$1eNqwAXI``|Y^ruKVu1_wM`ezy~k<@WdBy{PD;qul(}NH}CxO&_^%*^wd{x{q@*q zul@Gickli8;D;~%_~e&w_|WL5um1Y%x9|S@@WU@c2pTM8|NZ#qumAr1_wWDz_UJ+V z07$?B8t{M!OrQc05`qOf@PQDFpaduAj}}nyf*8!81~TiOrsjt$i_Ch@r`hdqa5c* W$2!^#@s4=RqaOFj$3EUL2mm{Rf3^$& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a2142d5432be00a2e6395bed8b503a0eb053de5b GIT binary patch literal 420 zcmV;V0bBk@Nk%w1VFv(d0M!5h-R=9j%-PD^>;M1%;p_6)>G#^|_}1t3)8z8r?)=T( z?a<=z%--$P<@43%^v>Vz%iZkH;qcq+`O@R@&fxFM-Rt1+{o(Qc#?RT|@B7^5?%(eF z$I#ot(%s+b@Y>|;@ACHY`Tyeb|LODm%G2Gz$<_D!{?gv&)7s+H-sjQVBe^A^8LV00000EC2ui00#hR000KTz)}f=0u2VC5byV*4MZZCP8OS8uGd`8!sRA7 ziLe+0D4Q{ow3=gRyGez(oOGz$Z;rfv)#&?i2!Vnu6NQE<3yF$85si*16p@lU50#cR z3YnTU44s}I5TT+P6{V&c0;#Gws;VBXsjsjuumS|Nx3IabyQ;mZzqYtX#769z?d||0@&Ft4`1$(#{Qds_ O00RmfNU$KlAOJh7n-8b} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..206e50368daff146227113e91530849214569021 GIT binary patch literal 55 zcmZ?wbhEHbWMklAXkcXc|NlP&1B2pE7DfgJMg|=qn*k)lz{J-gm^kyquSIh%8{Ym< I$jV?10A!F3wg3PC literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..256bde3daa62be78f5ba32f324fda6090183a2ce GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz0U{m4&*%XumUKs7M+Sy#H?H_c7yZU!S`3 z`v3p`3`junCkrD312=;XNDO2K1B-0H%8+A$E^FpqxOa3r>!YG6%Q>dF-RzvP-LunB IN07l902eVda{vGU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0ba66d50b2afa91504e9da7c1905ad7576502ef7 GIT binary patch literal 56 zcmZ?wbhEHbWMklAXkcXc|NlP&1B2pE7DfgJMg|=qn*k)lz{Ky4$o>ne4iAh3&L2`^WYRA5oO4L^V4Js-_;eQwGtO9r vb18?EcF5l3lUA6=a3sAULP~`}Ac4V8+^F^0SN$nKYZyFT{an^LB{Ts5ju$_5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2d689446ee075a2fb60d93652f567977ae918952 GIT binary patch literal 111 zcmZ?wbhEHbWMklA*v!N5`TOs$KYsuH`|s1YU;qC7|NQ;egV&!QzW#FI!P{>?f1kel z`qZ7*|NsAIfC0syEQ}05tvVn9kQodtG81?fUrVxB&>a~ho7UpvD73_Z>4{)n?53&i ITU{8e0cGbjQUCw| literal 0 HcmV?d00001 diff --git a/ott.zip/prosilver/theme/images/gradient.gif b/ott.zip/prosilver/theme/images/gradient.gif new file mode 100644 index 0000000000000000000000000000000000000000..21dc11f13b1545706dfeaa4dd2b09a308b072ac7 GIT binary patch literal 549 zcmV+=0^0pYNk%w1VFduk0M!5hhk05 z^xNm~>GAf};_c<`^xNj|=kWIE@%HKQ_u=dE-|6w??)Ba1@#OCG*5d8i+{#-?(6dR>+|>L@Acs8^5gCE-sth%=+|C5^X>Hb*W>Nn z=kVU?@zvt&?DP2A=I_?y?e6vY*yQf!@AcB)>+16N)8OmW;p_ka000000000000000 z00000A^8LV00000EC2ui00jWY000L6K$~z#EE=S@^tu&)0kYfPplFgoTEOh=V7Kivo_1kdcuYl$Dko zn3w-q@|_{sHv)}Ev>Gvu(7Wtw6qAfxVgF(yuH38z`!oU#Kp$P#T3fR z%*_eU(9zNa)YaD4*CN{6+!Nm4;NczPb8pFo2O75bs5(W4-eDqR|&sne%Wp~9F-wW`&tRSjs} n%C&3P6=1`P9ZOd1fwO4Ss#U9@t=qRV;>w*%x31l|K>z?d!+=+H literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2644293f7dee5ddb7b0b81562a3ef1d4b8eb9f4f GIT binary patch literal 218 zcmV<0044uNNk%w1VGsZg0K^{vE_}}a|Nk;;rrq7$nz`8S;pFl0@#5m*!j+)y?d{*+ z-?hx*62*95b^hN#wV} z_VDq^RdJ0vPRiWtA^8LW0018VEC2ui01yBU000G7;3tk`NfJP+0)+Vi!*C=@EV%Gd zAjUD=CV-)Ekpv0>U@20_JS-4T5@)D%G?TzIm_Rr-l*YCMP;eLlj8;j41r~tC8W%u) U1cY(hF2b`%EF}VeE`=cgJDT-mF8}}l literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..014cd9bd1513f818426238b66e0547b0b6e273dc GIT binary patch literal 148 zcmZ?wbhEHb6ky#m4PIOH p)|@br?lU%!s4$N&4D){0cjBRYp~h6dd7b{%CrdU(N3bwh0|164=f)A4IGvN14{@6k}C!Z5^w?(og)bk3Id!V F06RZWY-j)g literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1c7d83527c4d2fc19b338b0359c3b4f7089a0d2e GIT binary patch literal 559 zcmV+~0?_?ONk%w1VI2S@0M$PL(cQ>L!`SG!(d2!t&B)v8yVK>S#@)!>>W;Y6hO*K3`uu*b&hhs8smR{m>hrbFhJaW@b>w>*5<(j|Qzt-o%*XaNM z|H|C!A^8LW002J#EC2ui0384%000L6z@KnPEE2su6^F#!$}J^*q@ zy^p3pJpeu;9~coJEjSHJs1(mX95)I(S`RZ4J}!((xorp@3m`QQged_LR!}_}8u^+H zFCeUgLa?C0g9sBUEI4T4m@-YIQ1J(i3>=6{xOf4x=aHW{OU|TO)5Z}bNtBk*v4cks zsb{EEEh%&;(IRNNhO|?%sne%SP@|GGtf)m+Ei$)~SUN?fK(JxOjwM@GqyQ@)u6)3X xHm%yVY}=4D`z0XUxN_&x4ZJeRS&w(|=GD7Lk*&8j`}z$@08k*eoC$*f06Re~Aff;O literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8ae9004534d5f4244ae54be08d0a64c62f928325 GIT binary patch literal 306 zcmZ?wbhEHbC>k_fBt;<@ZsCHZ(qNDee>qcj~_o?ym;~U?c49)zyJLC z^WMFCpFe+o`0(MCD_35c%6~9&4aAPkhI8jp}T#j!i9x} z+}qZLtJ44f|H|C!A^8LW0018VEC2ui01yBU000G8;3tk`X#!lga3<*l>BccdOH^LW zc}7h}h=<41*$g280O^t$5{<)wfTUY8_&SS`tBWT{xw`pwszCmNXTi6Jj8= VUIPkdKx>Hr0uvJ!euX6=06Qy~X43!w literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..48e3e5f5f3a2635887e6bc27089453954b47aabd GIT binary patch literal 264 zcmV+j0r&n#Nk%w1VGsZg0K^{vX_~d$=IwK!yOg)i(AL?i#n&Zkle5d)z}4f-+~(ln z;Wu}jRg9}jg{O$F#~Njhe5b&Uvd5ac(8by5L4KkFNLf|H|C!A^8LW0018VEC2ui01yBU000Gr;3s|&ML8ehNMmaONg`ARz*t2a z0bcJx4o)XxX*Cc&PhcTb7!V^$BDrinM-HA3A`re>pH~dBU>r0HL2F=;WH1LqK}awh zM3)EBmv}TcMIT&AJpvjX3UwcO0fZh24IKm;PZA7{Jq8a34J-!>5eSVK2?r1l6JQ4d O4GWtU3=pX;Apko~i)nKJ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..44cc34500ec4fb84b2ea7289fadd2d312d143491 GIT binary patch literal 167 zcmZ?wbhEHbU1BV4(QV%EsA0Akxk`zo4=x zGd-h3!N|bCL?I+2RiPlGz{yF$y(qu5Ku5tbCr2R&Bwwr$lv&?_3PKqo;}N5eEj6elk*SV zI)424jT<+9{rdIl)vNpW?|=UM`Ocj?Tvhu@SDu=__xk(y@9Wl`d-?L^yLa#2ym|BD z#fvXrzTCTaZ_b=KhYlTDv0}yT+qa)QdGi1N{|y^9+`4t^?%lf|K781C_Tl8olmGtx zTUc0l?b@|N*I%qSe(&wuxBveAJ9XzZ11Ui9CkrD3g8_pMNE66U3~WaoW)yhnNc9_B z%RU*iEW+c_OVzApLFS(uT(WRNf#XCSi_@%A^8LW0015UEC2ui01yBU000GKpeK%GX_mj=LD8Lzb0343wfYc~Oi!1=cVPrDVuO~syItZDACAst{ hvK#)#b$4=*ZjZ*4*G|nYV78x^kescB8+<(b*Vd zjT&T*9A=LqY?diA!(2-aFi@>lRbKwO^T^;oU_5p(7?*i%+}lG@ATl}`uX|!_xJbp_4V`f^YQWV?Ck98>+9<3>gVU@<>lq$5In8Cg?6vQ}K;AF0rOQvExA*NdF6|i_@% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f6b8aa10e13385a0f5fe6752a4a6342b915692b3 GIT binary patch literal 531 zcmZ?wbhEHb6k||fxT?euGG*Vpckgs+)-7AMEM?x2t5>hyyLa#D)2D@ng*R{BeDUJN z#ful$oVtJc^5u<;s{N?fHQN2MU*+tXp^P;lqb--n=2X@`0($u z6UMTou4&P1%$&6Xtdf!?WijH+95S37%-y|BE@|xS)44e~Bo`>i_BAWA3wFq`vdYNt z@-Lm`oF>T5wPE*01^&i|Bxey`vz92p%O6Q9T??8cLxnVoy@$jrkBPPAKBe*5r|ndt(1b9#%c zR}1Hn!%FOmo{LgeK5|uJx31+f<#N>Q76{!~#OfWkvfr8S(WRrSuj|inGU8HB;|bVg zz-QrFli~IyvYpYlU?!S?kDhwD-|^v}Ji;>f^Y F4FFSL${_#% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5ca18af80aec21b021bf355d98d3319a3c62838c GIT binary patch literal 216 zcmZ?wbhEHb6kyV8>dAmZISC`J-J$>_Ov;6tIfn7P%b_oV|w=F+BWy|@L{>@&M z3s2p7%>V<6KUo+V7-Sf9Kms5;8CXLV)caC0=ZU$BIlkWJKXoEwqOe09Pe9~t%Z9WC z96uT?&m=G#T;k|Dc*r0@fuSimdBP3fqDU!*Ldk;Whk**}hSnGM$(RZqIab`gtM;kT NkN>RdO)82E)&S0UST_Iw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b3b51d8425a2426065899ca61099fa2e770950fc GIT binary patch literal 335 zcmZ?wbhEHb6kyld-m*^GG)r6dk=T+-1+$N;~O__ zeE$6T>({RnCrVB`}y-{MMXt#Z||#D zuYUaaF>BVWnKNgeIdi6}s_M;~H(R!BdGzSf>eZ|J`}=q8+BJLj?B~y)U%h(u>C>mz zu3cNZcJ1=z%g>%Y`|H=Q^78WkV8B2$Q2fcl$iQI8paaqY@)HAF&Vd;P9y&s?9cQ{j z7$jQzjybbBZ{%5*p24DYU?2aH$w`V9`&v#N;5fKMOm9ZE;x8L^UCzgcE>v7|V^!ng zROjT9(f4OylVufDWz?7Ma$^wY)o0V!*4LZr@2t}kd8EC<*5Sq3>1mm@J9?f%f1`1dvnFV(VU@J+^!Lcy>fh<_ZJoKk)8F0Q-F&Rv zE_}}W`}_a@|H|C!A^8LW0018VEC2ui01yBU000Gh;3s}b6eVMtQqM3Hl%tNx_RfliP+OksiB~qh=_*X-Pl-HR(yPVOG`_|#ld7` zV!61r($UP7l#w$tGwSK&A^8LW000jFEC2ui01p5R000C=@X1LlU4~Jn5*3c4OiAD% zg_MMd_Aq9!Oi1WHN;pdcONI^#04R_&fQ?BGs5t-~yJcwbAUulW9q2h+ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ac719cf280fba68810d89e25246a5eda18411f7c GIT binary patch literal 154 zcmV;L0A>G2Nk%w1VGjTd0J8u9aByxvKR>OksiB~qh=_*X-Pl-HR(yPVOG`_|#ld7` zV!61r($UP7l#w$tGwSK&A^8LW000jFEC2ui01p5R000C>@X1N*ONvou7A=SqB$MJe z0<{F9_AsGCPRprG%!yQ|JjH`aqt}oKdH_kScX;(2x5uzYcnqG==_$256(s=ggm6k) I&XWiLJOAfD!vFvP literal 0 HcmV?d00001 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 + } +}; -- 2.30.2