Browse Source

Simple install: moved all the stuff to migrate from wakaba to contrib/ and added to git everything

simple_install
dequis 8 years ago
parent
commit
1b3f8a16c1
69 changed files with 2862 additions and 48 deletions
  1. +7
    -48
      INSTALL
  2. +171
    -0
      base_board/board_config.py
  3. +4
    -0
      base_board/res/.gitignore
  4. +42
    -0
      config.py.example
  5. +63
    -0
      config_defaults.py
  6. +0
    -0
      contrib/board_config.sed
  7. +0
    -0
      contrib/config.sed
  8. +0
    -0
      contrib/config_defaults.sed
  9. +0
    -0
      contrib/futaba_style.pl
  10. +0
    -0
      contrib/futaba_to_jinja.py
  11. +0
    -0
      contrib/strings.sed
  12. +0
    -0
      contrib/translate.sh
  13. +17
    -0
      templates/account_setup.html
  14. +33
    -0
      templates/admin_login_template.html
  15. +0
    -0
      templates/announcements.html
  16. +0
    -0
      templates/announcements_global.html
  17. +179
    -0
      templates/backup_panel_template.html
  18. +115
    -0
      templates/ban_panel_template.html
  19. +49
    -0
      templates/ban_template.html
  20. +34
    -0
      templates/ban_thread_template.html
  21. +35
    -0
      templates/ban_window.html
  22. +13
    -0
      templates/delete_crap_confirm.html
  23. +16
    -0
      templates/delpassword.html
  24. +3
    -0
      templates/edit_successful.html
  25. +258
    -0
      templates/edit_window.html
  26. +7
    -0
      templates/error_template.html
  27. +7
    -0
      templates/error_template_mini.html
  28. +12
    -0
      templates/first_time_setup.html
  29. +27
    -0
      templates/manager_head_include.html
  30. +2
    -0
      templates/mini_foot_include.html
  31. +35
    -0
      templates/mini_head_include.html
  32. +35
    -0
      templates/mini_head_refresh_include.html
  33. +2
    -0
      templates/normal_foot_include.html
  34. +60
    -0
      templates/normal_head_include.html
  35. +29
    -0
      templates/oekaki_animation_template.html
  36. +4
    -0
      templates/oekaki_edit_info_template.html
  37. +42
    -0
      templates/oekaki_finish_edit_template.html
  38. +53
    -0
      templates/oekaki_finish_template.html
  39. +5
    -0
      templates/oekaki_info_template.html
  40. +39
    -0
      templates/oekaki_paint_template.html
  41. +69
    -0
      templates/oekaki_post_edit_template.html
  42. +282
    -0
      templates/page_template.html
  43. +26
    -0
      templates/pagination_section.html
  44. +19
    -0
      templates/password.html
  45. +74
    -0
      templates/post_edit_template.html
  46. +329
    -0
      templates/post_panel_template.html
  47. +21
    -0
      templates/post_report_window.html
  48. +71
    -0
      templates/post_search.html
  49. +47
    -0
      templates/proxy_panel_template.html
  50. +43
    -0
      templates/report_panel_template.html
  51. +12
    -0
      templates/report_resolved.html
  52. +12
    -0
      templates/report_submitted.html
  53. +33
    -0
      templates/rss_template.html
  54. +37
    -0
      templates/script_security_panel.html
  55. +30
    -0
      templates/spam_panel_template.html
  56. +7
    -0
      templates/sql_dump_template.html
  57. +21
    -0
      templates/sql_interface_template.html
  58. +29
    -0
      templates/staff_activity_by_actions.html
  59. +31
    -0
      templates/staff_activity_by_ip_address.html
  60. +28
    -0
      templates/staff_activity_by_post.html
  61. +25
    -0
      templates/staff_activity_by_user.html
  62. +78
    -0
      templates/staff_activity_head.html
  63. +31
    -0
      templates/staff_activity_unfiltered.html
  64. +11
    -0
      templates/staff_delete_template.html
  65. +11
    -0
      templates/staff_disable_template.html
  66. +8
    -0
      templates/staff_edit_history.html
  67. +22
    -0
      templates/staff_edit_template.html
  68. +11
    -0
      templates/staff_enable_template.html
  69. +46
    -0
      templates/staff_management.html

+ 7
- 48
INSTALL View File

@@ -8,50 +8,19 @@ if you know how to fix stuff when it breaks.
- Requirements: python2.6, werkzeug, sqlalchemy, jinja2
Fastcgi is highly recommended, but cgi is supported.

It can be made compatible with python2.5 by adding this line at the
beginning of template.py:

from __future__ import with_statement

- Wakarimasen is meant to be installed from an existing wakaba+desuchan
installation. If you don't have one, clone this:

git clone http://git.kiace.com.ar/desuchan.git

- First generate config files

./config.sed /path/to/wakaba/config.pl > config.py
./config_defaults.sed /path/to/wakaba/config_defaults.pl > config_defaults.py

- Now generate templates based on the built-in futaba_style.pl.
If you have your own version, use the -f/--filename parameter.

python futaba_to_jinja.py
-or-
python futaba_to_jinja.py -f /path/to/wakaba/futaba_style.pl

- Copy/create a few extra files needed for templates and other stuff:

mkdir -p templates/include/boards/
cp /path/to/wakaba/include/* templates/include/boards/
touch templates/announcements_global.html
touch templates/announcements.html
touch templates/rules.html
mkdir -p include/common/css
cp /path/to/wakaba/board/css/* include/common/css
touch spam.txt

- Review the generated config.py. If you used desuchan.git for the base config,
you'll have to set at least the first three entries to different values. The
format for SQL_ENGINE is:
- Copy config.py.example to config.py. Edit it and set ADMIN_PASS, SECRET and
SQL_ENGINE. The format for SQL_ENGINE is the following:

SQL_ENGINE = 'mysql://USERNAME:PASSWORD@HOSTNAME/DATABASE'

I also recommend changing the following (uncomment when needed)

USE_XHTML = 0
PAGE_EXT = '.html'

- Now make sure the shebang line in wakarimasen.py points to the right
python interpreter. If you use suexec for cgi, it must be chmod 755, too.
Visit
@@ -61,23 +30,13 @@ Visit
You should get a board not found WakaError. That means cgi is working.
Adding fastcgi support is explained later.

- Skip this step if you already have boards. To create a new board called
/temp/, do the following (assuming the desuchan git is in the current dir)

mkdir temp
mkdir temp/res
./board_config.sed desuchan/board_config.pl > temp/board_config.py

Now edit the new board_config.py, important settings are NUKE_PASS, TITLE
and SQL_TABLE. Keep in mind most of those options are not supported for now
(captcha, load balancing, proxy, etc). If you've disabled XHTML:

config['USE_XHTML'] = 0
config['HTML_SELF'] = 'wakaba.html'
- To create a new board called /temp/, copy the base_board directory:

Also disable captchas (not working yet):
cp -r base_board temp

config['ENABLE_CAPTCHA'] = 0
Edit temp/board_config.py. Important settings are NUKE_PASS, TITLE and
SQL_TABLE. Keep in mind most of those options are not supported for now
(captcha, load balancing, proxy, etc).

- Go to http://example.com/wakarimasen.py?board=temp - This should rebuild the
cache and redirect you to your board. If you see the directory listing, add


+ 171
- 0
base_board/board_config.py View File

@@ -0,0 +1,171 @@
# Board Configuration

config = {}
# Board-specific Security
config['NUKE_PASS'] = "CHANGEME" # Board nuking/SQL password. Change this!

# Page look
config['TITLE'] = 'Wakarimasen image board' # Name of this image board
config['SQL_TABLE'] = 'comment' # IMPORTANT! Name of SQL comment table. !Must be unique for each board!
config['SHOWTITLETXT'] = 1 # Show TITLE at top (1: yes 0: no)
config['SHOWTITLEIMG'] = 0 # Show image at top (0: no, 1: single, 2: rotating)
config['TITLEIMG'] = 'title.jpg' # Title image (point to a script file if rotating)
config['FAVICON'] = 'wakaba.ico' # Favicon.ico file
config['IMAGES_PER_PAGE'] = 10 # Images per page
config['REPLIES_PER_THREAD'] = 5 # Replies shown
config['IMAGE_REPLIES_PER_THREAD'] = 0 # Number of image replies per thread to show, set to 0 for no limit.
config['S_ANONAME'] = 'Anonymous' # Defines what to print if there is no text entered in the name field
config['S_ANOTEXT'] = '' # Defines what to print if there is no text entered in the comment field
config['S_ANOTITLE'] = '' # Defines what to print if there is no text entered into subject field
config['SILLY_ANONYMOUS'] = '' # Make up silly names for anonymous people (0 or '': don't display, any combination of 'day' or 'board': make names change for each day or board, 'static': static names)
config['DEFAULT_STYLE'] = 'Futaba' # Title of the default style for the board.

# Limitations
config['MAX_KB'] = 10240 # Maximum upload size in KB
config['MAX_W'] = 200 # Images exceeding this width will be thumbnailed
config['MAX_H'] = 200 # Images exceeding this height will be thumbnailed
config['MAX_RES'] = 500 # Maximum topic bumps
config['MAX_POSTS'] = 0 # Maximum number of posts (set to 0 to disable)
config['MAX_THREADS'] = 0 # Maximum number of threads (set to 0 to disable)
config['MAX_AGE'] = 0 # Maximum age of a thread in hours (set to 0 to disable)
config['MAX_MEGABYTES'] = 0 # Maximum size to use for all images in megabytes (set to 0 to disable)
config['MAX_FIELD_LENGTH'] = 100 # Maximum number of characters in subject, name, and email
config['MAX_COMMENT_LENGTH'] = 8192 # Maximum number of characters in a comment
config['MAX_LINES_SHOWN'] = 15 # Max lines shown per post (0 = no limit)
config['MAX_IMAGE_WIDTH'] = 16384 # Maximum width of image before rejecting
config['MAX_IMAGE_HEIGHT'] = 16384 # Maximum height of image before rejecting
config['MAX_IMAGE_PIXELS'] = 50000000 # Maximum width*height of image before rejecting
config['DUPLICATE_DETECTION'] = 'thread' # How are duplicate files forbidden? (board: no duplicates on board, thread: no duplicate files in a single thread, <blank>: no duplicate detection)

# Captcha
config['ENABLE_CAPTCHA'] = 0
config['SQL_CAPTCHA_TABLE'] = 'captcha' # Use a different captcha table for each board, if you have more than one!
config['CAPTCHA_LIFETIME'] = 1440 # Captcha lifetime in seconds
config['CAPTCHA_SCRIPT'] = 'captcha.pl'
config['CAPTCHA_HEIGHT'] = 18
config['CAPTCHA_SCRIBBLE'] = 0.2
config['CAPTCHA_SCALING'] = 0.15
config['CAPTCHA_ROTATION'] = 0.3
config['CAPTCHA_SPACING'] = 2.5

# Load Balancing
config['ENABLE_LOAD'] = 0 # Enable the distribution of image files across multiple hosts (0: no, 1: yes). May not work on a windows host. Do not enable if using STUPID_THUMBNAILING.
config['LOAD_SENDER_SCRIPT'] = './sender.pl'
config['LOAD_LOCAL'] = 120 # Gigabytes of available bandwidth relative to other hosts (please read documentation)
config['LOAD_HOSTS'] = [['http://somesite/loader.pl', 'password', 100]]
config['LOAD_KBRATE'] = 25 # minimum send rate that will be accepted without timing out

# Proxy
config['ENABLE_PROXY_CHECK'] = 1 # Enable proxy checking (0: no, 1:yes). Please read the documentation first!
config['PROXY_COMMAND'] = '/usr/bin/proxycheck -s -d achaea.com:23 -c chat::"Multi-User License: 100-0000-000" -aaaa' # Only uncomment if you know what you're doing...
# Proxy expirations are controlled via config.pl.

# Tweaks
config['CONVERT_COMMAND'] = '' # ImageMagick command, may be globalized.
config['THUMBNAIL_SMALL'] = 1 # Thumbnail small images (1: yes, 0: no)
config['THUMBNAIL_QUALITY'] = 60 # Thumbnail JPEG quality
config['DELETED_THUMBNAIL'] = '' # Thumbnail to show for deleted images (leave empty to show text message)
config['DELETED_IMAGE'] = '' # Image to link for deleted images (only used together with DELETED_THUMBNAIL)
config['ALLOW_TEXTONLY'] = 0 # Allow textonly posts (1: yes, 0: no)
config['ALLOW_IMAGES'] = 1 # Allow image posting (1: yes, 0: no)
config['ALLOW_TEXT_REPLIES'] = 1 # Allow replies (1: yes, 0: no)
config['ALLOW_IMAGE_REPLIES'] = 1 # Allow replies with images (1: yes, 0: no)
config['ALLOW_UNKNOWN'] = 0 # Allow unknown filetypes (1: yes, 0: no)
config['MUNGE_UNKNOWN'] = '.unknown' # Munge unknown file type extensions with this. If you remove this, make sure your web server is locked down properly.
config['FORBIDDEN_EXTENSIONS'] = ['php','php3','php4','phtml','shtml','cgi','pl','pm','py','r','exe','dll','scr','pif','asp','cfm','jsp','vbs'] # file extensions which are forbidden
config['RENZOKU'] = 5 # Seconds between posts (floodcheck)
config['RENZOKU2'] = 10 # Seconds between image posts (floodcheck)
config['RENZOKU3'] = 900 # Seconds between identical posts (floodcheck)
config['NOSAGE_WINDOW'] = 1200 # Seconds that you can post to your own thread without increasing the sage count
config['USE_SECURE_ADMIN'] = 0 # Use HTTPS for the admin panel.
config['CHARSET'] = 'utf-8' # Character set to use, typically 'utf-8' or 'shift_jis'. Disable charset handling by setting to ''. Remember to set Apache to use the same character set for .html files! (AddCharset shift_jis html)
config['METAKEYWORDS'] = 'desuchan,rozen maiden,loli,anime,mangna,touhou,art,literature,roleplay,traps,gothloli,dollfaggotry'
config['CONVERT_CHARSETS'] = 1 # Do character set conversions internally
config['TRIM_METHOD'] = 1 # Which threads to trim (0: oldest - like futaba 1: least active - furthest back)
config['ARCHIVE_MODE'] = 0 # Old images and posts are moved into an archive dir instead of deleted (0: no 1: yes). It is HIGHLY RECOMMENDED you use TRIM_METHOD} = 1 with this, or you may end up with unreferenced pictures in your archive
config['DATE_STYLE'] = 'futaba' # Date style ('futaba', '2ch', 'localtime', 'tiny')
config['DISPLAY_ID'] = '' # How to display user IDs (0 or '': don't display,
# 'day' and 'board' in any combination: make IDs change for each day or board,
# 'mask': display masked IP address (similar IPs look similar, but are still encrypted)
# 'sage': don't display ID when user sages, 'link': don't display ID when the user fills out the link field,
# 'ip': display user's IP, 'host': display user's host)
config['DISPLAY_ID'] = 0 # Display user IDs (0: never, 1: if no email, 2:always)
config['EMAIL_ID'] = 'Heaven' # ID string to use when DISPLAY_ID is 1 and the user uses an email.
config['TRIPKEY'] = '!' # this character is displayed before tripcodes
config['ENABLE_WAKABAMARK'] = 1 # Enable WakabaMark formatting. (0: no, 1: yes)
config['APPROX_LINE_LENGTH'] = 150 # Approximate line length used by reply abbreviation code to guess at the length of a reply.
config['STUPID_THUMBNAILING'] = 0 # Bypass thumbnailing code and just use HTML to resize the image. STUPID, wastes bandwidth. (1: enable, 0: disable)
config['COOKIE_PATH'] = 'root' # Path argument for cookies ('root': cookies apply to all boards on the site, 'current': cookies apply only to this board, 'parent': cookies apply to all boards in the parent directory)
config['FORCED_ANON'] = 0 # Force anonymous posting (0: no, 1: yes)
config['USE_XHTML'] = 0 # Send pages as application/xhtml+xml to browsers that support this (0:no, 1:yes)
config['SPAM_TRAP'] = 1 # Enable the spam trap (empty, hidden form fields that spam bots usually fill out) (0:no, 1:yes)
config['STYLE_COOKIE'] = 'wakastyle' # Name of the board's style cookie. Generally a good idea to keep the same across all boards.

# Internal paths and files - might as well leave this alone.
config['IMG_DIR'] = 'src/' # Image directory (needs to be writeable by the script)
config['THUMB_DIR'] = 'thumb/' # Thumbnail directory (needs to be writeable by the script)
config['RES_DIR'] = 'res/' # Reply cache directory (needs to be writeable by the script)
config['ARCHIVE_DIR'] = 'arch/' # Root of archive directories (all need to be writeable by the script)
config['BACKUP_DIR'] = "backup/" # Subdirectory in ARCHIVE_DIR for all backup images and thumbnails.
config['REDIR_DIR'] = 'redir/' # Redir directory, used for redirecting clients when load balancing
config['HTML_SELF'] = 'wakaba.html' # Name of main html file
config['JS_FILE'] = '/wakaba3.js' # Location of the js file
config['CSS_DIR'] = '../include/common/css/'
# Hints: * Set all boards to use the same file for easy updating.
# * Set up two files, one being the official list from
# http://wakaba.c3.cx/antispam/spam.txt, and one your own additions.
# Oekaki Stuff
config['ENABLE_OEKAKI'] = 0 # Enable Oekaki?
config['TMP_DIR'] = 'tmp/' # Temp file directory (needs to be writeable by the script)

config['OEKAKI_ENABLE_MODIFY'] = 1 # Enable image modification

config['OEKAKI_DEFAULT_X'] = 300 # Default X dimension for oekaki drawings
config['OEKAKI_DEFAULT_Y'] = 300 # Default Y dimension for oekaki drawings
config['OEKAKI_MAX_X'] = 800 # Max X dimension allowed for oekaki drawings
config['OEKAKI_MAX_Y'] = 800 # Max Y dimension allowed for oekaki drawings
config['OEKAKI_MIN_X'] = 100 # Min X dimension allowed for oekaki drawings
config['OEKAKI_MIN_Y'] = 100 # Min Y dimension allowed for oekaki drawings

config['OEKAKI_DEFAULT_PAINTER'] = "shi_norm" # Default painter selection

# Icons for filetypes - file extensions specified here will not be renamed, and will get icons
# (except for the built-in image formats). These example icons can be found in the extras/ directory.
config['FILETYPES'] = {
# Audio files
# mp3: '/include/icons/audio-mp3.png',
# ogg: '/include/icons/audio-ogg.png',
# aac: '/include/icons/audio-aac.png',
# m4a: '/include/icons/audio-aac.png',
# mpc: '/include/icons/audio-mpc.png',
# mpp: '/include/icons/audio-mpp.png',
# mod: '/include/icons/audio-mod.png',
# it: '/include/icons/audio-it.png',
# xm: '/include/icons/audio-xm.png',
# fla: '/include/icons/audio-flac.png',
# flac: '/include/icons/audio-flac.png',
# sid: '/include/icons/audio-sid.png',
# mo3: '/include/icons/audio-mo3.png',
# spc: '/include/icons/audio-spc.png',
# nsf: '/include/icons/audio-nsf.png',
# Video files
# avi: '/include/icons/video-avi.png',
# ogm: '/include/icons/video-ogm.png',
# mkv: '/include/icons/video-mkv.png',
# Archive files
# zip: '/include/icons/archive-zip.png',
# rar: '/include/icons/archive-rar.png',
# lzh: '/include/icons/archive-lzh.png',
# lha: '/include/icons/archive-lzh.png',
# gz: '/include/icons/archive-gz.png',
# bz2: '/include/icons/archive-bz2.png',
# '7z': '/include/icons/archive-7z.png',
# Other files
# swf: '/include/icons/flash.png',
# torrent: '/include/icons/torrent.png',
# To stop Wakaba from renaming image files, put their names in here like this:
# gif: '.',
# jpg: '.',
# png: '.',
}


+ 4
- 0
base_board/res/.gitignore View File

@@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

+ 42
- 0
config.py.example View File

@@ -0,0 +1,42 @@

# Wakarimasen configuration
ADMIN_PASS = 'desu' # Admin password. For fucks's sake, change this.
SECRET = 'desu' # Cryptographic secret. CHANGE THIS to something totally random, and long.
SQL_ENGINE = 'mysql://desu:desu@localhost/desu'
#SQL_BACKUP_TABLE = '__waka_backup' # Table backup
#SQL_ADMIN_TABLE = 'admin' # Table used for admin information
#SQL_PROXY_TABLE = 'proxy' # Table used for proxy information
#DATE_STYLE = 'futaba' # Date style ('futaba', '2ch', 'localtime', 'tiny')
#ERRORLOG = '' # Writes out all errors seen by user, mainly useful for debugging
#CONVERT_COMMAND = 'convert' # location of the ImageMagick convert command (usually just 'convert', but sometime a full path is needed)
#ALTERNATE_REDIRECT = 0 # Use alternate redirect method. (Javascript/meta-refresh instead of HTTP forwards. Needed to run on certain servers, like IIS.)
#USE_SECURE_ADMIN = 1 # Use HTTPS for admin logins.
#USE_TEMPFILES = 1 # Set this to 1 under Unix and 0 under Windows! (Use tempfiles when creating pages)
#PAGE_EXT = '.html' # File extension for all board pages.
#CHARSET = 'utf-8'
#CONVERT_CHARSETS = 1 # Do character set conversions internally
#SPAM_FILES = 'spam.txt'
#USE_XHTML = 1
#HOME = './'
#HTACCESS_PATH = './'
#PASSFAIL_THRESHOLD = 5 # Number of times a user may fail a password prompt prior to banning.
#PASSFAIL_ROLLBACK = 1*24*3600 # How long a failed password prompt is held against a host.
#PASSPROMPT_EXPIRE_TO_FAILURE = 300 # How long password prompts last before timing out and counting against the user.
#MAX_FCGI_LOOPS = 250
#TIME_OFFSET = 0 # Time offset in seconds, for display on board pages. You can use this to adjust board time to your local time!
# Positive value adjusts forward; negative value adjusts backward.
#SQL_REPORT_TABLE = 'user_report'
#STAFF_LOG_RETENTION = 30*24*3600 # How long should staff log entries be retained? (Seconds)
#REPORT_RETENTION = 30*24*3600 # How long should report entries be retained? (Seconds)
#POST_BACKUP = 1 # 1: Back up posts that are deleted or edited. 0: Do not back up.
#POST_BACKUP_EXPIRE = 3600*24*14 # How long should backups last prior to purging?
#REPLIES_PER_STICKY = 1 # Number of replies per stickied thread.
#ENABLE_ABBREVIATED_THREAD_PAGES = 1 # Want to enable "Last xx Posts?" Then set this to 1.
#POSTS_IN_ABBREVIATED_THREAD_PAGES = 50 # Number of posts to show in abbreviated reply views.
#ENABLE_RSS = 1 # Do RSS feeds.
#RSS_LENGTH = 10 # Number of items in each feed.
#RSS_WEBMASTER = "dark.master.schmidt@gmail.com (Dark^Master^Schmidt)"
# Webmaster email address and name. Example format should be preserved for RSS spec.
#BOARD_DIR = '' # Root of board cache relative to document root.
#SERVER_NAME = 'desuchan.net' # What's the name of this server?
#DEBUG = False # Debug mode

+ 63
- 0
config_defaults.py View File

@@ -0,0 +1,63 @@

SQL_ADMIN_TABLE = 'admin'
SQL_PROXY_TABLE = 'proxy'
SQL_REPORT_TABLE = 'reports'
SQL_BACKUP_TABLE = '__waka_backup'
SQL_ACCOUNT_TABLE = 'staff_accounts'
SQL_STAFFLOG_TABLE = 'staff_activity'
SQL_COMMON_SITE_TABLE = 'board_index'
SQL_PASSPROMPT_TABLE = 'passprompt'
SQL_PASSFAIL_TABLE = 'passfail'
USE_TEMPFILES = 1
DATE_STYLE = 'futaba'
ERRORLOG = ''
HOME = '/'
TIME_OFFSET = 0
JS_FILE = 'wakaba3.js'

CONVERT_COMMAND = ''
USE_TEMPFILES = 1

USE_SECURE_ADMIN = 0
USE_XHTML = 0
CHARSET = 'utf-8'
CONVERT_CHARSETS = 1
PAGE_EXT = '.html'
HTACCESS_PATH = './'
WAKABA_VERSION = '3.0.7 + desuchan'
ALTERNATE_REDIRECT = 0

SPAM_FILES = ['spam.txt']

MAX_FCGI_LOOPS = 250

REPORT_COMMENT_MAX_LENGTH = 250
REPORT_RENZOKU = 60

REPORT_RETENTION = 60*24*3600
STAFF_LOG_RETENTION = 60*24*3600

PROXY_WHITE_AGE = 14*24*3600
PROXY_BLACK_AGE = 14*24*3600

POST_BACKUP = 1
POST_BACKUP_EXPIRE = 3600*24*14
PASSPROMPT_EXPIRE_TO_FAILURE = 300
PASSFAIL_THRESHOLD = 5
PASSFAIL_ROLLBACK = 1*24*3600
REPLIES_PER_STICKY = 1
ENABLE_ABBREVIATED_THREAD_PAGES = 0
POSTS_IN_ABBREVIATED_THREAD_PAGES = 50
ENABLE_RSS = 1
RSS_LENGTH = 10
RSS_WEBMASTER = ''

BOARD_DIR = ''
DEBUG = False
SERVER_NAME = 'localhost'
IDENTIFY_COMMAND = 'identify'
FG_ANIM_COLOR = 'white'
BG_ANIM_COLOR = '#660066'
# add default values to config.py
import util as _util
_util.module_default('config', locals())

board_config.sed → contrib/board_config.sed View File


config.sed → contrib/config.sed View File


config_defaults.sed → contrib/config_defaults.sed View File


futaba_style.pl → contrib/futaba_style.pl View File


futaba_to_jinja.py → contrib/futaba_to_jinja.py View File


strings.sed → contrib/strings.sed View File


translate.sh → contrib/translate.sh View File


+ 17
- 0
templates/account_setup.html View File

@@ -0,0 +1,17 @@
{% include 'normal_head_include.html' %}
<div align="center">
<h2>First Time Setup</h2>
<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="board" value="{{ board.name }}" />
<p>Administrator, please enter your desired login username and password.</p>
<input type="hidden" name="admin" value="{{ admin }}" />
<input type="hidden" name="task" value="setup" />
Username:
<input type="text" name="username" size="8" value="" />
<br />
Password:
<input type="password" name="password" size="8" value="" />
<br />
<input type="submit" value="{{ strings.MANASUB }}" />
</form></div>
{% include 'normal_foot_include.html' %}

+ 33
- 0
templates/admin_login_template.html View File

@@ -0,0 +1,33 @@
{% include 'manager_head_include.html' %}

<div align="center"><form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="task" value="admin" />
Username:
<input type="text" name="desu" size="16" value="" />
<br />
Password:
<input type="password" name="berra" size="16" value="" />
<br />
<label><input type="checkbox" name="savelogin" value="1" /> {{ strings.MANASAVE }}</label>
<br />
<select name="nexttask">
<option value="mpanel" {% if login_task == "mpanel" or not login_task %}selected="selected"{% endif %}>{{ strings.MANAPANEL }}</option>
<option value="bans" {% if login_task == "bans" %}selected="selected"{% endif %}>{{ strings.MANABANS }}</option>
<option value="proxy" {% if login_task == "proxy" %}selected="selected"{% endif %}>{{ strings.MANAPROXY }}</option>
<option value="spam" {% if login_task == "spam" %}selected="selected"{% endif %}>{{ strings.MANASPAM }}</option>
<option value="sqldump" {% if login_task == "sqldump" %}selected="selected"{% endif %}>{{ strings.MANASQLDUMP }}</option>
<option value="sql" {% if login_task == "sql" %}selected="selected"{% endif %}>{{ strings.MANASQLINT }}</option>
<option value="mpost" {% if login_task == "mpost" %}selected="selected"{% endif %}>{{ strings.MANAPOST }}</option>
<option value="rebuild" {% if login_task == "rebuild" %}selected="selected"{% endif %}>{{ strings.MANAREBUILD }}</option>
<option value="reports" {% if login_task == "reports" %}selected="selected"{% endif %}>Reports</option>
<option value="staff" {% if login_task == "staff" %}selected="selected"{% endif %}>Staff Management</option>
<option value="staff" {% if login_task == "stafflog" %}selected="selected"{% endif %}>Staff Activity</option>
<option value=""></option>
<option value="nuke" {% if login_task == "nuke" %}selected="selected"{% endif %}>{{ strings.MANANUKE }}</option>
</select>
<input type="submit" value="{{ strings.MANASUB }}" />
<p><em>Cookies required for login.</em></p>
</form></div>

{% include 'normal_foot_include.html' %}

test → templates/announcements.html View File


+ 0
- 0
templates/announcements_global.html View File


+ 179
- 0
templates/backup_panel_template.html View File

@@ -0,0 +1,179 @@
{% include 'manager_head_include.html' %}
<div class="dellist"><h2>Trash Bin</h2></div>
{% if not config.POST_BACKUP %}<p align="center"><em>Wakaba is not set to backup deletions/edits at this time.</em></p>{% endif %}
{% if config.POST_BACKUP %}
<p align="center"><em>Wakaba is currently set to purge all posts older than {{ config.POST_BACKUP_EXPIRE / 24 / 3600 }} day(s) old.</em></p>
<hr />

{% if not thread %}
<table border="1" style="float:left"><tbody><tr><td>

{% if prevpage != 'none' %}<form method="get" action="{{ get_script_name() }}"><input type="hidden" name="task" value="postbackups" /><input type="hidden" name="board" value="{{ board.name }}" /><input type="hidden" name="page" value="{{ prevpage }}" /><input value="{{ strings.PREV }}" type="submit" /></form>{% endif %}
{% if prevpage == 'none' %}{{ strings.FIRSTPG }}{% endif %}

</td><td>

{% for page in pages %}
{% if not page.current %}[<a href="{{ page.filename }}">{{ page.page }}</a>]{% endif %}
{% if page.current %}[{{ page.page }}]{% endif %}
{% endfor %}

</td><td>

{% if nextpage != 'none' %}<form method="get" action="{{ get_script_name() }}"><input type="hidden" name="task" value="postbackups" /><input type="hidden" name="board" value="{{ board.name }}" /><input type="hidden" name="page" value="{{ nextpage }}" /><input value="{{ strings.NEXT }}" type="submit" /></form>{% endif %}
{% if nextpage == 'none' %}{{ strings.LASTPG }}{% endif %}

</td></tr></tbody></table>
{% endif %}
{% if thread %}
<span style="float:left">[<a href="{{ get_script_name() }}?task=postbackups&amp;board={{ board.name }}">Return to Panel</a>]</span>
{% endif %}

<form action="{{ get_script_name() }}" method="post" id="delform">
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="admindelete" value="1" />
<input type="hidden" name="task" value="restorebackups" />

<div class="delbuttons" style="float:right">
<input type="submit" name="handle" value="Restore" />
<input type="submit" name="handle" value="{{ strings.MPDELETE }}" />
<input type="reset" value="{{ strings.MPRESET }}" />
</div>

<br clear="all" />
<hr />

{% for currentthread in threads %}
{% for post in currentthread.posts %}
{% if not post.parent or standalone %}
{% if post.image %}
<span class="filesize">{{ strings.PICNAME }}<a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ (post.image)|basename }}</a>
-(<em>{{ post.size }} B, {{ post.width }}x{{ post.height }}</em>)</span>
<span class="thumbnailmsg">{{ strings.THUMB }}</span><br />

{% if post.thumbnail %}
<a target="_blank" href="{{ (post.image)|expand_image_url }}" >
<img src="{{ (post.thumbnail)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="{{ post.size }}" class="thumb" id="img{{ (post.image)|basename }}" /></a>
{% endif %}
{% if not post.thumbnail %}
{% if board.options.DELETED_THUMBNAIL %}
<a target="_blank" href="{{ (board.options.DELETED_IMAGE)|expand_image_url }}">
<img src="{{ (board.options.DELETED_THUMBNAIL)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="" class="thumb" /></a>
{% endif %}
{% if not (board.options.DELETED_THUMBNAIL) %}
<div class="nothumb"><a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ strings.NOTHUMB }}</a></div>
{% endif %}
{% endif %}
{% endif %}

<a name="{{ post.postnum }}"></a>
<label><input type="checkbox" name="num" value="{{ post.postnum }}" />
<span class="filetitle">{{ post.subject }}</span>
{% if post.email %}<span class="postername"><a href="{{ post.email }}">{{ post.name }}</a></span>{% if post.trip %}<span class="postertrip"><a href="{{ post.email }}">{{ post.trip }}</a></span>{% endif %}{% endif %}
{% if not post.email %}<span class="postername">{{ post.name }}</span>{% if post.trip %}<span class="postertrip">{{ post.trip }}</span>{% endif %}{% endif %}
<span class="ipaddr">(IP: {{ (post.ip)|dec_to_dot }}{% if post.admin_post == 'yes' %}; {% if not post.lastedit %}<strong>Moderator Post</strong>{% endif %}{% if post.lastedit %}<strong>Moderator Edit</strong>{% endif %}{% endif %})</span>
{% if not post.parent %}
{% if post.stickied %} <img src="{{ ('/include/boards/sticky.gif')|expand_url }}" alt="{{ strings.STICKIEDALT }}" title="{{ strings.STICKIED }}" /> {% endif %}
{% if post.locked == 'yes' %} <img src="{{ ('/include/boards/locked.gif')|expand_url }}" alt="{{ strings.LOCKEDALT }}" title="{{ strings.LOCKED }}" /> {% endif %}
{% endif %}
{{ post.date }}</label>
<span class="reflink">
No.{{ post.postnum }}
</span>&nbsp;
{% if standalone %}<span><em>(Orphaned From Parent: <a href="{{ (post.parent)|get_reply_link }}">{{ post.parent }}</a> )</em></span>{% endif %}
{% if not thread %}
[<a href="{{ get_script_name() }}?task=postbackups&amp;board={{ board.name }}&amp;page=t{{ post.postnum }}">View</a>]
{% endif %}
<br />
<blockquote>
{% if omit %}{{ post.comment|redirect_reply_links(min_res) }}{% else %}{{ post.comment }}{% endif %}
{% if post.abbrev %}<div class="abbrev">{% filter reverse_format(strings.ABBRTEXT) %}{{ get_script_name() }}?task=postbackups&amp;board={{ board.name }}&amp;page=t{{ post.postnum }}{% endfilter %}</div>{% endif %}
{% if post.lastedit %}<p style="font-size: small; font-style: italic">{{ strings.LASTEDITED }}{% if post.admin_post == 'yes' %} {{ strings.BYMOD }}{% endif %} {{ post.lastedit }}. (IP: {{ (post.lastedit_ip)|dec_to_dot }})</p>{% endif %}
</blockquote>

{% if currentthread.omit %}
<span class="omittedposts">
{% if currentthread.omitimages %}{{ (strings.ABBRIMG)|format(currentthread.omit, currentthread.omitimages) }}{% endif %}
{% if not currentthread.omitimages %}{{ (strings.ABBR)|format(currentthread.omit) }}{% endif %}
</span>
{% endif %}
{% endif %}
{% if post.parent and not standalone %}
<table><tbody><tr><td class="doubledash">&gt;&gt;</td>
<td class="reply" id="reply{{ post.postnum }}">

<a name="{{ post.postnum }}"></a>
<label><input type="checkbox" name="num" value="{{ post.postnum }}" />
<span class="replytitle">{{ post.subject }}</span>
{% if post.email %}<span class="commentpostername"><a href="{{ post.email }}">{{ post.name }}</a></span>{% if post.trip %}<span class="postertrip"><a href="{{ post.email }}">{{ post.trip }}</a></span>{% endif %}{% endif %}
{% if not post.email %}<span class="commentpostername">{{ post.name }}</span>{% if post.trip %}<span class="postertrip">{{ post.trip }}</span>{% endif %}{% endif %}
<span class="ipaddr">(IP: {{ (post.ip)|dec_to_dot }}{% if post.admin_post == 'yes' %}; {% if not post.lastedit %}<strong>Moderator Post</strong>{% endif %}{% if post.lastedit %}<strong>Moderator Edit</strong>{% endif %}{% endif %})</span>
{{ post.date }}</label>
<span class="reflink">
No.{{ post.postnum }}
</span>&nbsp;
{% if post.image %}
<br />
<span class="filesize">{{ strings.PICNAME }}<a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ (post.image)|basename }}</a>
-(<em>{{ post.size }} B, {{ post.width }}x{{ post.height }}</em>)</span>
<span class="thumbnailmsg">{{ strings.THUMB }}</span><br />

{% if post.thumbnail %}
<a target="_blank" href="{{ (post.image)|expand_image_url }}">
<img src="{{ (post.thumbnail)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="{{ post.size }}" class="thumb" id="img{{ (post.image)|basename }}" /></a>
{% endif %}
{% if not post.thumbnail %}
{% if board.options.DELETED_THUMBNAIL %}
<a target="_blank" href="{{ (board.options.DELETED_IMAGE)|expand_image_url }}">
<img src="{{ (board.options.DELETED_THUMBNAIL)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="" class="thumb" /></a>
{% endif %}
{% if not (board.options.DELETED_THUMBNAIL) %}
<div class="nothumb"><a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ strings.NOTHUMB }}</a></div>
{% endif %}
{% endif %}
{% endif %}

<blockquote>
{% if omit %}{{ post.comment|redirect_reply_links(min_res) }}{% else %}{{ post.comment }}{% endif %}
{% if post.abbrev %}<div class="abbrev">{% filter reverse_format(strings.ABBRTEXT) %}{{ get_script_name() }}?task=postbackups&amp;board={{ board.name }}&amp;page=t{{ post.parent }}#{{ post.postnum }}{% endfilter %}</div>{% endif %}
{% if post.lastedit %}<p style="font-size: small; font-style: italic">Last edited{% if post.admin_post == 'yes' %} by moderator{% endif %} {{ post.lastedit }}. (IP: {{ (post.lastedit_ip)|dec_to_dot }})</p>{% endif %}
</blockquote>

</td></tr></tbody></table>
{% endif %}
{% endfor %}
<br clear="left" /><hr />
{% endfor %}

<div class="delbuttons" style="float:right">
<input type="submit" name="handle" value="Restore" />
<input type="submit" name="handle" value="{{ strings.MPDELETE }}" />
<input type="reset" value="{{ strings.MPRESET }}" />
</div>
</form>

{% if not thread %}
<table border="1" style="float:left"><tbody><tr><td>

{% if prevpage != 'none' %}<form method="get" action="{{ get_script_name() }}"><input type="hidden" name="task" value="postbackups" /><input type="hidden" name="board" value="{{ board.name }}" /><input type="hidden" name="page" value="{{ prevpage }}" /><input value="{{ strings.PREV }}" type="submit" /></form>{% endif %}
{% if prevpage == 'none' %}{{ strings.FIRSTPG }}{% endif %}

</td><td>

{% for page in pages %}
{% if not page.current %}[<a href="{{ page.filename }}">{{ page.page }}</a>]{% endif %}
{% if page.current %}[{{ page.page }}]{% endif %}
{% endfor %}

</td><td>

{% if nextpage != 'none' %}<form method="get" action="{{ get_script_name() }}"><input type="hidden" name="task" value="postbackups" /><input type="hidden" name="board" value="{{ board.name }}" /><input type="hidden" name="page" value="{{ nextpage }}" /><input value="{{ strings.NEXT }}" type="submit" /></form>{% endif %}
{% if nextpage == 'none' %}{{ strings.LASTPG }}{% endif %}

</td></tr></tbody></table>
{% endif %}

<br clear="all" />
{% endif %}
{% include 'normal_foot_include.html' %}

+ 115
- 0
templates/ban_panel_template.html View File

@@ -0,0 +1,115 @@
{% include 'manager_head_include.html' %}

<div class="dellist"><h2>{{ strings.MANABANS }}</h2></div>

<div class="postarea">
<table><tbody><tr><td valign="middle">

<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="task" value="addip" />
<input type="hidden" name="type" value="ipban" />
<input type="hidden" name="board" value="{{ board.name }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANIPLABEL }}</td><td><input type="text" name="ip" size="24" value="{{ (ip)|dec_to_dot }}" /></td></tr>
<tr><td class="postblock">{{ strings.BANMASKLABEL }}</td><td><input type="text" name="mask" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.BANEXPIRE }}</td><td><input type="text" name="expiration" size="16" /><br/>
<select name="expirepresets" onchange="this.form.expiration.value = this.form.expirepresets.options[this.form.expirepresets.selectedIndex].value;">
<option value="" selected="selected">Presets</option>
<option value="300">5 minutes</option>
<option value="900">15 minutes</option>
<option value="1800">30 minutes</option>
<option value="3600">1 hour</option>
<option value="7200">2 hours</option>
<option value="43200">12 hours</option>
<option value="86400">1 day</option>
<option value="172800">2 days</option>
<option value="604800">1 week</option>
<option value="1209600">2 weeks</option>
<option value="2419200">~1 month</option>
<option value="4838400">~2 months</option>
<option value="15768000">6 months</option>
<option value="31536000">1 year</option>
<option value="0">Eternity</option>
</select> (Javascript)
</td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.TOTALBAN }}</td><td><input type="checkbox" name="total" value="yes" style="float:left; clear:none" /> <input type="submit" value="{{ strings.BANIP }}" style="float: right; clear: none"/></td></tr>
</tbody></table></form>

</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign="middle">

<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="task" value="addip" />
<input type="hidden" name="type" value="whitelist" />
<input type="hidden" name="board" value="{{ board.name }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANIPLABEL }}</td><td><input type="text" name="ip" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.BANMASKLABEL }}</td><td><input type="text" name="mask" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="16" />
<input type="submit" value="{{ strings.BANWHITELIST }}" /></td></tr>
</tbody></table></form>

</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr><tr><td valign="bottom">

<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="task" value="addstring" />
<input type="hidden" name="type" value="wordban" />
<input type="hidden" name="board" value="{{ board.name }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANWORDLABEL }}</td><td><input type="text" name="string" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="16" />
<input type="submit" value="{{ strings.BANWORD }}" /></td></tr>
</tbody></table></form>

</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign="bottom">

<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="task" value="addstring" />
<input type="hidden" name="type" value="trust" />
<input type="hidden" name="board" value="{{ board.name }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANTRUSTTRIP }}</td><td><input type="text" name="string" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="16" />
<input type="submit" value="{{ strings.BANTRUST }}" /></td></tr>
</tbody></table></form>

</td></tr></tbody></table>
</div><br />

<table align="center"><tbody>
<tr class="managehead">{{ strings.BANTABLE }}</tr>

{% for ban in bans %}
{% if ban.divider %}<tr class="managehead"><th colspan="7"></th></tr>{% endif %}

<tr class="row{{ ban.rowtype }}">

{% if ban.type == 'ipban' %}
<td>IP</td>
<td>{{ (ban.ival1)|dec_to_dot }}/{{ (ban.ival2)|dec_to_dot }}</td>
{% endif %}
{% if ban.type == 'wordban' %}
<td>Word</td>
<td>{{ (ban.sval1)|clean_string }}</td>
{% endif %}
{% if ban.type == 'trust' %}
<td>NoCap</td>
<td>{{ ban.sval1 }}</td>
{% endif %}
{% if ban.type == 'whitelist' %}
<td>Whitelist</td>
<td>{{ (ban.ival1)|dec_to_dot }}/{{ (ban.ival2)|dec_to_dot }}</td>
{% endif %}

<td>{{ (ban.comment)|clean_string }}</td>
<td>{{ ban.expirehuman }}</td>
<td style="text-align: center">{% if ban.type == 'ipban' %}{{ ban.browsingban }}{% endif %}{% if ban.type != 'ipban' %}--{% endif %}</td>
<td>{{ ban.username }}</td>
<td>[<a href="{{ get_script_name() }}?board={{ board.name }}&amp;task=removeban&amp;num={{ ban.num }}">{{ strings.BANREMOVE }}</a>]
[<a href="{{ get_script_name() }}?board={{ board.name }}&amp;task=baneditwindow&amp;num={{ ban.num }}" target="_blank" onclick="popUp('{{ get_script_name() }}?board={{ board.name }}&amp;task=baneditwindow&amp;num={{ ban.num }}'); return false">{{ strings.BANEDIT }}</a>]</td>
</tr>
{% endfor %}

</tbody></table><br />

{% include 'normal_foot_include.html' %}

+ 49
- 0
templates/ban_template.html View File

@@ -0,0 +1,49 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<link rel="stylesheet" type="text/css" href="/site.css" />
<title>{{ strings.BADHOST }} - Cirnochan</title>
</head>
<body class="content">
<div class="top">
<div class="wrapper">
<h1>
<img border="0" src="desubanner.png" width="800" height="128" alt="The mother fucking banner goes here" />
</h1>
<div class="bodywrapper">
<div class="subheader">
Back to the Internet desu~
</div>
<div id="bannotice" class="contentbody">
<div class="item">
<div class="itemheader">
<h3>{{ strings.BADHOST }}</h3>
</div>
<div class="itemcontent">
<p style="text-align:center"><img src="{{ ('/include/boards/ban_images/randimg.php')|expand_url }}" alt="Ban Image" /></p>
<p><em>{{ strings.BAN_WHY }}</em></p>
<p>{{ strings.BAN_REASON }}: <strong>{{ comment }}</strong></p>
<p>{{ strings.CURRENT_IP }} <strong>{{ numip }}</strong></p>
<p>{% if expiration %}{{ strings.BAN_WILL_EXPIRE }} <strong>{{ expiration }}</strong>.{% endif %}
{% if not expiration %}{{ strings.BAN_WILL_NOT_EXPIRE }}{% endif %}</p>
</div>
</div>
<div class="item">
<div class="itemheader">
<h3>{{ strings.BAN_APPEAL_HEADER }}</h3>
</div>
<div class="itemcontent">
<p>{{ appeal }}</p>
<!-- Temporary Notice -->
<p><em>(Due to changing its software base from Kareha to our global Wakaba script, you will have to post from another computer. Sorry. This will be addressed soon. &mdash;(K.) Anonymous)</em></p>
</div>
</div>
<div class="footertext">Template Updated: 19 July 2008</div>
</div>
</div>
</div>
</div>
</body>
</html>

+ 34
- 0
templates/ban_thread_template.html View File

@@ -0,0 +1,34 @@
{% include 'mini_head_include.html' %}
<h1 style="text-align: center; font-size: 1em;color: red">Banning All Users in Thread No.{{ num }}</h1>
<p align="center"><em>Careful!</em></p>
<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="task" value="banthreadconfirm" />
<input type="hidden" name="num" value="{{ num }}" />
<input type="hidden" name="board" value="{{ board.name }}" />
<table align="center"><tbody>
<tr><td class="postblock">{{ strings.BANEXPIRE }}</td><td><input type="text" name="expiration" size="16" /><br/>
<select name="expirepresets" onchange="this.form.expiration.value = this.form.expirepresets.options[this.form.expirepresets.selectedIndex].value;">
<option value="" selected="selected">Presets</option>
<option value="300">5 minutes</option>
<option value="900">15 minutes</option>
<option value="1800">30 minutes</option>
<option value="3600">1 hour</option>
<option value="7200">2 hours</option>
<option value="43200">12 hours</option>
<option value="86400">1 day</option>
<option value="172800">2 days</option>
<option value="604800">1 week</option>
<option value="1209600">2 weeks</option>
<option value="2419200">~1 month</option>
<option value="4838400">~2 months</option>
<option value="15768000">6 months</option>
<option value="31536000">1 year</option>
<option value="0">Eternity</option>
</select> (Javascript)
</td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.TOTALBAN }}</td><td><input type="checkbox" name="total" value="yes" style="float:left; clear:none" /> <input type="submit" value="{{ strings.BANIP }}" style="float: right; clear: none"/></td></tr>
</tbody></table>
<p align="center">[<label><input type="checkbox" name="delete" value="yes" /> Delete Thread?</label>]</p>
</form>
{% include 'mini_foot_include.html' %}

+ 35
- 0
templates/ban_window.html View File

@@ -0,0 +1,35 @@
{% include 'mini_head_include.html' %}
<h1 style="text-align: center; font-size: 1em">{% if delete %}Banning IP Address {{ ip }} and Deleting Post {{ delete }}{% endif %}{% if not delete %}Banning IP Address {{ ip }}{% endif %}</h1>
<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="ip" value="{{ ip }}" />
<input type="hidden" name="task" value="addipfrompopup" />
<input type="hidden" name="delete" value="{{ delete }}" />
<input type="hidden" name="board" value="{{ board.name }}" />
<table align="center"><tbody>
<tr><td class="postblock">{{ strings.BANMASKLABEL }}</td><td><input type="text" name="mask" value="255.255.255.255" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.BANEXPIRE }}</td><td><input type="text" name="expiration" size="16" /><br/>
<select name="expirepresets" onchange="this.form.expiration.value = this.form.expirepresets.options[this.form.expirepresets.selectedIndex].value;">
<option value="" selected="selected">Presets</option>
<option value="300">5 minutes</option>
<option value="900">15 minutes</option>
<option value="1800">30 minutes</option>
<option value="3600">1 hour</option>
<option value="7200">2 hours</option>
<option value="43200">12 hours</option>
<option value="86400">1 day</option>
<option value="172800">2 days</option>
<option value="604800">1 week</option>
<option value="1209600">2 weeks</option>
<option value="2419200">~1 month</option>
<option value="4838400">~2 months</option>
<option value="15768000">6 months</option>
<option value="31536000">1 year</option>
<option value="0">Eternity</option>
</select> (Javascript)
</td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="24" /></td></tr>
<tr><td class="postblock">{{ strings.TOTALBAN }}</td><td><input type="checkbox" name="total" value="yes" style="float:left; clear:none" /> <input type="submit" value="{{ strings.BANIP }}" style="float: right; clear: none"/></td></tr>
</tbody></table>
{% if delete %}<p align="center">[<label><input type="checkbox" name="deleteall_confirm" value="1" /> Delete <strong>All</strong> Posts From IP/Mask ({{ count }} for default mask)?</label>]</p>{% endif %}
</form>
{% include 'mini_foot_include.html' %}

+ 13
- 0
templates/delete_crap_confirm.html View File

@@ -0,0 +1,13 @@
{% include 'manager_head_include.html' %}
<div class="dellist"><h2>Delete All Posts Confirmation</h2></div>

<p align="center">Are you sure you want to delete all <strong>{{ post_count }}</strong> posts by IP {{ ip }}?</p>
<form id="confirm" action="{{ get_script_name() }}" method="post">
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="task" value="deleteall" />
<input type="hidden" name="ip" value="{{ ip }}" />
<input type="hidden" name="mask" value="{{ mask }}" />
<input type="hidden" name="global" value="{{ global }}" />
<p align="center"><input type="submit" value="Yes" /></p>
</form>
{% include 'normal_foot_include.html' %}

+ 16
- 0
templates/delpassword.html View File

@@ -0,0 +1,16 @@
{% include 'mini_head_include.html' %}
<h1 style="text-align:center;font-size:1em">Deleting Post No.{{ num }}</h1>
<form action="{{ get_script_name() }}" method="post" id="delform">
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="task" value="delete" />
<input type="hidden" name="num" value="{{ num }}" />
<input type="hidden" name="fromwindow" value="1" />
<p style="text-align:center">
{{ strings.PROMPTPASSWORD }}<input type="password" name="password" size="8"/>
<br />
[<label><input type="checkbox" name="fileonly" value="on" />{{ strings.DELPICONLY }}</label>]
<input value="Delete" type="submit" />
</p>
<script type="text/javascript">set_delpass("delform")</script>
</form>
{% include 'mini_foot_include.html' %}

+ 3
- 0
templates/edit_successful.html View File

@@ -0,0 +1,3 @@
{% include 'mini_head_refresh_include.html' %}
<p style="font-size: 1em; text-align: center; font-weight: bold">Update Successful!</p>
{% include 'mini_foot_include.html' %}

+ 258
- 0
templates/edit_window.html View File

@@ -0,0 +1,258 @@
{% include 'mini_head_include.html' %}
<h1 style="text-align: center; font-size: 1em">Editing Admin Entry</h1>
<div class="postarea">
{% for row in hash %}
{% if row.type == 'ipban' %}
<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="task" value="adminedit" />
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="type" value="ipban" />
<input type="hidden" name="num" value="{{ row.num }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANIPLABEL }}</td><td><input type="text" name="ival1" size="24" value="{{ (row.ival1)|dec_to_dot }}" /></td></tr>
<tr><td class="postblock">{{ strings.BANMASKLABEL }}</td><td><input type="text" name="ival2" size="24" value="{{ (row.ival2)|dec_to_dot }}" /></td></tr>
<tr><td class="postblock">{{ strings.BANEXPIRE_EDIT }}</td><td>
<select name="day">
<option value="1"{% if day == 1 %} selected="selected"{% endif %}>1</option>
<option value="2"{% if day == 2 %} selected="selected"{% endif %}>2</option>
<option value="3"{% if day == 3 %} selected="selected"{% endif %}>3</option>
<option value="4"{% if day == 4 %} selected="selected"{% endif %}>4</option>
<option value="5"{% if day == 5 %} selected="selected"{% endif %}>5</option>
<option value="6"{% if day == 6 %} selected="selected"{% endif %}>6</option>
<option value="7"{% if day == 7 %} selected="selected"{% endif %}>7</option>
<option value="8"{% if day == 8 %} selected="selected"{% endif %}>8</option>
<option value="9"{% if day == 9 %} selected="selected"{% endif %}>9</option>
<option value="10"{% if day == 10 %} selected="selected"{% endif %}>10</option>
<option value="11"{% if day == 11 %} selected="selected"{% endif %}>11</option>
<option value="12"{% if day == 12 %} selected="selected"{% endif %}>12</option>
<option value="13"{% if day == 13 %} selected="selected"{% endif %}>13</option>
<option value="14"{% if day == 14 %} selected="selected"{% endif %}>14</option>
<option value="15"{% if day == 15 %} selected="selected"{% endif %}>15</option>
<option value="16"{% if day == 16 %} selected="selected"{% endif %}>16</option>
<option value="17"{% if day == 17 %} selected="selected"{% endif %}>17</option>
<option value="18"{% if day == 18 %} selected="selected"{% endif %}>18</option>
<option value="19"{% if day == 19 %} selected="selected"{% endif %}>19</option>
<option value="20"{% if day == 20 %} selected="selected"{% endif %}>20</option>
<option value="21"{% if day == 21 %} selected="selected"{% endif %}>21</option>
<option value="22"{% if day == 22 %} selected="selected"{% endif %}>22</option>
<option value="23"{% if day == 23 %} selected="selected"{% endif %}>23</option>
<option value="24"{% if day == 24 %} selected="selected"{% endif %}>24</option>
<option value="25"{% if day == 25 %} selected="selected"{% endif %}>25</option>
<option value="26"{% if day == 26 %} selected="selected"{% endif %}>26</option>
<option value="27"{% if day == 27 %} selected="selected"{% endif %}>27</option>
<option value="28"{% if day == 28 %} selected="selected"{% endif %}>28</option>
<option value="29"{% if day == 29 %} selected="selected"{% endif %}>29</option>
<option value="30"{% if day == 30 %} selected="selected"{% endif %}>30</option>
<option value="31"{% if day == 31 %} selected="selected"{% endif %}>31</option>
</select>
<select name="month">
<option value="1" {% if month == 0 %}selected="selected"{% endif %}>January</option>
<option value="2" {% if month == 1 %}selected="selected"{% endif %}>February</option>
<option value="3" {% if month == 2 %}selected="selected"{% endif %}>March</option>
<option value="4" {% if month == 3 %}selected="selected"{% endif %}>April</option>
<option value="5" {% if month == 4 %}selected="selected"{% endif %}>May</option>
<option value="6" {% if month == 5 %}selected="selected"{% endif %}>June</option>
<option value="7" {% if month == 6 %}selected="selected"{% endif %}>July</option>
<option value="8" {% if month == 7 %}selected="selected"{% endif %}>August</option>
<option value="9" {% if month == 8 %}selected="selected"{% endif %}>September</option>
<option value="10" {% if month == 9 %}selected="selected"{% endif %}>October</option>
<option value="11" {% if month == 10 %}selected="selected"{% endif %}>November</option>
<option value="12" {% if month == 11 %}selected="selected"{% endif %}>December</option>
</select>
<input type="text" name="year" value="{{ year }}" size="5" />
<br />
<select name="hour">
<option value="0" {% if hour == 0 %}selected="selected"{% endif %}>00</option>
<option value="1" {% if hour == 1 %}selected="selected"{% endif %}>01</option>
<option value="2" {% if hour == 2 %}selected="selected"{% endif %}>02</option>
<option value="3" {% if hour == 3 %}selected="selected"{% endif %}>03</option>
<option value="4" {% if hour == 4 %}selected="selected"{% endif %}>04</option>
<option value="5" {% if hour == 5 %}selected="selected"{% endif %}>05</option>
<option value="6" {% if hour == 6 %}selected="selected"{% endif %}>06</option>
<option value="7" {% if hour == 7 %}selected="selected"{% endif %}>07</option>
<option value="8" {% if hour == 8 %}selected="selected"{% endif %}>08</option>
<option value="9" {% if hour == 9 %}selected="selected"{% endif %}>09</option>
<option value="10" {% if hour == 10 %}selected="selected"{% endif %}>10</option>
<option value="11" {% if hour == 11 %}selected="selected"{% endif %}>11</option>
<option value="12" {% if hour == 12 %}selected="selected"{% endif %}>12</option>
<option value="13" {% if hour == 13 %}selected="selected"{% endif %}>13</option>
<option value="14" {% if hour == 14 %}selected="selected"{% endif %}>14</option>
<option value="15" {% if hour == 15 %}selected="selected"{% endif %}>15</option>
<option value="16" {% if hour == 16 %}selected="selected"{% endif %}>16</option>
<option value="17" {% if hour == 17 %}selected="selected"{% endif %}>17</option>
<option value="18" {% if hour == 18 %}selected="selected"{% endif %}>18</option>
<option value="19" {% if hour == 19 %}selected="selected"{% endif %}>19</option>
<option value="20" {% if hour == 20 %}selected="selected"{% endif %}>20</option>
<option value="21" {% if hour == 21 %}selected="selected"{% endif %}>21</option>
<option value="22" {% if hour == 22 %}selected="selected"{% endif %}>22</option>
<option value="23" {% if hour == 23 %}selected="selected"{% endif %}>23</option>
</select> :
<select name="min">
<option value="0" {% if min == 0 %}selected="selected"{% endif %}>00</option>
<option value="1" {% if min == 1 %}selected="selected"{% endif %}>01</option>
<option value="2" {% if min == 2 %}selected="selected"{% endif %}>02</option>
<option value="3" {% if min == 3 %}selected="selected"{% endif %}>03</option>
<option value="4" {% if min == 4 %}selected="selected"{% endif %}>04</option>
<option value="5" {% if min == 5 %}selected="selected"{% endif %}>05</option>
<option value="6" {% if min == 6 %}selected="selected"{% endif %}>06</option>
<option value="7" {% if min == 7 %}selected="selected"{% endif %}>07</option>
<option value="8" {% if min == 8 %}selected="selected"{% endif %}>08</option>
<option value="9" {% if min == 9 %}selected="selected"{% endif %}>09</option>
<option value="10" {% if min == 10 %}selected="selected"{% endif %}>10</option>
<option value="11" {% if min == 11 %}selected="selected"{% endif %}>11</option>
<option value="12" {% if min == 12 %}selected="selected"{% endif %}>12</option>
<option value="13" {% if min == 13 %}selected="selected"{% endif %}>13</option>
<option value="14" {% if min == 14 %}selected="selected"{% endif %}>14</option>
<option value="15" {% if min == 15 %}selected="selected"{% endif %}>15</option>
<option value="16" {% if min == 16 %}selected="selected"{% endif %}>16</option>
<option value="17" {% if min == 17 %}selected="selected"{% endif %}>17</option>
<option value="18" {% if min == 18 %}selected="selected"{% endif %}>18</option>
<option value="19" {% if min == 19 %}selected="selected"{% endif %}>19</option>
<option value="20" {% if min == 20 %}selected="selected"{% endif %}>20</option>
<option value="21" {% if min == 21 %}selected="selected"{% endif %}>21</option>
<option value="22" {% if min == 22 %}selected="selected"{% endif %}>22</option>
<option value="23" {% if min == 23 %}selected="selected"{% endif %}>23</option>
<option value="24" {% if min == 24 %}selected="selected"{% endif %}>24</option>
<option value="25" {% if min == 25 %}selected="selected"{% endif %}>25</option>
<option value="26" {% if min == 26 %}selected="selected"{% endif %}>26</option>
<option value="27" {% if min == 27 %}selected="selected"{% endif %}>27</option>
<option value="28" {% if min == 28 %}selected="selected"{% endif %}>28</option>
<option value="29" {% if min == 29 %}selected="selected"{% endif %}>29</option>
<option value="30" {% if min == 30 %}selected="selected"{% endif %}>30</option>
<option value="31" {% if min == 31 %}selected="selected"{% endif %}>31</option>
<option value="32" {% if min == 32 %}selected="selected"{% endif %}>32</option>
<option value="33" {% if min == 33 %}selected="selected"{% endif %}>33</option>
<option value="34" {% if min == 34 %}selected="selected"{% endif %}>34</option>
<option value="35" {% if min == 35 %}selected="selected"{% endif %}>35</option>
<option value="36" {% if min == 36 %}selected="selected"{% endif %}>36</option>
<option value="37" {% if min == 37 %}selected="selected"{% endif %}>37</option>
<option value="38" {% if min == 38 %}selected="selected"{% endif %}>38</option>
<option value="39" {% if min == 39 %}selected="selected"{% endif %}>39</option>
<option value="40" {% if min == 40 %}selected="selected"{% endif %}>40</option>
<option value="41" {% if min == 41 %}selected="selected"{% endif %}>41</option>
<option value="42" {% if min == 42 %}selected="selected"{% endif %}>42</option>
<option value="43" {% if min == 43 %}selected="selected"{% endif %}>43</option>
<option value="44" {% if min == 44 %}selected="selected"{% endif %}>44</option>
<option value="45" {% if min == 45 %}selected="selected"{% endif %}>45</option>
<option value="46" {% if min == 46 %}selected="selected"{% endif %}>46</option>
<option value="47" {% if min == 47 %}selected="selected"{% endif %}>47</option>
<option value="48" {% if min == 48 %}selected="selected"{% endif %}>48</option>
<option value="49" {% if min == 49 %}selected="selected"{% endif %}>49</option>
<option value="50" {% if min == 50 %}selected="selected"{% endif %}>50</option>
<option value="51" {% if min == 51 %}selected="selected"{% endif %}>51</option>
<option value="52" {% if min == 52 %}selected="selected"{% endif %}>52</option>
<option value="53" {% if min == 53 %}selected="selected"{% endif %}>53</option>
<option value="54" {% if min == 54 %}selected="selected"{% endif %}>54</option>
<option value="55" {% if min == 55 %}selected="selected"{% endif %}>55</option>
<option value="56" {% if min == 56 %}selected="selected"{% endif %}>56</option>
<option value="57" {% if min == 57 %}selected="selected"{% endif %}>57</option>
<option value="58" {% if min == 58 %}selected="selected"{% endif %}>58</option>
<option value="59" {% if min == 59 %}selected="selected"{% endif %}>59</option>
<option value="60" {% if min == 60 %}selected="selected"{% endif %}>60</option>
</select> :
<select name="sec">
<option value="0" {% if sec == 0 %}selected="selected"{% endif %}>00</option>
<option value="1" {% if sec == 1 %}selected="selected"{% endif %}>01</option>
<option value="2" {% if sec == 2 %}selected="selected"{% endif %}>02</option>
<option value="3" {% if sec == 3 %}selected="selected"{% endif %}>03</option>
<option value="4" {% if sec == 4 %}selected="selected"{% endif %}>04</option>
<option value="5" {% if sec == 5 %}selected="selected"{% endif %}>05</option>
<option value="6" {% if sec == 6 %}selected="selected"{% endif %}>06</option>
<option value="7" {% if sec == 7 %}selected="selected"{% endif %}>07</option>
<option value="8" {% if sec == 8 %}selected="selected"{% endif %}>08</option>
<option value="9" {% if sec == 9 %}selected="selected"{% endif %}>09</option>
<option value="10" {% if sec == 10 %}selected="selected"{% endif %}>10</option>
<option value="11" {% if sec == 11 %}selected="selected"{% endif %}>11</option>
<option value="12" {% if sec == 12 %}selected="selected"{% endif %}>12</option>
<option value="13" {% if sec == 13 %}selected="selected"{% endif %}>13</option>
<option value="14" {% if sec == 14 %}selected="selected"{% endif %}>14</option>
<option value="15" {% if sec == 15 %}selected="selected"{% endif %}>15</option>
<option value="16" {% if sec == 16 %}selected="selected"{% endif %}>16</option>
<option value="17" {% if sec == 17 %}selected="selected"{% endif %}>17</option>
<option value="18" {% if sec == 18 %}selected="selected"{% endif %}>18</option>
<option value="19" {% if sec == 19 %}selected="selected"{% endif %}>19</option>
<option value="20" {% if sec == 20 %}selected="selected"{% endif %}>20</option>
<option value="21" {% if sec == 21 %}selected="selected"{% endif %}>21</option>
<option value="22" {% if sec == 22 %}selected="selected"{% endif %}>22</option>
<option value="23" {% if sec == 23 %}selected="selected"{% endif %}>23</option>
<option value="24" {% if sec == 24 %}selected="selected"{% endif %}>24</option>
<option value="25" {% if sec == 25 %}selected="selected"{% endif %}>25</option>
<option value="26" {% if sec == 26 %}selected="selected"{% endif %}>26</option>
<option value="27" {% if sec == 27 %}selected="selected"{% endif %}>27</option>
<option value="28" {% if sec == 28 %}selected="selected"{% endif %}>28</option>
<option value="29" {% if sec == 29 %}selected="selected"{% endif %}>29</option>
<option value="30" {% if sec == 30 %}selected="selected"{% endif %}>30</option>
<option value="31" {% if sec == 31 %}selected="selected"{% endif %}>31</option>
<option value="32" {% if sec == 32 %}selected="selected"{% endif %}>32</option>
<option value="33" {% if sec == 33 %}selected="selected"{% endif %}>33</option>
<option value="34" {% if sec == 34 %}selected="selected"{% endif %}>34</option>
<option value="35" {% if sec == 35 %}selected="selected"{% endif %}>35</option>
<option value="36" {% if sec == 36 %}selected="selected"{% endif %}>36</option>
<option value="37" {% if sec == 37 %}selected="selected"{% endif %}>37</option>
<option value="38" {% if sec == 38 %}selected="selected"{% endif %}>38</option>
<option value="39" {% if sec == 39 %}selected="selected"{% endif %}>39</option>
<option value="40" {% if sec == 40 %}selected="selected"{% endif %}>40</option>
<option value="41" {% if sec == 41 %}selected="selected"{% endif %}>41</option>
<option value="42" {% if sec == 42 %}selected="selected"{% endif %}>42</option>
<option value="43" {% if sec == 43 %}selected="selected"{% endif %}>43</option>
<option value="44" {% if sec == 44 %}selected="selected"{% endif %}>44</option>
<option value="45" {% if sec == 45 %}selected="selected"{% endif %}>45</option>
<option value="46" {% if sec == 46 %}selected="selected"{% endif %}>46</option>
<option value="47" {% if sec == 47 %}selected="selected"{% endif %}>47</option>
<option value="48" {% if sec == 48 %}selected="selected"{% endif %}>48</option>
<option value="49" {% if sec == 49 %}selected="selected"{% endif %}>49</option>
<option value="50" {% if sec == 50 %}selected="selected"{% endif %}>50</option>
<option value="51" {% if sec == 51 %}selected="selected"{% endif %}>51</option>
<option value="52" {% if sec == 52 %}selected="selected"{% endif %}>52</option>
<option value="53" {% if sec == 53 %}selected="selected"{% endif %}>53</option>
<option value="54" {% if sec == 54 %}selected="selected"{% endif %}>54</option>
<option value="55" {% if sec == 55 %}selected="selected"{% endif %}>55</option>
<option value="56" {% if sec == 56 %}selected="selected"{% endif %}>56</option>
<option value="57" {% if sec == 57 %}selected="selected"{% endif %}>57</option>
<option value="58" {% if sec == 58 %}selected="selected"{% endif %}>58</option>
<option value="59" {% if sec == 59 %}selected="selected"{% endif %}>59</option>
<option value="60" {% if sec == 60 %}selected="selected"{% endif %}>60</option>
</select> UTC<br />
<input type="checkbox" name="noexpire" value="noexpire"{% if row.expiration == 0 %} checked="checked"{% endif %} /> {{ strings.SETNOEXPIRE }}
</td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="16" value="{{ row.comment }}" /></td></tr>
<tr><td class="postblock">{{ strings.TOTALBAN }}</td><td><input type="checkbox" name="total" value="yes"{% if row.total == 'yes' %} checked="checked"{% endif %} style="float:left; clear:none" />
<input type="submit" value="{{ strings.UPDATE }}" style="float: right; clear:none"/></td></tr>
</tbody></table></form>{% endif %}
{% if row.type == 'whitelist' %}
<form action="{{ get_script_name() }}?board={{ board.name }}" method="post">
<input type="hidden" name="task" value="adminedit" />
<input type="hidden" name="type" value="whitelist" />
<input type="hidden" name="num" value="{{ row.num }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANIPLABEL }}</td><td><input type="text" name="ival1" size="24" value="{{ (row.ival1)|dec_to_dot }}" /></td></tr>
<tr><td class="postblock">{{ strings.BANMASKLABEL }}</td><td><input type="text" name="ival2" size="24" value="{{ (row.ival2)|dec_to_dot }}"/></td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="16" value="{{ row.comment }}" />
<input type="submit" value="{{ strings.UPDATE }}" /></td></tr>
</tbody></table></form>
{% endif %}
{% if row.type == 'trust' %}
<form action="{{ get_script_name() }}?board={{ board.name }}" method="post">
<input type="hidden" name="task" value="adminedit" />
<input type="hidden" name="type" value="trust" />
<input type="hidden" name="num" value="{{ row.num }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANTRUSTTRIP }}</td><td><input type="text" name="sval1" size="24" value="{{ row.sval1 }}" /></td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="16" value="{{ row.comment }}" />
<input type="submit" value="{{ strings.UPDATE }}" /></td></tr>
</tbody></table></form>
{% endif %}
{% if row.type == 'wordban' %}
<form action="{{ get_script_name() }}?board={{ board.name }}" method="post">
<input type="hidden" name="task" value="adminedit" />
<input type="hidden" name="type" value="wordban" />
<input type="hidden" name="num" value="{{ row.num }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.BANWORDLABEL }}</td><td><input type="text" name="sval1" size="24" value="{{ row.sval1 }}"/></td></tr>
<tr><td class="postblock">{{ strings.BANCOMMENTLABEL }}</td><td><input type="text" name="comment" size="16" value="{{ row.comment }}" />
<input type="submit" value="{{ strings.UPDATE }}" /></td></tr>
</tbody></table></form>
{% endif %}
{% endfor %}
</div>
{% include 'mini_foot_include.html' %}

+ 7
- 0
templates/error_template.html View File

@@ -0,0 +1,7 @@
{% include 'normal_head_include.html' %}

<h1 style="text-align: center">{{ error }}<br /><br />
<a href="{{ (environ['HTTP_REFERER'])|escape }}">{{ strings.RETURN }}</a><br /><br />
</h1>

{% include 'normal_foot_include.html' %}

+ 7
- 0
templates/error_template_mini.html View File

@@ -0,0 +1,7 @@
{% include 'mini_head_include.html' %}

<h1 style="text-align:center">{{ error }}<br /><br />
<a href="{{ (environ['HTTP_REFERER'])|escape }}">{{ strings.RETURN }}</a><br /><br />
</h1>

{% include 'mini_foot_include.html' %}

+ 12
- 0
templates/first_time_setup.html View File

@@ -0,0 +1,12 @@
{% include 'normal_head_include.html' %}
<div align="center">
<h2>First Time Setup</h2>
<form action="{{ get_script_name() }}" method="post">
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="task" value="entersetup" />
<p>Staff accounts have not yet been set up.</p>
{{ strings.ADMINPASS }}
<input type="password" name="berra" size="8" value="" />
<input type="submit" value="{{ strings.MANASUB }}" />
</form></div>
{% include 'normal_foot_include.html' %}

+ 27
- 0
templates/manager_head_include.html View File

@@ -0,0 +1,27 @@
{% include 'normal_head_include.html' %}

<span style="float:left">[<a href="{{ (board.options.HTML_SELF)|expand_url(1) }}">{{ strings.MANARET }}</a>]</span>
{% if admin %}
<div style="float:right;font-size:85%;padding-left:2em">
<span style="float:left">[<a href="{{ get_script_name() }}?task=mpanel&amp;board={{ board.name }}">{{ strings.MANAPANEL }}</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=reports&amp;board={{ board.name }}">Reports</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=postbackups&amp;board={{ board.name }}">Trash Bin</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=bans&amp;board={{ board.name }}">{{ strings.MANABANS }}</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=proxy&amp;board={{ board.name }}">{{ strings.MANAPROXY }}</a>] </span>
{% if type == 'admin' %}
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=spam&amp;board={{ board.name }}">{{ strings.MANASPAM }}</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=sqldump&amp;board={{ board.name }}">{{ strings.MANASQLDUMP }}</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=sql&amp;board={{ board.name }}">{{ strings.MANASQLINT }}</a>] </span>
{% endif %}
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=rebuild&amp;board={{ board.name }}">{{ strings.MANAREBUILD }}</a>] </span>
{% if type == 'admin' %}
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=staff&amp;board={{ board.name }}">Staff Management</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=stafflog&amp;board={{ board.name }}">Staff Activity</a>] </span>
<span style="float:left;padding-left:0.2em">[<a href="{{ get_script_name() }}?task=security&amp;board={{ board.name }}">Script Security</a>] </span>
{% endif %}
</div>
{% endif %}
<div class="passvalid" style="clear:both"><strong>{{ strings.MANAMODE }}</strong></div>
{% if admin %}<div style="margin-top:0;float:left;font-size:120%;font-weight:bold">&rarr; </div><div style="margin-top:0;margin-left:0.2em;float:left">Logged in as <span class="postername">{{ username }}</span> ({% if type == 'admin' %}Administrator{% endif %}{% if type == 'mod' %}Moderator{% endif %}{% if type == 'globmod' %}Global Moderator{% endif %}). [<a href="{{ get_script_name() }}?task=edituserwindow&amp;username={{ username }}&amp;board={{ board.name }}">Options</a>] [<a href="{{ get_script_name() }}?task=logout&amp;board={{ board.name }}">{{ strings.MANALOGOUT }}</a>] <form action="{{ get_script_name() }}" id="boardselect" method="get" style="display:block"><input type="hidden" name="task" value="admin" /><label>Switch to board: <select name="board">{% for board in boards_select %}<option value="{{ board.board_entry }}">{{ board.board_entry }}</option>{% endfor %}</select></label> <input type="submit" name="switchboard" value="Go" /></form></div>
{% if type != 'mod' %}<div style="margin-top:0;float:right"><strong>Global Options:</strong> [<a href="{{ get_script_name() }}?task=rebuildglobal&amp;board={{ board.name }}">Rebuild Cache</a>]{% if type == 'admin' %}&nbsp;[<a href="{{ get_script_name() }}?task=restart&amp;board={{ board.name }}">Restart Script</a>]{% endif %}</div>{% endif %}{% endif %}
<br clear="all"/>

+ 2
- 0
templates/mini_foot_include.html View File

@@ -0,0 +1,2 @@

</body></html>

+ 35
- 0
templates/mini_head_include.html View File

@@ -0,0 +1,35 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>{{ board.name }} - {{ board.options.TITLE }}</title>
<meta http-equiv="Content-Type" content="text/html;charset={{ config.CHARSET }}" />
<link rel="shortcut icon" href="{{ (board.options.FAVICON)|expand_url }}" />

<style type="text/css">
#adv { background: url('/include/common/unblockad.png') center no-repeat;padding: 0px;margin: 0px auto;text-align:center;width:750px;height:107px;}
body { margin: 0; padding: 8px; margin-bottom: auto; }
blockquote blockquote { margin-left: 0em }
form { margin-bottom: 0px }
form .trap { display:none }
.postarea { text-align: center }
.postarea table { margin: 0px auto; text-align: left }
.thumb { border: none; float: left; margin: 2px 20px }
.nothumb { float: left; background: #eee; border: 2px dashed #aaa; text-align: center; margin: 2px 20px; padding: 1em 0.5em 1em 0.5em; }
.reply blockquote, blockquote :last-child { margin-bottom: 0em }
.reflink a { color: inherit; text-decoration: none }
.reply .filesize { margin-left: 20px }
.userdelete { float: right; text-align: center; white-space: nowrap }
.replypage .replylink { display: none }
</style>

{% for stylesheet in stylesheets %}
<link rel="{% if not stylesheet.default %}alternate {% endif %}stylesheet" type="text/css" href="{{ stylesheet.filename }}" title="{{ stylesheet.title }}" />
{% endfor %}

<script type="text/javascript">var style_cookie="{{ board.options.STYLE_COOKIE }}"; var thread_cookie = "{{ board.name }}_hidden_threads"; var lastopenfield = 0;</script>
<script type="text/javascript" src="{{ (config.JS_FILE)|root_path_to_filename }}"></script>
</head>
<body>

+ 35
- 0
templates/mini_head_refresh_include.html View File

@@ -0,0 +1,35 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>{% if title %}{{ title }} - {% endif %}{{ board.options.TITLE }}</title>
<meta http-equiv="Content-Type" content="text/html;charset={{ config.CHARSET }}" />
<link rel="shortcut icon" href="{{ (board.options.FAVICON)|expand_url }}" />

<style type="text/css">
#adv { background: url('/include/common/unblockad.png') center no-repeat; padding: 0px; margin: 0px auto; text-align: center; }
body { margin: 0; padding: 8px; margin-bottom: auto; }
blockquote blockquote { margin-left: 0em }
form { margin-bottom: 0px }
form .trap { display:none }
.postarea { text-align: center }
.postarea table { margin: 0px auto; text-align: left }
.thumb { border: none; float: left; margin: 2px 20px }
.nothumb { float: left; background: #eee; border: 2px dashed #aaa; text-align: center; margin: 2px 20px; padding: 1em 0.5em 1em 0.5em; }
.reply blockquote, blockquote :last-child { margin-bottom: 0em }
.reflink a { color: inherit; text-decoration: none }
.reply .filesize { margin-left: 20px }
.userdelete { float: right; text-align: center; white-space: nowrap }
.replypage .replylink { display: none }
</style>

{% for stylesheet in stylesheets %}
<link rel="{% if not stylesheet.default %}alternate {% endif %}stylesheet" type="text/css" href="{{ stylesheet.filename }}" title="{{ stylesheet.title }}" />
{% endfor %}

<script type="text/javascript">var style_cookie="{{ board.options.STYLE_COOKIE }}";</script>
<script type="text/javascript" src="{{ (config.JS_FILE)|root_path_to_filename }}"></script>
</head>
<body onload="window.opener.location.reload()">

+ 2
- 0
templates/normal_foot_include.html View File

@@ -0,0 +1,2 @@
{% include 'include/boards/footer.html' %}
</body></html>

+ 60
- 0
templates/normal_head_include.html View File

@@ -0,0 +1,60 @@


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="expires" content="Wed, 03 Nov 1999 12:21:14 GMT" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<title>{% if title %}{{ title }} - {% endif %}{{ board.options.TITLE }}</title>
<meta http-equiv="Content-Type" content="text/html;charset={{ config.CHARSET }}" />
<link rel="shortcut icon" href="{{ (board.options.FAVICON)|expand_url }}" />

<style type="text/css">
#adv { background: url('/include/common/unblockad.png') center no-repeat;padding: 0px;margin: 0px auto;text-align:center;width:750px;height:107px;}
body { margin: 0; padding: 8px; margin-bottom: auto; }
blockquote blockquote { margin-left: 0em }
form { margin-bottom: 0px }
form .trap { display:none }
.postarea { text-align: center }
.postarea table { margin: 0px auto; text-align: left }
.thumb { border: none; float: left; margin: 2px 20px }
.nothumb { float: left; background: #eee; border: 2px dashed #aaa; text-align: center; margin: 2px 20px; padding: 1em 0.5em 1em 0.5em; }
.reply blockquote, blockquote :last-child { margin-bottom: 0em }
.reflink a { color: inherit; text-decoration: none }
.reply .filesize { margin-left: 20px }
.userdelete { float: right; text-align: center; white-space: nowrap }
.replypage .replylink { display: none }
.oekinfo { font-size: small }
.hidden { display: none }
.inline { display: inline }
</style>

{% for stylesheet in stylesheets %}
<link rel="{% if not stylesheet.default %}alternate {% endif %}stylesheet" type="text/css" href="{{ stylesheet.filename }}" title="{{ stylesheet.title }}" />
{% endfor %}

<script type="text/javascript">var style_cookie="{{ board.options.STYLE_COOKIE }}"; var thread_cookie = "{{ board.name }}_hidden_threads"; var lastopenfield = 0;</script>
<script type="text/javascript" src="{{ (config.JS_FILE)|root_path_to_filename }}"></script>
</head>
{% if thread %}<body class="replypage">{% endif %}
{% if not thread %}<body>{% endif %}

{% include 'include/boards/header.html' %}

<div class="adminbar">
{% for stylesheet in stylesheets %}
[<a href="javascript:set_stylesheet('{{ stylesheet.title }}')">{{ stylesheet.title }}</a>]
{% endfor %}
-
[<a href="{{ (config.HOME)|expand_url }}" target="_top">{{ strings.HOME }}</a>]
[<a href="{{ ("board.rss")|expand_url(1) }}" title="Local RSS Feed for This Board"><img src="{{ ("../rss.png")|expand_url }}" style="border:0" alt="RSS" /> Live Feed</a>]
[<a href="{{ get_secure_script_name() }}?task=loginpanel&amp;board={{ board.name }}">{{ strings.ADMIN }}</a>]
</div>

<div class="logo">
{% if board.options.SHOWTITLEIMG == 1 %}<img src="{{ (board.options.TITLEIMG)|expand_url }}" alt="{{ title }}" />{% endif %}
{% if board.options.SHOWTITLEIMG == 2 %}<img src="{{ (board.options.TITLEIMG)|expand_url }}" onclick="this.src=this.src;" alt="{{ board.options.TITLE }}" />{% endif %}
{% if board.options.SHOWTITLEIMG and board.options.SHOWTITLETXT %}<br />{% endif %}
{% if board.options.SHOWTITLETXT %}{{ board.options.TITLE }}{% endif %}
</div><hr />

+ 29
- 0
templates/oekaki_animation_template.html View File

@@ -0,0 +1,29 @@

<html>
<head>
<title>Oekaki Animation</title>
<style type="text/css">
body { background: #9999BB; font-family: sans-serif; }
input,textarea { background-color:#CFCFFF; font-size: small; }
table.nospace { border-collapse:collapse; }
table.nospace tr td { margin:0px; }
.menu { background-color:#CFCFFF; border: 1px solid #666666; padding: 2px; margin-bottom: 2px; }
</style>
</head>
<body>
<table class="nospace" width="100%" height="100%"><tbody><tr>
<td width="100%">
<applet name="pch" code="pch2.PCHViewer.class" codebase="./" archive="PCHViewer.jar" width="100%" height="100%">
<param name="pch_file" value="{{ pch_file }}" />
<param name="tt.zip" value="tt_def.zip" />
<param name="res.zip" value="res.zip" />
<param name="speed" value="0" />
<param name="buffer_canvas" value="true" />
<param name="buffer_progress" value="true" />
</applet>
</td>
</tr>
</tbody>
</table>
</body>
</html>

+ 4
- 0
templates/oekaki_edit_info_template.html View File

@@ -0,0 +1,4 @@

<p class="oekinfo"><strong>
Edited in Oekaki</strong> (Time: {{ time }}, Painter: {{ painter }})
</p>

+ 42
- 0
templates/oekaki_finish_edit_template.html View File

@@ -0,0 +1,42 @@
{% include 'mini_head_include.html' %}

<h1 style="text-align:center;font-size:1em">Now Editing Post No.{{ num }}</h1>
<div class="postarea">
<form id="postform" action="{{ get_script_name() }}" method="post" enctype="multipart/form-data">
<input type="hidden" name="task" value="oekakiedit" />
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="oek_ip" value="{{ oek_ip }}" />
<input type="hidden" name="srcinfo" value="{{ srcinfo }}" />
<input type="hidden" name="num" value="{{ num }}" />
<table><tbody>
<tr><td class="postblock">{{ strings.NAME }}</td><td><input type="text" name="field1" size="28" value="{{ name }}" /></td></tr>
<tr><td class="postblock">{{ strings.EMAIL }}</td><td><input type="text" name="email" size="28" value="{{ email }}" /></td></tr>
<tr><td class="postblock">{{ strings.SUBJECT }}</td><td><input type="text" name="subject" size="35" value="{{ subject }}" />
<input type="submit" value="{{ strings.SUBMIT }}" /></td></tr>
<tr><td class="postblock">{{ strings.COMMENT }}</td><td><textarea name="comment" cols="48" rows="4">{{ comment }}</textarea></td></tr>

{% if image_inp %}
<tr><td class="postblock">{{ strings.UPLOADFILE }}</td><td><input type="file" name="file" size="35" />
{% if textonly_inp %}[<label><input type="checkbox" name="nofile" value="on" />{{ strings.NOFILE }}</label>{% endif %}
</td></tr>
{% endif %}

{% if enable_captcha and not admin %}
<tr><td class="postblock">{{ strings.CAPTCHA }}</td><td><input type="text" name="captcha" size="10" />
<img alt="" src="{{ (captcha_script)|expand_url }}?key={% if oek_parent %}res{{ oek_parent }}{% endif %}{% if not oek_parent %}mainpage{% endif %}&amp;dummy={{ num }}" />
</td></tr>
{% endif %}

<input type="hidden" name="password" value="{{ password }}" />
</tbody></table></form></div>

<hr />

<div align="center">
<img src="{{ (tmpname)|expand_url }}" />
{{ decodedinfo }}
</div>

<hr />

{% include 'normal_foot_include.html' %}

+ 53
- 0
templates/oekaki_finish_template.html View File

@@ -0,0 +1,53 @@
{% include 'normal_head_include.html' %}

[<a href="{{ (board.options.HTML_SELF)|expand_url }}">{{ strings.RETURN }}</a>]
{% if oek_parent %}<div class="theader">{{ strings.POSTING }}</div>{% endif %}

<div class="postarea">
<form id="postform" action="{{ get_script_name() }}" method="post" enctype="multipart/form-data">
<input type="hidden" name="task" value="oekakipost" />
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="oek_ip" value="{{ oek_ip }}" />
<input type="hidden" name="srcinfo" value="{{ srcinfo }}" />
<table><tbody>
{% if not (board.options.FORCED_ANON) %}<tr><td class="postblock">{{ strings.NAME }}</td><td><input type="text" name="field1" value="{{ name }}" size="28" />{% if trip %} {{ trip }}<br />(Enter new tripcode above to change.)<br />[<label><input type="checkbox" value="1" name="killtrip" /> Remove Tripcode?</label>]{% endif %}</td></tr>{% endif %}
<tr><td class="postblock">{{ strings.EMAIL }}</td><td><input type="text" name="email" size="28" /></td></tr>
<tr><td class="postblock">{{ strings.SUBJECT }}</td><td><input type="text" name="subject" size="35" />
<input type="submit" value="{{ strings.SUBMIT }}" /></td></tr>
<tr><td class="postblock">{{ strings.COMMENT }}</td><td><textarea name="comment" cols="48" rows="4"></textarea></td></tr>

{% if image_inp %}
<tr><td class="postblock">{{ strings.UPLOADFILE }}</td><td><input type="file" name="file" size="35" />
{% if textonly_inp %}[<label><input type="checkbox" name="nofile" value="on" />{{ strings.NOFILE }}</label>{% endif %}
</td></tr>
{% endif %}

{% if board.options.ENABLE_CAPTCHA %}
<tr><td class="postblock">{{ strings.CAPTCHA }}</td><td><input type="text" name="captcha" size="10" />
<img alt="" src="{{ (board.options.ENABLE_CAPTCHA)|expand_url }}?key={% if oek_parent %}res{{ oek_parent }}{% endif %}{% if not oek_parent %}mainpage{% endif %}&amp;dummy={{ dummy }}" />
</td></tr>
{% endif %}

<tr><td class="postblock">{{ strings.DELPASS }}</td><td><input type="password" name="password" size="8" /> {{ strings.DELEXPL }}</td></tr>

{% if oek_parent %}
<input type="hidden" name="parent" value="{{ oek_parent }}" />
<tr><td class="postblock">{{ strings.OEKIMGREPLY }}</td>
<td>{{ (strings.OEKREPEXPL)|format((board.options.RES_DIR + oek_parent + config.PAGE_EXT)|expand_url, oek_parent) }}</td></tr>
{% endif %}

<tr><td colspan="2">
<div class="rules">{% include 'rules.html' %}</div></td></tr>
</tbody></table></form></div>
<script type="text/javascript">set_inputs("postform",false)</script>

<hr />

<div align="center">
<img src="{{ (tmpname)|expand_url }}" />
{{ decodedinfo }}
</div>

<hr />

{% include 'normal_foot_include.html' %}

+ 5
- 0
templates/oekaki_info_template.html View File

@@ -0,0 +1,5 @@

<p class="oekinfo">
<strong>Oekaki Post</strong>
(Time: {{ time }}, Painter: {{ painter }}{% if source %}, Source: <a href="{{ source }}">{{ source }}</a>{% endif %}{% if animation %}, Animation: [<a href="{{ get_script_name() }}?task=oekakianimation&amp;board={{ board.name }}&amp;pchfile={{ animation }}" target="_blank">View</a>]{% endif %})
</p>

+ 39
- 0
templates/oekaki_paint_template.html View File

@@ -0,0 +1,39 @@

<html>
<head>
<style type="text/css">
body { background: #9999BB; font-family: sans-serif; }
input,textarea { background-color:#CFCFFF; font-size: small; }
table.nospace { border-collapse:collapse; }
table.nospace tr td { margin:0px; }
.menu { background-color:#CFCFFF; border: 1px solid #666666; padding: 2px; margin-bottom: 2px; }
</style>
</head><body>

<script type="text/javascript" src="palette_selfy.js"></script>
<table class="nospace" width="100%" height="100%"><tbody><tr>
<td width="100%">
<applet code="c.ShiPainter.class" name="paintbbs" archive="spainter_all.jar" width="100%" height="100%">
<param name="image_width" value="{{ oek_x }}" />
<param name="image_height" value="{{ oek_y }}" />
{% if oek_src and not oek_pch %}<param name="image_canvas" value="{{ oek_src }}" />{% endif %}
{% if oek_pch %}<param name="pch_file" value="{{ oek_pch }}" />{% endif %}
<param name="dir_resource" value="./" />
<param name="tt.zip" value="tt_def.zip" />
<param name="res.zip" value="res.zip" />
<param name="tools" value="{{ mode }}" />
<param name="layer_count" value="3" />
<param name="thumbnail_type" value="animation" />
<param name="url_save" value="{{ (tmp_dir + 'getpic.pl')|expand_url }}" />
<param name="url_exit" value="{{ get_script_name() }}?task=finishpaint&amp;board={{ board.name }}&amp;oek_parent={{ oek_parent }}&amp;oek_ip={{ ip }}&amp;{% if oek_editing %}oek_editing=1&amp;password={{ password }}&amp;num={{ num }}&amp;{% endif %}dummy={{ dummy }}&amp;srcinfo={{ time }},{{ oek_painter }},{{ oek_src }}" />
<param name="send_header" value="{{ ip }}" />
</applet>
</td>
{% if selfy %}
<td valign="top">
<script>palette_selfy();</script>
</td>
{% endif %}
</tr></tbody></table>
</body>
</html>

+ 69
- 0
templates/oekaki_post_edit_template.html View File

@@ -0,0 +1,69 @@
{% include 'mini_head_include.html' %}
{% for post in loop %}
<h1 style="text-align:center;font-size:1em">Now Editing Post No.{{ post.num }}</h1>
{% if admin %}<div align="center"><em>{{ strings.NOTAGS }}</em></div>{% endif %}
<div class="postarea">
{% if not admin %}
<form action="{{ ('paint.pl')|expand_url }}" method="get">
<hr />
{{ strings.OEKPAINT }}
<select name="oek_painter">
{% for painters in strings.OEKPAINTERS %}
{% if painter == board.options.OEKAKI_DEFAULT_PAINTER %}
<option value="{{ painter }}" selected="selected">{{ post.name }}</option>
{% endif %}
{% if painter != board.options.OEKAKI_DEFAULT_PAINTER %}
<option value="{{ painter }}">{{ post.name }}</option>
{% endif %}
{% endfor %}
</select>
{{ strings.OEKX }}<input type="text" name="oek_x" size="3" value="{{ post.width }}" />
{{ strings.OEKY }}<input type="text" name="oek_y" size="3" value="{{ post.height }}" />
<input type="hidden" name="oek_src" value="{{ post.image }}" />
<input type="hidden" name="num" value="{{ post.num }}" />
<input type="hidden" name="oek_parent" value="{{ post.parent }}" />
<input type="submit" value="Oekaki Edit" name="oek_editing" />
<input type="hidden" name="password" value="{{ post.password }}" />
<input type="hidden" name="num" value="{{ post.num }}" />
<hr />
</form>
{% endif %}
<form id="postform" action="{{ get_script_name() }}" method="post" enctype="multipart/form-data">
<input type="hidden" name="num" value="{{ post.num }}" />
<input type="hidden" name="password" value="{{ post.password }}" />
<input type="hidden" name="task" value="editpost" />
{% if admin %}
<input type="hidden" name="no_captcha" value="1" />
<input type="hidden" name="no_format" value="1" />{% endif %}
{% if post.parent %}<input type="hidden" name="parent" value="{{ post.parent }}" />{% endif %}
{% if board.options.FORCED_ANON %}<input type="hidden" name="name" />{% endif %}
{% if board.options.SPAM_TRAP %}<div class="trap">{{ strings.SPAMTRAP }}<input type="text" name="name" size="28" /><input type="text" name="link" size="28" /></div>{% endif %}
<table><tbody>
{% if not (board.options.FORCED_ANON) %}<tr><td class="postblock">{{ strings.NAME }}</td><td><input type="text" name="field1" value="{{ post.name }}" size="28" />{% if post.trip %} # {{ post.trip }}<br />(Enter new tripcode above to change.)<br />[<label><input type="checkbox" value="1" name="killtrip" /> Remove Tripcode?</label>]{% endif %}</td></tr>{% endif %}
<tr><td class="postblock">{{ strings.EMAIL }}</td><td><input type="text" name="email" size="28" value="{{ post.email }}" /></td></tr>
<tr><td class="postblock">{{ strings.SUBJECT }}</td><td><input type="text" name="subject" size="35" value="{{ post.subject }}" />
<input type="submit" value="{{ strings.SUBMIT }}" /></td></tr>
<tr><td class="postblock">{{ strings.COMMENT }}</td><td>
<textarea name="comment" cols="48" rows="4">{% if admin %}{{ (post.comment)|clean_string }}{% endif %}{% if not admin %}{{ (post.comment)|tag_killa }}{% endif %}</textarea></td></tr>
{% if board.options.ALLOW_IMAGE_REPLIES or not post.parent %}
<tr><td class="postblock">{{ strings.NEWFILE }}</td><td><input type="file" name="file" size="35" />
<br />(Keep this field blank to leave the file unchanged.)
</td></tr>
{% endif %}
{% if board.options.ENABLE_OEKAKI and not admin %}
<tr><td class="postblock">{{ strings.CAPTCHA }}</td><td><input type="text" name="captcha" size="10" />
<img alt="" src="{{ (board.options.OEKAKI_SCRIPT)|expand_url }}?key={{ (post.parent)|get_captcha_key }}&amp;dummy={{ post.num }}" />
</td></tr>
{% endif %}
</tbody></table></form></div>
{% endfor %}
{% include 'mini_foot_include.html' %}

+ 282
- 0
templates/page_template.html View File

@@ -0,0 +1,282 @@
{% include 'normal_head_include.html' %}

{% if lockedthread != 'yes' %}
{% if thread %}
[<a href="{{ (board.options.HTML_SELF)|expand_url }}">{{ strings.RETURN }}</a>]
{% if not omit %}
<div class="theader">{{ strings.POSTING }}</div>
{% endif %}
{% if omit %}
<div class="theader">Posting Mode: Reply (Abbreviated Thread View)</div>
{% endif %}
{% endif %}

<div class="globalannounce">{% include 'announcements_global.html' %}</div>
<div class="announcements">{% include 'announcements.html' %}</div>

{% if board.options.ENABLE_OEKAKI %}
{% if thread %}<hr />{% endif %}
<div align="center">
<form action="{{ get_script_name() }}" method="get">
<input type="hidden" name="task" value="paint" />
<input type="hidden" name="board" value="{{ board.name }}" />
{% if thread %}<input type="hidden" name="oek_parent" value="{{ thread }}" />{% endif %}
{{ strings.OEKPAINT }}
<select name="oek_painter">
{% for painters in strings.OEKPAINTERS %}
{% if painter == board.options.OEKAKI_DEFAULT_PAINTER %}
<option value="{{ painter }}" selected="selected">{{ name }}</option>
{% endif %}
{% if painter != board.options.OEKAKI_DEFAULT_PAINTER %}
<option value="{{ painter }}">{{ name }}</option>
{% endif %}
{% endfor %}
</select>
{{ strings.OEKX }}<input type="text" name="oek_x" size="3" value="{{ board.options.OEKAKI_DEFAULT_X }}" />
{{ strings.OEKY }}<input type="text" name="oek_y" size="3" value="{{ board.options.OEKAKI_DEFAULT_Y }}" />
{% if thread %}<input type="hidden" name="dummy" value="{{ dummy }}" />{% endif %}
{% if board.options.OEKAKI_ENABLE_MODIFY and thread %}
{{ strings.OEKSOURCE }}
<select name="oek_src">
<option value="">{{ strings.OEKNEW }}</option>
{% for currentthread in threads %}
{% for post in currentthread.posts %}
{% if post.image %}
<option value="{{ post.image }}">{{ (strings.OEKMODIFY)|format(post.num) }}</option>
{% endif %}
{% endfor %}
{% endfor %}
</select>
{% endif %}
<input type="submit" value="{{ strings.OEKSUBMIT }}" />
</form>
</div><hr />
{% endif %}

{% if postform %}
<div class="postarea">
<form id="postform" action="{{ get_script_name() }}" method="post" enctype="multipart/form-data">
<input type="hidden" name="board" value="{{ board.name }}" />
<input type="hidden" name="task" value="post" />
{% if thread %}<input type="hidden" name="parent" value="{{ thread }}" />{% endif %}
{% if not image_inp and not thread and board.options.ALLOW_TEXTONLY %}
<input type="hidden" name="nofile" value="1" />
{% endif %}
{% if board.options.FORCED_ANON %}<input type="hidden" name="name" />{% endif %}
{% if board.options.SPAM_TRAP %}<div class="trap">{{ strings.SPAMTRAP }}<input type="text" name="name" size="28" /><input type="text" name="link" size="28" /></div>{% endif %}

<table><tbody>
{% if not (board.options.FORCED_ANON) %}<tr><td class="postblock">{{ strings.NAME }}</td><td><input type="text" name="field1" size="28" /></td></tr>{% endif %}
<tr><td class="postblock">{{ strings.EMAIL }}</td><td><input type="text" name="email" size="28" /></td></tr>
<tr><td class="postblock">{{ strings.SUBJECT }}</td><td><input type="text" name="subject" size="35" />
<input type="submit" value="{{ strings.SUBMIT }}" /></td></tr>
<tr><td class="postblock">{{ strings.COMMENT }}</td><td><textarea name="comment" cols="48" rows="4"></textarea></td></tr>

{% if image_inp %}
<tr><td class="postblock">{{ strings.UPLOADFILE }}</td><td><input type="file" name="file" size="35" />
{% if textonly_inp %}[<label><input type="checkbox" name="nofile" value="on" />{{ strings.NOFILE }} ]</label>{% endif %}
</td></tr>
{% endif %}

{% if board.options.ENABLE_CAPTCHA %}
<tr><td class="postblock">{{ strings.CAPTCHA }}</td><td><input type="text" name="captcha" size="10" />
<img alt="" src="{{ (board.options.CAPTCHA_SCRIPT)|expand_url }}?key={{ (thread)|get_captcha_key }}&amp;dummy={{ dummy }}" />
</td></tr>
{% endif %}

<tr><td class="postblock">{{ strings.DELPASS }}</td><td><input type="password" name="password" size="8" /> {{ strings.DELEXPL }}</td></tr>
<tr><td colspan="2">
<div class="rules">{% include 'rules.html' %}</div></td></tr>
</tbody></table></form></div>
<script type="text/javascript">set_inputs("postform",false)</script>

{% endif %}
{% endif %}

{% if lockedthread == 'yes' %}
[<a href="{{ (board.options.HTML_SELF)|expand_url }}">{{ strings.RETURN }}</a>]
<p style="font-weight:bold;font-size:1.2em">{{ strings.LOCKEDANNOUNCE }}</p>
{% endif %}

<hr />

{% if not thread %}
<script type="text/javascript">
var hiddenThreads=get_cookie(thread_cookie);
</script>
{% endif %}

<form id="delform" action="{{ get_script_name() }}" method="post">

{% for currentthread in threads %}
{% for post in currentthread.posts %}
{% if not post.parent %}
<div id="t{{ post.num }}_info" style="float:left"></div>
{% if not thread %}<span id="t{{ post.num }}_display" style="float:right"><a href="javascript:threadHide('t{{ post.num }}')" id="togglet{{ post.num }}">Hide Thread (&minus;)</a><ins><noscript><br/>(Javascript Required.)</noscript></ins></span>{% endif %}
<div id="t{{ post.num }}">
{% if post.image %}
<span class="filesize">{{ strings.PICNAME }}<a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ (post.image)|basename }}</a>
-(<em>{% if (post.size <= 10240) %}{{ post.size }} B{% endif %}{% if (post.size > 10240 and post.size < 1048576) %}{{ (post.size / 1024)|round(1) }} KiB{% endif %}{% if (post.size >= 1048576) %}{{ (post.size / 1048576)|round(1) }} MiB{% endif %}, {{ post.width }}x{{ post.height }}</em>)</span>
<span class="thumbnailmsg">{{ strings.THUMB }}</span><br />

{% if post.thumbnail %}
<a target="_blank" href="{{ (post.image)|expand_image_url }}" >
<img src="{{ (post.thumbnail)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="{{ post.size }}" class="thumb" /></a>
{% endif %}
{% if not post.thumbnail %}
{% if board.options.DELETED_THUMBNAIL %}
<a target="_blank" href="{{ (board.options.DELETED_IMAGE)|expand_image_url }}">
<img src="{{ (board.options.DELETED_THUMBNAIL)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="" class="thumb" /></a>
{% endif %}
{% if not (board.options.DELETED_THUMBNAIL) %}
<div class="nothumb"><a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ strings.NOTHUMB }}</a></div>
{% endif %}
{% endif %}
{% endif %}

<a name="{{ post.num }}"></a>
<label><input type="checkbox" name="num" value="{{ post.num }}" />
<span class="filetitle">{{ post.subject }}</span>
{% if post.email %}<span class="postername"><a href="{{ post.email }}">{{ post.name }}</a></span>{% if post.trip %}<span class="postertrip"><a href="{{ post.email }}">{{ post.trip }}</a></span>{% endif %}{% endif %}
{% if not post.email %}<span class="postername">{{ post.name }}</span>{% if post.trip %}<span class="postertrip">{{ post.trip }}</span>{% endif %}{% endif %}
{% if post.stickied %} <img src="{{ ('/include/boards/sticky.gif')|expand_url }}" alt="{{ strings.STICKIEDALT }}" title="{{ strings.STICKIED }}" /> {% endif %}
{% if post.locked == 'yes' %} <img src="{{ ('/include/boards/locked.gif')|expand_url }}" alt="{{ strings.LOCKEDALT }}" title="{{ strings.LOCKED }}" /> {% endif %}
{{ post.date }}</label>
<span class="reflink">
{% if not thread %}<span><a href="{{ (post.num)|get_reply_link(0) }}#{{ post.num }}">No.</a><a href="{{ (post.num)|get_reply_link(0) }}#i{{ post.num }}">{{ post.num }}</a></span>{% endif %}
{% if thread %}<span><a href="#{{ post.num }}">No.</a><a href="javascript:insert('&gt;&gt;{{ post.num }}')">{{ post.num }}</a></span>{% endif %}
</span>&nbsp;
<span class="deletelink" id="deletelink{{ post.num }}">
[<a href="{{ get_script_name() }}?task=delpostwindow&amp;num={{ post.num }}&amp;board={{ board.name }}" target="_blank" onclick="passfield('{{ post.num }}',false); return false">Delete</a>]
<span id="delpostcontent{{ post.num }}" style="display:inline"></span>
</span>&nbsp;
[<a href="{{ get_script_name() }}?task=edit&amp;board={{ board.name }}&amp;num={{ post.num }}{% if post.admin_post == 'yes' %}&amp;admin_post=1{% endif %}" target="_blank" onclick="popUpPost('{{ get_script_name() }}?task=edit&amp;board={{ board.name }}&amp;num={{ post.num }}{% if post.admin_post == 'yes' %}&amp;admin_post=1{% endif %}'); return false">Edit</a>]&nbsp;
{% if not thread %}
{% if post.locked != 'yes' %}[<a href="{{ (post.num)|get_reply_link(0) }}">{{ strings.REPLY }}</a>{% if config.ENABLE_ABBREVIATED_THREAD_PAGES and currentthread.omit and currentthread.omit + board.options.REPLIES_PER_THREAD > config.POSTS_IN_ABBREVIATED_THREAD_PAGES %}/<a href="{{ (post.num)|get_reply_link(0, 1) }}">Last {{ config.POSTS_IN_ABBREVIATED_THREAD_PAGES }}</a>{% endif %}]{% endif %}
{% if post.locked == 'yes' %}[<a href="{{ (post.num)|get_reply_link(0) }}">{{ strings.VIEW }}</a>]{% endif %}
{% endif %}

<blockquote>
{% if omit %}{{ post.comment|redirect_reply_links(min_res) }}{% else %}{{ post.comment }}{% endif %}
{% if post.abbrev %}<div class="abbrev">{{ (strings.ABBRTEXT)|format((config.ENABLE_ABBREVIATED_THREAD_PAGES and currentthread.omit and currentthread.omit + board.options.REPLIES_PER_THREAD > config.POSTS_IN_ABBREVIATED_THREAD_PAGES) and (post.num)|get_reply_link(post.parent, 1) or (post.num)|get_reply_link(post.parent)) }}</div>{% endif %}
{% if post.lastedit %}<p style="font-size: small; font-style: italic">{{ strings.LASTEDITED }}{% if post.admin_post == 'yes' %} {{ strings.BYMOD }}{% endif %} {{ post.lastedit }}.</p>{% endif %}
</blockquote>

{% if not thread and currentthread.omit %}
<span class="omittedposts">
{% if currentthread.omitimages and not post.locked %}{{ (strings.ABBRIMG)|format(currentthread.omit, currentthread.omitimages) }}{% endif %}
{% if currentthread.omitimages and post.locked %}{{ (strings.ABBRIMG_LOCK)|format(currentthread.omit, currentthread.omitimages) }}{% endif %}
{% if not currentthread.omitimages and not post.locked %}{{ (strings.ABBR)|format(currentthread.omit) }}{% endif %}
{% if not currentthread.omitimages and post.locked %}{{ (strings.ABBR_LOCK)|format(currentthread.omit) }}{% endif %}
</span>
{% endif %}
{% if thread and omit %}
<span class="omittedposts">
This page shows only the latest {{ config.POSTS_IN_ABBREVIATED_THREAD_PAGES }} replies to this thread.
For the other {{ omit }}, refer to <a href="{{ (thread)|get_reply_link(0) }}">the full thread page</a>.
</span>
{% endif %}
{% if not thread %}
<script type="text/javascript">
if (hiddenThreads.indexOf('t{{ post.num }},') != -1)
{
toggleHidden('t{{ post.num }}');
}
</script>
{% endif %}
{% endif %}
{% if post.parent %}
<table><tbody><tr><td class="doubledash">&gt;&gt;</td>
<td class="reply" id="reply{{ post.num }}">

<a name="{{ post.num }}"></a>
<label><input type="checkbox" name="num" value="{{ post.num }}" />
<span class="replytitle">{{ post.subject }}</span>
{% if post.email %}<span class="commentpostername"><a href="{{ post.email }}">{{ post.name }}</a></span>{% if post.trip %}<span class="postertrip"><a href="{{ post.email }}">{{ post.trip }}</a></span>{% endif %}{% endif %}
{% if not post.email %}<span class="commentpostername">{{ post.name }}</span>{% if post.trip %}<span class="postertrip">{{ post.trip }}</span>{% endif %}{% endif %}
{{ post.date }}</label>
<span class="reflink">
{% if not thread %}<span><a href="{{ (post.parent)|get_reply_link(0) }}#{{ post.num }}">No.</a><a href="{{ (post.parent)|get_reply_link(0) }}#i{{ post.num }}">{{ post.num }}</a></span>{% endif %}
{% if thread %}<span><a href="#{{ post.num }}">No.</a><a href="javascript:insert('&gt;&gt;{{ post.num }}')">{{ post.num }}</a></span>{% endif %}
</span>&nbsp;
<span class="deletelink" id="deletelink{{ post.num }}">
[<a href="{{ get_script_name() }}?task=delpostwindow&amp;num={{ post.num }}&amp;board={{ board.name }}" target="_blank" onclick="passfield('{{ post.num }}', false); return false">Delete</a>]
<span id="delpostcontent{{ post.num }}" style="display:inline"></span>
</span>&nbsp;
[<a href="{{ get_script_name() }}?task=edit&amp;board={{ board.name }}&amp;num={{ post.num }}{% if post.admin_post == 'yes' %}&amp;admin_post=1{% endif %}" target="_blank" onclick="popUpPost('{{ get_script_name() }}?task=edit&amp;board={{ board.name }}&amp;num={{ post.num }}{% if post.admin_post == 'yes' %}&amp;admin_post=1{% endif %}'); return false">Edit</a>]

{% if post.image %}
<br />
<span class="filesize">{{ strings.PICNAME }}<a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ (post.image)|basename }}</a>
-(<em>{% if (post.size <= 10240) %}{{ post.size }} B{% endif %}{% if (post.size > 10240 and post.size < 1048576) %}{{ (post.size / 1024)|round(1) }} KiB{% endif %}{% if (post.size >= 1048576) %}{{ (post.size / 1048576)|round(1) }} MiB{% endif %}, {{ post.width }}x{{ post.height }}</em>)</span>
<span class="thumbnailmsg">{{ strings.THUMB }}</span><br />

{% if post.thumbnail %}
<a target="_blank" href="{{ (post.image)|expand_image_url }}">
<img src="{{ (post.thumbnail)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="{{ post.size }}" class="thumb" id="img{{ (post.image)|basename }}" /></a>
{% endif %}
{% if not post.thumbnail %}
{% if board.options.DELETED_THUMBNAIL %}
<a target="_blank" href="{{ (board.options.DELETED_IMAGE)|expand_image_url }}">
<img src="{{ (board.options.DELETED_THUMBNAIL)|expand_url }}" width="{{ post.tn_width }}" height="{{ post.tn_height }}" alt="" class="thumb" /></a>
{% endif %}
{% if not (board.options.DELETED_THUMBNAIL) %}
<div class="nothumb"><a target="_blank" href="{{ (post.image)|expand_image_url }}">{{ strings.NOTHUMB }}</a></div>
{% endif %}
{% endif %}
{% endif %}

<blockquote>
{% if omit %}{{ post.comment|redirect_reply_links(min_res) }}{% else %}{{ post.comment }}{% endif %}
{% if post.abbrev %}<div class="abbrev">{{ (strings.ABBRTEXT)|format(((config.ENABLE_ABBREVIATED_THREAD_PAGES and currentthread.omit and currentthread.omit + board.options.REPLIES_PER_THREAD > config.POSTS_IN_ABBREVIATED_THREAD_PAGES) and (post.num)|get_reply_link(post.parent, 1) or (post.num)|get_reply_link(post.parent))) }}</div>{% endif %}
{% if post.lastedit %}<p style="font-size: small; font-style: italic">Last edited{% if post.admin_post == 'yes' %} by moderator{% endif %} {{ post.lastedit }}.</p>{% endif %}
</blockquote>

</td></tr></tbody></table>
{% endif %}
{% endfor %}
</div>
<br clear="left" /><hr />
{% endfor %}

<table class="userdelete"><tbody><tr><td>
<input type="hidden" name="board" value="{{ board.name }}" />
{{ strings.REPDEL }}[<label><input type="checkbox" name="fileonly" value="on" />{{ strings.DELPICONLY }}</label>]
{{ strings.DELKEY }}<input type="password" name="password" size="8" />
<input value="{{ strings.DELETE }}" name="task" type="submit" />
</td></tr>
<tr><td>Report Post(s) to Staff <input value="Report" name="task" type="submit" /></td></tr>
</tbody></table>
</form>
<script type="text/javascript">set_delpass("delform")</script>

{% if not thread %}
<table border="1"><tbody><tr><td>

{% if prevpage %}<form method="get" action="{{ prevpage }}"><input value="{{ strings.PREV }}" type="submit" /></form>{% endif %}
{% if not prevpage %}{{ strings.FIRSTPG }}{% endif %}

</td><td>

{% for page in pages %}
{% if not page.current %}[<a href="{{ page.filename }}">{{ page.page }}</a>]{% endif %}
{% if page.current %}[{{ page.page }}]{% endif %}
{% endfor %}

</td><td>

{% if nextpage %}<form method="get" action="{{ nextpage }}"><input value="{{ strings.NEXT }}" type="submit" /></form>{% endif %}
{% if not nextpage %}{{ strings.LASTPG }}{% endif %}

</td></tr></tbody></table>
{% endif %}

<br clear="all" />

{% include 'normal_foot_include.html' %}

+ 26
- 0
templates/pagination_section.html View File

@@ -0,0 +1,26 @@

<div align="center">
There were <strong>{{ rowcount }}</strong> entries found. Showing {{ perpage }} per page.
<br />
<span>
{% if page != 1 and number_of_pages %}<a href="{{ rooturl }}&amp;page=1&amp;perpage={{ perpage }}">{% endif %}
&lt;&lt;{% if page != 1 and number_of_pages %}</a>{% endif %}
</span>
<span style="padding-left:1em">
{% if page != 1 and number_of_pages %}<a href="{{ rooturl }}&amp;page={{ page - 1 }}&amp;perpage={{ perpage }}">{% endif %}
&lt;{% if page != 1 and number_of_pages %}</a>{% endif %}