From 9124c6b3058e82762ddcb6d032cd8afc6d544dcc Mon Sep 17 00:00:00 2001 From: orynider Date: Wed, 23 Dec 2020 03:18:48 +0200 Subject: [PATCH] Adding new features. Preparing Alpha. --- .htaccess | 221 + .htpasswd.autoindex | 2 + AutoIndex.conf.php | 6 +- README.md | 782 +- Readme.htm | 4 +- access.log | 1 - change_log.html | 11 +- classes/Admin.php | 59 +- classes/ConfigData.php | 34 +- classes/Deactivated_Super_Globals.php | 138 + classes/DirItem.php | 13 +- classes/ExceptionDisplay.php | 8 +- classes/FileItem.php | 47 +- classes/Htaccess.php | 3 +- classes/Image.php | 30 +- classes/Language.php | 14 +- classes/Logging.php | 15 +- classes/MimeType.php | 16 +- classes/MobileDeviceDetect.php | 389 + classes/RequestVars.php | 1016 +++ classes/Size.php | 3 +- classes/Stream.php | 191 + classes/Template.php | 8 +- classes/TemplateIndexer.php | 10 +- classes/TemplateInfo.php | 9 +- classes/Url.php | 13 +- classes/User.php | 11 +- config.php | 5 +- description_file | 5 +- favicon.gif | Bin 1735 -> 6296 bytes favicon.ico | Bin 0 -> 17542 bytes hidden_files | 3 + index.php | 250 +- index_icons/winvista/image.png | Bin 3391 -> 2020 bytes languages/al.txt | 501 +- languages/ar.txt | 589 ++ languages/arc.txt | 589 ++ languages/bg.txt | 502 +- languages/ca.txt | 503 +- languages/cz.txt | 589 ++ languages/da.txt | 589 ++ languages/de.txt | 569 +- languages/el.txt | 592 +- languages/en.txt | 71 +- languages/en_UK.txt | 70 +- languages/en_US.txt | 71 +- languages/fr.txt | 502 +- languages/he.txt | 70 +- languages/hu.txt | 502 +- languages/it.txt | 502 +- languages/ja.txt | 502 +- languages/ko.txt | 592 +- languages/ms.txt | 592 +- languages/nl.txt | 592 +- languages/no.txt | 592 +- languages/pl.txt | 592 +- languages/pt.txt | 499 ++ languages/pt_BR.txt | 502 +- languages/ro.txt | 71 +- languages/ro_MD.txt | 71 +- languages/ro_RO.txt | 71 +- languages/ru.txt | 499 +- languages/sk.txt | 592 +- languages/sr.txt | 500 +- languages/sv.txt | 589 ++ languages/th.txt | 500 +- languages/tr.txt | 500 +- nl/index.htm | 10 - phpinfo.php | 5 + ro_ro/index.htm | 10 - ru/index.htm | 10 - templates/SwiftBlue/cookieconsent.min.js | 2 +- templates/SwiftBlue/global_header.tpl | 26 +- templates/SwiftBlue/global_header2.tpl | 300 + templates/SwiftBlue/index.html | 6581 +++++++++++++++++ templates/SwiftBlue/table_header.tpl | 32 - templates/SwiftBlueBeitDina/SwiftBlue.cfg | 293 + templates/SwiftBlueBeitDina/SwiftBlue.css | 3477 +++++++++ .../SwiftBlueBeitDina/admin/SwiftBlue.css | 12 + templates/SwiftBlueBeitDina/admin/admin.css | 45 + .../SwiftBlueBeitDina/admin}/index.htm | 0 .../admin/mainpage_header.html | 31 + templates/SwiftBlueBeitDina/ajax.js | 394 + templates/SwiftBlueBeitDina/alternate.css | 134 + templates/SwiftBlueBeitDina/biblia_online.js | 9 + .../collapsiblecategories.js | 40 + .../SwiftBlueBeitDina/cookieconsent.min.css | 6 + .../SwiftBlueBeitDina/cookieconsent.min.js | 1 + templates/SwiftBlueBeitDina/core.js | 1819 +++++ templates/SwiftBlueBeitDina/default.css | 128 + templates/SwiftBlueBeitDina/documente.js | 22 + templates/SwiftBlueBeitDina/dynifs.js | 83 + templates/SwiftBlueBeitDina/each_file.tpl | 39 + templates/SwiftBlueBeitDina/editor.js | 403 + .../SwiftBlueBeitDina/en/button_pm_new.gif | Bin 0 -> 2094 bytes .../SwiftBlueBeitDina/en/button_pm_reply.gif | Bin 0 -> 1669 bytes .../en/button_topic_locked.gif | Bin 0 -> 2032 bytes .../SwiftBlueBeitDina/en/button_topic_new.gif | Bin 0 -> 2061 bytes .../en/button_topic_reply.gif | Bin 0 -> 2128 bytes .../SwiftBlueBeitDina/en/icon_contact_aim.gif | Bin 0 -> 1511 bytes .../en/icon_contact_email.gif | Bin 0 -> 1628 bytes .../SwiftBlueBeitDina/en/icon_contact_icq.gif | Bin 0 -> 1617 bytes .../en/icon_contact_jabber.gif | Bin 0 -> 1653 bytes .../en/icon_contact_msnm.gif | Bin 0 -> 1572 bytes .../SwiftBlueBeitDina/en/icon_contact_pm.gif | Bin 0 -> 1603 bytes .../SwiftBlueBeitDina/en/icon_contact_www.gif | Bin 0 -> 1589 bytes .../en/icon_contact_yahoo.gif | Bin 0 -> 1583 bytes .../SwiftBlueBeitDina/en/icon_post_delete.gif | Bin 0 -> 1086 bytes .../SwiftBlueBeitDina/en/icon_post_edit.gif | Bin 0 -> 1674 bytes .../SwiftBlueBeitDina/en/icon_post_info.gif | Bin 0 -> 1090 bytes .../SwiftBlueBeitDina/en/icon_post_quote.gif | Bin 0 -> 1669 bytes .../SwiftBlueBeitDina/en/icon_post_report.gif | Bin 0 -> 1096 bytes .../en/icon_user_offline.gif | Bin 0 -> 1556 bytes .../SwiftBlueBeitDina/en/icon_user_online.gif | Bin 0 -> 1611 bytes .../en/icon_user_profile.gif | Bin 0 -> 1601 bytes .../SwiftBlueBeitDina/en/icon_user_search.gif | Bin 0 -> 1624 bytes .../SwiftBlueBeitDina/en/icon_user_warn.gif | Bin 0 -> 1101 bytes .../SwiftBlueBeitDina/en}/index.htm | 2 +- templates/SwiftBlueBeitDina/en/stylesheet.css | 31 + templates/SwiftBlueBeitDina/formIE.css | 19 + templates/SwiftBlueBeitDina/forum_fn.js | 937 +++ templates/SwiftBlueBeitDina/gecko.css | 3 + templates/SwiftBlueBeitDina/global_footer.tpl | 46 + templates/SwiftBlueBeitDina/global_header.tpl | 300 + .../images/announce_read.gif | Bin 0 -> 307 bytes .../images/announce_read_locked.gif | Bin 0 -> 304 bytes .../images/announce_read_locked_mine.gif | Bin 0 -> 324 bytes .../images/announce_read_mine.gif | Bin 0 -> 328 bytes .../images/announce_unread.gif | Bin 0 -> 289 bytes .../images/announce_unread_locked.gif | Bin 0 -> 292 bytes .../images/announce_unread_locked_mine.gif | Bin 0 -> 308 bytes .../images/announce_unread_mine.gif | Bin 0 -> 305 bytes .../SwiftBlueBeitDina/images/background.gif | Bin 0 -> 666 bytes .../images/backgroundbluelight.gif | Bin 0 -> 54 bytes .../images/block_icons/block_cache.gif | Bin 0 -> 97 bytes .../images/block_icons/block_delete.gif | Bin 0 -> 73 bytes .../images/block_icons/block_edit.gif | Bin 0 -> 182 bytes .../images/block_icons/block_edit2.gif | Bin 0 -> 274 bytes .../images/block_icons/block_edit_admin.gif | Bin 0 -> 237 bytes .../images/block_icons/block_edit_split.gif | Bin 0 -> 232 bytes .../images/block_icons/block_hidden.gif | Bin 0 -> 118 bytes .../images/block_icons/block_move_down.gif | Bin 0 -> 71 bytes .../images/block_icons/block_move_left.gif | Bin 0 -> 70 bytes .../images/block_icons/block_move_right.gif | Bin 0 -> 87 bytes .../images/block_icons/block_move_up.gif | Bin 0 -> 73 bytes .../images/block_icons/contract.gif | Bin 0 -> 75 bytes .../images/block_icons/expand.gif | Bin 0 -> 79 bytes .../images/block_icons/spacer.gif | Bin 0 -> 43 bytes .../SwiftBlueBeitDina/images/bodyline.jpg | Bin 0 -> 5888 bytes .../SwiftBlueBeitDina/images/cellpic.gif | Bin 0 -> 722 bytes .../SwiftBlueBeitDina/images/cellpic1.gif | Bin 0 -> 217 bytes .../SwiftBlueBeitDina/images/cellpic2.jpg | Bin 0 -> 1410 bytes .../SwiftBlueBeitDina/images/cellpic2_rtl.jpg | Bin 0 -> 601 bytes .../SwiftBlueBeitDina/images/cellpic3.gif | Bin 0 -> 371 bytes .../SwiftBlueBeitDina/images/created_by.jpg | Bin 0 -> 15319 bytes .../SwiftBlueBeitDina/images/forum_link.gif | Bin 0 -> 714 bytes .../SwiftBlueBeitDina/images/forum_read.gif | Bin 0 -> 677 bytes .../images/forum_read_locked.gif | Bin 0 -> 673 bytes .../images/forum_read_subforum.gif | Bin 0 -> 705 bytes .../SwiftBlueBeitDina/images/forum_unread.gif | Bin 0 -> 663 bytes .../images/forum_unread_locked.gif | Bin 0 -> 660 bytes .../images/forum_unread_subforum.gif | Bin 0 -> 688 bytes .../SwiftBlueBeitDina/images/global_read.gif | Bin 0 -> 307 bytes .../images/global_read_locked.gif | Bin 0 -> 304 bytes .../images/global_read_locked_mine.gif | Bin 0 -> 324 bytes .../images/global_read_mine.gif | Bin 0 -> 328 bytes .../images/global_unread.gif | Bin 0 -> 289 bytes .../images/global_unread_locked.gif | Bin 0 -> 292 bytes .../images/global_unread_locked_mine.gif | Bin 0 -> 308 bytes .../images/global_unread_mine.gif | Bin 0 -> 305 bytes .../images/icon_mini_email.gif | Bin 0 -> 1010 bytes .../images/icon_mini_faq.gif | Bin 0 -> 219 bytes .../images/icon_mini_forum.gif | Bin 0 -> 1101 bytes .../images/icon_mini_groups.gif | Bin 0 -> 222 bytes .../images/icon_mini_help.gif | Bin 0 -> 980 bytes .../images/icon_mini_home.gif | Bin 0 -> 979 bytes .../images/icon_mini_login.gif | Bin 0 -> 233 bytes .../images/icon_mini_members.gif | Bin 0 -> 223 bytes .../images/icon_mini_message.gif | Bin 0 -> 232 bytes .../images/icon_mini_notification.gif | Bin 0 -> 543 bytes .../images/icon_mini_profile.gif | Bin 0 -> 238 bytes .../images/icon_mini_register.gif | Bin 0 -> 224 bytes .../images/icon_mini_search.gif | Bin 0 -> 238 bytes .../images/icon_mini_settings.gif | Bin 0 -> 1037 bytes .../images/icon_post_delete.gif | Bin 0 -> 314 bytes .../images/icon_post_info.gif | Bin 0 -> 305 bytes .../images/icon_post_report.gif | Bin 0 -> 308 bytes .../images/icon_post_target.gif | Bin 0 -> 122 bytes .../images/icon_post_target_unread.gif | Bin 0 -> 122 bytes .../images/icon_topic_attach.gif | Bin 0 -> 217 bytes .../images/icon_topic_deleted.gif | Bin 0 -> 947 bytes .../images/icon_topic_deleted.png | Bin 0 -> 1205 bytes .../images/icon_topic_latest.gif | Bin 0 -> 135 bytes .../images/icon_topic_newest.gif | Bin 0 -> 133 bytes .../images/icon_topic_reported.gif | Bin 0 -> 462 bytes .../images/icon_topic_unapproved.gif | Bin 0 -> 334 bytes .../images/icon_user_warn.gif | Bin 0 -> 673 bytes templates/SwiftBlueBeitDina/images/index.htm | 16 + templates/SwiftBlueBeitDina/images/logo.gif | Bin 0 -> 2203 bytes .../SwiftBlueBeitDina/images/logo_med.gif | Bin 0 -> 5472 bytes .../SwiftBlueBeitDina/images/logo_mxBB.gif | Bin 0 -> 2203 bytes .../SwiftBlueBeitDina/images/logo_small.gif | Bin 0 -> 2443 bytes .../SwiftBlueBeitDina/images/no_avatar.gif | Bin 0 -> 930 bytes .../images/page_icons/nav_about_us.gif | Bin 0 -> 2278 bytes .../images/page_icons/nav_announcement.gif | Bin 0 -> 1278 bytes .../images/page_icons/nav_bible.gif | Bin 0 -> 12876 bytes .../images/page_icons/nav_calendar.gif | Bin 0 -> 1160 bytes .../images/page_icons/nav_chatbox.gif | Bin 0 -> 1848 bytes .../images/page_icons/nav_develope.gif | Bin 0 -> 1026 bytes .../images/page_icons/nav_download.gif | Bin 0 -> 1156 bytes .../images/page_icons/nav_ekklesia.gif | Bin 0 -> 1809 bytes .../images/page_icons/nav_email.gif | Bin 0 -> 1060 bytes .../images/page_icons/nav_email2.gif | Bin 0 -> 1125 bytes .../images/page_icons/nav_explorer.gif | Bin 0 -> 1179 bytes .../images/page_icons/nav_forum.gif | Bin 0 -> 1131 bytes .../images/page_icons/nav_guestbook.gif | Bin 0 -> 2389 bytes .../images/page_icons/nav_help.gif | Bin 0 -> 1184 bytes .../images/page_icons/nav_home.gif | Bin 0 -> 1016 bytes .../images/page_icons/nav_info.gif | Bin 0 -> 1192 bytes .../images/page_icons/nav_login.gif | Bin 0 -> 754 bytes .../images/page_icons/nav_members.gif | Bin 0 -> 1175 bytes .../images/page_icons/nav_musik.gif | Bin 0 -> 1220 bytes .../images/page_icons/nav_mydoc.gif | Bin 0 -> 1780 bytes .../images/page_icons/nav_news.gif | Bin 0 -> 1415 bytes .../images/page_icons/nav_profile.gif | Bin 0 -> 1012 bytes .../images/page_icons/nav_promote.gif | Bin 0 -> 1336 bytes .../images/page_icons/nav_radio.gif | Bin 0 -> 2494 bytes .../images/page_icons/nav_rate.gif | Bin 0 -> 1285 bytes .../images/page_icons/nav_register.gif | Bin 0 -> 1019 bytes .../images/page_icons/nav_search.gif | Bin 0 -> 1132 bytes .../images/page_icons/nav_settings.gif | Bin 0 -> 1155 bytes .../images/page_icons/nav_sponsors.gif | Bin 0 -> 1993 bytes .../images/page_icons/nav_statistics.gif | Bin 0 -> 1089 bytes .../images/page_icons/nav_theme.gif | Bin 0 -> 1276 bytes .../images/page_icons/nav_theme2.gif | Bin 0 -> 1144 bytes .../images/page_icons/nav_weblinks.gif | Bin 0 -> 1135 bytes .../images/page_icons/plus.gif | Bin 0 -> 181 bytes .../images/page_icons/spacer.gif | Bin 0 -> 807 bytes .../images/page_icons/thumb_globe.gif | Bin 0 -> 2355 bytes .../images/page_icons/thumb_news.gif | Bin 0 -> 2564 bytes .../SwiftBlueBeitDina/images/poll_center.gif | Bin 0 -> 92 bytes .../SwiftBlueBeitDina/images/poll_left.gif | Bin 0 -> 113 bytes .../SwiftBlueBeitDina/images/poll_right.gif | Bin 0 -> 113 bytes .../SwiftBlueBeitDina/images/site_logo.gif | Bin 0 -> 7151 bytes templates/SwiftBlueBeitDina/images/spacer.gif | Bin 0 -> 807 bytes .../SwiftBlueBeitDina/images/sticky_read.gif | Bin 0 -> 344 bytes .../images/sticky_read_locked.gif | Bin 0 -> 338 bytes .../images/sticky_read_locked_mine.gif | Bin 0 -> 336 bytes .../images/sticky_read_mine.gif | Bin 0 -> 352 bytes .../images/sticky_unread.gif | Bin 0 -> 325 bytes .../images/sticky_unread_locked.gif | Bin 0 -> 324 bytes .../images/sticky_unread_locked_mine.gif | Bin 0 -> 336 bytes .../images/sticky_unread_mine.gif | Bin 0 -> 339 bytes .../SwiftBlueBeitDina/images/subscribe.gif | Bin 0 -> 1691 bytes .../SwiftBlueBeitDina/images/topic_moved.gif | Bin 0 -> 660 bytes .../SwiftBlueBeitDina/images/topic_read.gif | Bin 0 -> 344 bytes .../images/topic_read_hot.gif | Bin 0 -> 1902 bytes .../images/topic_read_hot_mine.gif | Bin 0 -> 1903 bytes .../images/topic_read_locked.gif | Bin 0 -> 333 bytes .../images/topic_read_locked_mine.gif | Bin 0 -> 337 bytes .../images/topic_read_mine.gif | Bin 0 -> 350 bytes .../SwiftBlueBeitDina/images/topic_unread.gif | Bin 0 -> 336 bytes .../images/topic_unread_hot.gif | Bin 0 -> 1888 bytes .../images/topic_unread_hot_mine.gif | Bin 0 -> 1895 bytes .../images/topic_unread_locked.gif | Bin 0 -> 459 bytes .../images/topic_unread_locked_mine.gif | Bin 0 -> 334 bytes .../images/topic_unread_mine.gif | Bin 0 -> 350 bytes .../SwiftBlueBeitDina/images/upload_bar.gif | Bin 0 -> 12892 bytes .../SwiftBlueBeitDina/images/whosonline.gif | Bin 0 -> 962 bytes .../SwiftBlueBeitDina}/index.htm | 0 templates/SwiftBlueBeitDina/installer.js | 615 ++ templates/SwiftBlueBeitDina/intro2.js | 6 + .../SwiftBlueBeitDina/jquery-3.4.1.min.js | 2 + .../SwiftBlueBeitDina/jquery.collapse.js | 151 + templates/SwiftBlueBeitDina/jquery.cookie.js | 96 + templates/SwiftBlueBeitDina/jquery.min.js | 4 + .../jquery.sticky-kit.min.js | 9 + templates/SwiftBlueBeitDina/mx_addon.css | 165 + .../SwiftBlueBeitDina/plupload.full.min.js | 29 + templates/SwiftBlueBeitDina/plupload.js | 714 ++ .../SwiftBlueBeitDina/ro/button_pm_new.gif | Bin 0 -> 2185 bytes .../SwiftBlueBeitDina/ro/button_pm_reply.gif | Bin 0 -> 1888 bytes .../ro/button_topic_locked.gif | Bin 0 -> 2095 bytes .../SwiftBlueBeitDina/ro/button_topic_new.gif | Bin 0 -> 2230 bytes .../ro/button_topic_reply.gif | Bin 0 -> 2273 bytes .../SwiftBlueBeitDina/ro/icon_contact_aim.gif | Bin 0 -> 1511 bytes .../ro/icon_contact_email.gif | Bin 0 -> 1627 bytes .../SwiftBlueBeitDina/ro/icon_contact_icq.gif | Bin 0 -> 1617 bytes .../ro/icon_contact_jabber.gif | Bin 0 -> 1653 bytes .../ro/icon_contact_msnm.gif | Bin 0 -> 1572 bytes .../SwiftBlueBeitDina/ro/icon_contact_pm.gif | Bin 0 -> 1642 bytes .../SwiftBlueBeitDina/ro/icon_contact_www.gif | Bin 0 -> 1589 bytes .../ro/icon_contact_yahoo.gif | Bin 0 -> 1583 bytes .../SwiftBlueBeitDina/ro/icon_post_delete.gif | Bin 0 -> 1086 bytes .../SwiftBlueBeitDina/ro/icon_post_edit.gif | Bin 0 -> 1745 bytes .../SwiftBlueBeitDina/ro/icon_post_info.gif | Bin 0 -> 1090 bytes .../SwiftBlueBeitDina/ro/icon_post_quote.gif | Bin 0 -> 1794 bytes .../SwiftBlueBeitDina/ro/icon_post_report.gif | Bin 0 -> 1096 bytes .../ro/icon_user_offline.gif | Bin 0 -> 1613 bytes .../SwiftBlueBeitDina/ro/icon_user_online.gif | Bin 0 -> 1591 bytes .../ro/icon_user_profile.gif | Bin 0 -> 1634 bytes .../SwiftBlueBeitDina/ro/icon_user_search.gif | Bin 0 -> 1599 bytes .../SwiftBlueBeitDina/ro/icon_user_warn.gif | Bin 0 -> 1101 bytes .../SwiftBlueBeitDina/ro}/index.htm | 2 +- templates/SwiftBlueBeitDina/ro/stylesheet.css | 31 + templates/SwiftBlueBeitDina/rollout.js | 32 + templates/SwiftBlueBeitDina/rollout_main.js | 46 + templates/SwiftBlueBeitDina/sidebar.js | 26 + .../SwiftBlueBeitDina/sticky_footer.min.js | 1 + templates/SwiftBlueBeitDina/styleswitcher.js | 161 + templates/SwiftBlueBeitDina/switcher.js | 208 + templates/SwiftBlueBeitDina/table_footer.tpl | 49 + templates/SwiftBlueBeitDina/table_header.tpl | 162 + .../SwiftBlueBeitDina/table_header_old.tpl | 156 + templates/SwiftBlueBeitDina/timezone.js | 20 + templates/SwiftBlueBeitDina/wallpapers.js | 9 + 316 files changed, 34792 insertions(+), 1152 deletions(-) create mode 100644 .htaccess create mode 100644 .htpasswd.autoindex create mode 100644 classes/Deactivated_Super_Globals.php create mode 100644 classes/MobileDeviceDetect.php create mode 100644 classes/RequestVars.php create mode 100644 classes/Stream.php create mode 100644 favicon.ico delete mode 100644 nl/index.htm create mode 100644 phpinfo.php delete mode 100644 ro_ro/index.htm delete mode 100644 ru/index.htm create mode 100644 templates/SwiftBlue/global_header2.tpl create mode 100644 templates/SwiftBlue/index.html create mode 100644 templates/SwiftBlueBeitDina/SwiftBlue.cfg create mode 100644 templates/SwiftBlueBeitDina/SwiftBlue.css create mode 100644 templates/SwiftBlueBeitDina/admin/SwiftBlue.css create mode 100644 templates/SwiftBlueBeitDina/admin/admin.css rename {af => templates/SwiftBlueBeitDina/admin}/index.htm (100%) create mode 100644 templates/SwiftBlueBeitDina/admin/mainpage_header.html create mode 100644 templates/SwiftBlueBeitDina/ajax.js create mode 100644 templates/SwiftBlueBeitDina/alternate.css create mode 100644 templates/SwiftBlueBeitDina/biblia_online.js create mode 100644 templates/SwiftBlueBeitDina/collapsiblecategories.js create mode 100644 templates/SwiftBlueBeitDina/cookieconsent.min.css create mode 100644 templates/SwiftBlueBeitDina/cookieconsent.min.js create mode 100644 templates/SwiftBlueBeitDina/core.js create mode 100644 templates/SwiftBlueBeitDina/default.css create mode 100644 templates/SwiftBlueBeitDina/documente.js create mode 100644 templates/SwiftBlueBeitDina/dynifs.js create mode 100644 templates/SwiftBlueBeitDina/each_file.tpl create mode 100644 templates/SwiftBlueBeitDina/editor.js create mode 100644 templates/SwiftBlueBeitDina/en/button_pm_new.gif create mode 100644 templates/SwiftBlueBeitDina/en/button_pm_reply.gif create mode 100644 templates/SwiftBlueBeitDina/en/button_topic_locked.gif create mode 100644 templates/SwiftBlueBeitDina/en/button_topic_new.gif create mode 100644 templates/SwiftBlueBeitDina/en/button_topic_reply.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_aim.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_email.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_icq.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_jabber.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_msnm.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_pm.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_www.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_contact_yahoo.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_post_delete.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_post_edit.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_post_info.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_post_quote.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_post_report.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_user_offline.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_user_online.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_user_profile.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_user_search.gif create mode 100644 templates/SwiftBlueBeitDina/en/icon_user_warn.gif rename {en_uk => templates/SwiftBlueBeitDina/en}/index.htm (95%) create mode 100644 templates/SwiftBlueBeitDina/en/stylesheet.css create mode 100644 templates/SwiftBlueBeitDina/formIE.css create mode 100644 templates/SwiftBlueBeitDina/forum_fn.js create mode 100644 templates/SwiftBlueBeitDina/gecko.css create mode 100644 templates/SwiftBlueBeitDina/global_footer.tpl create mode 100644 templates/SwiftBlueBeitDina/global_header.tpl create mode 100644 templates/SwiftBlueBeitDina/images/announce_read.gif create mode 100644 templates/SwiftBlueBeitDina/images/announce_read_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/announce_read_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/announce_read_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/announce_unread.gif create mode 100644 templates/SwiftBlueBeitDina/images/announce_unread_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/announce_unread_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/announce_unread_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/background.gif create mode 100644 templates/SwiftBlueBeitDina/images/backgroundbluelight.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_cache.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_delete.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_edit.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_edit2.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_edit_admin.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_edit_split.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_hidden.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_move_down.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_move_left.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_move_right.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/block_move_up.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/contract.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/expand.gif create mode 100644 templates/SwiftBlueBeitDina/images/block_icons/spacer.gif create mode 100644 templates/SwiftBlueBeitDina/images/bodyline.jpg create mode 100644 templates/SwiftBlueBeitDina/images/cellpic.gif create mode 100644 templates/SwiftBlueBeitDina/images/cellpic1.gif create mode 100644 templates/SwiftBlueBeitDina/images/cellpic2.jpg create mode 100644 templates/SwiftBlueBeitDina/images/cellpic2_rtl.jpg create mode 100644 templates/SwiftBlueBeitDina/images/cellpic3.gif create mode 100644 templates/SwiftBlueBeitDina/images/created_by.jpg create mode 100644 templates/SwiftBlueBeitDina/images/forum_link.gif create mode 100644 templates/SwiftBlueBeitDina/images/forum_read.gif create mode 100644 templates/SwiftBlueBeitDina/images/forum_read_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/forum_read_subforum.gif create mode 100644 templates/SwiftBlueBeitDina/images/forum_unread.gif create mode 100644 templates/SwiftBlueBeitDina/images/forum_unread_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/forum_unread_subforum.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_read.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_read_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_read_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_read_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_unread.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_unread_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_unread_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/global_unread_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_email.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_faq.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_forum.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_groups.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_help.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_home.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_login.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_members.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_message.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_notification.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_profile.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_register.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_search.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_mini_settings.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_post_delete.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_post_info.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_post_report.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_post_target.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_post_target_unread.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_topic_attach.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_topic_deleted.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_topic_deleted.png create mode 100644 templates/SwiftBlueBeitDina/images/icon_topic_latest.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_topic_newest.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_topic_reported.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_topic_unapproved.gif create mode 100644 templates/SwiftBlueBeitDina/images/icon_user_warn.gif create mode 100644 templates/SwiftBlueBeitDina/images/index.htm create mode 100644 templates/SwiftBlueBeitDina/images/logo.gif create mode 100644 templates/SwiftBlueBeitDina/images/logo_med.gif create mode 100644 templates/SwiftBlueBeitDina/images/logo_mxBB.gif create mode 100644 templates/SwiftBlueBeitDina/images/logo_small.gif create mode 100644 templates/SwiftBlueBeitDina/images/no_avatar.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_about_us.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_announcement.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_bible.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_calendar.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_chatbox.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_develope.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_download.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_ekklesia.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_email.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_email2.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_explorer.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_forum.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_guestbook.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_help.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_home.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_info.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_login.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_members.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_musik.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_mydoc.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_news.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_profile.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_promote.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_radio.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_rate.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_register.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_search.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_settings.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_sponsors.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_statistics.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_theme.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_theme2.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/nav_weblinks.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/plus.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/spacer.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/thumb_globe.gif create mode 100644 templates/SwiftBlueBeitDina/images/page_icons/thumb_news.gif create mode 100644 templates/SwiftBlueBeitDina/images/poll_center.gif create mode 100644 templates/SwiftBlueBeitDina/images/poll_left.gif create mode 100644 templates/SwiftBlueBeitDina/images/poll_right.gif create mode 100644 templates/SwiftBlueBeitDina/images/site_logo.gif create mode 100644 templates/SwiftBlueBeitDina/images/spacer.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_read.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_read_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_read_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_read_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_unread.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_unread_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_unread_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/sticky_unread_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/subscribe.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_moved.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_read.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_read_hot.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_read_hot_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_read_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_read_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_read_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_unread.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_unread_hot.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_unread_hot_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_unread_locked.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_unread_locked_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/topic_unread_mine.gif create mode 100644 templates/SwiftBlueBeitDina/images/upload_bar.gif create mode 100644 templates/SwiftBlueBeitDina/images/whosonline.gif rename {de_de => templates/SwiftBlueBeitDina}/index.htm (100%) create mode 100644 templates/SwiftBlueBeitDina/installer.js create mode 100644 templates/SwiftBlueBeitDina/intro2.js create mode 100644 templates/SwiftBlueBeitDina/jquery-3.4.1.min.js create mode 100644 templates/SwiftBlueBeitDina/jquery.collapse.js create mode 100644 templates/SwiftBlueBeitDina/jquery.cookie.js create mode 100644 templates/SwiftBlueBeitDina/jquery.min.js create mode 100644 templates/SwiftBlueBeitDina/jquery.sticky-kit.min.js create mode 100644 templates/SwiftBlueBeitDina/mx_addon.css create mode 100644 templates/SwiftBlueBeitDina/plupload.full.min.js create mode 100644 templates/SwiftBlueBeitDina/plupload.js create mode 100644 templates/SwiftBlueBeitDina/ro/button_pm_new.gif create mode 100644 templates/SwiftBlueBeitDina/ro/button_pm_reply.gif create mode 100644 templates/SwiftBlueBeitDina/ro/button_topic_locked.gif create mode 100644 templates/SwiftBlueBeitDina/ro/button_topic_new.gif create mode 100644 templates/SwiftBlueBeitDina/ro/button_topic_reply.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_aim.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_email.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_icq.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_jabber.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_msnm.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_pm.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_www.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_contact_yahoo.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_post_delete.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_post_edit.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_post_info.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_post_quote.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_post_report.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_user_offline.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_user_online.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_user_profile.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_user_search.gif create mode 100644 templates/SwiftBlueBeitDina/ro/icon_user_warn.gif rename {es_es => templates/SwiftBlueBeitDina/ro}/index.htm (95%) create mode 100644 templates/SwiftBlueBeitDina/ro/stylesheet.css create mode 100644 templates/SwiftBlueBeitDina/rollout.js create mode 100644 templates/SwiftBlueBeitDina/rollout_main.js create mode 100644 templates/SwiftBlueBeitDina/sidebar.js create mode 100644 templates/SwiftBlueBeitDina/sticky_footer.min.js create mode 100644 templates/SwiftBlueBeitDina/styleswitcher.js create mode 100644 templates/SwiftBlueBeitDina/switcher.js create mode 100644 templates/SwiftBlueBeitDina/table_footer.tpl create mode 100644 templates/SwiftBlueBeitDina/table_header.tpl create mode 100644 templates/SwiftBlueBeitDina/table_header_old.tpl create mode 100644 templates/SwiftBlueBeitDina/timezone.js create mode 100644 templates/SwiftBlueBeitDina/wallpapers.js diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..6b77575 --- /dev/null +++ b/.htaccess @@ -0,0 +1,221 @@ +# Directory Index +DirectoryIndex index.php + +# Just in case, let's disable viewing of directory indexes. +Options -Indexes +Options +FollowSymLinks + +# Just in case, let's disable register globals (only valid for php4). +# Do NOT enable this when running php5, or you may face internal server errors + +# PHP 4, Apache 1. +# +# php_value magic_quotes_gpc 0 +# php_value session.use_trans_sid 0 +# php_value register_globals 0 +# php_value session.auto_start 0 +# + +# PHP 4, Apache 2. +# +# php_value magic_quotes_gpc 0 +# php_value session.use_trans_sid 0 +# php_value register_globals 0 +# php_value session.auto_start 0 +# + +# PHP 5, Apache 1 and 2. +# +# php_value magic_quotes_gpc 0 +# php_value session.use_trans_sid 0 +# php_value register_globals 0 +# php_value session.auto_start 0 +# + +# Just in case, let's disable register_globals (only valid for PHP4). +# Do NOT enable this when running PHP5, or you may face internal server errors +# To disable, remove the prepended # on the next line. +# php_flag register_globals 0 + +# Disable EAccelerator +# Do this if for some reason or another you have cache problems. +# php_flag eaccelerator.enable 0 + +# allow most common + + Order allow,deny + allow from all + Satisfy All + + +# deny most common except .php + + Order deny,allow + deny from all + Satisfy All + + +# Disable .htaccess viewing from browser + + Order allow,deny + Deny from all + Satisfy All + + + +deny from all + + + + + RewriteEngine on + + # + # Mod_rewrite rules require mod_rewrite is enabled for MX-Publisher (config setting) + # Uncomment below, and consult the MX-Publisher mod_rewrite module documentation + # + + # + # Site Specific + # + + #RewriteRule ^support/catlink([0-9]*)(.*)$ index.php?page=53&cat_link=$1 [L] + #RewriteRule ^support(.*)$ index.php?page=53 [L] + #RewriteRule ^index.php$ index.php [L,NE] + + # + # General + # + RewriteCond %{REQUEST_URI} ^(.*)/catlink([0-9]*)(.*)$ + RewriteRule ^page([0-9]*)/catlink([0-9]*)(.*)$ index.php?page=$1&cat_link=$2 [L] + + RewriteCond %{REQUEST_URI} ^(.*)/sub([0-9]*)(.*)$ + RewriteRule ^page([0-9]*)/sub([0-9]*)(.*)$ index.php?page=$1&dynamic_block=$2 [L] + + RewriteCond %{REQUEST_URI} ^/page([0-9]*)(.*)$ + RewriteRule ^page([0-9]*)(.*)$ index.php?page=$1$2 [L] + + RewriteCond %{REQUEST_URI} ^/block([0-9]*)(.*)$ + RewriteRule ^block([0-9]*)(.*)$ index.php?block=$1$2 [L] + +# +# Uncomment the statement below if URL rewriting doesn't +# work properly. If you installed phpBB in a subdirectory +# of your site, properly set the argument for the statement. +# e.g.: if your domain is test.com and you installed phpBB +# in http://www.test.com/phpBB/index.php you have to set +# the statement RewriteBase /phpBB/ +# + # REWRITE BASE + # RewriteBase / + + # HERE IS A GOOD PLACE TO FORCE CANONICAL DOMAIN + # Define fully qualified ssl aware protocol + # RewriteCond %{SERVER_PORT}s ^(443(s)|[0-9]+s)$ + # RewriteRule ^.*$ - [env=HttpFullProto:http%2://] + # RewriteCond %{HTTP_HOST} !^www\.beitdina\.net$ [NC] + # RewriteRule ^(.*)$ %{ENV:HttpFullProto}www.beitdina.net/$1 [QSA,L,R=301] + + +# +# Uncomment the statement below if you want to make use of +# HTTP authentication and it does not already work. +# This could be required if you are for example using PHP via Apache CGI. +# +#RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] + +# +# The following 3 lines will rewrite URLs passed through the front controller +# to not require app.php in the actual URL. In other words, a controller is +# by default accessed at /app.php/my/controller, but can also be accessed at +# /my/controller +# + +# FORUM INDEX REWRITERULE WOULD STAND HERE IF USED. "forum" REQUIRES TO BE SET AS FORUM INDEX +RewriteRule forum.html /forum/index.php +RewriteRule ucp.php /forum/ucp.php +RewriteRule memberlist.php /forum/memberlist.php + +RewriteRule ^/ext/$1 /forum/ext/$1 [L] +RewriteRule ^/styles/$1 /forum/styles/$1 [L] + +# RewriteRule forum1.html /viewforum.php?f=1 + +# RewriteRule ^/forum\.html$ index.php [QSA,L,NC] +# RewriteRule ^/forum(\d+).html$ $1.php?f=$2 [L] + +# RewriteRule forum2.html viewforum.php?f=2 + +RewriteRule forum([^/d]+).html?$ viewforum.php?f=$1 [QSA] + +# FORUM ALL MODES +RewriteRule ^/(forum|[a-z0-9_-]*-f)([0-9]+)(-([0-9]+))?\.html$ viewforum.php?f=$2&start=$4 [QSA,L,NC] + + # TOPIC WITH VIRTUAL FOLDER ALL MODES + # RewriteRule ^/(forum|[a-z0-9_-]*-f)([0-9]+)/(topic|[a-z0-9_-]*-t)([0-9]+)(-([0-9]+))?\.html$ /viewtopic.php?f=$2&t=$4&start=$6 [QSA,L,NC] + # TOPIC WITHOUT FORUM ID & DELIM ALL MODES + # RewriteRule ^/([a-z0-9_-]*)/?(topic|[a-z0-9_-]*-t)([0-9]+)(-([0-9]+))?\.html$ /viewtopic.php?forum_uri=$1&t=$3&start=$5 [QSA,L,NC] + RewriteRule topic([^/d]+).html?$ viewtopic.php?t=$1 [QSA] + # PROFILES ALL MODES WITH ID + RewriteRule ^/(member|[a-z0-9_-]*-u)([0-9]+)\.html$ /memberlist.php?mode=viewprofile&u=$2 [QSA,L,NC] + # USER MESSAGES ALL MODES WITH ID + RewriteRule member([^/d]+).html?$ memberlist.php?u=$1 [QSA] + # RewriteRule ^/(member|[a-z0-9_-]*-u)([0-9]+)-(topics|posts)(-([0-9]+))?\.html$ /search.php?author_id=$2&sr=$3&start=$5 [QSA,L,NC] + # GROUPS ALL MODES + # RewriteRule ^/(group|[a-z0-9_-]*-g)([0-9]+)(-([0-9]+))?\.html$ /memberlist.php?mode=group&g=$2&start=$4 [QSA,L,NC] + # POSTS + # RewriteRule ^/post([0-9]+)\.html$ /viewtopic.php?p=$1 [QSA,L,NC] + RewriteRule post([^/d]+).html?$ viewtopic.php?p=$1#$1 [QSA] + # ACTIVE TOPICS + # RewriteRule ^/active-topics(-([0-9]+))?\.html$ /search.php?search_id=active_topics&start=$2&sr=topics [QSA,L,NC] + # UNANSWERED TOPICS + # RewriteRule ^/unanswered(-([0-9]+))?\.html$ /search.php?search_id=unanswered&start=$2&sr=topics [QSA,L,NC] + # NEW POSTS + # RewriteRule ^/newposts(-([0-9]+))?\.html$ /search.php?search_id=newposts&start=$2&sr=topics [QSA,L,NC] + # UNREAD POSTS + # RewriteRule ^/unreadposts(-([0-9]+))?\.html$ /search.php?search_id=unreadposts&start=$2 [QSA,L,NC] + # THE TEAM + # RewriteRule ^/the-team\.html$ /memberlist.php?mode=team [QSA,L,NC] + # HERE IS A GOOD PLACE TO ADD OTHER PHPBB RELATED REWRITERULES + +# RewriteCond %{REQUEST_FILENAME} !-f +# RewriteCond %{REQUEST_FILENAME} !-d +# RewriteRule ^(.*)$ app.php [QSA,L] + +# +# If symbolic links are not already being followed, +# uncomment the line below. +# http://anothersysadmin.wordpress.com/2008/06/10/mod_rewrite-forbidden-403-with-apache-228/ +# +#Options +FollowSymLinks + + + +#AddHandler x-httpd-5-3-php5 .php +#AddHandler x-httpd-5-4-php5 .php +#AddHandler x-httpd-5-5-php5 .php +AddHandler x-httpd-5-6-php5 .php + +# +# Error redirects - require the MX-Publisher ErrorDocs module to be installed +# Uncomment below, and consult the MX-Publisher ErrorDocs module documentation +# ErrorDocument errno /index.php?page=N&errno=errno&errlog=yes +# +ErrorDocument 400 /index.php?page=x&errno=400&errlog=yes +ErrorDocument 401 /index.php?page=x&errno=401&errlog=yes +ErrorDocument 402 /index.php?page=x&errno=402&errlog=yes +ErrorDocument 403 /index.php?page=x&errno=403&errlog=yes +ErrorDocument 404 /index.php?page=x&errno=404&errlog=yes +ErrorDocument 405 /index.php?page=x&errno=405&errlog=yes +ErrorDocument 408 /index.php?page=x&errno=408&errlog=yes +ErrorDocument 410 /index.php?page=x&errno=410&errlog=yes +ErrorDocument 411 /index.php?page=x&errno=411&errlog=yes +ErrorDocument 412 /index.php?page=x&errno=412&errlog=yes +ErrorDocument 413 /index.php?page=x&errno=413&errlog=yes +ErrorDocument 414 /index.php?page=x&errno=414&errlog=yes +ErrorDocument 415 /index.php?page=x&errno=415&errlog=yes +ErrorDocument 500 /index.php?page=x&errno=500&errlog=yes +ErrorDocument 501 /index.php?page=x&errno=501&errlog=yes +ErrorDocument 502 /index.php?page=x&errno=502&errlog=yes +ErrorDocument 503 /index.php?page=x&errno=503&errlog=yes +ErrorDocument 506 /index.php?page=x&errno=506&errlog=yes \ No newline at end of file diff --git a/.htpasswd.autoindex b/.htpasswd.autoindex new file mode 100644 index 0000000..1c6e293 --- /dev/null +++ b/.htpasswd.autoindex @@ -0,0 +1,2 @@ +admin d033e22ae348aeb5660fc2140aec35850c4da997 3 +user 12dea96fec20593566ab75692c9949596833adc9 1 diff --git a/AutoIndex.conf.php b/AutoIndex.conf.php index 40b4003..a8d0352 100644 --- a/AutoIndex.conf.php +++ b/AutoIndex.conf.php @@ -6,7 +6,7 @@ base_dir ./ icon_path index_icons/winvista/ flag_path flags/language/ language en -template ./templates/default/ +template ./templates/SwiftBlue/ log_file access.log description_file description_file user_list .htpasswd.autoindex @@ -14,7 +14,7 @@ download_count false hidden_files hidden_files banned_list false show_dir_size true -use_login_system false +use_login_system true force_download false search_enabled true anti_leech true @@ -25,7 +25,7 @@ days_new 30 thumbnail_height 150 bandwidth_limit 0 md5_show 10 -entries_per_page 21 +entries_per_page 200 */ diff --git a/README.md b/README.md index 3b0d361..d993d52 100644 --- a/README.md +++ b/README.md @@ -1,761 +1,23 @@ - - - - -
+# SwiftBlue +Style Name: SwiftBlue +Author: OryNider + +Style Description: A purple-blue colors responsive design style for phpBB. + +This style is a conversion of SwiftBlue for phpBB 2.0.x. + +phpBB Version: 3.2.2 +Style Version: 3.2.4-RC + +Screenshots: +Image + +Style Download: https://github.com/orynider/SwiftBlue/releases + +License: +[GNU General Public License v2](http://opensource.org/licenses/GPL-2.0) + +The phpBB Romanian Online Comunity + +The Mx-Publisher CMS Project -

- AutoIndex PHP Script (version 2.4.6) - Help File -
by Justin Hagstrom
-
AutoIndex is provided under the terms of - the GNU General Public License (GPL). -

-

- https://github.com/BeitDina/AutoIndex -
Please post any questions or comments and pull request - here. -Please write any questions or comments at -orynider@users.sourceforge.net . -

-

To install and run the script, simply upload the -contents of this directory to a server with PHP support (Works with all -versions of PHP5 and PHP7.1).
-Then, point your browser to the index.php file in that folder. The -first time you do this, it will take you to a configuration page.
-To use all the default values, just click the button at the bottom, or -customize it however you want.
-Information about the use of each variable is in this file. -

-

  -

-
-

  -

-

base_dir is the folder -that will be the root of the directory listing.
-This will be the starting point for the script. Nothing above this -directory can be viewed, but its subfolders can.
-Make sure to use forward slashes, rather than backslashes. Also, try to -use a relative path if possible.
-Examples: -

- - - - - - - - - - - - - - - -
./(the folder index.php is in)
./share -folder/(path relative to the php file)
/home/user/public_html/share_folder/(absolute path)
-

If you're using an absolute path, you'll need to set -force_download to TRUE (this is not recommended, though. It is better -to use a path relative to the php script). -

-

  -

-

icon_path is the path to -the icons. Don't put a slash at the end.
-Leave this blank to not show icons to the left of files and folders.
-Examples: -

- - - - - - - - - - - -
index_icons/winxp(relative to the php file)
/index_icons/kde(absolute path, relative to the server root)
-

  -

-

stylesheet is the path -and filename of your css stylesheet.
-Just modify the one that came with this, so it will match the rest of -your site.
-Examples: -

- - - - - - - - - - - -
stylesheet.css(stylesheet.css is in the same folder as the php -file)
/some_folder/some_stylesheet.css(absolute path to the stylesheet)
-

  -

-
-

Optional Variables : -

-

  -

-

If allow_uploads is set -to TRUE, people will be able to upload files to your website. (Default: -FALSE)
-But if use_login_system is also set to -TRUE, you must create an account for them before they can upload.
-The preset users are:

-

username: admin
-password: admin

-username: test or user
-password: test or testtest

-


-If you plan to use the login system, change the passwords or create -different accounts and delete these!
-All registered users will be able to upload, but only admins can -create/delete accounts.
-Also, if you want to allow uploads, make sure the folders you want to -upload to are chmod'ed to allow PHP to write there. -

-

  -

-

user_list contains the -path to the text file where the usernames and encrypted passwords are -stored.
-Make sure the file is chmod'ed so PHP can read and write to it.
-(This is only needed if use_login_system is set to TRUE.) -

-

  -

-

If allow_file_overwrites -is set to TRUE, when uploading a file that already exists, the file -will be replaced. (Default: FALSE)
-In other words, this will allow people to overwrite existing files by -uploading new ones.
-This variable only matters when allow_uploads is set to TRUE. -

-

  -

-

If must_login_to_download -is set to TRUE, users must login before they will see the list of -files. (Default: FALSE)
-(They will not be able to download or browse through files without -logging in first.)
-This variable only matters when use_login_system is set to TRUE. -

-

  -

-

banned_list contains the -path to the text file where blocked IP addresses and/or hostnames are -stored.
-This list can be edited by logging in as an administrator, or you can -directly edit the text file and add IP addresses and/or hostnames, each -on a new line.
-You can use wildcards in the entries (*, ?, +). -

-

  -

-

If sub_folder_access is -set to FALSE, folders will not be shown. (Default: TRUE) -

-

  -

-

index: Leave this blank unless you use -php includes on your webpage.
-Make sure to put "ob_start();" and "session_start();" at the top of -your index file. This will make sure headers are sent correctly.
-Examples: -

- - - - - - - - - -
?id=AutoIndex
/file.php?id=thisFile
-

The include in your index file should look something -like this: -

-
$valid = array('home', 'page1', 'page2');
if (isset($_REQUEST['id']) && in_array($_REQUEST['id'], $valid))
//if the id parameter in the URL is set, and it is in the 'valid' list
{
include($_REQUEST['id']); //include the file
}
-

  -

-

hidden_files contains an -array of strings.
-If a file or folder matches any of them, it will not be displayed.
-They may contain wildcards (*, +, ?). For example, to hide all php -files, add '*.php' to the list, or if you want to hide all files that -begin with a period, add '.*' -

-

  -

-

show_only_these_files -contains an array of strings.
-If there are any items in the array, the hidden_files variable will be -disabled, and only files that are listed here will be shown.
-They may contain wildcards (*, +, ?). For example, to show only .txt -files, add '*.txt' to the list. -

-

  -

-

force_download should be -set to TRUE or FALSE. (Default: FALSE)
-If it is set to TRUE, the file will be automatically downloaded, -instead of letting the person's browser decide. -

-

  -

-

bandwidth_limit is set to -the max download speed (per client) in KB/s. 0 will turn it off.
-The number can contain a decimal if you want.
-NOTE: To use this feature, -force_download must be set to TRUE. -

-

  -

-

anti_leech should be set -to TRUE or FALSE. (Default: FALSE)
-This will compare the referrer and the name of your site to make sure -they clicked on a link to download a file.
-Setting this equal to TRUE will prevent "leeching" by making sure they -download files directly from a link on your site.
-Since some people turn off referrer sending in their browser, this -option is not recommended. -

-

  -

-

enable_searching should -be set to TRUE or FALSE. (Default: TRUE)
-If it is TRUE, people will be able to search for a file or folder -containing a string.
-It will search the folder you are currently in, and all subfolders.
-Searching is not case sensitive. -

-

  -

-

The log_file contains the -full path to the file to write the access log.
-Leave it blank to turn off logging.
-The log file can be a local file, or on an FTP server.
-If it's a local file on non-windows systems, make sure the log file is -chmod'ed to allow PHP to write to the file.
-Example: -

- - - - - - - - - - - - - - - -
./log.txt(the folder the php file is in)
/home/user/public_html/share_folder/sharefile.log(absolute path)
ftp://user:password@example.com/sharefile.txt(stored on ftp server)
-

dont_log_these_ips -contains an array of strings (which are IP addresses).
-Any access from an IP on this list will not be written to the log file. -
-You can also add hostnames to the list, and use wildcards (*, +, ?).
-(i.e. put your own IP in here so you don't fill up the log file when -you access your site) -

-

  -

-

download_count contains a -string which is the filename of the file to keep track of how many -times files have been downloaded.
-The file must be chmod'ed to allow PHP to read AND write to the file.
-Leave blank to disable this feature.
-NOTE: When downloading a file from -an IP addresses in the dont_log_these_ips array, the count will NOT -increase. -

-

  -

-

links_file contains the -path to a text file with the URL of files that you want to be listed as -links.
-Separate each entry with a new line.
-If you want, you can change how the links is displayed, by putting some -text after a pipe ('|')

-

-http://autoindex.sourceforge.net|Main Site
-http://autoindex.sourceforge.net/forum/|Forum

-

If no link description is present, the link itself will -be displayed.
-NOTE: This isn't really meant to be -done by hand - you can use the built-in editor when you log in as an -admin. -

-

  -

-

description_file contains -the path to a text file with descriptions for files.
-The format is: [base_dir][full filename and path][a pipe, -'|'][description for file]
-Here's an example: ./sharefile.txt|This is a text file.
-Separate each entry with a new line.
-NOTE: This isn't really meant to be -done by hand: you can login as an admin and click "edit description" -next to any file. -

-

  -

-

show_dir_size should be -set to TRUE or FALSE. (Default: TRUE)
-If it is set to TRUE, the total size of the folder will be shown under -size.
-If it is FALSE, it will display "[dir]" under size.
-NOTE: If you are trying to index -many files (meaning a few thousand), you will notice a speed -improvement with this turned off. -

-

  -

-

folder_expansion should -be set to TRUE or FALSE. (Default: FALSE)
-If it is set to TRUE, when you click on the folder icon, it will expand -the folder and list its contents.
-Clicking on the folder name will take you into that folder.
-If it is set to FALSE, both clicking on the icon and name will take you -into the folder. -

-

  -

-

show_folder_count should -be set to TRUE or FALSE. (Default: FALSE)
-If it is TRUE, the total number of files in a folder will be shown next -to that folder.
-Files are counted recursively (files in subfolders are counted). -

-

  -

-

header and footer -are the paths to 2 files.
-The files must be text files (.html .txt .php , etc...)
-Header will be displayed at the top, and footer will be displayed at -the bottom.
-Leave blank to not include a file. -

-

  -

-

header_per_folder and footer_per_folder -should be set to TRUE or FALSE. (Default: FALSE)
-If they are FALSE, the header/footer will be taken from the absolute or -relative path in the header/footer variable.
-If they are TRUE, the current directory will be added to the beginning -of the file to be included. (don't add a path to the header/footer -variables - just the filename) -

-

  -

-

days_new contains the -number of days old a file can be and still have [New] written next to -it. (Default: 0)
-If it is set to 0, this feature will be disabled.
-NOTE: this can contain any number, -not just a 1 or 0 value, and it can contain a decimal if you want. -

-

  -

-

md5_show is a feature -that will let users get the md5sum of a specific file. (Default: -0)
-If set to 0 it will be disabled.
-Otherwise, the number will represent the maximum file size (in -megabytes) to allow the md5sum to be calculated (I'd recommend -something close to 10).
-The number can contain a decimal if you want.
-NOTE: PHP version 4.2.0 or higher is -required for this feature to work. -

-

  -

-

thumbnail_height is a -feature that will show thumbnails next to images. (NOTE: GDlib 2.0.1 or -higher is required)
-Setting it to 0 will disable this feature, and setting it to any other -number will set the size of the thumbnail.
-(100 is a good setting to start with.) -

-

  -

-

show_type_column, show_size_column, -and show_date_column are set to TRUE or -FALSE.
-Setting them to TRUE will show the column, and setting it to FALSE will -not display the column. -

-
-

Language Settings:
-
-lang is the default language to -display the script in.
-The choices for language file names are listed below...
-(Default: 'en') -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lang settingLanguage
alAlbanian
bgBulgarian
caCatalan
czCzech
daDanish
deGerman
eeEstonian
enEnglish
eoEsperanto
esSpanish
fiFinnish
frFrench
grGreek
heHebrew
huHungarian
isIcelandic
itItalian
jpJapanese
koKorean
ltLithuanian
lvLatvian
msMalay
nlDutch
noNorwegian
plPolish
pt_BRBrazilian Portuguese
ro_RORomanian
ruRussian
skSlovak
sr_LASerbian (Latin)
sr_CYSerbian (Cyrillic)
svSwedish
thThai
trTurkish
viVietnamese
zh_CNChinese
zh_TWChinese Traditional
-

  -

-

path_to_language_files is -the path where the *.php language files are located.
-Default: ./languages/ -

-

  -

-

If select_language is set -to TRUE, there will be an option at the bottom of the script for
-the user to choose which language the script is displayed in. (Default: -FALSE) -

-
-

Folder Flag Settings:
-
-flag is the default language flag to -display the short iso code folder.
-Some choices for iso folder are listed below...
-(Default: 'en_us') -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lang settingLanguage
alAlbanian
bgBulgarian
caCatalan
czCzech
daDanish
de_DEGerman Germany
eeEstonian
en_UKEnglish UK
eoEsperanto
es_ESSpanish SPAIN
fiFinnish
frFrench
elGreek
heHebrew
huHungarian
isIcelandic
itItalian
jpJapanese
koKorean
ltLithuanian
lvLatvian
msMalay
nlDutch
noNorwegian
plPolish
pt_BRBrazilian Portuguese
ro_RORomanian
ruRussian
skSlovak
sr_LASerbian (Latin)
sr_CYSerbian (Cyrillic)
svSwedish
thThai
trTurkish
viVietnamese
zh_CNChinese
lzh or zh_TWChinese Traditional
-

  -

-

path_to_flag_files is -the path where the *.png language flag images are located.
-Default: ./flags/language/ -

-

  -

-

If select_language is set -to TRUE, there will be an option at the bottom of the script for
-the user to choose which language the script is displayed in. (Default: -FALSE) -

-
-
diff --git a/Readme.htm b/Readme.htm index a0d48ba..df180d8 100644 --- a/Readme.htm +++ b/Readme.htm @@ -20,7 +20,7 @@ border: 1px solid; -

AutoIndex PHP Script (version 2.4.6) - +

AutoIndex PHP Script (version 2.2.5) - Help File
original by Justin Hagstrom, by Florin Ciprian Bodin

AutoIndex is provided under the @@ -777,4 +777,4 @@ FALSE) - + \ No newline at end of file diff --git a/access.log b/access.log index 35d1505..e69de29 100644 --- a/access.log +++ b/access.log @@ -1 +0,0 @@ -https://github.com/BeitDina/AutoIndex/invitations \ No newline at end of file diff --git a/change_log.html b/change_log.html index 95f6c52..ed55b5f 100644 --- a/change_log.html +++ b/change_log.html @@ -52,29 +52,26 @@ Change Log 

-

Legend:
(+) Added feature
(!) Security bug fixed
(-) Bug fixed
(*) Improved/changed feature -
( ) Non-code change
+
( ) Non-code change

-

- Version 2.2.5 by FlorinCB aka orynider (2019-Sept-17) + Version 2.2.5 (2019-Sept-17)
(*) Added language flags feature
( ) Added language flags to flag/language/ folder.
(*) Added SwiftBlue template for smartphones.

-

+ Version 2.2.4 (2007-Nov-09)
(!) Fixed DOS bug -
( ) Added Vista icon set
+
( ) Added Vista icon set

-

Version 2.2.3 (2007-Nov-05)
(!) Fixed XSS bug diff --git a/classes/Admin.php b/classes/Admin.php index 3098577..53218fd 100644 --- a/classes/Admin.php +++ b/classes/Admin.php @@ -108,18 +108,17 @@ class Admin } global $dir; $local_file = $dir . Item::get_basename($url); - if (@file_exists($local_file)) + if (file_exists($local_file)) { throw new ExceptionDisplay('The file already exists in this directory.'); } $remote = $protocol . $url; - $r = @fopen($remote, 'rb'); + $r = fopen($remote, 'rb'); if ($r === false) { - throw new ExceptionDisplay('Cannot open remote file for reading: ' - . Url::html_output($remote) . ''); + throw new ExceptionDisplay('Cannot open remote file for reading: ' . Url::html_output($remote) . ''); } - $l = @fopen($local_file, 'wb'); + $l = fopen($local_file, 'wb'); if ($l === false) { throw new ExceptionDisplay('Cannot open local file for writing.'); @@ -144,25 +143,21 @@ class Admin */ private static function update_file_info($filename, $old_name, $new_name) { - if (!@is_file($filename)) + if (!is_file($filename)) { - throw new ExceptionDisplay('The file ' - . Url::html_output($filename) . ' does not exist.'); + throw new ExceptionDisplay('The file ' . Url::html_output($filename) . ' does not exist.'); } - $text = @file_get_contents($filename); + $text = file_get_contents($filename); if ($text === false) { - throw new ExceptionDisplay('Cannot open file ' - . Url::html_output($filename) . ' for reading.'); + throw new ExceptionDisplay('Cannot open file ' . Url::html_output($filename) . ' for reading.'); } - $h = @fopen($filename, 'wb'); + $h = fopen($filename, 'wb'); if ($h === false) { - throw new ExceptionDisplay('Cannot open file ' - . Url::html_output($filename) . ' for writing.'); + throw new ExceptionDisplay('Cannot open file ' . Url::html_output($filename) . ' for writing.'); } - fwrite($h, preg_replace('/^' . preg_quote($old_name, '/') - . '/m', $new_name, $text)); + fwrite($h, preg_replace('/^' . preg_quote($old_name, '/') . '/m', $new_name, $text)); fclose($h); } @@ -369,8 +364,7 @@ class Admin /** Include the config generator file. */ if (!@include_once(CONFIG_GENERATOR)) { - throw new ExceptionDisplay('Error including file ' - . CONFIG_GENERATOR . ''); + throw new ExceptionDisplay('Error including file ' . CONFIG_GENERATOR . ''); } die(); } @@ -382,7 +376,7 @@ class Admin } global $dir; $old = $dir . Url::clean_input($_GET['filename']); - if (!@file_exists($old)) + if (!file_exists($old)) { header('HTTP/1.0 404 Not Found'); throw new ExceptionDisplay('Specified file could not be found.'); @@ -394,11 +388,11 @@ class Admin { throw new ExceptionDisplay('Filename unchanged.'); } - if (@file_exists($new)) + if (file_exists($new)) { throw new ExceptionDisplay('Cannot overwrite existing file.'); } - if (@rename($old, $new)) + if (rename($old, $new)) { global $config; if (DOWNLOAD_COUNT) @@ -439,12 +433,12 @@ class Admin { global $dir; $to_delete = $dir . Url::clean_input($_GET['filename']); - if (!@file_exists($to_delete)) + if (!file_exists($to_delete)) { header('HTTP/1.0 404 Not Found'); throw new ExceptionDisplay('Specified file could not be found.'); } - if (@is_dir($to_delete)) + if (is_dir($to_delete)) { if (self::rmdir_recursive($to_delete)) { @@ -452,7 +446,7 @@ class Admin } throw new ExceptionDisplay('Error deleting folder.'); } - if (@unlink($to_delete)) + if (unlink($to_delete)) { throw new ExceptionDisplay('File successfully deleted.'); } @@ -521,14 +515,11 @@ class Admin $out .= ''; } global $words; - throw new ExceptionDisplay($out - . '

Select new level:

Select new level:

-

'); + . $words -> __get('admin') . '

'); } case 'del_user': { @@ -556,9 +547,7 @@ class Admin { $out .= ''; } - throw new ExceptionDisplay($out - . '

'); + throw new ExceptionDisplay($out . '

'); } case 'edit_description': { @@ -576,8 +565,7 @@ class Admin $h = @fopen($config -> __get('description_file'), 'wb'); if ($h === false) { - throw new ExceptionDisplay('Could not open description file for writing.' - . ' Make sure PHP has write permission to this file.'); + throw new ExceptionDisplay('Could not open description file for writing.' . ' Make sure PHP has write permission to this file.'); } foreach ($descriptions as $file => $info) { @@ -594,8 +582,7 @@ class Admin $h = @fopen($config -> __get('description_file'), 'ab'); if ($h === false) { - throw new ExceptionDisplay('Could not open description file for writing.' - . ' Make sure PHP has write permission to this file.'); + throw new ExceptionDisplay('Could not open description file for writing.' . ' Make sure PHP has write permission to this file.'); } fwrite($h, "$filename\t" . $_GET['description'] . "\n"); fclose($h); diff --git a/classes/ConfigData.php b/classes/ConfigData.php index 9cbd50b..fadc9f2 100644 --- a/classes/ConfigData.php +++ b/classes/ConfigData.php @@ -125,11 +125,10 @@ class ConfigData implements Iterator } $this -> valid = true; $this -> filename = $file; - $contents = @file($file); + $contents = file($file); if ($contents === false) { - throw new ExceptionFatal('Error reading file ' - . Url::html_output($file) . ''); + throw new ExceptionFatal('Error reading file ' . Url::html_output($file) . ''); } foreach ($contents as $i => $line) { @@ -141,16 +140,11 @@ class ConfigData implements Iterator $parts = explode("\t", $line, 2); if (count($parts) !== 2 || $parts[0] == '' || $parts[1] == '') { - throw new ExceptionFatal('Incorrect format for file ' - . Url::html_output($file) . ' on line ' . ($i + 1) - . '.
Format is "variable name[tab]value"'); + throw new ExceptionFatal('Incorrect format for file ' . Url::html_output($file) . ' on line ' . ($i + 1) . '.
Format is "variable name[tab]value"'); } if (isset($this -> config[$parts[0]])) { - throw new ExceptionFatal('Error in ' - . Url::html_output($file) . ' on line ' . ($i + 1) - . '.
' . Url::html_output($parts[0]) - . ' is already defined.'); + throw new ExceptionFatal('Error in ' . Url::html_output($file) . ' on line ' . ($i + 1) . '.
' . Url::html_output($parts[0]) . ' is already defined.'); } $this -> config[$parts[0]] = $parts[1]; } @@ -177,28 +171,22 @@ class ConfigData implements Iterator { if ($this -> is_set($item)) { - $h = @fopen($this -> filename, 'wb'); + $h = fopen($this -> filename, 'wb'); if ($h === false) { - throw new ExceptionFatal('Could not open file ' - . Url::html_output($this -> filename) - . ' for writing. Make sure PHP has write permission to this file.'); + throw new ExceptionFatal('Could not open file ' . Url::html_output($this -> filename) . ' for writing. Make sure PHP has write permission to this file.'); } foreach ($this as $current_item => $count) { - fwrite($h, "$current_item\t" - . (($current_item == $item) ? ((int)$count + 1) : $count) - . "\n"); + fwrite($h, "$current_item\t" . (($current_item == $item) ? ((int)$count + 1) : $count) . "\n"); } } else { - $h = @fopen($this -> filename, 'ab'); + $h = fopen($this -> filename, 'ab'); if ($h === false) { - throw new ExceptionFatal('Could not open file ' - . $this -> filename . ' for writing.' - . ' Make sure PHP has write permission to this file.'); + throw new ExceptionFatal('Could not open file ' . $this -> filename . ' for writing.' . ' Make sure PHP has write permission to this file.'); } fwrite($h, "$item\t1\n"); } @@ -224,9 +212,7 @@ class ConfigData implements Iterator { return $this -> config[$name]; } - throw new ExceptionFatal('Setting ' . Url::html_output($name) - . ' is missing in file ' - . Url::html_output($this -> filename) . '.'); + throw new ExceptionFatal('Setting ' . Url::html_output($name) . ' is missing in file ' . Url::html_output($this -> filename) . '.'); } } diff --git a/classes/Deactivated_Super_Globals.php b/classes/Deactivated_Super_Globals.php new file mode 100644 index 0000000..29c24a6 --- /dev/null +++ b/classes/Deactivated_Super_Globals.php @@ -0,0 +1,138 @@ +request = $request; + $this->name = $name; + $this->super_global = $super_global; + } + + /** + * Calls trigger_error with the file and line number the super global was used in. + */ + private function error() + { + $file = ''; + $line = 0; + + $message = 'Illegal use of $' . $this->name . '. You must use the request class to access input data. Found in %s on line %d. This error message was generated by deactivated_super_global.'; + + $backtrace = debug_backtrace(); + if (isset($backtrace[1])) + { + $file = $backtrace[1]['file']; + $line = $backtrace[1]['line']; + } + trigger_error(sprintf($message, $file, $line), E_USER_ERROR); + } + + /** + * Redirects isset to the correct request class call. + * + * @param string $offset The key of the super global being accessed. + * + * @return bool Whether the key on the super global exists. + */ + public function offsetExists($offset) + { + return $this->request->is_set($offset, $this->super_global); + } + + /**#@+ + * Part of the \ArrayAccess implementation, will always result in a FATAL error. + */ + public function offsetGet($offset) + { + $this->error(); + } + + public function offsetSet($offset, $value) + { + $this->error(); + } + + public function offsetUnset($offset) + { + $this->error(); + } + /**#@-*/ + + /** + * Part of the \Countable implementation, will always result in a FATAL error + */ + public function count() + { + $this->error(); + } + + /** + * Part of the Traversable/IteratorAggregate implementation, will always result in a FATAL error + */ + public function getIterator() + { + $this->error(); + } +} // class deactivated_super_global + +?> \ No newline at end of file diff --git a/classes/DirItem.php b/classes/DirItem.php index 0c70fec..d18718d 100644 --- a/classes/DirItem.php +++ b/classes/DirItem.php @@ -140,11 +140,17 @@ class DirItem extends Item //regular folder $file = $this -> parent_dir . $filename; - if (!@is_dir($file)) + if (!is_dir($file)) { throw new ExceptionDisplay('Directory ' . Url::html_output($this -> parent_dir . $filename) . ' does not exist.'); } - + if (!function_exists('mb_strlen')) + { + function mb_strlen($text) + { + strlen($text); + } + } $this -> filename = $filename = substr($filename, 0, -1); $mb_strlen = mb_strlen($filename); $this -> icon = $config -> __get('icon_path') . 'dir.png'; @@ -2781,8 +2787,7 @@ class DirItem extends Item $this -> size = new Size(SHOW_DIR_SIZE ? $this -> dir_size() : false); return $this -> size; } - throw new ExceptionDisplay('Variable ' . Url::html_output($var) - . ' not set in DirItem class.'); + throw new ExceptionDisplay('Variable ' . Url::html_output($var) . ' not set in DirItem class.'); } } diff --git a/classes/ExceptionDisplay.php b/classes/ExceptionDisplay.php index 34c87e1..36a998e 100644 --- a/classes/ExceptionDisplay.php +++ b/classes/ExceptionDisplay.php @@ -46,11 +46,9 @@ class ExceptionDisplay extends ExceptionFatal */ public function __toString() { - global $words; - $str = ' + + + + + + + {if:download_count} + + {end if:download_count} + + + + + + {if:description_file} + + {end if:description_file} + + + \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/editor.js b/templates/SwiftBlueBeitDina/editor.js new file mode 100644 index 0000000..5631ab6 --- /dev/null +++ b/templates/SwiftBlueBeitDina/editor.js @@ -0,0 +1,403 @@ +/** +* bbCode control by subBlue design [ www.subBlue.com ] +* Includes unixsafe colour palette selector by SHS` +*/ + +// Startup variables +var imageTag = false; +var theSelection = false; + +// Check for Browser & Platform for PC & IE specific bits +// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html +var clientPC = navigator.userAgent.toLowerCase(); // Get client info +var clientVer = parseInt(navigator.appVersion); // Get browser version + +var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1)); +var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1)); + +var baseHeight; +onload_functions.push('initInsertions()'); + +/** +* Shows the help messages in the helpline window +*/ +function helpline(help) +{ + document.forms[form_name].helpbox.value = help_line[help]; +} + +/** +* Fix a bug involving the TextRange object. From +* http://www.frostjedi.com/terra/scripts/demo/caretBug.html +*/ +function initInsertions() +{ + var doc; + + if (document.forms[form_name]) + { + doc = document; + } + else + { + doc = opener.document; + } + + var textarea = doc.forms[form_name].elements[text_name]; + + if (is_ie && typeof(baseHeight) != 'number') + { + textarea.focus(); + baseHeight = doc.selection.createRange().duplicate().boundingHeight; + + if (!document.forms[form_name]) + { + document.body.focus(); + } + } +} + +/** +* bbstyle +*/ +function bbstyle(bbnumber) +{ + if (bbnumber != -1) + { + bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); + } + else + { + insert_text('[*]'); + document.forms[form_name].elements[text_name].focus(); + } +} + +/** +* Apply bbcodes +*/ +function bbfontstyle(bbopen, bbclose) +{ + theSelection = false; + + var textarea = document.forms[form_name].elements[text_name]; + + textarea.focus(); + + if ((clientVer >= 4) && is_ie && is_win) + { + // Get text selection + theSelection = document.selection.createRange().text; + + if (theSelection) + { + // Add tags around selection + document.selection.createRange().text = bbopen + theSelection + bbclose; + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + } + else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) + { + mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose); + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + + //The new position for the cursor after adding the bbcode + var caret_pos = getCaretPosition(textarea).start; + var new_pos = caret_pos + bbopen.length; + + // Open tag + insert_text(bbopen + bbclose); + + // Center the cursor when we don't have a selection + // Gecko and proper browsers + if (!isNaN(textarea.selectionStart)) + { + textarea.selectionStart = new_pos; + textarea.selectionEnd = new_pos; + } + // IE + else if (document.selection) + { + var range = textarea.createTextRange(); + range.move("character", new_pos); + range.select(); + storeCaret(textarea); + } + + textarea.focus(); + return; +} + +/** +* Insert text at position +*/ +function insert_text(text, spaces, popup) +{ + var textarea; + + if (!popup) + { + textarea = document.forms[form_name].elements[text_name]; + } + else + { + textarea = opener.document.forms[form_name].elements[text_name]; + } + if (spaces) + { + text = ' ' + text + ' '; + } + + if (!isNaN(textarea.selectionStart)) + { + var sel_start = textarea.selectionStart; + var sel_end = textarea.selectionEnd; + + mozWrap(textarea, text, '') + textarea.selectionStart = sel_start + text.length; + textarea.selectionEnd = sel_end + text.length; + } + else if (textarea.createTextRange && textarea.caretPos) + { + if (baseHeight != textarea.caretPos.boundingHeight) + { + textarea.focus(); + storeCaret(textarea); + } + + var caret_pos = textarea.caretPos; + caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; + } + else + { + textarea.value = textarea.value + text; + } + if (!popup) + { + textarea.focus(); + } +} + +/** +* Add inline attachment at position +*/ +function attach_inline(index, filename) +{ + insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); + document.forms[form_name].elements[text_name].focus(); +} + +/** +* Add quote text to message +*/ +function addquote(post_id, username) +{ + var message_name = 'message_' + post_id; + var theSelection = ''; + var divarea = false; + + if (document.all) + { + divarea = document.all[message_name]; + } + else + { + divarea = document.getElementById(message_name); + } + + // Get text selection - not only the post content :( + if (window.getSelection) + { + theSelection = window.getSelection().toString(); + } + else if (document.getSelection) + { + theSelection = document.getSelection(); + } + else if (document.selection) + { + theSelection = document.selection.createRange().text; + } + + if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) + { + if (divarea.innerHTML) + { + theSelection = divarea.innerHTML.replace(/
/ig, '\n'); + theSelection = theSelection.replace(//ig, '\n'); + theSelection = theSelection.replace(/<\;/ig, '<'); + theSelection = theSelection.replace(/>\;/ig, '>'); + theSelection = theSelection.replace(/&\;/ig, '&'); + theSelection = theSelection.replace(/ \;/ig, ' '); + } + else if (document.all) + { + theSelection = divarea.innerText; + } + else if (divarea.textContent) + { + theSelection = divarea.textContent; + } + else if (divarea.firstChild.nodeValue) + { + theSelection = divarea.firstChild.nodeValue; + } + } + + if (theSelection) + { + insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); + } + + return; +} + +/** +* From http://www.massless.org/mozedit/ +*/ +function mozWrap(txtarea, open, close) +{ + var selLength = txtarea.textLength; + var selStart = txtarea.selectionStart; + var selEnd = txtarea.selectionEnd; + var scrollTop = txtarea.scrollTop; + + if (selEnd == 1 || selEnd == 2) + { + selEnd = selLength; + } + + var s1 = (txtarea.value).substring(0,selStart); + var s2 = (txtarea.value).substring(selStart, selEnd) + var s3 = (txtarea.value).substring(selEnd, selLength); + + txtarea.value = s1 + open + s2 + close + s3; + txtarea.selectionStart = selEnd + open.length + close.length; + txtarea.selectionEnd = txtarea.selectionStart; + txtarea.focus(); + txtarea.scrollTop = scrollTop; + + return; +} + +/** +* Insert at Caret position. Code from +* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 +*/ +function storeCaret(textEl) +{ + if (textEl.createTextRange) + { + textEl.caretPos = document.selection.createRange().duplicate(); + } +} + +/** +* Color pallette +*/ +function colorPalette(dir, width, height) +{ + var r = 0, g = 0, b = 0; + var numberList = new Array(6); + var color = ''; + + numberList[0] = '00'; + numberList[1] = '40'; + numberList[2] = '80'; + numberList[3] = 'BF'; + numberList[4] = 'FF'; + + document.writeln('
' - . $this -> message . '

' . $this -> message . '

'; } + if (THUMBNAIL_HEIGHT && in_array(self::ext($filename), array('avi', 'thm', 'mkv', 'asf', 'mov', 'wmv', '3gp'))) + { + $mime = new MimeType($filename); + $finfo = finfo_open(FILEINFO_MIME_TYPE); + //Display correct headers for media file + $mimetype = finfo_file($finfo, $this -> parent_dir . $filename); + $file_size = function_exists('getvideosize') ? getvideosize($this -> parent_dir . $filename) : array(); + $file_mime = function_exists('getvideosize') ? $file_size['mime'] : $mime -> __toString(); + $this -> thumb_link = ' '; + + if (function_exists('imagecreatefromavi') && in_array(self::ext($filename), array('avi', 'wmv', '3gp'))) + { + $this -> thumb_link .= '
' . $words -> __get('thumbnail of') . ' ' . $filename . ''; + } + else + { + $this -> thumb_link = ' '; + } + } if (THUMBNAIL_HEIGHT && in_array(self::ext($filename), array('svg', 'xml'))) { $icon_svg = ICON_PATH ? Url::translate_uri($config -> __get('icon_path') . 'svg.png') : Url::translate_uri($this -> parent_dir . $filename); @@ -120,14 +146,13 @@ class FileItem extends Item * @param string $var The key to look for * @return mixed The data stored at the key */ - public function __get($var) + public function __get($var = '') { if (isset($this -> $var)) { return $this -> $var; } - throw new ExceptionDisplay('Variable ' . Url::html_output($var) - . ' not set in FileItem class.'); + throw new ExceptionDisplay('Variable ' . Url::html_output($var) . ' not set in FileItem class.'); } } diff --git a/classes/Htaccess.php b/classes/Htaccess.php index 493032c..42b11eb 100644 --- a/classes/Htaccess.php +++ b/classes/Htaccess.php @@ -215,8 +215,7 @@ class Htaccess if ($file === false) { $_GET['dir'] = ''; - throw new ExceptionDisplay('Cannot open .htpasswd file. -
' . htmlentities($this -> auth_user_file) . ''); + throw new ExceptionDisplay('Cannot open .htpasswd file
' . htmlentities($this -> auth_user_file) . ''); } if ($this -> auth_required_users === array() || DirectoryList::match_in_array($_SERVER['PHP_AUTH_USER'], $this -> auth_required_users)) { diff --git a/classes/Image.php b/classes/Image.php index 073325c..368f641 100644 --- a/classes/Image.php +++ b/classes/Image.php @@ -236,8 +236,7 @@ class Image if (!@is_file($file)) { header('HTTP/1.0 404 Not Found'); - throw new ExceptionDisplay('Image file not found: ' - . Url::html_output($file) . ''); + throw new ExceptionDisplay('Image file not found: ' . Url::html_output($file) . ''); } switch (FileItem::ext($file)) { @@ -279,6 +278,24 @@ class Image $src = imagecreatefromxpm($file); break; } + case 'wmv' : + { + ini_set('memory_limit', '512M'); + $src = function_exists('imagecreatefromwmv') ? imagecreatefromwmv($file) : imagecreatefromjpeg(str_replace('wmv', 'jpg', $file)); + break; + } + case 'avi' : + { + ini_set('memory_limit', '512M'); + $src = function_exists('imagecreatefromavi') ? imagecreatefromavi($file) : imagecreatefromjpeg(str_replace('avi', 'jpg', $file)); + break; + } + case '3gp' : + { + ini_set('memory_limit', '512M'); + $src = function_exists('imagecreatefrom3gp') ? imagecreatefrom3gp($file) : imagecreatefromjpeg(str_replace('3gp', 'jpg', $file)); + break; + } case 'php': { $src = str_replace('php', 'png', $file); @@ -362,8 +379,8 @@ class Image header('Content-Type: image/jpeg'); header('Cache-Control: public, max-age=3600, must-revalidate'); - header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) - . ' GMT'); + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT'); + $src_height = imagesy($src); if ($src_height <= $thumbnail_height) { @@ -374,8 +391,7 @@ class Image $src_width = imagesx($src); $thumb_width = $thumbnail_height * ($src_width / $src_height); $thumb = imagecreatetruecolor($thumb_width, $thumbnail_height); - imagecopyresampled($thumb, $src, 0, 0, 0, 0, $thumb_width, - $thumbnail_height, $src_width, $src_height); + imagecopyresampled($thumb, $src, 0, 0, 0, 0, $thumb_width, $thumbnail_height, $src_width, $src_height); imagejpeg($thumb); imagedestroy($thumb); } @@ -395,6 +411,8 @@ class Image global $config; $this -> height = (int)$config -> __get('thumbnail_height'); $this -> filename = $file; + //$this -> tn_path = $config -> __get('thumbnail_path'); + //$this -> tn_quality = $config -> __get('thumbnail_quality'); } } diff --git a/classes/Language.php b/classes/Language.php index 93d26e3..8d71ad7 100644 --- a/classes/Language.php +++ b/classes/Language.php @@ -67,8 +67,7 @@ class Language $list = array(); while (($file = readdir($hndl)) !== false) { - if (@is_file($path . $file) && preg_match('/^[a-z]{2}(_[a-z]{2})?' - . preg_quote(LANGUAGE_FILE_EXT, '/') . '$/i', $file)) + if (@is_file($path . $file) && preg_match('/^[a-z]{2}(_[a-z]{2})?' . preg_quote(LANGUAGE_FILE_EXT, '/') . '$/i', $file)) { $list[] = $file; } @@ -133,12 +132,10 @@ class Language */ public function __construct() { - $lang_file = PATH_TO_LANGUAGES . $this -> get_current_lang() - . LANGUAGE_FILE_EXT; + $lang_file = PATH_TO_LANGUAGES . $this -> get_current_lang() . LANGUAGE_FILE_EXT; if (!@is_readable($lang_file)) { - throw new ExceptionFatal('Cannot read from language file: ' - . Url::html_output($lang_file) . ''); + throw new ExceptionFatal('Cannot read from language file: ' . Url::html_output($lang_file) . ''); } //load the file as a tab-separated object $this -> translation_data = new ConfigData($lang_file); @@ -151,7 +148,7 @@ class Language public function is_set($name) { return $this -> translation_data -> is_set($name); - } + } /** * @param string $var The key to look for (the keyword) @@ -163,8 +160,7 @@ class Language { return $this -> translation_data -> __get($var); } - throw new ExceptionDisplay('Variable ' . Url::html_output($var) - . ' not set in Language file.'); + throw new ExceptionDisplay('Variable ' . Url::html_output($var) . ' not set in Language file.'); } } diff --git a/classes/Logging.php b/classes/Logging.php index 709980f..bed091b 100644 --- a/classes/Logging.php +++ b/classes/Logging.php @@ -1,6 +1,6 @@ filename, 'ab'); if ($h === false) { - throw new ExceptionDisplay('Could not open log file for writing.' - . ' Make sure PHP has write permission to this file.'); + throw new ExceptionDisplay('Could not open log file for writing.' . ' Make sure PHP has write permission to this file.'); } global $dir, $ip, $host; - $referrer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'N/A'); - fwrite($h, date(DATE_FORMAT) . "\t" . date('H:i:s') - . "\t$ip\t$host\t$referrer\t$dir\t$extra\n"); + $referrer = (!empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'N/A'); + fwrite($h, date(DATE_FORMAT) . "\t" . date('H:i:s') . "\t$ip\t$host\t$referrer\t$dir\t$extra\n"); fclose($h); } } @@ -105,8 +103,7 @@ class Logging $parts = explode("\t", rtrim($file_array[$count_log-$i-1], "\r\n"), 7); if (count($parts) !== 7) { - throw new ExceptionDisplay('Incorrect format for log file on line ' - . ($i + 1)); + throw new ExceptionDisplay('Incorrect format for log file on line ' . ($i + 1)); } for ($j = 0; $j < 7; $j++) { diff --git a/classes/MimeType.php b/classes/MimeType.php index 95cde31..e0c8541 100644 --- a/classes/MimeType.php +++ b/classes/MimeType.php @@ -64,8 +64,8 @@ class MimeType 'application/mac-compactpro' => array('cpt'), 'application/mathml+xml' => array('mathml'), 'application/msword' => array('doc'), - 'application/octet-stream' => array('bin', 'dms', 'lha', - 'lzh', 'exe', 'class', 'so', 'dll', 'dmg'), + 'application/msoffice' => array('docx'), + 'application/octet-stream' => array('bin', 'dms', 'lha', 'lzh', 'exe', 'class', 'so', 'dll', 'dmg'), 'application/oda' => array('oda'), 'application/ogg' => array('ogg'), 'application/pdf' => array('pdf'), @@ -162,10 +162,16 @@ class MimeType 'text/vnd.wap.wmlscript' => array('wmls'), 'text/x-setext' => array('etx'), 'video/mpeg' => array('mpeg', 'mpg', 'mpe'), - 'video/quicktime' => array('qt', 'mov'), + 'video/quicktime' => array('qt', 'mov'), //QuickTime 'video/vnd.mpegurl' => array('mxu', 'm4u'), - 'video/x-msvideo' => array('avi'), - 'video/x-sgi-movie' => array('movie'), + 'video/x-msvideo' => array('avi'), //A/V Interleave + 'video/x-flv' => array('flv'), //Flash Video + 'video/mp4' => array('mp4'), //MPEG-4 + 'application/x-mpegURL' => array('mpu'), //iPhone Index + 'video/MP2T' => array('mp2t'), //iPhone Segment + 'video/3gpp' => array('3gpp'), //3GP Mobile + 'video/x-ms-wmv' => array('wmv'), //Windows Media + 'video/x-sgi-movie' => array('sgi'), 'x-conference/x-cooltalk' => array('ice') ); foreach ($mime_types as $mime_type => $exts) diff --git a/classes/MobileDeviceDetect.php b/classes/MobileDeviceDetect.php new file mode 100644 index 0000000..f549bf1 --- /dev/null +++ b/classes/MobileDeviceDetect.php @@ -0,0 +1,389 @@ +cache = $cache; + $this->request = $request; + $this->language = $words; + + } + + /** + * @package Mobile Device Detect class + * @author FlorinCB aka orynider + * @copyright (c) 2015 Sniper_E - http://www.sniper-e.com + * @copyright (c) 2015 dmzx - http://www.dmzx-web.net + * @copyright (c) 2015 martin - http://www.martins-phpbb.com + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 + */ + public function mobile_device_detect($iphone = true, $ipod = true, $ipad = true, $android = true, $opera = true, $blackberry = true, $palm = true, $windows = true, $lg = true) + { + $mobile_browser = false; + $user_agent = $this->request->server('HTTP_USER_AGENT'); + + switch (true) + { + case (preg_match('/x86_64|WOW64|Win64|Iceweasel/i', $user_agent)); + $status = $this->language -> __get('DESKTOP'); + $mobile_browser = true; + break; + case (preg_match('/Bot|CFNetwork|libwww|Java|Jigsaw|SpreadTrum|httpget/i', $user_agent)); + $mobile_browser = false; + break; + case (preg_match('/ipad/i',$user_agent)); + $status = $this->language -> __get('IPAD'); + $mobile_browser = $ipad; + break; + case (preg_match('/ipod/i',$user_agent)); + $status = $this->language -> __get('IPOD'); + $mobile_browser = $ipod; + break; + case (preg_match('/iphone/i', $user_agent)); + $status = $this->language -> __get('IPHONE'); + $mobile_browser = $iphone; + break; + case (preg_match('/android/i', $user_agent)); + if (preg_match('/SM-G870A/i', $user_agent)) + { + $status = $this->language -> __get('SGS5A'); + } + else if (preg_match('/SM-G900A|SM-G900F|SM-G900H|SM-G900M|SM-G900P|SM-G900R4|SM-G900T|SM-G900V|SM-G900W8|SM-G800F/i', $user_agent)) + { + $status = $this->language -> __get('SGS5'); + } + else if (preg_match('/SM-G920F/i', $user_agent)) + { + $status = $this->language -> __get('SGS6'); + } + else if (preg_match('/SGH-I497/i', $user_agent)) + { + $status = $this->language -> __get('SG2T'); + } + else if (preg_match('/GT-P5210|SM-T110|SM-T310/i', $user_agent)) + { + $status = $this->language -> __get('SGT3'); + } + else if (preg_match('/SM-T210/i', $user_agent)) + { + $status = $this->language -> __get('SGT3W'); + } + else if (preg_match('/SM-T335|SM-T530/i', $user_agent)) + { + $status = $this->language -> __get('SGT4'); + } + else if (preg_match('/SM-T520/i', $user_agent)) + { + $status = $this->language -> __get('SGTP'); + } + else if (preg_match('/SGH-I537/i', $user_agent)) + { + $status = $this->language -> __get('SGS4A'); + } + else if (preg_match('/GT-I9505|GT-I9500|SPH-L720T/i', $user_agent)) + { + $status = $this->language -> __get('SGS4'); + } + else if (preg_match('/GT-I9100P/i', $user_agent)) + { + $status = $this->language -> __get('SGS2'); + } + else if (preg_match('/SM-N9005|SM-P600/i', $user_agent)) + { + $status = $this->language -> __get('SGN3'); + } + else if (preg_match('/SM-N7505/i', $user_agent)) + { + $status = $this->language -> __get('SGN3N'); + } + else if (preg_match('/SM-N910C|SM-N910F/i', $user_agent)) + { + $status = $this->language -> __get('SGN4'); + } + else if (preg_match('/SM-N920P/i', $user_agent)) + { + $status = $this->language -> __get('SGN5'); + } + else if (preg_match('/SM-G357FZ/i', $user_agent)) + { + $status = $this->language -> __get('SGA4'); + } + else if (preg_match('/SM-G925P/i', $user_agent)) + { + $status = $this->language -> __get('SGS6E'); + } + else if (preg_match('/SM-G935F/i', $user_agent)) + { + $status = $this->language -> __get('SGS7E'); + } + else if (preg_match('/SM-G950F|SM-G955F/i', $user_agent)) + { + $status = $this->language -> __get('SGS8'); + } + else if (preg_match('/GT-S7582/i', $user_agent)) + { + $status = $this->language -> __get('SGSD2'); + } + else if (preg_match('/GT-I9100P/i', $user_agent)) + { + $status = $this->language -> __get('SGS2'); + } + else if (preg_match('/HONORPLK-L01/i',$user_agent)) + { + $status = $this->language -> __get('HPL01'); + } + else if (preg_match('/EVA-L09/i', $user_agent)) + { + $status = $this->language -> __get('HPL09'); + } + else if (preg_match('/VNS-L23/i', $user_agent)) + { + $status = $this->language -> __get('HPL23'); + } + else if (preg_match('/IMM76B/i', $user_agent)) + { + $status = $this->language -> __get('SGN'); + } + else if (preg_match('/TF101/i', $user_agent)) + { + $status = $this->language -> __get('ATT'); + } + else if (preg_match('/Archos 40b/i', $user_agent)) + { + $status = $this->language -> __get('A4TS'); + } + else if (preg_match('/A0001/i', $user_agent)) + { + $status = $this->language -> __get('OPO'); + } + else if (preg_match('/Orange Nura/i', $user_agent)) + { + $status = $this->language -> __get('ORN'); + } + else if (preg_match('/XT1030/i', $user_agent)) + { + $status = $this->language -> __get('MDM'); + } + else if (preg_match('/TIANYU-KTOUCH/i', $user_agent)) + { + $status = $this->language -> __get('TKT'); + } + else if (preg_match('/D2005|D2105/i',$user_agent)) + { + $status = $this->language -> __get('SXED'); + } + else if (preg_match('/C2005|D2303/i', $user_agent)) + { + $status = $this->language -> __get('SXM2'); + } + else if (preg_match('/C6906/i', $user_agent)) + { + $status = $this->language -> __get('SXZ1'); + } + else if (preg_match('/D5803/i', $user_agent)) + { + $status = $this->language -> __get('SXZ3'); + } + else if (preg_match('/P710/i', $user_agent)) + { + $status = $this->language -> __get('LGOL7IT'); + } + else if (preg_match('/LG-H850/i', $user_agent)) + { + $status = $this->language -> __get('LGH850'); + } + else if (preg_match('/LG-V500/i', $user_agent)) + { + $status = $this->language -> __get('LGV500'); + } + else if (preg_match('/lg/i', $user_agent)) + { + $status = $this->language -> __get('LG'); + } + else if (preg_match('/ASUS_T00J/i', $user_agent)) + { + $status = $this->language -> __get('ATOOJ'); + } + else if (preg_match('/Aquaris E5/i', $user_agent)) + { + $status = $this->language -> __get('AE5HD'); + } + else if (preg_match('/HTC Desire|626s/i', $user_agent)) + { + $status = $this->language -> __get('HTCD'); + } + else if (preg_match('/Nexus One/i', $user_agent)) + { + $status = $this->language -> __get('N1'); + } + else if (preg_match('/Nexus 4|LRX22C|LVY48F|LMY47V/i', $user_agent)) + { + $status = $this->language -> __get('N4'); + } + else if (preg_match('/Nexus 5|LMY48S/i', $user_agent)) + { + $status = $this->language -> __get('N5'); + } + else if (preg_match('/Nexus 7|KTU84P/i', $user_agent)) + { + $status = $this->language -> __get('N7'); + } + else if (preg_match('/Nexus 9|LMY47X/i',$user_agent)) + { + $status = $this->language -> __get('N9'); + } + else if (preg_match('/Lenovo_K50_T5/i', $user_agent)) + { + $status = $this->language -> __get('LK50T5'); + } + else + { + $status = $this->language -> __get('ANDROID'); + } + $mobile_browser = $android; + break; + case (preg_match('/opera mini/i', $user_agent)); + $status = $this->language -> __get('MOBILE_DEVICE'); + $mobile_browser = $opera; + break; + case (preg_match('/blackberry/i', $user_agent)); + if (preg_match('/BlackBerry9900|BlackBerry9930|BlackBerry9790|BlackBerry9780|BlackBerry9700|BlackBerry9650|BlackBerry9000|/i',$user_agent)) + { + $status = 'BlackBerry Bold'; + } + else if (preg_match('/BlackBerry9380|BlackBerry9370|BlackBerry9360|BlackBerry9350|BlackBerry9330|BlackBerry9320|BlackBerry9300|BlackBerry9220|BlackBerry8980|BlackBerry8900|BlackBerry8530|BlackBerry8520|BlackBerry8330|BlackBerry8320|BlackBerry8310|BlackBerry8300/i',$user_agent)) + { + $status = $this->language -> __get('BBCURVE'); + } + else if (preg_match('/BlackBerry9860|BlackBerry9850|BlackBerry9810|BlackBerry9800/i', $user_agent)) + { + $status = $this->language -> __get('BBTORCH'); + } + else if (preg_match('/BlackBerry9900/i', $user_agent)) + { + $status = $this->language -> __get('BBTOUCH'); + } + else if (preg_match('/BlackBerry9105/i', $user_agent)) + { + $status = $this->language -> __get('BBPEARL'); + } + else if (preg_match('/BlackBerry8220/i', $user_agent)) + { + $status = $this->language -> __get('BBPEARLF'); + } + else if (preg_match('/BlackBerry Storm|BlackBerry Storm2/i', $user_agent)) + { + $status = $this->language -> __get('BBSTORM'); + } + else if (preg_match('/BlackBerry Passport/i', $user_agent)) + { + $status = $this->language -> __get('BBPP'); + } + else if (preg_match('/BlackBerry Porsche/i',$user_agent)) + { + $status = $this->language -> __get('BBP'); + } + else if (preg_match('/BlackBerry PlayBook/i', $user_agent)) + { + $status = $this->language -> __get('BBPB'); + } + else + { + $status = $this->language -> __get('BLACKBERRY'); + } + $mobile_browser = $blackberry; + break; + case (preg_match('/(pre\/|palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)/i', $user_agent)); + $status = $this->language -> __get('PALM'); + $mobile_browser = $palm; + break; + case (preg_match('/(iris|3g_t|windows ce|windows Phone|opera mobi|windows ce; smartphone;|windows ce; iemobile)/i', $user_agent)); + if (preg_match('/Lumia 640 XL/i', $user_agent)) + { + $status = $this->language -> __get('L640XL'); + } + else + { + $status = $this->language -> __get('WSP'); + } + $mobile_browser = $windows; + break; + case (preg_match('/lge vx10000/i', $user_agent)); + $status = $this->language -> __get('VOYAGER'); + $mobile_browser = $windows; + break; + case (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320|vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo)/i', $user_agent)); + $status = $this->language -> __get('MOBILE_DEVICE'); + $mobile_browser = true; + break; + case (isset($post['HTTP_X_WAP_PROFILE']) || isset($post['HTTP_PROFILE'])); + $status = $this->language -> __get('MOBILE_DEVICE'); + $mobile_browser = true; + break; + case (in_array(strtolower(substr($user_agent, 0, 4)), array('1207'=>'1207','3gso'=>'3gso','4thp'=>'4thp','501i'=>'501i','502i'=>'502i','503i'=>'503i','504i'=>'504i','505i'=>'505i','506i'=>'506i','6310'=>'6310','6590'=>'6590','770s'=>'770s','802s'=>'802s','a wa'=>'a wa','acer'=>'acer','acs-'=>'acs-','airn'=>'airn','alav'=>'alav','asus'=>'asus','attw'=>'attw','au-m'=>'au-m','aur '=>'aur ','aus '=>'aus ','abac'=>'abac','acoo'=>'acoo','aiko'=>'aiko','alco'=>'alco','alca'=>'alca','amoi'=>'amoi','anex'=>'anex','anny'=>'anny','anyw'=>'anyw','aptu'=>'aptu','arch'=>'arch','argo'=>'argo','bell'=>'bell','bird'=>'bird','bw-n'=>'bw-n','bw-u'=>'bw-u','beck'=>'beck','benq'=>'benq','bilb'=>'bilb','blac'=>'blac','c55/'=>'c55/','cdm-'=>'cdm-','chtm'=>'chtm','capi'=>'capi','cond'=>'cond','craw'=>'craw','dall'=>'dall','dbte'=>'dbte','dc-s'=>'dc-s','dica'=>'dica','ds-d'=>'ds-d','ds12'=>'ds12','dait'=>'dait','devi'=>'devi','dmob'=>'dmob','doco'=>'doco','dopo'=>'dopo','el49'=>'el49','erk0'=>'erk0','esl8'=>'esl8','ez40'=>'ez40','ez60'=>'ez60','ez70'=>'ez70','ezos'=>'ezos','ezze'=>'ezze','elai'=>'elai','emul'=>'emul','eric'=>'eric','ezwa'=>'ezwa','fake'=>'fake','fly-'=>'fly-','fly_'=>'fly_','g-mo'=>'g-mo','g1 u'=>'g1 u','g560'=>'g560','gf-5'=>'gf-5','grun'=>'grun','gene'=>'gene','go.w'=>'go.w','good'=>'good','grad'=>'grad','hcit'=>'hcit','hd-m'=>'hd-m','hd-p'=>'hd-p','hd-t'=>'hd-t','hei-'=>'hei-','hp i'=>'hp i','hpip'=>'hpip','hs-c'=>'hs-c','htc '=>'htc ','htc-'=>'htc-','htca'=>'htca','htcg'=>'htcg','htcp'=>'htcp','htcs'=>'htcs','htct'=>'htct','htc_'=>'htc_','haie'=>'haie','hita'=>'hita','huaw'=>'huaw','hutc'=>'hutc','i-20'=>'i-20','i-go'=>'i-go','i-ma'=>'i-ma','i230'=>'i230','iac'=>'iac','iac-'=>'iac-','iac/'=>'iac/','ig01'=>'ig01','im1k'=>'im1k','inno'=>'inno','iris'=>'iris','jata'=>'jata','java'=>'java','kddi'=>'kddi','kgt'=>'kgt','kgt/'=>'kgt/','kpt '=>'kpt ','kwc-'=>'kwc-','klon'=>'klon','lexi'=>'lexi','lg g'=>'lg g','lg-a'=>'lg-a','lg-b'=>'lg-b','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-f'=>'lg-f','lg-g'=>'lg-g','lg-k'=>'lg-k','lg-l'=>'lg-l','lg-m'=>'lg-m','lg-o'=>'lg-o','lg-p'=>'lg-p','lg-s'=>'lg-s','lg-t'=>'lg-t','lg-u'=>'lg-u','lg-w'=>'lg-w','lg/k'=>'lg/k','lg/l'=>'lg/l','lg/u'=>'lg/u','lg50'=>'lg50','lg54'=>'lg54','lge-'=>'lge-','lge/'=>'lge/','lynx'=>'lynx','leno'=>'leno','m1-w'=>'m1-w','m3ga'=>'m3ga','m50/'=>'m50/','maui'=>'maui','mc01'=>'mc01','mc21'=>'mc21','mcca'=>'mcca','medi'=>'medi','meri'=>'meri','mio8'=>'mio8','mioa'=>'mioa','mo01'=>'mo01','mo02'=>'mo02','mode'=>'mode','modo'=>'modo','mot '=>'mot ','mot-'=>'mot-','mt50'=>'mt50','mtp1'=>'mtp1','mtv '=>'mtv ','mate'=>'mate','maxo'=>'maxo','merc'=>'merc','mits'=>'mits','mobi'=>'mobi','motv'=>'motv','mozz'=>'mozz','n100'=>'n100','n101'=>'n101','n102'=>'n102','n202'=>'n202','n203'=>'n203','n300'=>'n300','n302'=>'n302','n500'=>'n500','n502'=>'n502','n505'=>'n505','n700'=>'n700','n701'=>'n701','n710'=>'n710','nec-'=>'nec-','nem-'=>'nem-','newg'=>'newg','neon'=>'neon','netf'=>'netf','noki'=>'noki','nzph'=>'nzph','o2 x'=>'o2 x','o2-x'=>'o2-x','opwv'=>'opwv','owg1'=>'owg1','opti'=>'opti','oran'=>'oran','p800'=>'p800','pand'=>'pand','pg-1'=>'pg-1','pg-2'=>'pg-2','pg-3'=>'pg-3','pg-6'=>'pg-6','pg-8'=>'pg-8','pg-c'=>'pg-c','pg13'=>'pg13','phil'=>'phil','pn-2'=>'pn-2','pt-g'=>'pt-g','palm'=>'palm','pana'=>'pana','pire'=>'pire','pock'=>'pock','pose'=>'pose','psio'=>'psio','qa-a'=>'qa-a','qc-2'=>'qc-2','qc-3'=>'qc-3','qc-5'=>'qc-5','qc-7'=>'qc-7','qc07'=>'qc07','qc12'=>'qc12','qc21'=>'qc21','qc32'=>'qc32','qc60'=>'qc60','qci-'=>'qci-','qwap'=>'qwap','qtek'=>'qtek','r380'=>'r380','r600'=>'r600','raks'=>'raks','rim9'=>'rim9','rove'=>'rove','s55/'=>'s55/','sage'=>'sage','sams'=>'sams','sc01'=>'sc01','sch-'=>'sch-','scp-'=>'scp-','sdk/'=>'sdk/','se47'=>'se47','sec-'=>'sec-','sec0'=>'sec0','sec1'=>'sec1','semc'=>'semc','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','sk-0'=>'sk-0','sl45'=>'sl45','slid'=>'slid','smb3'=>'smb3','smt5'=>'smt5','sp01'=>'sp01','sph-'=>'sph-','spv '=>'spv ','spv-'=>'spv-','sy01'=>'sy01','samm'=>'samm','sany'=>'sany','sava'=>'sava','scoo'=>'scoo','send'=>'send','siem'=>'siem','smar'=>'smar','smit'=>'smit','soft'=>'soft','sony'=>'sony','t-mo'=>'t-mo','t218'=>'t218','t250'=>'t250','t600'=>'t600','t610'=>'t610','t618'=>'t618','tcl-'=>'tcl-','tdg-'=>'tdg-','telm'=>'telm','tim-'=>'tim-','ts70'=>'ts70','tsm-'=>'tsm-','tsm3'=>'tsm3','tsm5'=>'tsm5','tx-9'=>'tx-9','tagt'=>'tagt','talk'=>'talk','teli'=>'teli','topl'=>'topl','hiba'=>'hiba','up.b'=>'up.b','upg1'=>'upg1','utst'=>'utst','v400'=>'v400','v750'=>'v750','veri'=>'veri','vk-v'=>'vk-v','vk40'=>'vk40','vk50'=>'vk50','vk52'=>'vk52','vk53'=>'vk53','vm40'=>'vm40','vx98'=>'vx98','virg'=>'virg','vite'=>'vite','voda'=>'voda','vulc'=>'vulc','w3c '=>'w3c ','w3c-'=>'w3c-','wapj'=>'wapj','wapp'=>'wapp','wapu'=>'wapu','wapm'=>'wapm','wig '=>'wig ','wapi'=>'wapi','wapr'=>'wapr','wapv'=>'wapv','wapy'=>'wapy','wapa'=>'wapa','waps'=>'waps','wapt'=>'wapt','winc'=>'winc','winw'=>'winw','wonu'=>'wonu','x700'=>'x700','xda2'=>'xda2','xdag'=>'xdag','yas-'=>'yas-','your'=>'your','zte-'=>'zte-','zeto'=>'zeto','acs-'=>'acs-','alav'=>'alav','alca'=>'alca','amoi'=>'amoi','aste'=>'aste','audi'=>'audi','avan'=>'avan','benq'=>'benq','bird'=>'bird','blac'=>'blac','blaz'=>'blaz','brew'=>'brew','brvw'=>'brvw','bumb'=>'bumb','ccwa'=>'ccwa','cell'=>'cell','cldc'=>'cldc','cmd-'=>'cmd-','dang'=>'dang','doco'=>'doco','eml2'=>'eml2','eric'=>'eric','fetc'=>'fetc','hipt'=>'hipt','http'=>'http','ibro'=>'ibro','idea'=>'idea','ikom'=>'ikom','inno'=>'inno','ipaq'=>'ipaq','jbro'=>'jbro','jemu'=>'jemu','java'=>'java','jigs'=>'jigs','kddi'=>'kddi','keji'=>'keji','kyoc'=>'kyoc','kyok'=>'kyok','leno'=>'leno','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-g'=>'lg-g','lge-'=>'lge-','libw'=>'libw','m-cr'=>'m-cr','maui'=>'maui','maxo'=>'maxo','midp'=>'midp','mits'=>'mits','mmef'=>'mmef','mobi'=>'mobi','mot-'=>'mot-','moto'=>'moto','mwbp'=>'mwbp','mywa'=>'mywa','nec-'=>'nec-','newt'=>'newt','nok6'=>'nok6','noki'=>'noki','o2im'=>'o2im','opwv'=>'opwv','palm'=>'palm','pana'=>'pana','pant'=>'pant','pdxg'=>'pdxg','phil'=>'phil','play'=>'play','pluc'=>'pluc','port'=>'port','prox'=>'prox','qtek'=>'qtek','qwap'=>'qwap','rozo'=>'rozo','sage'=>'sage','sama'=>'sama','sams'=>'sams','sany'=>'sany','sch-'=>'sch-','sec-'=>'sec-','send'=>'send','seri'=>'seri','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','siem'=>'siem','smal'=>'smal','smar'=>'smar','sony'=>'sony','sph-'=>'sph-','symb'=>'symb','t-mo'=>'t-mo','teli'=>'teli','tim-'=>'tim-','tosh'=>'tosh','treo'=>'treo','tsm-'=>'tsm-','upg1'=>'upg1','upsi'=>'upsi','vk-v'=>'vk-v','voda'=>'voda','vx52'=>'vx52','vx53'=>'vx53','vx60'=>'vx60','vx61'=>'vx61','vx70'=>'vx70','vx80'=>'vx80','vx81'=>'vx81','vx83'=>'vx83','vx85'=>'vx85','wap-'=>'wap-','wapa'=>'wapa','wapi'=>'wapi','wapp'=>'wapp','wapr'=>'wapr','webc'=>'webc','whit'=>'whit','winw'=>'winw','wmlb'=>'wmlb','xda-'=>'xda-',))); + $status = $this->language -> __get('MOBILE_DEVICE'); + $mobile_browser = true; + break; + default; + $status = $this->language -> __get('DESKTOP'); + $mobile_browser = false; + break; + } + header('Cache-Control: no-transform'); + header('Vary: User-Agent'); + + if ($mobile_browser == '') + { + return $mobile_browser; + } + else + { + return array($mobile_browser, $status); + } + } +} \ No newline at end of file diff --git a/classes/RequestVars.php b/classes/RequestVars.php new file mode 100644 index 0000000..0d40ad5 --- /dev/null +++ b/classes/RequestVars.php @@ -0,0 +1,1016 @@ +post('mode', TYPE_NO_TAGS, ''); + * - $page_id = $mx_request_vars->get('page', TYPE_INT, 1); + * This class IS instatiated in common.php ;-) + * + * @access public + * @author Markus Petrux, John Olson, FlorinCB + * @package Core + */ +class RequestVars +{ + /**#@+ + * Constant identifying the super global with the same name. + */ + const POST = 0; + const GET = 1; + const REQUEST = 2; + const COOKIE = 3; + const SERVER = 4; + const FILES = 5; + /**#@-*/ + + // + // Implementation Conventions: + // Properties and methods prefixed with underscore are intented to be private. ;-) + // + + /** + * @var array The names of super global variables that this class should protect if super globals are disabled. + */ + protected $super_globals = array( + self::POST => '_POST', + self::GET => '_GET', + self::REQUEST => '_REQUEST', + self::COOKIE => '_COOKIE', + self::SERVER => '_SERVER', + self::FILES => '_FILES', + ); + + /** + * @var array Stores original contents of $_REQUEST array. + */ + protected $original_request = null; + + /** + * @var + */ + protected $super_globals_disabled = false; + + /** + * @var array An associative array that has the value of super global constants as keys and holds their data as values. + */ + protected $input; + + /** + * @var \phpbb\request\type_cast_helper_interface An instance of a type cast helper providing convenience methods for type conversions. + * borrowed from github.com/phpbbb + */ + protected $type_cast_helper; + + // ------------------------------ + // Properties + // + + /* ------------------------------ + * Constructor + * Initialises the request class, that means it stores all input data in {@link $input input} + * and then calls {@link deactivated_super_global deactivated_super_global} + */ + public function __construct($disable_super_globals = false) + { + foreach ($this->super_globals as $const => $super_global) + { + $this->input[$const] = isset($GLOBALS[$super_global]) ? $GLOBALS[$super_global] : array(); + } + + // simulate request_order = GP + $this->original_request = $this->input[self::REQUEST]; + $this->input[self::REQUEST] = $this->input[self::POST] + $this->input[self::GET]; + + if ($disable_super_globals) + { + $this->disable_super_globals(); + } + } + + /** + * Getter for $super_globals_disabled + * + * @return bool Whether super globals are disabled or not. + * borrowed from github.com/phpbbb + */ + public function super_globals_disabled() + { + return $this->super_globals_disabled; + } + + /** + * Disables access of super globals specified in $super_globals. + * This is achieved by overwriting the super globals with instances of {@link \autoindex\request\deactivated_super_global \autoindex\request\deactivated_super_global} + * borrowed from github.com/phpbbb + */ + public function disable_super_globals() + { + if (!$this->super_globals_disabled) + { + foreach ($this->super_globals as $const => $super_global) + { + unset($GLOBALS[$super_global]); + $GLOBALS[$super_global] = new deactivated_super_global($this, $super_global, $const); + } + + $this->super_globals_disabled = true; + } + } + + /** + * Enables access of super globals specified in $super_globals if they were disabled by {@link disable_super_globals disable_super_globals}. + * This is achieved by making the super globals point to the data stored within this class in {@link $input input}. + * borrowed from github.com/phpbbb + */ + public function enable_super_globals() + { + if ($this->super_globals_disabled) + { + foreach ($this->super_globals as $const => $super_global) + { + $GLOBALS[$super_global] = $this->input[$const]; + } + + $GLOBALS['_REQUEST'] = $this->original_request; + + $this->super_globals_disabled = false; + } + } + + // ------------------------------ + // Public Methods + // + + /** + * This function allows overwriting or setting a value in one of the super global arrays. + * + * Changes which are performed on the super globals directly will not have any effect on the results of + * other methods this class provides. Using this function should be avoided if possible! It will + * consume twice the the amount of memory of the value + * + * @param string $var_name The name of the variable that shall be overwritten + * @param mixed $value The value which the variable shall contain. + * If this is null the variable will be unset. + * @param mx_request_vars::POST|GET|REQUEST|COOKIE $super_global + * Specifies which super global shall be changed + */ + public function overwrite($var_name, $value, $super_global = self::REQUEST) + { + if (!isset($this->super_globals[$super_global])) + { + return; + } + + $this->type_cast_helper->add_magic_quotes($value); + + // setting to null means unsetting + if ($value === null) + { + unset($this->input[$super_global][$var_name]); + if (!$this->super_globals_disabled()) + { + unset($GLOBALS[$this->super_globals[$super_global]][$var_name]); + } + } + else + { + $this->input[$super_global][$var_name] = $value; + if (!$this->super_globals_disabled()) + { + $GLOBALS[$this->super_globals[$super_global]][$var_name] = $value; + } + } + } + + // ------------------------------ + // Private Methods + // + + /** + * Function: _read(). + * + * Get the value of the specified request var (post or get) and force the result to be + * of specified type. It might also transform the result (stripslashes, htmlspecialchars) for security + * purposes. It all depends on the $type argument. + * If the specified request var does not exist, then the default ($dflt) value is returned. + * Note the $type argument behaves as a bit array where more than one option can be specified by OR'ing + * the passed argument. This is tipical practice in languages like C, but it can also be done with PHP. + * + * @access private + * @param unknown_type $var + * @param unknown_type $type + * @param unknown_type $dflt + * @return unknown + */ + public function _read($var, $type = TYPE_ANY, $dflt = '', $not_null = false) + { + if( ($type & (TYPE_POST_VARS|TYPE_GET_VARS)) == 0 ) + { + $type |= (TYPE_POST_VARS|TYPE_GET_VARS); + } + + if( ($type & TYPE_POST_VARS) && isset($_POST[$var]) || + ($type & TYPE_GET_VARS) && isset($_GET[$var]) ) + { + $val = ( ($type & TYPE_POST_VARS) && isset($_POST[$var]) ? $_POST[$var] : $_GET[$var] ); + if( !($type & TYPE_NO_STRIP) ) + { + if( is_array($val) ) + { + foreach( $val as $k => $v ) + { + $val[$k] = trim(stripslashes($v)); + } + } + else + { + $val = trim(stripslashes($val)); + } + } + } + else + { + $val = $dflt; + } + + if( $type & TYPE_INT ) // integer + { + return $not_null && empty($val) ? $dflt : intval($val); + } + + if( $type & TYPE_FLOAT ) // float + { + return $not_null && empty($val) ? $dflt : floatval($val); + } + + if( $type & TYPE_NO_TAGS ) // ie username + { + if( is_array($val) ) + { + foreach( $val as $k => $v ) + { + $val[$k] = htmlspecialchars(strip_tags(ltrim(rtrim($v, " \t\n\r\0\x0B\\")))); + } + } + else + { + $val = htmlspecialchars(strip_tags(ltrim(rtrim($val, " \t\n\r\0\x0B\\")))); + } + } + elseif( $type & TYPE_NO_HTML ) // no slashes nor html + { + if( is_array($val) ) + { + foreach( $val as $k => $v ) + { + $val[$k] = htmlspecialchars(ltrim(rtrim($v, " \t\n\r\0\x0B\\"))); + } + } + else + { + $val = htmlspecialchars(ltrim(rtrim($val, " \t\n\r\0\x0B\\"))); + } + } + + if( $type & TYPE_SQL_QUOTED ) + { + if( is_array($val) ) + { + foreach( $val as $k => $v ) + { + $val[$k] = str_replace(($type & TYPE_NO_STRIP ? "\'" : "'"), "''", $v); + } + } + else + { + $val = str_replace(($type & TYPE_NO_STRIP ? "\'" : "'"), "''", $val); + } + } + + return $not_null && empty($val) ? $dflt : $val; + } + + // ------------------------------ + // Public Methods + // + + /** + * Central type safe input handling function. + * All variables in GET or POST requests should be retrieved through this function to maximise security. + * + * @param string|array $var_name The form variable's name from which data shall be retrieved. + * If the value is an array this may be an array of indizes which will give + * direct access to a value at any depth. E.g. if the value of "var" is array(1 => "a") + * then specifying array("var", 1) as the name will return "a". + * @param mixed $default A default value that is returned if the variable was not set. + * This function will always return a value of the same type as the default. + * @param bool $multibyte If $default is a string this parameter has to be true if the variable may contain any UTF-8 characters + * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks + * @param mx_request_vars::POST|GET|REQUEST|COOKIE $super_global + * Specifies which super global should be used + * + * @return mixed The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the + * the same as that of $default. If the variable is not set $default is returned. + */ + public function variable($var_name, $default, $multibyte = false, $super_global = self::REQUEST) + { + return $this->_variable($var_name, $default, $multibyte, $super_global, true); + } + + /** + * Get a variable, but without trimming strings. + * Same functionality as variable(), except does not run trim() on strings. + * This method should be used when handling passwords. + * + * @param string|array $var_name The form variable's name from which data shall be retrieved. + * If the value is an array this may be an array of indizes which will give + * direct access to a value at any depth. E.g. if the value of "var" is array(1 => "a") + * then specifying array("var", 1) as the name will return "a". + * @param mixed $default A default value that is returned if the variable was not set. + * This function will always return a value of the same type as the default. + * @param bool $multibyte If $default is a string this parameter has to be true if the variable may contain any UTF-8 characters + * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks + * @param mx_request_vars::POST|GET|REQUEST|COOKIE $super_global + * Specifies which super global should be used + * + * @return mixed The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the + * the same as that of $default. If the variable is not set $default is returned. + */ + public function untrimmed_variable($var_name, $default, $multibyte = false, $super_global = self::REQUEST) + { + return $this->_variable($var_name, $default, $multibyte, $super_global, false); + } + + /** + * + */ + public function raw_variable($var_name, $default, $super_global = self::REQUEST) + { + $path = false; + + // deep direct access to multi dimensional arrays + if (is_array($var_name)) + { + $path = $var_name; + // make sure at least the variable name is specified + if (empty($path)) + { + return (is_array($default)) ? array() : $default; + } + // the variable name is the first element on the path + $var_name = array_shift($path); + } + + if (!isset($this->input[$super_global][$var_name])) + { + return (is_array($default)) ? array() : $default; + } + $var = $this->input[$super_global][$var_name]; + + if ($path) + { + // walk through the array structure and find the element we are looking for + foreach ($path as $key) + { + if (is_array($var) && isset($var[$key])) + { + $var = $var[$key]; + } + else + { + return (is_array($default)) ? array() : $default; + } + } + } + + return $var; + } + + /** + * Shortcut method to retrieve SERVER variables. + * + * Also fall back to getenv(), some CGI setups may need it (probably not, but + * whatever). + * + * @param string|array $var_name See \phpbb\request\request_interface::variable + * @param mixed $Default See \phpbb\request\request_interface::variable + * + * @return mixed The server variable value. + */ + public function server($var_name, $default = '') + { + $multibyte = true; + + if ($this->is_set($var_name, self::SERVER)) + { + return $this->variable($var_name, $default, $multibyte, self::SERVER); + } + else + { + $var = getenv($var_name); + $this->recursive_set_var($var, $default, $multibyte); + return $var; + } + } + + /** + * Shortcut method to retrieve the value of client HTTP headers. + * + * @param string|array $header_name The name of the header to retrieve. + * @param mixed $default See \phpbb\request\request_interface::variable + * + * @return mixed The header value. + */ + public function header($header_name, $default = '') + { + $var_name = 'HTTP_' . str_replace('-', '_', strtoupper($header_name)); + return $this->server($var_name, $default); + } + + /** + * Shortcut method to retrieve $_FILES variables + * + * @param string $form_name The name of the file input form element + * + * @return array The uploaded file's information or an empty array if the + * variable does not exist in _FILES. + */ + public function file($form_name) + { + return $this->variable($form_name, array('name' => 'none'), true, self::FILES); + } + + /** + * Request POST variable. + * + * _read() wrappers to retrieve POST, GET or any REQUEST (both) variable. + * + * @access public + * @param string $var + * @param integer $type + * @param string $dflt + * @return string + */ + public function post($var, $type = TYPE_ANY, $dflt = '', $not_null = false) + { + if (!$this->super_globals_disabled()) + { + return $this->_read($var, ($type | TYPE_POST_VARS), $dflt, $not_null); + } + else + { + $super_global = self::POST; + $multibyte = false; //UTF-8 ? + $default = $dflt; + return $this->_variable($var_name, $default, $multibyte, $super_global, true); + } + + } + + /** ** / + public function post($var_name, $default, $multibyte = false, $super_global = self::POST) + { + return $this->_variable($var_name, $default, $multibyte, $super_global, true); + } + /** **/ + + /** + * Request GET variable. + * + * _read() wrappers to retrieve POST, GET or any REQUEST (both) variable. + * + * @access public + * @param string $var + * @param integer $type + * @param string $dflt + * @return string + */ + public function get($var, $type = TYPE_ANY, $dflt = '', $not_null = false) + { + if (!$this->super_globals_disabled()) + { + return $this->_read($var, ($type | TYPE_GET_VARS), $dflt, $not_null); + } + else + { + $super_global = self::GET; + $multibyte = false; //UTF-8 ? + $default = $dflt; + return $this->_variable($var_name, $default, $multibyte, $super_global, true); + } + + } + + /** ** / + public function get($var_name, $default, $multibyte = false, $super_global = self::GET) + { + return $this->_variable($var_name, $default, $multibyte, $super_global, true); + } + /** **/ + + /** + * Request GET or POST variable. + * + * _read() wrappers to retrieve POST, GET or any REQUEST (both) variable. + * + * @access public + * @param string $var + * @param integer $type + * @param string $dflt + * @return string + */ + public function request($var, $type = TYPE_ANY, $dflt = '', $not_null = false) + { + if (!$this->super_globals_disabled()) + { + return $this->_read($var, ($type | TYPE_POST_VARS | TYPE_GET_VARS), $dflt, $not_null); + } + else + { + $super_global = self::REQUEST; + $multibyte = false; //UTF-8 ? + $default = $dflt; + return $this->_variable($var_name, $default, $multibyte, $super_global, true); + } + } + + /** + * Is POST var? + * + * Boolean method to check for existence of POST variable. + * + * @access public + * @param string $var + * @return boolean + */ + public function is_post($var) + { + // Note: _x and _y are used by (at least IE) to return the mouse position at onclick of INPUT TYPE="img" elements. + return ($this->is_set_post($var) || $this->is_set_post($var.'_x') && $this->is_set_post($var.'_y')) ? 1 : 0; + } + + /** + * Is GET var? + * + * Boolean method to check for existence of GET variable. + * + * @access public + * @param string $var + * @return boolean + */ + public function is_get($var) + { + //return isset($_GET[$var]) ? 1 : 0 ; + return $this->is_set($var, self::GET); + } + + /** + * Is REQUEST (either GET or POST) var? + * + * Boolean method to check for existence of any REQUEST (both) variable. + * + * @access public + * @param string $var + * @return boolean + */ + public function is_request($var) + { + return ($this->is_get($var) || $this->is_post($var)) ? 1 : 0; + //return $this->is_set($var, self::REQUEST); + } + + /** + * Is POST var empty? + * + * Boolean method to check if POST variable is empty + * as it might be set but still be empty. + * + * @access public + * @param string $var + * @return boolean + */ + public function is_empty_post($var) + { + //return (empty($_POST[$var]) && ( empty($_POST[$var.'_x']) || empty($_POST[$var.'_y']))) ? 1 : 0 ; + return ($this->is_empty($var, self::POST) && ($this->is_empty($var.'_x', self::POST) || $this->is_empty($var.'_y', self::POST))) ? 1 : 0; + } + + /** + * Is GET var empty? + * + * Boolean method to check if GET variable is empty + * as it might be set but still be empty + * + * @access public + * @param string $var + * @return boolean + */ + public function is_empty_get($var) + { + //return empty($_GET[$var]) ? 1 : 0; + return $this->is_empty($var, self::GET); + } + + /** + * Is REQUEST empty (GET and POST) var? + * + * Boolean method to check if REQUEST (both) variable is empty. + * + * @access public + * @param string $var + * @return boolean + */ + public function is_empty_request($var) + { + return ($this->is_empty_get($var) && $this->is_empty_post($var)) ? 1 : 0; + } + + /** + * Checks whether a certain variable was sent via POST. + * To make sure that a request was sent using POST you should call this function + * on at least one variable. + * + * @param string $name The name of the form variable which should have a + * _p suffix to indicate the check in the code that creates the form too. + * + * @return bool True if the variable was set in a POST request, false otherwise. + */ + public function is_set_post($name) + { + return $this->is_set($name, self::POST); + } + + + /** + * Checks whether a certain variable was sent via GET. + * To make sure that a request was sent using GET you should call this function + * on at least one variable. + * + * @param string $name The name of the form variable which should have a + * _p suffix to indicate the check in the code that creates the form too. + * + * @return bool True if the variable was set in a GET request, false otherwise. + */ + public function is_set_get($name) + { + return $this->is_set($name, self::GET); + } + + /** + * Checks whether a certain variable is empty in one of the super global + * arrays. + * + * @param string $var Name of the variable + * @param mx_request_vars::POST|GET|REQUEST|COOKIE $super_global + * Specifies the super global which shall be checked + * + * @return bool True if the variable was sent as input + */ + public function is_empty($var, $super_global = self::REQUEST) + { + return empty($this->input[$super_global][$var]); + } + + /** + * Checks whether a certain variable is set in one of the super global + * arrays. + * + * @param string $var Name of the variable + * @param mx_request_vars::POST|GET|REQUEST|COOKIE $super_global + * Specifies the super global which shall be checked + * + * @return bool True if the variable was sent as input + */ + public function is_set($var, $super_global = self::REQUEST) + { + return isset($this->input[$super_global][$var]); + } + + /** + * Checks whether the current request is an AJAX request (XMLHttpRequest) + * + * @return bool True if the current request is an ajax request + */ + public function is_ajax() + { + return $this->header('X-Requested-With') == 'XMLHttpRequest'; + } + + /** + * Checks if the current request is happening over HTTPS. + * + * @return bool True if the request is secure. + */ + public function is_secure() + { + $https = $this->server('HTTPS'); + $https = $this->server('HTTP_X_FORWARDED_PROTO') === 'https' ? 'on' : $https; + return !empty($https) && $https !== 'off'; + } + + /** + * Returns all variable names for a given super global + * + * @param mx_request_vars::POST|GET|REQUEST|COOKIE $super_global + * The super global from which names shall be taken + * + * @return array All variable names that are set for the super global. + * Pay attention when using these, they are unsanitised! + */ + public function variable_names($super_global = self::REQUEST) + { + if (!isset($this->input[$super_global])) + { + return array(); + } + + return array_keys($this->input[$super_global]); + } + + /** + * Helper function used by variable() and untrimmed_variable(). + * + * @param string|array $var_name The form variable's name from which data shall be retrieved. + * If the value is an array this may be an array of indizes which will give + * direct access to a value at any depth. E.g. if the value of "var" is array(1 => "a") + * then specifying array("var", 1) as the name will return "a". + * @param mixed $default A default value that is returned if the variable was not set. + * This function will always return a value of the same type as the default. + * @param bool $multibyte If $default is a string this parameter has to be true if the variable may contain any UTF-8 characters + * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks + * @param mx_request_vars::POST|GET|REQUEST|COOKIE $super_global + * Specifies which super global should be used + * @param bool $trim Indicates whether trim() should be applied to string values. + * + * @return mixed The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the + * the same as that of $default. If the variable is not set $default is returned. + */ + protected function _variable($var_name, $default, $multibyte = false, $super_global = self::REQUEST, $trim = true) + { + $var = $this->raw_variable($var_name, $default, $super_global); + + // Return prematurely if raw variable is empty array or the same as + // the default. Using strict comparison to ensure that one can't + // prevent proper type checking on any input variable + if ($var === array() || $var === $default) + { + return $var; + } + + $this->recursive_set_var($var, $default, $multibyte, $trim); + + return $var; + } + + /** + * + */ + public function get_super_global($super_global = self::REQUEST) + { + return $this->input[$super_global]; + } + + /** + * + */ + public function escape($var, $multibyte) + { + if (is_array($var)) + { + $result = array(); + foreach ($var as $key => $value) + { + $this->set_var($key, $key, gettype($key), $multibyte); + $result[$key] = $this->escape($value, $multibyte); + } + $var = $result; + } + else + { + $this->set_var($var, $var, 'string', $multibyte); + } + + return $var; + } + + /** + * Check GET POST vars exists + */ + function check_http_var_exists($var_name, $empty_var = false) + { + if ($empty_var) + { + if (isset($_GET[$var_name]) || isset($_POST[$var_name])) + { + return true; + } + else + { + return false; + } + } + else + { + if (!empty($_GET[$var_name]) || !empty($_POST[$var_name])) + { + return true; + } + else + { + return false; + } + } + return false; + } + + /** + * Check variable value against default array + */ + function check_var_value($var, $var_array, $var_default = false) + { + if (!is_array($var_array) || empty($var_array)) + { + return $var; + } + $var_default = (($var_default === false) ? $var_array[0] : $var_default); + $var = in_array($var, $var_array) ? $var : $var_default; + return $var; + } + + /** + * Set variable $result to a particular type. + * + * @param mixed &$result The variable to fill + * @param mixed $var The contents to fill with + * @param mixed $type The variable type. Will be used with {@link settype()} + * @param bool $multibyte Indicates whether string values may contain UTF-8 characters. + * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks. + * @param bool $trim Indicates whether trim() should be applied to string values. + * Default is true. + */ + public function set_var(&$result, $var, $type, $multibyte = false, $trim = true) + { + settype($var, $type); + $result = $var; + + if ($type == 'string') + { + $result = str_replace(array("\r\n", "\r", "\0"), array("\n", "\n", ''), $result); + + if ($trim) + { + $result = trim($result); + } + + $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8'); + + if ($multibyte) + { + if (is_array($result)) + { + foreach ($result as $key => $string) + { + if (is_array($string)) + { + foreach ($string as $_key => $_string) + { + $result = $result[$key][$_string]; + } + } + else + { + $result = $strings[$key]; + } + } + } + } + + if (!empty($result)) + { + // Make sure multibyte characters are wellformed + if ($multibyte) + { + if (!preg_match('/^./u', $result)) + { + $result = ''; + } + } + else + { + // no multibyte, allow only ASCII (0-127) + $result = preg_replace('/[\x80-\xFF]/', '?', $result); + } + } + } + } + + /** + * Recursively sets a variable to a given type using {@link set_var set_var} + * + * @param string $var The value which shall be sanitised (passed by reference). + * @param mixed $default Specifies the type $var shall have. + * If it is an array and $var is not one, then an empty array is returned. + * Otherwise var is cast to the same type, and if $default is an array all + * keys and values are cast recursively using this function too. + * @param bool $multibyte Indicates whether string keys and values may contain UTF-8 characters. + * Default is false, causing all bytes outside the ASCII range (0-127) to + * be replaced with question marks. + * @param bool $trim Indicates whether trim() should be applied to string values. + * Default is true. + */ + public function recursive_set_var(&$var, $default, $multibyte, $trim = true) + { + if (is_array($var) !== is_array($default)) + { + $var = (is_array($default)) ? array() : $default; + return; + } + + if (!is_array($default)) + { + $type = gettype($default); + $this->set_var($var, $var, $type, $multibyte, $trim); + } + else + { + // make sure there is at least one key/value pair to use get the + // types from + if (empty($default)) + { + $var = array(); + return; + } + + list($default_key, $default_value) = each($default); + $key_type = gettype($default_key); + + $_var = $var; + $var = array(); + + foreach ($_var as $k => $v) + { + $this->set_var($k, $k, $key_type, $multibyte); + + $this->recursive_set_var($v, $default_value, $multibyte, $trim); + $var[$k] = $v; + } + } + } +} // class RequestVars diff --git a/classes/Size.php b/classes/Size.php index 4b7c21a..01c427c 100644 --- a/classes/Size.php +++ b/classes/Size.php @@ -104,8 +104,7 @@ class Size { return $this -> $var; } - throw new ExceptionDisplay('Variable ' . Url::html_output($var) - . ' not set in Size class.'); + throw new ExceptionDisplay('Variable ' . Url::html_output($var) . ' not set in Size class.'); } } diff --git a/classes/Stream.php b/classes/Stream.php new file mode 100644 index 0000000..026050a --- /dev/null +++ b/classes/Stream.php @@ -0,0 +1,191 @@ + + * @version 2.0.4 (Jan 27, 2007) + * @package AutoIndex + */ +class Stream +{ + /** + * @var string Name of the image file + */ + private $filename; + + /** + * @var int The height of the thumbnail to create (width is automatically determined) + */ + private $height; + + /** + * @param string $fn The filename + * @return string Everything after the list dot in the filename, not including the dot + */ + public static function ext($fn) + { + $fn = Item::get_basename($fn); + return (strpos($fn, '.') ? strtolower(substr(strrchr($fn, '.'), 1)) : ''); + } + + /** + * @return string Returns the extension of the filename + * @see FileItem::ext() + */ + public function file_ext() + { + return self::ext($this -> filename); + } + + /** + * Outputs the video stream along with the correct headers so the + * browser will display it. The script is then exited. + */ + public function __toString() + { + $thumbnail_height = $this -> height; + $filepath = $this -> filename; + + if (!@is_file($filepath)) + { + header('HTTP/1.0 404 Not Found'); + throw new ExceptionDisplay('Video file not found: ' . Url::html_output($filepath) . ''); + } + $file = Item::get_basename($filepath); + + // ------------------------------------ + // Check the request + // ------------------------------------ + + // ------------------------------------ + // Check the permissions + // ------------------------------------ + + // ------------------------------------ + // Check hotlink + // ------------------------------------ + + /* + +---------------------------------------------------------- + | Main work here... + +---------------------------------------------------------- + */ + + $ip = '127.0.0.0'; //localhost + $port = '80'; + + $mount = "/"; // Used for alternate path to "Streaming URL" -- leave as "/" for the default setup. + + $wmpmode = ($protocol_type == 'icyx:') ? 'icyx://' : 'http://'; // AAC VS MPEG + $mimetype = ($protocol_type == 'icyx:') ? 'audio/aacp' : 'audio/x-mpeg'; // AAC VS MPEG + + //Other + $artist = "Video Steam -via- AutoIndex"; + $title = "Video Steam !"; + $album = "Live"; + + // Make socket connection + $errno = "errno"; + $errstr = "errstr"; + + //$station_url = str_replace("/listen.pls", "", htmlspecialchars(trim($thissong['station_url']))); + + $size = filesize($filepath); + static $u = array('B', 'K', 'M', 'G'); + for ($i = 0; $size >= 1024 && $i < 4; $i++) + { + $size /= 1024; + } + $filesize = number_format($size, 1) . ' ' . $u[$i]; + + // Establish response headers + //header("HTTP/1.0 200 OK"); + //Get media file content type + $finfo = finfo_open(FILEINFO_MIME_TYPE); + //Display correct headers for media file + $mimetype = finfo_file($finfo, $filepath); + header("Content-Type: $mimetype, application/octet-stream"); + header("Content-Transfer-Encoding: binary"); + + // Content-Length is required for Internet Explorer: + // - Set to a rediculous number + // = I think the limit is somewhere around 420 MB + // + ini_set('memory_limit', '512M'); + + // Create send headers + //echo "here".finfo_file($finfo, $filepath); + finfo_close($finfo); + header('Content-length: ' . filesize($filepath)); + //header("Content-Disposition: attachment; filename=$title")."\n"; + header('Content-Disposition: inline; filename="'.$file.'"'); + //header('X-Sendfile: ' . $filepath); + header('Cache-Control: public, max-age=3600, must-revalidate'); + header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT'); + readfile($filepath); + //die(); + } + + /** + * @param string $file The video file + */ + public function __construct($file) + { + if (!THUMBNAIL_HEIGHT) + { + throw new ExceptionDisplay('Video streaming is turned off.'); + } + global $config; + $this -> height = (int)$config -> __get('thumbnail_height'); + $this -> filename = $file; + } +} +// +------------------------------------------------------+ +// | Powered by Mx Music Center 2.0.1 (c) 2007 OryNider| +// +------------------------------------------------------+ + +?> \ No newline at end of file diff --git a/classes/Template.php b/classes/Template.php index 56f69e4..dc267d3 100644 --- a/classes/Template.php +++ b/classes/Template.php @@ -101,16 +101,14 @@ class Template $full_filename = $config -> __get('template') . $filename; if (!@is_file($full_filename)) { - throw new ExceptionFatal('Template file ' - . Url::html_output($full_filename) . ' cannot be found.'); + throw new ExceptionFatal('Template file ' . Url::html_output($full_filename) . ' cannot be found.'); } //read raw file contents - $contents = @file_get_contents($full_filename); + $contents = file_get_contents($full_filename); if ($contents === false) { - throw new ExceptionFatal('Template file ' - . Url::html_output($full_filename) . ' could not be opened for reading.'); + throw new ExceptionFatal('Template file ' . Url::html_output($full_filename) . ' could not be opened for reading.'); } //remove comments diff --git a/classes/TemplateIndexer.php b/classes/TemplateIndexer.php index 1990f76..bcbb74b 100644 --- a/classes/TemplateIndexer.php +++ b/classes/TemplateIndexer.php @@ -99,18 +99,16 @@ class TemplateIndexer { global $config, $dir, $subdir; $full_filename = $config -> __get('template') . $filename; - if (!@is_file($full_filename)) + if (!is_file($full_filename)) { - throw new ExceptionFatal('Template file ' - . Url::html_output($full_filename) . ' cannot be found.'); + throw new ExceptionFatal('Template file ' . Url::html_output($full_filename) . ' cannot be found.'); } //read raw file contents - $contents = @file_get_contents($full_filename); + $contents = file_get_contents($full_filename); if ($contents === false) { - throw new ExceptionFatal('Template file ' - . Url::html_output($full_filename) . ' could not be opened for reading.'); + throw new ExceptionFatal('Template file ' . Url::html_output($full_filename) . ' could not be opened for reading.'); } //remove comments diff --git a/classes/TemplateInfo.php b/classes/TemplateInfo.php index 747bfca..9a5ed92 100644 --- a/classes/TemplateInfo.php +++ b/classes/TemplateInfo.php @@ -168,8 +168,7 @@ class TemplateInfo extends TemplateIndexer $var = strtoupper($m[1]); if (!defined($var)) { - throw new ExceptionDisplay('$' . Url::html_output($m[1]) - . ' is not a valid variable (check if-statement in template file).'); + throw new ExceptionDisplay('$' . Url::html_output($m[1]) . ' is not a valid variable (check if-statement in template file).'); } return (constant($var) ? $m[2] : ''); } @@ -193,12 +192,10 @@ class TemplateInfo extends TemplateIndexer $this -> out = $last_text; //parse sort modes - $this -> out = preg_replace_callback('/\{\s*sort\s*:\s*(\w+)\s*\}/Ui', - array('self', 'callback_sort'), $this -> out); + $this -> out = preg_replace_callback('/\{\s*sort\s*:\s*(\w+)\s*\}/Ui', array('self', 'callback_sort'), $this -> out); //replace {info} variables - $this -> out = preg_replace_callback('/\{\s*info\s*:\s*(\w+)\s*\}/Ui', - array($this, 'callback_info'), $this -> out); + $this -> out = preg_replace_callback('/\{\s*info\s*:\s*(\w+)\s*\}/Ui', array($this, 'callback_info'), $this -> out); } } diff --git a/classes/Url.php b/classes/Url.php index 925c16e..5f23a9d 100644 --- a/classes/Url.php +++ b/classes/Url.php @@ -153,19 +153,16 @@ class Url if (!@is_file($file_dl)) { header('HTTP/1.0 404 Not Found'); - throw new ExceptionDisplay('The file ' - . self::html_output($file_dl) - . ' could not be found on this server.'); + throw new ExceptionDisplay('The file ' . self::html_output($file_dl) . ' could not be found on this server.'); } - if (!($fn = @fopen($file_dl, 'rb'))) + if (!($fn = fopen($file_dl, 'rb'))) { - throw new ExceptionDisplay('

Error 401: permission denied

you cannot access ' - . Url::html_output($file_dl) . ' on this server.'); + throw new ExceptionDisplay('

Error 401: permission denied

you cannot access ' . Url::html_output($file_dl) . ' on this server.'); } if ($headers) { $outname = Item::get_basename($file_dl); - $size = @filesize($file_dl); + $size = filesize($file_dl); if ($size !== false) { header('Content-Length: ' . $size); @@ -177,7 +174,7 @@ class Url global $speed; while (true) { - $temp = @fread($fn, (int)($speed * 1024)); + $temp = fread($fn, (int)($speed * 1024)); if ($temp === '') { break; diff --git a/classes/User.php b/classes/User.php index 57afdc6..7035f1a 100644 --- a/classes/User.php +++ b/classes/User.php @@ -69,8 +69,7 @@ class User */ public function equals(User $user) { - return ((strcasecmp($this -> username, $user -> username) === 0) - && (strcasecmp($this -> sha1_pass, $user -> sha1_pass) === 0)); + return ((strcasecmp($this -> username, $user -> username) === 0) && (strcasecmp($this -> sha1_pass, $user -> sha1_pass) === 0)); } /** @@ -123,15 +122,11 @@ class User $level = (int)$level; if ($level < BANNED || $level > ADMIN) { - throw new ExceptionDisplay('Error in user accounts file: - Invalid user level (for username "' - . Url::html_output($username) . '").'); + throw new ExceptionDisplay('Error in user accounts file: Invalid user level (for username "' . Url::html_output($username) . '").'); } if ($sha1_pass != '' && strlen($sha1_pass) !== 40) { - throw new ExceptionDisplay('Error in user accounts file: - Invalid password hash (for username "' - . Url::html_output($username) . '").'); + throw new ExceptionDisplay('Error in user accounts file: Invalid password hash (for username "' . Url::html_output($username) . '").'); } $this -> sha1_pass = $sha1_pass; $this -> username = $username; diff --git a/config.php b/config.php index 407a967..5d293c5 100644 --- a/config.php +++ b/config.php @@ -116,8 +116,7 @@ if (count($_POST) >= count($strings) + count($numbers)) { if (!@is_dir($_POST[$valid])) { - die(simple_display(htmlentities($valid) - . ' setting is not a valid directory.')); + //die(simple_display(htmlentities($valid) . ' setting is not a valid directory.')); } } @@ -546,4 +545,4 @@ Page generated in --> - + \ No newline at end of file diff --git a/description_file b/description_file index c7de2c0..e44aaa9 100644 --- a/description_file +++ b/description_file @@ -1 +1,4 @@ -./autoindex_license.html |autoindex_license \ No newline at end of file +./autoindex_license.html |autoindex_license +./languages/ Language Directory +./classes/ php stuff +./Days_of_Elijah_and_Enoch.pdf About the Days of Elijah and Enoch diff --git a/favicon.gif b/favicon.gif index e75c684077e8b3ad8769fcd1b6b0f8cc36af65b8..ebae44e4f77c5441290e062086a4919121a906c6 100644 GIT binary patch literal 6296 zcmeI0dstKV8OIX>A%UnNAOsB%f?Nd&5d<8R5bhT-Kvb}}CV+$~vXD|Q^+pneU{EfK zD2nB(h&Z{pDy>s4qJW45rL~9-Q7j@R0*~M!5c;EvSan1S!W<#Ho;^#9CMriP*4<<{GdRSBxz>%d!ZY4RFNtn? zXvxCEtDTN}njZJEC<$Iru*%_Nz`~*s$I~3gT|D3HFpu=DA=%p_uEe-s{=%g1ELjA2N9?zDFTL8BK?!lwK1M~v) z0sIY~3;{d@cmx2?{@Tauy?y~q2SN`^@+{4%CMejJ;v+BSR1tPLut)DA;0nrYzvIn%mq08=BhT^q;ij632t$JL@J zJdQTNz}dRR7I}%nJTlBU8aP%tr5UTE9-Yj*W4M%Pftsa5kfNJ$>H^HB;BrNzvo7UE zeKjhfiOf)#X?LMC(N&X%CE05b1#xMXNENi=3*hfGM?oyryNT^P?9WzxxDDaxpVDfJdcws$M_c+ zmIM5p-eKvHkyaVKF9DX(D@S*X+n3NzCiX3$$`O45=Qx=^4gd2^a87?Fm22bpLZKQT zN#QpzSI^Ihk8?FPc=EYYTuf8ttI6gH zEgKn{$tUUFIsy;_Bd_AW>mBI}v$NRH`qRE2MaaF|?xX zWJ5*fMnov{H9VL4bG1xESgbj7m`tQl(~!FcZ(+77aK7;pFE3$?;c9m`*;FmFG-l7W z<&#M3)`k0ovPuW@P?{DTO(ePOo`j&hFev(b6!% z%+rWOs_3AXuBVg9igyy}#PZ1Cyl{^+id_``3DrYMcY*d1lC(PCO(Z}n4436AFGV}e zbthYehSyYS@cQh6I~Bxw^gp<=JSmYA@la)Ww~_4s5oNHoyK6#!93lw%9O$izV|s zlNN?GovAGEt`fw%Jmld;M!OSD6pU0#^u>%rddtJrw=fYL`fJL_YgzwIm5~n>03XZ9 zdx7PD{3UNMBd9l*5zO?;2=c#FMo_Pmkz83BQ5Y{H$6h_$&Hbz-Bc6NylzR|c0aj~s9VpPs3h)f_8(gBFE1|z;>fqS2@tP*yPo(lFKVix*!`ER zv0OM=S1j)}#WycbR28G;qH$YselL8R^)Alh^08O6#dkT+icjmw_bxA><0{;`HeH1= z)bzq){Ojs7k@2+Uqsy3P5Mk~k0_FBWU^$b}k?Kts2bu(=o#8NRjg1$(FYA(CB#1=I zjoeyKCAI1}sImIB<3c-1$_&P(fmHmQ5hOAdl%S(e_xMGt)w$@&+-s&{fY};yakDb|1TkMPL}x=Ajz& zoVK}|X8EJ*6$L&)7_(S`IE~`XJ2YBzr;1J#%zP@A=3T^CN72Q-)B#ZeE~PJg$XYo) z8%^=Wm9VRJ9CXNbi0R|^&ZtH((%HES*+?@5tOgE;d2!ZPOh6y0gHf`i*92EeWT8z-5J50n9LLOfWyL#8^OC&A8Xg+X=7FF4Hikq0nx zemXw$T_WMivzq_+k`vR5;J!d#YYT}K#KDO%C(+n`UQ0tUNd{Y5l~RVX z02Q%g{~)E6;wf%twOg-dtKqT;ru^%5jXFM?Xd`55sOBC;lCDj0Oy>o(X)b-&n%O=H znMCFSthBTsm4M{2()tQQmrESKc+_IY7pJEMtNX?LtdDm?((~B!tgL%g(`E~vv|z(1 zaj3wfJhE4v%D&?!8^3!pSP-_aB(QLJZzLrtRn>e=7jq+-DL~Tp-|jDsx!b61!4JZR z4;;HnvW;qq!qyl_$if-@bUY`aG1Y7}tssb(>Y6o6^RU<%!Dh=geNgptV+Fc6Gu>zl Ms3@co0`a?l1Ep(<;s5{u literal 1735 zcmc(fYfMvT7{?DFAjKj>Ck!GzD3cbUJuRouQ%|*5PK!O|wC9+N4<;+L$Ps9Mb6b|}!&uqWDB;7t?fLY+|2)tC z`8|2xJeaOff|wJ5M8FFGY4{f$(@++5A#2lc!RF)e=DrQ@o?TxyB(scY>Cugq7dF|h zmpIRs)QxPe@3qulD}S$VYvV+vYr^L1w|Pc(y1VLqBaO}H8$FX%yT<&@1C6^!TU$Qz zhOYSc^zGa|+0ruY+c&zuZE#Q9*xvS&p7zN-ZMP3}47MK_+kfC@>(Q~$;hByj{f7?@ zeR%9r=b@3#j$55w10CH{U0u^By2lQFeEXB`ug-PdJJ&sZ>eKP=p6L_kzdP4^<$Ukd z;OB#%_1(YNH*>l7(cqWY`-f*PjNHF;d3>_}r_r&Q(a{GJ;}5TXefQer4^vZjzPbJA z-rWb^-h1-k;g63W|MKkVZ%=>yeRg)Xsi_J0Un65S-k_mKm4eWS_)t_tGyr7$u_$gC zKmj>(U~|tD6U%L)7?<1Q_4xzM!B9(U&}1aYkU@tRZQQ6e2KO2dwH-aydA#lYg^Hnh z#UYZ|jjPp!*NDkrr4o@989n3&gptJCPM$h_=JbLl%GXVTB!L%;wZ$e6X~Z$L7FnAC zdo_HXiZEe_oN$xHSiV9g*UJ6v_?g!Jfx)4`g0`Dpvkew!6Qs$nQmf=kZqobl@SbQHMUY^EJj8DYfCKQ!&PzL6RxUiAIlQ~H%3=E3!z*NGWm9i2s z=uv1j8g%FKZgBsvmBOMHjB-Y*O<#H&0DM>z9W~| zURp)hR#+WiE~v6QtRM)66Y8vvTH0;{Gj$dzSZ=PP%j`D(7P>sA4ixfXPy|5|0hA{Y z2|-9A6+=>?I1JQaqb*?{&5jx{GfaN!Kav-lN(|xoOkr%wT4k-Vmo-+>pr)#hc9_G= zHoMI_2mNC3(gsjbRaRlGZUAxGW~sM3Dr>XYEKFAz=C{>49ox&CbLgbi2@(!_xwUp~ z5_1)sRpE5jNCkrW`g(r#i^>Xn4ZqA@4TSeq*g;inaFz=BP-HBS5COyh5ifUW#J@u1 fd?9MSuxP#z-h9vFxkt>4d)WS;F0ro&z`DNyNr@K# diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bbb5ba08e1f13cc8cf95cc113a0f21c1b0b56f24 GIT binary patch literal 17542 zcmeHv1z46@xAsH6l%k*r7+@>5I65Xe7-Ku?*xfUZod^nuN+= z^#tKQ?`dnlyS7mlguOilp&svx?=O)Tgk}Q;p&h^B5W*Zb@&5lmK3@UV_G)r$%517^ z64mx~WInv1VxT6&Cd>N@Y>I4hAD;au^n^`GxxK2kd@IG4Y#n*tp7(Ub`y$+I%DmS| zp|zwbTMM4I;JpUo^Z#x534?-S8zn7CYvu16f8TVS?)Obir~7@A zwZx$ppLeX&L4DBp6_ZbI*kgvZ&YLi9+0V!8b*i^Q(3kB^_{F_Y_;=vIc@){|vo&N> zXH$}CE-Tw-Qh!&cFgMs9+Kuf&yI^zJ8C$(=(RpNdH=&WxbKs1jiB|r$*yL$}wXU1s z6zPGWv}hO%?YLKHF5CM3SaR&e_K|P?DV)SH*_61Jx-!jW+H%hBvaRJis~Xg4E7L-@ z!N?`!j_!%^!OlZ2us-OBZ2|TWujiTna!=3|CNAE#{H0ZZ9X9Q=#2Ob9nC;(++W_o? zJs{UgZlF>-m8Rs0CTx0~N0+S*8ztvIb8swK!mc4{tK7fWggysH|1v(m@%K$O3i>jA z1RbGU#~-`w+Z*k}b@jxqP;nnz;1KSCwY$w;_4uiGoY_7r;Kno49QDCSV0oD z``KgAtRdNoZ6(t>{n#bYA;cZ-M+31t$_tJWo^T9v$Ig(w*b(3Wo8aBB4s?W-|4x{4 z?GsNGqWaA%Oj$eYl%OdL?lGp9&%7;*@6ESZa(}?|AEG7glqU$yWef>_OSXSRMrrkE zG|oFI6tU%bIGme+h+`>In3mbCg>!@typluUnGg)O_yD-Z`ofv}A>!f`?G1-e5f_oR zoX8&z$gVzxw9^&P?Wyb9cgnzIOFuh^^tI){4(UFbx?0t=Gd6G{|92+*8vn!|G&Iy2 zcpxzpDQAljUYN{1NQ1Z+q4`NT%-%me3I|fd;hh|c{fURLk9)B<&L1u@2e2o~TS{9Z zP1zoDhCO+G*P*?bwQ0c}aesCYCyN8t*y6pNJYs>+!X)y>UTAf1G@Ej_9&z~F`i|d7 zbtZci@|80Atj_3PCZr#&$V0-30vsvHL}XDKaY-Q_NjQ{q6hWD>2*`*gE|KqXdABF- zae>?uKkSJXaq%Mj9!`z2Bum$JD!#6D)-A4D=PWh%l7-av> z9=wNLk#IMpp3!4#E89xGv(Q)=vSi!xCmEF|iNi6(RpcVNGz(G1=~7%`crM};oE?wA z%oqe^#j=l<;^LVk?#V&8#RkARlC%}Ek96fBr7e-?w+A|r9-VM7JC19U!}WJTlitlH z{vEhKyeq;_S))$<(m}VU&ibakn_39k!U!$HMm7hM!;ydWB2v$lBl&a*5>FN)jpuP? zxrEJ+wBQKa5NFcx)y5?jrBXdGg>HWLBP%;u4aZg!S&5v1-qHn7El^p~bJ)jAjh<>oKl}S&y;ZO$W^~ z-oMOtWwl$hAKVD%dIwu9Ft@}?8*`Ys+EUj!k^a(gFfAF=S1zg5Xx%(cP*$BSud6>n zxn;}Vs%;xlmex^GF;M=?x=qtib9f?Qe@H!Z>CGFqmpJp}0V?j_MDfkbD7;pM@;f(3 z`-%9?aTV6Nn_{8mZ%++|cA6{SLiVdNulum??0&Jb!Su~1Fn9Yc{JbU^b4_+&rR`>H zbhg0)iwKNZTKIO<$`kjR_gS5-)~tn}N^_kxa?R8SskEzWpxVBEeN}^ce~A~GeBXFN z$;~TxO876ndV%xLpW@up#}L>5`2AZr`{;pm{g*ke#zqe_%rKc(t=_R-n-4Uopgl}M zQTwNc@*3mxB@KRRq0nfkrl8(QYv_{HOCE{9z68KF6qsXk4^vm$;pgS1n7#c4_8b8m z!>OB7fd%#@7&c?Zi&p(R_()ndm>_ATW2n;7KwCv`z@OSn^*YzrF>~Ag>}t(RJRuI( z*s5Q@#KjlSaqig@RM*r{7Vg0c=e77{$BH-gyJ&V7VOKHGlu>RnPF6{Kd_!4{9}E
1{X<7LoAP3|Rz%?G&n*xkq7l$!R{b3yp>Tkfp3-B)iLTF@6 zH#v-jTNc1*g3)z39jzq_I$Z{;G#RF+(qt?>wLd;o3{Uq?7@Vk^D%0P1={qV zS0ZQ{E|RI=zpqN;ajn@@*uLNiQQopCQEt{1>I-T;#`g?6{p23k{5h&fOZN$XR8cyX zI;_B=txKP&v{UV@*iP~p&FgkITjEL@NWBb1p8!_veT`m|jvimQ^Wt+~!tb3%8Y1lO z#6vvyWWOhdw8MRIWS{sFSbwMz#*-~DdDC&2><2a-04AE8c%;*LjkBEQ4}A!GW415& zL4;kgjYNm?v$N1Z=x;o0SjO3Bw{ha(4V-v%8&^?7J$s0>vktU9bGY`JDjg+~Pj|EJ z4|~nSPXh60fv|EQl=KjoPrQkXe=cw!i*RQEULx$oL)-^9@`XrK&V=8$0GP3(95c-? zQjhb#$QRrjZ{ltl4d`|?*`}a5Sex*FVW%pzk*KH{)EzW_`P5=F_pMJo;{B0-^Arki zo@L1YA{|7X z0wRwC5ya?q1*#%@_QuDc|V*yVb6VQ)z867R%5X2*XT#hppLGUuWfBYWh%l- zj^N1g1jL<6M%-A5L0p*5qT%z7+Qq+JC4JJ_(gDk0>~%6l(pX6i^wXj zd+r-(b=V#vNcxRYX)RIP(U2A?vREf zfM0e|rkfTZ>G*kEefyYx*mGR2c}BVR7}c-tBBAUA=4>m6ANeDUIEZ`_z�O@4@S_ zEAwtIva5Qw-s=U7=ck@lYd&|iyoT}j)CZzYkm@!1qf(hFX{997YkZ$AGdIn37i+0gYH_LNEh=BWqK$MeQQg9hDn)@}0MgtW7%$h(k>obx#- zs47IlsU*f5?D6A*k!OWQ3gcB;PTD=$tn6U{>F6|ZAj_hnhHD=J%-s3}HvaJ_ync$Z z_$JOgy+>L02vx72<4WyYsb0Lv_s>1PjTH`M2qa&}Q`U&GE4-Zi&1(@C>7Gy)i|3x? zjk(+ILeh9bKPBxEpXng#0eKnvEgD@Kj-P5W?UqN93$o9pBllc3a?WNUhkgFVLi%LM zly5E=wP^HpNh86bS+5QGBHv2ap0JCwFWLk%Hj^&WB9Kv4PW^oWWp^*(_=D>>_2dqU zZd4)n@;RJ+`ao(kx*n;5bJBC9lXqf?Lo_#3lwC)Ni`Yl9iF(jE8d$jVIaHfY?xv(Y z{4-rfJ6eo8=+53e_jY7SFv>3#q2NLRiYQA9FXj=4Ok}g=oX$j4UIaF}cwo$L`!UHR z2g#I~88kRV`WI#As@y*b?d;>vu8p zF~#Y-$8q-BX`H%RL7(vuLh=JpN**XUmy5LHNpL$Hg2i@MrLsJZ>m|zgILez8;t@;u zm+t`}QE0b~I&KcVK{#fI_ z2J1XG;84CFiZ2(U=zJ=y_Q$|9sFre;Yed=Kg5@|5|-aGk~OgsWO-hjDT=a~`c zAt?83CEs9(mWu9JHOkM=Xy;Q@42E`{zH#41I7aWphW%#P;JyVb?Kfibx+!;^kJ_XB zNFP^J+(r9Kpd&J=tJJ%8R^=~^2>1feucvs*3DQ-A-;}lL_DS%V( zQA{$ez%nObgE#k_uxFEwvP2m|S@DY_@bfzQ?jgRk$%1gSIGOKcA@yW7jua)**N?~a zRWsf;?zyTYmb4W$(rcmvxw7wi81Z(NCw$%;jWh#3O?| zaDe+V&HMqDSoqfd{M*Fm=8VN1ObSO(LMZk{?8he8ZTNYGA9lq(mBJ{lySV-*s0&4y zNrqBfiirow2)U#$k$+qD+hH%OVO*c^|7AbFP6v%%Tl_Yo`u+u6zkd~{uN}wMU`v>| zY{9hEb1-;uqST+tB0r>1Z>CayrxOT&;xOLi!dqR##ku{bOn$k-&IB7A9Wl$)1rs-> zVrR^2WQ#Tv<)+BDSv)^R8J0@g$tB!WX`nd;ZVw{3IrgDI?r7KGQ|wE1hs8k)#{afq#jZ`5Y*vkvT%-%4?4&Gm z;2LFeAMy!bDrHgz;m;#I<%+yPICBVZK4Hz`bsDeJ*=O=zDq9lYi{~DA^1S^Z_c%eW zPdAOW>t}vHB{6*1;=GjReXSOM3e(>`*X*WcFl@n?nAHv@u=KXZkMoB`^_m))elVS~ zhk9mv0I<~`SWR0wER%2(hYaG7ChiA&k+#G}lLslpF@rRg&izUf&k1`baY-g_ZnPab z5BEtCRQmLgRX1wzcj5fA_nFsf)6%Ggq4=JpiIH;map8yO?R-u9j&Ts%D=?ZH&b-B2 zoT#ErEv`G^%YENOJdz1tGG$aaaTIwZ=sj*3#5bKywB;PKL0fH4C~3W;M0+GN#Q)ku zv+c}Yt&O&=)#@;8`498MpCuLnm89=mw|MyWBKh#{gIXL+eh1r1 zPx9mD%e4my_et(c9Ce;AakI&MPCv!UwbSsRWQQZ~VD~3IhEeEjiv`qMES{v$aJT~D z|5JJYPvJ4-*NVzy(!@FP^v+=F<0N3{;`DQkx>^VNBvMxqw>-k`Ltn+6JW#*o^3{S` zU(N3(#~s;8x(VlZ{-mR^tIMhsv_@+x>x}u!vhtt6LDS&Zj>DFoIKOt^JDYb$B+#;- z_2#;*7meLa{;sBteT+Qp!F7&(0CX625aJaJ-*O%YM5|6}87p^D+O< zwf_|V=6$S}^qP1uro&K|?TT6>q-)r7V$|XFo?Kt9eFEitAZ2g!-getQ{q8^gT+?8c z@wiQeWo!K(JnJ_rE>xl6s5<}YFn@r9P zlF$$nKQtoazOf*@42Xyi)TtoE8Pzwi=SX^r3&dV&_C9JeDCzMJk2iYK4p>3_-yMZ$ z$KmwZ2D1HMuhUX!r6^B-T7$XMhRPjOrLh%hZm+o@5n9No@m!TLmVcQJtlLR_WdG@d z;+yqrVZ%C$_VR5M)#O_!wCOs!`@Rl8cG=6E=s?E!8xe-T?6+`RzIiBhP?2TqP8!3L zZ>6BVX159Urv_nH2y-Z_r=DUiq~nnJBQhMqTxgTp!qUgSrheD@3*=hK{%Jnzo0GnO zz*++t<{^4A-ZMea5*o<2ROo6OEaq{&U>D}fc)TyP40Y{SIBkF>=l;ch8Dp1ku-?V; zyr3i~^IHu;PtcSYD69Q<_C&3Nn$b4DUDEt^_pydy%$tl~?X>B+7xN^J%-1`HyJLgv zmbcr3>}jX(kmkD?mVnWW!G}5T^ifNH%K2{G_koOK4j?XKebV2uFZxXzwEqPC$b?gQ zv?)Wd-QPhPYx86+gj-wyTv$8c7Uw6es}XbUdztHwFD*c;AKHYOxLYuO=f)b3J=pAN zjk=xd&0y~8Z_%Z8uSO#d=O@tLDPsPfH36j=tV2jd0P6q()1w))4~0iU5L{z?nd9`v zu5efSw@&mw_p+A3Oa!I&mrmlRl@qf5Y`;G~*Wtc36gu*{?vIN{6&K#9LOg3M zV#;%+bv9wg(h!&vjj&_Mh%OUr6*3T*eFW~z?K_2g!ij#r6Kg5#4!a_PIk||UWON$d zbJNH1|L8g>A3dBUHdiyP~^4*D;(j3@$yP-jQy`zGxY&QkH#@Z?d>VHTBlD3jw zG+U(y%~QsMA2Ppnl{vb5jMcki1@r2?r}X#!Jql{Anhcy{9*N)f08>nlVZP}mEZuHT zzxNtOuReFXb^m!~bz5ui6q+g+C>yALGp;1xO0HqTNjfz=L^v+Kc!q1WVyq~GF{IV# zHKEtuk8>-Gl?d{qjRhIwu7c3E&JxGR&qC<;?4!Rkabp@rEsY>ezKcg6;$U-3ZP9Z? zo6~}Z>Tr3j-kKlB`Ta>#q0#s?Q*v)Ij!(Az!wZXKq&67yUp0k5%c-z)5)P3@UR`|}PkWG3S<8-tizwm&VX4wx)x4AoX{ z{L^PV!91NPH&+4E{n7Fo#wOG7Qcvc;F1?8qwr+zw~c&^@AbIfM19j}7( zB2jqjG)nGQOY@tX_H99HOE6pd1@!=!%WyHK}6n*_L`j+Ba zh;WGczTMmhF~=t6syq_tuRfvQY~*Y$j`!&?&16>o8B{TL$(knS^%9s5$iB)rmY*%! z4{PHfzN@G+Z+Pe7?h%5N*R=_Ls zAmarC$~e918jmaY-f-Ph8G{jHkGYQ-3*a8CAnnhzsAjI`Ec1F75MOc%=H8{)5mh5y z6EQa(%?Q&fIN{I&Ux+R0a){t8c9J=^C^g*lyM|liAlcvVNuXW+^JJR1l7Q z=G!-ewWBkpS!I_#$&C`YyIMI{?!$nX1?XZ%jdZG`i0aAE4lU*J0hMUg?kji7~2uj zNE~S;j+R?2+wi3)Z+(itc-~=nN9Tyr!^FJ=WsGGPGQU!M zET@?#=FBE-IEARf2;^Qri5%uoN*`WE(XA`6J?#A2CEOd^L$4wKK566v=Omqk5)Lu% zZbkm=Jj8R?@8_RkHskUOJjS_OC*hjt$QWD_&fYA6XLuxY3XF9T=V-=L#Qd>8X=<8D zIimBzm;*h5yvrr1czBJvDgm@lhI8!J8@wuCFyw-?8>CeVm8o{OUP+q#W~!n$i$?mF zhyH*TGyF4r;F0EzmCR|+**>o(@%SM`q@^=Q{f@Up9!ub$G32+&n{UC+#}3IS(@=Jk z_!I8f<5|$@u4PBrI5m#KT%5mvYar$Uw*=pRsn~e2nILp&DXVGxRlic9wNi`0^M}WO zH=)lyo!-qH5>Le7_T%%|df*Tyn4V(J;u&d!F#@iE8P{a;`Vd$LY)5Qilr;Z!v?2~O zH?C&M=)1;rDHk^AdqcO_p%N6+i&bT$>PQGB((XFS~U=y|u zKd<^30~Ti?g|sBbvU0f>8@(B~9k9G=OPxx{!wTp39hbNkkUsuDD3~OP(qwO%<^DX5g)< z_v2ab+(Z>OIiB#OlCQEW z*mG^gIGz||Oe9=IYz2hPA|6oCo;vN@v;4g$@=a&V$>$u8xVAQoZ_adj&3aJo4Rw+~ zabF#I>3+vCQQ2{2q!YrB`4Z?j#69Tm&GPNH<#cE3?F=Q25e9GK-=weep|RE0tRW54LHLMLglaOm*W8PQF;nNIqv-~4aBN0Go_vK|Rk9j_Qs zVHiSe=I@&rrVwKyMi$KkJ&Ue_diqL1&SIq?u^7iTP>|s>F`^>yeVOWaO-}5^YsPk@ zjT@l}Cl3DReXG?^Bjt)SOXC#U{JtyOe`=gUqOUYYrIqS0^pMmErXbN*9Vuz4I+=Q| zo_PH~IqJ4oH{5(+JH*=mj>EbgrVln^q3u#EW<6~0i32nFyM}Mu?BAMLOK8-hUuz%6 zDhA7F3lnVkdmIP;)@GyUHVm9G_^i3FHEcqiQSs;&1T~=#=QNl68>#>&(lik$koU2XkVvk9GBS;k&Ubau0%zMe{cT z`?1y2lC_2o^c@btBhC{od$s+-X8LrZe$#&NdQO@aeYsNBHkaMM124in%W58)4`^nl z*raYtSylCh`i9L{EwKr}#PvD!&o*GIhcEiijCdi`>+UYpmme*oFMQQsWeu;h$TL*y zxWwAgOxF3#-@XuP29i%|M}~A3VfxAR>fJ!vh-20rL;o4Utc{|-MBQXOV=8?h8Am}$ z>#P2#Of&g~7iw!jb-`NLApUl%OVS4%4M*?ae~>mu`yWH{r))WQU#tzZi)KBn@4H-z zEA{TM`Cgc5Sp~iCwjB{vy6b=VR_qm8D33FqH$0{2!9`rGeF97V7D@X%jddU1X+O}` zp@@Ekn6DOV!$e#45PjP~+L|88taCV6gAHEvb*cB`X=CUbZZZGxt=R8P^h712QL*P! zkaDer^}8O>>QT=^eAc+zR_D5{O@h2QW;(wO6LlnQr)6$;*xzN16zv4!vph%48`>iDC_MYCSDD!d# z{h;I6m+TH@{rZkZ3%x~kFP%fQpSJoW(AT*mwdX{dyT`UY@)4qG^8|9u#2U#0+J3*e zQ4iJ|*5LyVtVbU1mwo_cSC65%ssN|&mB5^I-mK4}3rDZB)}V&@ClSW zyvkb5a#;Iszr4mRPg)Bh)(0a)q!`*KbF6N{KfxPix65(z*){A4b`fI?s{LjLq|;PG9%*2?-*fVE-!FW1 zah~s{^z@l-IUl;cnkIx5dNCh=9Fwgc(nh8Yc#SqO>2bzpXG9kIqx@DOV^N2o*1TJ4 zVEMC`bP1&XV>bPP`S$tMijAf(`2hRx`^J5mYy{&Wx#tgK$kK5by{rT!#66EZFyH#_ zoA$$J++DTP8jH-mU=#lw#k74yKckd3KHW4a4^7?nmg?{8N1e{~dPSFovHsivqgLAE z1RYB;r!Ce<9OGvDr=eD?d5)$HcZ_%?(C0~~-#_obc}g?+-v9` zj{D7r`b{i6Zs7q1$YNK(lrfhg&SRBHpL1$x#sTtICD&%?s^WX!9O6$Nd_O)Uz=t;F zz@;azb{Za%_V^8b%x9!?^&f`RZMEX(G3GhNYI-vU{K+tX{J750kNU9x-1wy5{BFDy z>I~8UJ4`fY^x6KMc9>c_^{JChW>H27M$P-TjxreB`8H!M zU-iui+Q&nudsAzjZaOZl1{*|1oz9>h`~{2bSEA(673lS9Ypd8yVF^bOP0OzygXfOQ zJIOk0pY#YEbpO62#wqxUzP93H*vevA|~WldpZ;+StIY_sqd5r}#9D-7*e{bGH{!7_@5!9_JT}f8TkPVjLYo8?Q!z?S;#e&cx(!jmb=4~^UY!`@ci?KD82U> z_OYzNp{|?jc;Q~xk-^6WMS~CeRMjrhh91BT{$9=CMCEmes@z@Yp7w@@#z-?jd>e0 zIF3ro`Bp-`k$qM4CJp-CtABo}*zdFW?1vA;#dv5`gLHL@5H<@oiDZlUHZhtkHXas& aC-dvqDSuK>EmMLwavrFat7m~KLHI8rzbP~T literal 0 HcmV?d00001 diff --git a/hidden_files b/hidden_files index 02da88a..e2dba4c 100644 --- a/hidden_files +++ b/hidden_files @@ -1,7 +1,10 @@ cache classes +assets flags index_icons +.htpasswd.autoindex +htpasswd.autoindex languages templates hidden_files diff --git a/index.php b/index.php index 47a9329..b4243a4 100644 --- a/index.php +++ b/index.php @@ -1,5 +1,4 @@ '; @@ -196,14 +192,36 @@ function __autoload($class) { $file = PATH_TO_CLASSES . $class . '.php'; /** Try to load the class file. */ - if (!@include_once($file)) + if (!include_once($file)) { - die(simple_display('Error including file ' - . htmlentities($file) . ' - cannot load class.')); + die(simple_display('Error including file ' . htmlentities($file) . ' - cannot load class.')); } } } +/* +* Instantiate the mx_request_vars class +* make sure to do before it's ever used +*/ +$request = new RequestVars('', false); + +// this is needed to prevent unicode normalization +$super_globals_disabled = $request->super_globals_disabled(); + +// enable super globals to get literal value +if (!$super_globals_disabled) +{ + //$request->disable_super_globals(); +} + + + +/* +*/ +$_GET = array_change_key_case($_GET, CASE_LOWER); +$_POST = array_change_key_case($_POST, CASE_LOWER); + + /** * This is used to report a fatal error that we cannot display with the Display * class. All Exceptions used in AutoIndex should inherit from this class. @@ -211,81 +229,76 @@ function __autoload($class) * @package AutoIndex */ class ExceptionFatal extends Exception {} - try { //now we need to include either the stored settings, or the config generator: - if (@is_file(CONFIG_STORED)) + if (is_file(CONFIG_STORED)) { - if (!@is_readable(CONFIG_STORED)) + if (!is_readable(CONFIG_STORED)) { - throw new ExceptionFatal('Make sure PHP has permission to read the file ' - . Url::html_output(CONFIG_STORED) . ''); + throw new ExceptionFatal('Make sure PHP has permission to read the file ' . Url::html_output(CONFIG_STORED) . ''); } $config = new ConfigData(CONFIG_STORED); } - else if (@is_file(CONFIG_GENERATOR)) + else if (is_file(CONFIG_GENERATOR)) { /** Include the config generator so a new config file can be created. */ - if (!@include_once(CONFIG_GENERATOR)) + if (!include_once(CONFIG_GENERATOR)) { - throw new ExceptionFatal('Error including file ' - . Url::html_output(CONFIG_GENERATOR) . ''); + throw new ExceptionFatal('Error including file ' . Url::html_output(CONFIG_GENERATOR) . ''); } - die(); + exit(); + die('exit.. ?'); } else { - throw new ExceptionFatal('Neither ' - . Url::html_output(CONFIG_GENERATOR) . ' nor ' - . Url::html_output(CONFIG_STORED) . ' could be found.'); + throw new ExceptionFatal('Neither ' . Url::html_output(CONFIG_GENERATOR) . ' nor ' . Url::html_output(CONFIG_STORED) . ' could be found.'); } //find and store the user's IP address and hostname: - $ip = (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'N/A'); - if (isset($_SESSION['host'])) + $ip = (!empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'N/A'); + if (!empty($_SESSION['host'])) { $host = $_SESSION['host']; } else { - $_SESSION['host'] = $host = @gethostbyaddr($ip); + $_SESSION['host'] = $host = gethostbyaddr($ip); } //Create a language object: $words = new Language(); - + /* + * Instantiate the Mobile Device Detect class + * make sure to do before it's ever used + */ + $mobile_device_detect = new MobileDeviceDetect(); + $status = $mobile_device_detect->mobile_device_detect(); + //Create a logging object: $log = new Logging($config -> __get('log_file')); - - foreach ($config as $key => $item) - /* Go through each config setting, and set a constant with each setting's + /** + * Go through each config setting, and set a constant with each setting's * name to either true or false depending on if the config setting is * enabled. */ + foreach ($config as $key => $item) { $key = strtoupper($key); if (defined($key)) { - throw new ExceptionFatal(Url::html_output($key) - . ' is already defined in ' . basename(Url::html_output($_SERVER['PHP_SELF'])) - . ', and should not be in the config file.'); + throw new ExceptionFatal(Url::html_output($key) . ' is already defined in ' . basename(Url::html_output($_SERVER['PHP_SELF'])) . ', and should not be in the config file.'); } define($key, ($item != 'false' && $item != '0')); } //make sure all required settings are set in the config file - foreach (array('base_dir', 'icon_path', 'flag_path', 'language', 'template', - 'log_file', 'description_file', 'user_list', 'download_count', - 'hidden_files', 'banned_list', 'show_dir_size', 'use_login_system', - 'force_download', 'search_enabled', 'anti_leech', 'entries_per_page', - 'must_login_to_download', 'archive', 'days_new', 'thumbnail_height', - 'bandwidth_limit', 'md5_show', 'parse_htaccess') as $set) + foreach (array('base_dir', 'icon_path', 'flag_path', 'language', 'template', 'log_file', 'description_file', 'user_list', 'download_count', 'hidden_files', 'banned_list', 'show_dir_size', 'use_login_system', 'force_download', 'search_enabled', 'anti_leech', 'entries_per_page', 'must_login_to_download', 'archive', 'days_new', 'thumbnail_height', 'bandwidth_limit', 'md5_show', 'parse_htaccess') as $set) { if (!defined(strtoupper($set))) { @@ -294,15 +307,16 @@ try } - /* From this point on, we can throw ExceptionDisplay rather than + /** + * From this point on, we can // throw ExceptionDisplay rather than * Exception since all the configuration is done. */ $b_list = $only_these_ips = $banned_ips = array(); - if (BANNED_LIST && @is_file($config -> __get('banned_list'))) + if (BANNED_LIST && is_file($config -> __get('banned_list'))) //make sure the user is not banned { - $b_list = @file($config -> __get('banned_list')); + $b_list = file($config -> __get('banned_list')); if ($b_list === false) { throw new ExceptionDisplay('Error reading from banned_list file.'); @@ -325,24 +339,22 @@ try } if (count($only_these_ips) > 0) { - if (!(DirectoryList::match_in_array($ip, $only_these_ips) || - DirectoryList::match_in_array($host, $only_these_ips))) + if (!(DirectoryList::match_in_array($ip, $only_these_ips) || DirectoryList::match_in_array($host, $only_these_ips))) { throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.'); } } - else if (DirectoryList::match_in_array($ip, $banned_ips) || - DirectoryList::match_in_array($host, $banned_ips)) + else if (DirectoryList::match_in_array($ip, $banned_ips) || DirectoryList::match_in_array($host, $banned_ips)) { throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.'); } } $show_only_these_files = $hidden_files = array(); - if (HIDDEN_FILES && @is_file($config -> __get('hidden_files'))) + if (HIDDEN_FILES && is_file($config -> __get('hidden_files'))) //store the hidden file list in $hidden_list { - $hidden_list = @file($config -> __get('hidden_files')); + $hidden_list = file($config -> __get('hidden_files')); if ($hidden_list === false) { throw new ExceptionDisplay('Error reading from "hidden_files" file.'); @@ -369,27 +381,23 @@ try //size of the "chunks" that are read at a time from the file (when $force_download is on) $speed = (BANDWIDTH_LIMIT ? $config -> __get('bandwidth_limit') : 8); - if (DOWNLOAD_COUNT) { - if (!@is_file($config -> __get('download_count'))) + if (!is_file($config -> __get('download_count'))) { - $h = @fopen($config -> __get('download_count'), 'wb'); + $h = fopen($config -> __get('download_count'), 'wb'); if ($h === false) { - throw new ExceptionDisplay('Could not open download count file for writing.' - . ' Make sure PHP has write permission to this file.'); + throw new ExceptionDisplay('Could not open download count file for writing.' . ' Make sure PHP has write permission to this file.'); } fclose($h); } $downloads = new ConfigData($config -> __get('download_count')); } - //create a user object: $log_login = false; - if (USE_LOGIN_SYSTEM && isset($_POST['username'], $_POST['password']) - && $_POST['username'] != '' && $_POST['password'] != '') + if (USE_LOGIN_SYSTEM && !empty($_POST['username']) && ($_POST['username'] != '') && ($_POST['password'] != '')) { $you = new UserLoggedIn($_POST['username'], sha1($_POST['password'])); $log_login = true; @@ -397,7 +405,7 @@ try unset($_POST['password']); $_SESSION['username'] = $_POST['username']; } - else if (USE_LOGIN_SYSTEM && isset($_SESSION['username'], $_SESSION['password'])) + else if (USE_LOGIN_SYSTEM && !empty($_SESSION['username'])) { $you = new UserLoggedIn($_SESSION['username'], $_SESSION['password']); } @@ -415,25 +423,23 @@ try } } - //set the logged in user's home directory: $dir = Item::make_sure_slash((($you -> home_dir == '') ? $config -> __get('base_dir') : $you -> home_dir)); $config -> set('base_dir', $dir); $subdir = ''; - if (isset($_GET['dir'])) + if (!empty($_GET['dir'])) { $dir .= Url::clean_input($_GET['dir']); $dir = Item::make_sure_slash($dir); - if (!@is_dir($dir)) + if (!is_dir($dir)) { header('HTTP/1.0 404 Not Found'); $_GET['dir'] = ''; //so the "continue" link will work - throw new ExceptionDisplay('The directory ' - . Url::html_output($dir) . ' does not exist.'); + throw new ExceptionDisplay('The directory ' . Url::html_output($dir) . ' does not exist.'); } $subdir = substr($dir, strlen($config -> __get('base_dir'))); - if (isset($_GET['file']) && ($file = $_GET['file'])) + if (!empty($_GET['file']) && ($file = $_GET['file'])) { while (preg_match('#\\\\|/$#', $file)) //remove all slashes from the end of the name @@ -441,21 +447,16 @@ try $file = substr($file, 0, -1); } $file = Url::clean_input($file); - if (!@is_file($dir . $file)) + if (!is_file($dir . $file)) { header('HTTP/1.0 404 Not Found'); - throw new ExceptionDisplay('The file ' - . Url::html_output($file) . ' does not exist.'); + throw new ExceptionDisplay('The file ' . Url::html_output($file) . ' does not exist.'); } - if (ANTI_LEECH && !isset($_SESSION['ref']) && (!isset($_SERVER['HTTP_REFERER']) - || stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false)) + if (ANTI_LEECH && !!empty($_SESSION['ref']) && (!!empty($_SERVER['HTTP_REFERER']) || stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false)) { $log -> add_entry('Leech Attempt'); - $self = $_SERVER['SERVER_NAME'] . Url::html_output($_SERVER['PHP_SELF']) - . '?dir=' . Url::translate_uri($subdir); - throw new ExceptionDisplay('

This PHP Script has an Anti-Leech feature turned on.

' - . '

Make sure you are accessing this file directly from http://' . $self . '

'); + $self = $_SERVER['SERVER_NAME'] . Url::html_output($_SERVER['PHP_SELF']) . '?dir=' . Url::translate_uri($subdir); + throw new ExceptionDisplay('

This PHP Script has an Anti-Leech feature turned on.

' . '

Make sure you are accessing this file directly from http://' . $self . '

'); } $log -> add_entry($file); if (DOWNLOAD_COUNT) @@ -469,14 +470,12 @@ try if ($log_login) { - $log -> add_entry('Successful login (Username: ' - . $_SESSION['username'] . ')'); + $log -> add_entry('Successful login (Username: ' . $_SESSION['username'] . ')'); } if (DESCRIPTION_FILE) { - $descriptions = new ConfigData((@is_file($config -> __get('description_file'))) - ? $config -> __get('description_file') : false); + $descriptions = new ConfigData((is_file($config -> __get('description_file')) ? $config -> __get('description_file') : false)); } if (PARSE_HTACCESS) @@ -485,23 +484,20 @@ try new Htaccess($dir, '.htaccess'); } - if (MD5_SHOW && isset($_GET['md5']) && $_GET['md5'] != '') + if (MD5_SHOW && !empty($_GET['md5']) && $_GET['md5'] != '') { $file = $dir . Url::clean_input($_GET['md5']); - if (!@is_file($file)) + if (!is_file($file)) { header('HTTP/1.0 404 Not Found'); - throw new ExceptionDisplay('Cannot calculate md5sum: the file ' - . Url::html_output($file) . ' does not exist.'); + throw new ExceptionDisplay('Cannot calculate md5sum: the file ' . Url::html_output($file) . ' does not exist.'); } - $size = (int)@filesize($file); + $size = (int)filesize($file); if ($size <= 0 || $size / 1048576 > $config -> __get('md5_show')) { - throw new ExceptionDisplay('Empty file, or file too big to calculate the' - . 'md5sum of (according to the $md5_show variable).'); + throw new ExceptionDisplay('Empty file, or file too big to calculate the' . 'md5sum of (according to the $md5_show variable).'); } - die(simple_display(md5_file($file), 'md5sum of ' - . Url::html_output($file))); + die(simple_display(md5_file($file), 'md5sum of ' . Url::html_output($file))); } if (THUMBNAIL_HEIGHT && isset($_GET['thumbnail'])) @@ -524,30 +520,39 @@ try } $mime = new MimeType('.tar'); header('Content-Type: ' . $mime -> __toString()); - header('Content-Disposition: attachment; filename="' - . $outfile . '.tar"'); - @set_time_limit(0); + header('Content-Disposition: attachment; filename="' . $outfile . '.tar"'); + set_time_limit(0); $list = new DirectoryList($dir); $tar = new Tar($list, $outfile, strlen($dir)); die(); } + if (THUMBNAIL_HEIGHT && isset($_GET['thm'])) + { + $fn = Url::clean_input($_GET['thm']); + if ($fn == '') + { + die(); + } + echo new Stream($fn); + } + //set the sorting mode: - if (isset($_GET['sort']) && $_GET['sort'] != '') + if (!empty($_GET['sort']) && $_GET['sort'] != '') { $_SESSION['sort'] = $_GET['sort']; } - else if (!isset($_SESSION['sort'])) + else if (!!empty($_SESSION['sort'])) { $_SESSION['sort'] = 'filename'; //default sort mode } //set the sorting order: - if (isset($_GET['sort_mode']) && ($_GET['sort_mode'] == 'a' || $_GET['sort_mode'] == 'd')) + if (!empty($_GET['sort_mode']) && ($_GET['sort_mode'] == 'a' || $_GET['sort_mode'] == 'd')) { $_SESSION['sort_mode'] = $_GET['sort_mode']; } - else if (!isset($_SESSION['sort_mode'])) + else if (!!empty($_SESSION['sort_mode'])) { $_SESSION['sort_mode'] = 'a'; //default sort order } @@ -561,25 +566,24 @@ try if (USE_LOGIN_SYSTEM) { - if (isset($_GET['logout']) && $_GET['logout'] == 'true') + if (!empty($_GET['logout']) && $_GET['logout'] == 'true') { $you -> logout(); } - else if (isset($_GET['action']) && $_GET['action'] != '') + else if (!empty($_GET['action']) && $_GET['action'] != '') { $admin = new Admin($you); //the constructor checks if you really are an admin $admin -> action($_GET['action']); } } - if (ANTI_LEECH && !isset($_SESSION['ref'])) + if (ANTI_LEECH && !!empty($_SESSION['ref'])) { $_SESSION['ref'] = true; } $search_log = ''; - if (SEARCH_ENABLED && isset($_GET['search'], $_GET['search_mode']) - && $_GET['search'] != '' && $_GET['search_mode'] != '') + if (SEARCH_ENABLED && !empty($_GET['search']) && ($_GET['search'] != '') && ($_GET['search_mode'] != '')) { $s = Url::clean_input($_GET['search']); $dir_list = new Search($s, $dir, $_GET['search_mode']); @@ -588,9 +592,9 @@ try else if (ENABLE_CACHE) { $cache = CACHE_STORAGE_DIR . strtr($dir, '\/:', '---'); //path to cache file - if (@is_file($cache)) + if (is_file($cache)) { - $contents = @file_get_contents($cache); + $contents = file_get_contents($cache); if ($contents === false) { throw new ExceptionDisplay('Cannot open cache file for reading. Make sure PHP has read permission for these files.'); @@ -600,17 +604,15 @@ try else { $dir_list = new DirectoryListDetailed($dir); - if (!@is_dir(CACHE_STORAGE_DIR)) + if (!is_dir(CACHE_STORAGE_DIR)) { if (!Admin::mkdir_recursive(CACHE_STORAGE_DIR)) //Attempt to create the directory. If it fails, tell the user to manually make the folder. { - throw new ExceptionDisplay('Please create the directory ' - . Url::html_output(CACHE_STORAGE_DIR) - . ' so cache files can be written.'); + throw new ExceptionDisplay('Please create the directory ' . Url::html_output(CACHE_STORAGE_DIR) . ' so cache files can be written.'); } } - $h = @fopen($cache, 'wb'); + $h = fopen($cache, 'wb'); if ($h === false) { throw new ExceptionDisplay('Cannot write to cache file. Make sure PHP has write permission in the cache directory.'); @@ -621,7 +623,7 @@ try } else { - $page = ((ENTRIES_PER_PAGE && isset($_GET['page'])) ? (int)$_GET['page'] : 1); + $page = ((ENTRIES_PER_PAGE && !empty($_GET['page'])) ? (int)$_GET['page'] : 1); $dir_list = new DirectoryListDetailed($dir, $page); $max_page = (ENTRIES_PER_PAGE ? (ceil($dir_list -> total_items() / $config -> __get('entries_per_page'))) : 1); } diff --git a/index_icons/winvista/image.png b/index_icons/winvista/image.png index 53540889db2ce91591851f5c7b9fffc564b11b58..bbda89b9f3315f4c9ac4f70145e9ce21b2829c27 100644 GIT binary patch literal 2020 zcmV^?aw^4uCUf&PV_TjWvDx^fyw#w)41r`3h#unuSaz zgWI=nqobn(!C=sKyWPEvjU$YSFB|};PoI_m44D53;8j^d|5Aax-1Y3)v*oJlSbaYfci^iRc)Rci)Sy}m{v9Zy7BY^+Z z3PuZn*REYhHk*~M5I`a*Yieq+di83>0dVrn_bEL*nB32^-QaS1^G5TF+QSp{d? z`q4c&0Tw8@ApC1fAB&Yas?1=Q-v>+}8Yql;?sOurz|=*h%frxIm=*~^wR2LD9Xmcp zDpiK1OP4wUjvYHD0Z3;FiLQ5#VdI}WajQ2Eui+7ImR?n9QCER+eilkw+*m~nNGE|Q z0m%9~I8H#$%Z-g9=2q~d>6Hk$RcUAU?%iOm!Q#b>od8FV9+d!7r%sgsw|d6#o0AXF zub7C$!WbC^M#l)iReqxY;No+61gN6%3XbL6wU^&L;=I3h1AV=ZQKgRHCv_==+^!

^s)zuQ9pIg3ow+p_I9~H@n^z~x` z^bPrzC}H;&6dEPi1QqJw`hmUyESQl*#L%RjJ$v@BM8_Ee4NidO z=H_}$696>?sKF5RzTTHX-ZBv^2_ncjX0EX7N9;q~rFgfh2Bo?#ViAvo z0(?-}eRd%@$0$+WRd^NvenrGU7lsA~P#rI2R_K#K$a4UVjnAdwp+kr2bzPeTxbfg2 zwjVu?uAwf}R;TdZ+#jN>BnD0Mh@^(i2oyJ$cyav@`!Hm(KrN2_J>8gK1x&}{Fg?0V zkzKnA058;mg9i^%0j-HeNCLEX-ochX{Q;esJBTNJsHjXM5vpO-S7X++sYv=gAPOd) z>B6YD*o6|^J-sZ!gGe!po&xMD0xWj|?BBm%0@T&j5uh5aH#)HCi%)T_>l&<}o86CS zxDu&o8tFt5sc;a6X<&fy;BuMps3j~kCJg!|LW1%DKWCp{EIW*nU7-arnh&=)i-QX7hOwlZ>o>vXR(n?7Z zhVITI9#k+pS%Em?&QD#E(IhO>Dgx~0ksQGXAFO;4K%^lr5f)Ps-?se|KmT+qZgh3? za>*QEDRrBa-N)@Qq7_|%=22l7I)%;2G&M{U3M-z*ln9672-3tf!$SSLKcHf9S;B<^ z;cx`2R;_XZ?A^Op0?e5+M*@8F-A(**doyET93|l>4cOeB3a{yg$E`!v6j_oD=C|s~ z(+zo;JOE5DI~B7mKlJe|Rj~11-Ap9HA$g9x5`gI;T`+gnXcf-e%&7^e?4;qz+1K07wq48YM5#iwwwRHHX!o)}hp8O!{rbQ78`(zOA z+_@8>Q253Bz_xAMn1*`Oym|AA0Qc~#17D%@@dyGeM#7kz#&lL1&87003W&qNhLl$4 z|AVa2B{XbN1+iOk5h*cU`0@9qqcRzlc6RL8!Se0Lnl)>j09&?fkpT1O&zAt5k9u*g z^$s$_quf3HN`oqwxQeS>|9+M?E}Jf(JE)46Y6w+C8jeroq)TR1B@hb*kGI(piPA{`aXI<$!=E|QzqD6}&z^mJf zm(g4<_wt#~O%)aefKce8kACI^*tl_{2*T!uh6Xd8p7ww3?$rQJ0udJiK(ux1);R$- zY}l|s{5D*%Vukl@0lcV|f=@o#%#6|T@yDB-0PEMUmp{+@`!i(^9zN7_xd}y7FEQD% zlj5^o{G-U%*psFd=WB~*i~6$}{B2+|tF~_ao$@bnV!6Sv(O0zq0000KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde00d`2O+f$vv5tKEQIh}w03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(` z>RI+y?e7jKeZ#YO-C0$fQ%K~#9!e3Q*flu;CipZCr?UpnI`Ib)(zj3Rwt8WNNh zL^~;>7G~C&gj;zv5~sH^M}16~DQB@w2|{6Wg1`v - - - - - - - - - diff --git a/phpinfo.php b/phpinfo.php new file mode 100644 index 0000000..554a22c --- /dev/null +++ b/phpinfo.php @@ -0,0 +1,5 @@ + diff --git a/ro_ro/index.htm b/ro_ro/index.htm deleted file mode 100644 index ee1f723..0000000 --- a/ro_ro/index.htm +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/ru/index.htm b/ru/index.htm deleted file mode 100644 index ee1f723..0000000 --- a/ru/index.htm +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/templates/SwiftBlue/cookieconsent.min.js b/templates/SwiftBlue/cookieconsent.min.js index 1e3dccf..cdec567 100644 --- a/templates/SwiftBlue/cookieconsent.min.js +++ b/templates/SwiftBlue/cookieconsent.min.js @@ -1 +1 @@ -!function(e){if(!e.hasInitialised){var t={escapeRegExp:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},hasClass:function(e,t){var i=" ";return 1===e.nodeType&&(i+e.className+i).replace(/[\n\t]/g,i).indexOf(i+t+i)>=0},addClass:function(e,t){e.className+=" "+t},removeClass:function(e,t){var i=new RegExp("\\b"+this.escapeRegExp(t)+"\\b");e.className=e.className.replace(i,"")},interpolateString:function(e,t){return e.replace(/{{([a-z][a-z0-9\-_]*)}}/gi,function(e){return t(arguments[1])||""})},getCookie:function(e){var t=("; "+document.cookie).split("; "+e+"=");return t.length<2?void 0:t.pop().split(";").shift()},setCookie:function(e,t,i,n,o,s){var r=new Date;r.setHours(r.getHours()+24*(i||365));var a=[e+"="+t,"expires="+r.toUTCString(),"path="+(o||"/")];n&&a.push("domain="+n),s&&a.push("secure"),document.cookie=a.join(";")},deepExtend:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(i in e&&this.isPlainObject(e[i])&&this.isPlainObject(t[i])?this.deepExtend(e[i],t[i]):e[i]=t[i]);return e},throttle:function(e,t){var i=!1;return function(){i||(e.apply(this,arguments),i=!0,setTimeout(function(){i=!1},t))}},hash:function(e){var t,i,n=0;if(0===e.length)return n;for(t=0,i=e.length;t=128?"#000":"#fff"},getLuminance:function(e){var t=parseInt(this.normaliseHex(e),16),i=38+(t>>16),n=38+(t>>8&255),o=38+(255&t);return"#"+(16777216+65536*(i<255?i<1?0:i:255)+256*(n<255?n<1?0:n:255)+(o<255?o<1?0:o:255)).toString(16).slice(1)},isMobile:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},isPlainObject:function(e){return"object"==typeof e&&null!==e&&e.constructor==Object},traverseDOMPath:function(e,i){return e&&e.parentNode?t.hasClass(e,i)?e:this.traverseDOMPath(e.parentNode,i):null}};e.status={deny:"deny",allow:"allow",dismiss:"dismiss"},e.transitionEnd=function(){var e=document.createElement("div"),t={t:"transitionend",OT:"oTransitionEnd",msT:"MSTransitionEnd",MozT:"transitionend",WebkitT:"webkitTransitionEnd"};for(var i in t)if(t.hasOwnProperty(i)&&void 0!==e.style[i+"ransition"])return t[i];return""}(),e.hasTransition=!!e.transitionEnd;var i=Object.keys(e.status).map(t.escapeRegExp);e.customStyles={},e.Popup=function(){var n={enabled:!0,container:null,cookie:{name:"cookieconsent_status",path:"/",domain:"",expiryDays:365,secure:!1},onPopupOpen:function(){},onPopupClose:function(){},onInitialise:function(e){},onStatusChange:function(e,t){},onRevokeChoice:function(){},onNoCookieLaw:function(e,t){},content:{header:"Cookies used on the website!",message:"This website uses cookies to ensure you get the best experience on our website.",dismiss:"Got it!",allow:"Allow cookies",deny:"Decline",link:"Learn more",href:"https://www.cookiesandyou.com",close:"❌",target:"_blank",policy:"Cookie Policy"},elements:{header:'{{header}} ',message:'{{message}}',messagelink:'{{message}} {{link}}',dismiss:'{{dismiss}}',allow:'{{allow}}',deny:'{{deny}}',link:'{{link}}',close:'{{close}}'},window:'

',revokeBtn:'
{{policy}}
',compliance:{info:'
{{dismiss}}
',"opt-in":'
{{deny}}{{allow}}
',"opt-out":'
{{deny}}{{allow}}
'},type:"info",layouts:{basic:"{{messagelink}}{{compliance}}","basic-close":"{{messagelink}}{{compliance}}{{close}}","basic-header":"{{header}}{{message}}{{link}}{{compliance}}"},layout:"basic",position:"bottom",theme:"block",static:!1,palette:null,revokable:!1,animateRevokable:!0,showLink:!0,dismissOnScroll:!1,dismissOnTimeout:!1,dismissOnWindowClick:!1,ignoreClicksFrom:["cc-revoke","cc-btn"],autoOpen:!0,autoAttach:!0,whitelistPage:[],blacklistPage:[],overrideHTML:null};function o(){this.initialise.apply(this,arguments)}function s(e){this.openingTimeout=null,t.removeClass(e,"cc-invisible")}function r(t){t.style.display="none",t.removeEventListener(e.transitionEnd,this.afterTransition),this.afterTransition=null}function a(){var e=this.options.position.split("-"),t=[];return e.forEach(function(e){t.push("cc-"+e)}),t}function c(n){var o=this.options,s=document.createElement("div"),r=o.container&&1===o.container.nodeType?o.container:document.body;s.innerHTML=n;var a=s.children[0];return a.style.display="none",t.hasClass(a,"cc-window")&&e.hasTransition&&t.addClass(a,"cc-invisible"),this.onButtonClick=function(n){var o=t.traverseDOMPath(n.target,"cc-btn")||n.target;if(t.hasClass(o,"cc-btn")){var s=o.className.match(new RegExp("\\bcc-("+i.join("|")+")\\b")),r=s&&s[1]||!1;r&&(this.setStatus(r),this.close(!0))}t.hasClass(o,"cc-close")&&(this.setStatus(e.status.dismiss),this.close(!0));t.hasClass(o,"cc-revoke")&&this.revokeChoice()}.bind(this),a.addEventListener("click",this.onButtonClick),o.autoAttach&&(r.firstChild?r.insertBefore(a,r.firstChild):r.appendChild(a)),a}function l(e){return"000000"==(e=t.normaliseHex(e))?"#222":t.getLuminance(e)}function u(e,t){for(var i=0,n=e.length;i=0;o&&t(n);return o}.call(this)&&(this.options.enabled=!1),u(this.options.blacklistPage,location.pathname)&&(this.options.enabled=!1),u(this.options.whitelistPage,location.pathname)&&(this.options.enabled=!0);var o=this.options.window.replace("{{classes}}",function(){var i=this.options,n="top"==i.position||"bottom"==i.position?"banner":"floating";t.isMobile()&&(n="floating");var o=["cc-"+n,"cc-type-"+i.type,"cc-theme-"+i.theme];i.static&&o.push("cc-static");o.push.apply(o,a.call(this));(function(i){var n=t.hash(JSON.stringify(i)),o="cc-color-override-"+n,s=t.isPlainObject(i);this.customStyleSelector=s?o:null,s&&function(i,n,o){if(e.customStyles[i])return void++e.customStyles[i].references;var s={},r=n.popup,a=n.button,c=n.highlight;r&&(r.text=r.text?r.text:t.getContrast(r.background),r.link=r.link?r.link:r.text,s[o+".cc-window"]=["color: "+r.text,"background-color: "+r.background],s[o+".cc-revoke"]=["color: "+r.text,"background-color: "+r.background],s[o+" .cc-link,"+o+" .cc-link:active,"+o+" .cc-link:visited"]=["color: "+r.link],a&&(a.text=a.text?a.text:t.getContrast(a.background),a.border=a.border?a.border:"transparent",s[o+" .cc-btn"]=["color: "+a.text,"border-color: "+a.border,"background-color: "+a.background],a.padding&&s[o+" .cc-btn"].push("padding: "+a.padding),"transparent"!=a.background&&(s[o+" .cc-btn:hover, "+o+" .cc-btn:focus"]=["background-color: "+(a.hover||l(a.background))]),c?(c.text=c.text?c.text:t.getContrast(c.background),c.border=c.border?c.border:"transparent",s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+c.text,"border-color: "+c.border,"background-color: "+c.background]):s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+r.text]));var u=document.createElement("style");document.head.appendChild(u),e.customStyles[i]={references:1,element:u.sheet};var h=-1;for(var p in s)s.hasOwnProperty(p)&&u.sheet.insertRule(p+"{"+s[p].join(";")+"}",++h)}(n,i,"."+o);return s}).call(this,this.options.palette);this.customStyleSelector&&o.push(this.customStyleSelector);return o}.call(this).join(" ")).replace("{{children}}",function(){var e={},i=this.options;i.showLink||(i.elements.link="",i.elements.messagelink=i.elements.message);Object.keys(i.elements).forEach(function(n){e[n]=t.interpolateString(i.elements[n],function(e){var t=i.content[e];return e&&"string"==typeof t&&t.length?t:""})});var n=i.compliance[i.type];n||(n=i.compliance.info);e.compliance=t.interpolateString(n,function(t){return e[t]});var o=i.layouts[i.layout];o||(o=i.layouts.basic);return t.interpolateString(o,function(t){return e[t]})}.call(this)),s=this.options.overrideHTML;if("string"==typeof s&&s.length&&(o=s),this.options.static){var r=c.call(this,'
'+o+"
");r.style.display="",this.element=r.firstChild,this.element.style.display="none",t.addClass(this.element,"cc-invisible")}else this.element=c.call(this,o);(function(){var i=this.setStatus.bind(this),n=this.close.bind(this),o=this.options.dismissOnTimeout;"number"==typeof o&&o>=0&&(this.dismissTimeout=window.setTimeout(function(){i(e.status.dismiss),n(!0)},Math.floor(o)));var s=this.options.dismissOnScroll;if("number"==typeof s&&s>=0){var r=function(t){window.pageYOffset>Math.floor(s)&&(i(e.status.dismiss),n(!0),window.removeEventListener("scroll",r),this.onWindowScroll=null)};this.options.enabled&&(this.onWindowScroll=r,window.addEventListener("scroll",r))}var a=this.options.dismissOnWindowClick,c=this.options.ignoreClicksFrom;if(a){var l=function(o){for(var s=!1,r=o.path.length,a=c.length,u=0;uo&&(i=!0),i?t.hasClass(n,"cc-active")||t.addClass(n,"cc-active"):t.hasClass(n,"cc-active")&&t.removeClass(n,"cc-active")},200);this.onMouseMove=o,window.addEventListener("mousemove",o)}}}.call(this),this.options.autoOpen&&this.autoOpen()},o.prototype.destroy=function(){this.onButtonClick&&this.element&&(this.element.removeEventListener("click",this.onButtonClick),this.onButtonClick=null),this.dismissTimeout&&(clearTimeout(this.dismissTimeout),this.dismissTimeout=null),this.onWindowScroll&&(window.removeEventListener("scroll",this.onWindowScroll),this.onWindowScroll=null),this.onWindowClick&&(window.removeEventListener("click",this.onWindowClick),this.onWindowClick=null),this.onMouseMove&&(window.removeEventListener("mousemove",this.onMouseMove),this.onMouseMove=null),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=null,this.revokeBtn&&this.revokeBtn.parentNode&&this.revokeBtn.parentNode.removeChild(this.revokeBtn),this.revokeBtn=null,function(i){if(t.isPlainObject(i)){var n=t.hash(JSON.stringify(i)),o=e.customStyles[n];if(o&&!--o.references){var s=o.element.ownerNode;s&&s.parentNode&&s.parentNode.removeChild(s),e.customStyles[n]=null}}}(this.options.palette),this.options=null},o.prototype.open=function(t){if(this.element)return this.isOpen()||(e.hasTransition?this.fadeIn():this.element.style.display="",this.options.revokable&&this.toggleRevokeButton(),this.options.onPopupOpen.call(this)),this},o.prototype.close=function(t){if(this.element)return this.isOpen()&&(e.hasTransition?this.fadeOut():this.element.style.display="none",t&&this.options.revokable&&this.toggleRevokeButton(!0),this.options.onPopupClose.call(this)),this},o.prototype.fadeIn=function(){var i=this.element;if(e.hasTransition&&i&&(this.afterTransition&&r.call(this,i),t.hasClass(i,"cc-invisible"))){if(i.style.display="",this.options.static){var n=this.element.clientHeight;this.element.parentNode.style.maxHeight=n+"px"}this.openingTimeout=setTimeout(s.bind(this,i),20)}},o.prototype.fadeOut=function(){var i=this.element;e.hasTransition&&i&&(this.openingTimeout&&(clearTimeout(this.openingTimeout),s.bind(this,i)),t.hasClass(i,"cc-invisible")||(this.options.static&&(this.element.parentNode.style.maxHeight=""),this.afterTransition=r.bind(this,i),i.addEventListener(e.transitionEnd,this.afterTransition),t.addClass(i,"cc-invisible")))},o.prototype.isOpen=function(){return this.element&&""==this.element.style.display&&(!e.hasTransition||!t.hasClass(this.element,"cc-invisible"))},o.prototype.toggleRevokeButton=function(e){this.revokeBtn&&(this.revokeBtn.style.display=e?"":"none")},o.prototype.revokeChoice=function(e){this.options.enabled=!0,this.clearStatus(),this.options.onRevokeChoice.call(this),e||this.autoOpen()},o.prototype.hasAnswered=function(t){return Object.keys(e.status).indexOf(this.getStatus())>=0},o.prototype.hasConsented=function(t){var i=this.getStatus();return i==e.status.allow||i==e.status.dismiss},o.prototype.autoOpen=function(e){!this.hasAnswered()&&this.options.enabled?this.open():this.hasAnswered()&&this.options.revokable&&this.toggleRevokeButton(!0)},o.prototype.setStatus=function(i){var n=this.options.cookie,o=t.getCookie(n.name),s=Object.keys(e.status).indexOf(o)>=0;Object.keys(e.status).indexOf(i)>=0?(t.setCookie(n.name,i,n.expiryDays,n.domain,n.path,n.secure),this.options.onStatusChange.call(this,i,s)):this.clearStatus()},o.prototype.getStatus=function(){return t.getCookie(this.options.cookie.name)},o.prototype.clearStatus=function(){var e=this.options.cookie;t.setCookie(e.name,"",-1,e.domain,e.path)},o}(),e.Location=function(){var e={timeout:5e3,services:["ipinfo"],serviceDefinitions:{ipinfo:function(){return{url:"//ipinfo.io",headers:["Accept: application/json"],callback:function(e,t){try{var i=JSON.parse(t);return i.error?s(i):{code:i.country}}catch(e){return s({error:"Invalid response ("+e+")"})}}}},ipinfodb:function(e){return{url:"//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}",isScript:!0,callback:function(e,t){try{var i=JSON.parse(t);return"ERROR"==i.statusCode?s({error:i.statusMessage}):{code:i.countryCode}}catch(e){return s({error:"Invalid response ("+e+")"})}}}},maxmind:function(){return{url:"//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js",isScript:!0,callback:function(e){window.geoip2?geoip2.country(function(t){try{e({code:t.country.iso_code})}catch(t){e(s(t))}},function(t){e(s(t))}):e(new Error("Unexpected response format. The downloaded script should have exported `geoip2` to the global scope"))}}}}};function i(i){t.deepExtend(this.options={},e),t.isPlainObject(i)&&t.deepExtend(this.options,i),this.currentServiceIndex=-1}function n(e,t,i){var n,o=document.createElement("script");o.type="text/"+(e.type||"javascript"),o.src=e.src||e,o.async=!1,o.onreadystatechange=o.onload=function(){var e=o.readyState;clearTimeout(n),t.done||e&&!/loaded|complete/.test(e)||(t.done=!0,t(),o.onreadystatechange=o.onload=null)},document.body.appendChild(o),n=setTimeout(function(){t.done=!0,t(),o.onreadystatechange=o.onload=null},i)}function o(e,t,i,n,o){var s=new(window.XMLHttpRequest||window.ActiveXObject)("MSXML2.XMLHTTP.3.0");if(s.open(n?"POST":"GET",e,1),s.setRequestHeader("Content-type","application/x-www-form-urlencoded"),Array.isArray(o))for(var r=0,a=o.length;r3&&t(s)}),s.send(n)}function s(e){return new Error("Error ["+(e.code||"UNKNOWN")+"]: "+e.error)}return i.prototype.getNextService=function(){var e;do{e=this.getServiceByIdx(++this.currentServiceIndex)}while(this.currentServiceIndex=0,revokable:t.revokable.indexOf(e)>=0,explicitAction:t.explicitAction.indexOf(e)>=0}},i.prototype.applyLaw=function(e,t){var i=this.get(t);return i.hasLaw||(e.enabled=!1,"function"==typeof e.onNoCookieLaw&&e.onNoCookieLaw(t,i)),this.options.regionalLaw&&(i.revokable&&(e.revokable=!0),i.explicitAction&&(e.dismissOnScroll=!1,e.dismissOnTimeout=!1)),e},i}(),e.initialise=function(i,n,o){var s=new e.Law(i.law);n||(n=function(){}),o||(o=function(){});var r=Object.keys(e.status),a=t.getCookie("cookieconsent_status");r.indexOf(a)>=0?n(new e.Popup(i)):e.getCountryCode(i,function(t){delete i.law,delete i.location,t.code&&(i=s.applyLaw(i,t.code)),n(new e.Popup(i))},function(t){delete i.law,delete i.location,o(t,new e.Popup(i))})},e.getCountryCode=function(t,i,n){t.law&&t.law.countryCode?i({code:t.law.countryCode}):t.location?new e.Location(t.location).locate(function(e){i(e||{})},n):i({})},e.utils=t,e.hasInitialised=!0,window.cookieconsent=e}}(window.cookieconsent||{}); \ No newline at end of file +!function(e){if(!e.hasInitialised){var t={escapeRegExp:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},hasClass:function(e,t){var i=" ";return 1===e.nodeType&&(i+e.className+i).replace(/[\n\t]/g,i).indexOf(i+t+i)>=0},addClass:function(e,t){e.className+=" "+t},removeClass:function(e,t){var i=new RegExp("\\b"+this.escapeRegExp(t)+"\\b");e.className=e.className.replace(i,"")},interpolateString:function(e,t){return e.replace(/{{([a-z][a-z0-9\-_]*)}}/gi,function(e){return t(arguments[1])||""})},getCookie:function(e){var t=("; "+document.cookie).split("; "+e+"=");return t.length<2?void 0:t.pop().split(";").shift()},setCookie:function(e,t,i,n,o,s){var r=new Date;r.setHours(r.getHours()+24*(i||365));var a=[e+"="+t,"expires="+r.toUTCString(),"path="+(o||"/")];n&&a.push("domain="+n),s&&a.push("secure"),document.cookie=a.join(";")},deepExtend:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(i in e&&this.isPlainObject(e[i])&&this.isPlainObject(t[i])?this.deepExtend(e[i],t[i]):e[i]=t[i]);return e},throttle:function(e,t){var i=!1;return function(){i||(e.apply(this,arguments),i=!0,setTimeout(function(){i=!1},t))}},hash:function(e){var t,i,n=0;if(0===e.length)return n;for(t=0,i=e.length;t=128?"#000":"#fff"},getLuminance:function(e){var t=parseInt(this.normaliseHex(e),16),i=38+(t>>16),n=38+(t>>8&255),o=38+(255&t);return"#"+(16777216+65536*(i<255?i<1?0:i:255)+256*(n<255?n<1?0:n:255)+(o<255?o<1?0:o:255)).toString(16).slice(1)},isMobile:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},isPlainObject:function(e){return"object"==typeof e&&null!==e&&e.constructor==Object},traverseDOMPath:function(e,i){return e&&e.parentNode?t.hasClass(e,i)?e:this.traverseDOMPath(e.parentNode,i):null}};e.status={deny:"deny",allow:"allow",dismiss:"dismiss"},e.transitionEnd=function(){var e=document.createElement("div"),t={t:"transitionend",OT:"oTransitionEnd",msT:"MSTransitionEnd",MozT:"transitionend",WebkitT:"webkitTransitionEnd"};for(var i in t)if(t.hasOwnProperty(i)&&void 0!==e.style[i+"ransition"])return t[i];return""}(),e.hasTransition=!!e.transitionEnd;var i=Object.keys(e.status).map(t.escapeRegExp);e.customStyles={},e.Popup=function(){var n={enabled:!0,container:null,cookie:{name:"cookieconsent_status",path:"/",domain:"",expiryDays:365,secure:!1},onPopupOpen:function(){},onPopupClose:function(){},onInitialise:function(e){},onStatusChange:function(e,t){},onRevokeChoice:function(){},onNoCookieLaw:function(e,t){},content:{header:"Cookies used on the website!",message:"This website uses cookies to ensure you get the best experience on our website.",dismiss:"Got it!",allow:"Allow cookies",deny:"Decline",link:"Learn more",href:"https://www.cookiesandyou.com",close:"❌",target:"_blank",policy:"Cookie Policy"},elements:{header:'{{header}} ',message:'{{message}}',messagelink:'{{message}} {{link}}',dismiss:'{{dismiss}}',allow:'{{allow}}',deny:'{{deny}}',link:'{{link}}',close:'{{close}}'},window:'',revokeBtn:'
{{policy}}
',compliance:{info:'
{{dismiss}}
',"opt-in":'
{{deny}}{{allow}}
',"opt-out":'
{{deny}}{{allow}}
'},type:"info",layouts:{basic:"{{messagelink}}{{compliance}}","basic-close":"{{messagelink}}{{compliance}}{{close}}","basic-header":"{{header}}{{message}}{{link}}{{compliance}}"},layout:"basic",position:"bottom",theme:"block",static:!1,palette:null,revokable:!1,animateRevokable:!0,showLink:!0,dismissOnScroll:!1,dismissOnTimeout:!1,dismissOnWindowClick:!1,ignoreClicksFrom:["cc-revoke","cc-btn"],autoOpen:!0,autoAttach:!0,whitelistPage:[],blacklistPage:[],overrideHTML:null};function o(){this.initialise.apply(this,arguments)}function s(e){this.openingTimeout=null,t.removeClass(e,"cc-invisible")}function r(t){t.style.display="none",t.removeEventListener(e.transitionEnd,this.afterTransition),this.afterTransition=null}function a(){var e=this.options.position.split("-"),t=[];return e.forEach(function(e){t.push("cc-"+e)}),t}function c(n){var o=this.options,s=document.createElement("div"),r=o.container&&1===o.container.nodeType?o.container:document.body;s.innerHTML=n;var a=s.children[0];return a.style.display="none",t.hasClass(a,"cc-window")&&e.hasTransition&&t.addClass(a,"cc-invisible"),this.onButtonClick=function(n){var o=t.traverseDOMPath(n.target,"cc-btn")||n.target;if(t.hasClass(o,"cc-btn")){var s=o.className.match(new RegExp("\\bcc-("+i.join("|")+")\\b")),r=s&&s[1]||!1;r&&(this.setStatus(r),this.close(!0))}t.hasClass(o,"cc-close")&&(this.setStatus(e.status.dismiss),this.close(!0));t.hasClass(o,"cc-revoke")&&this.revokeChoice()}.bind(this),a.addEventListener("click",this.onButtonClick),o.autoAttach&&(r.firstChild?r.insertBefore(a,r.firstChild):r.appendChild(a)),a}function l(e){return"000000"==(e=t.normaliseHex(e))?"#222":t.getLuminance(e)}function u(e,t){for(var i=0,n=e.length;i=0;o&&t(n);return o}.call(this)&&(this.options.enabled=!1),u(this.options.blacklistPage,location.pathname)&&(this.options.enabled=!1),u(this.options.whitelistPage,location.pathname)&&(this.options.enabled=!0);var o=this.options.window.replace("{{classes}}",function(){var i=this.options,n="top"==i.position||"bottom"==i.position?"banner":"floating";t.isMobile()&&(n="floating");var o=["cc-"+n,"cc-type-"+i.type,"cc-theme-"+i.theme];i.static&&o.push("cc-static");o.push.apply(o,a.call(this));(function(i){var n=t.hash(JSON.stringify(i)),o="cc-color-override-"+n,s=t.isPlainObject(i);this.customStyleSelector=s?o:null,s&&function(i,n,o){if(e.customStyles[i])return void++e.customStyles[i].references;var s={},r=n.popup,a=n.button,c=n.highlight;r&&(r.text=r.text?r.text:t.getContrast(r.background),r.link=r.link?r.link:r.text,s[o+".cc-window"]=["color: "+r.text,"background-color: "+r.background],s[o+".cc-revoke"]=["color: "+r.text,"background-color: "+r.background],s[o+" .cc-link,"+o+" .cc-link:active,"+o+" .cc-link:visited"]=["color: "+r.link],a&&(a.text=a.text?a.text:t.getContrast(a.background),a.border=a.border?a.border:"transparent",s[o+" .cc-btn"]=["color: "+a.text,"border-color: "+a.border,"background-color: "+a.background],a.padding&&s[o+" .cc-btn"].push("padding: "+a.padding),"transparent"!=a.background&&(s[o+" .cc-btn:hover, "+o+" .cc-btn:focus"]=["background-color: "+(a.hover||l(a.background))]),c?(c.text=c.text?c.text:t.getContrast(c.background),c.border=c.border?c.border:"transparent",s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+c.text,"border-color: "+c.border,"background-color: "+c.background]):s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+r.text]));var u=document.createElement("style");document.head.appendChild(u),e.customStyles[i]={references:1,element:u.sheet};var h=-1;for(var p in s)s.hasOwnProperty(p)&&u.sheet.insertRule(p+"{"+s[p].join(";")+"}",++h)}(n,i,"."+o);return s}).call(this,this.options.palette);this.customStyleSelector&&o.push(this.customStyleSelector);return o}.call(this).join(" ")).replace("{{children}}",function(){var e={},i=this.options;i.showLink||(i.elements.link="",i.elements.messagelink=i.elements.message);Object.keys(i.elements).forEach(function(n){e[n]=t.interpolateString(i.elements[n],function(e){var t=i.content[e];return e&&"string"==typeof t&&t.length?t:""})});var n=i.compliance[i.type];n||(n=i.compliance.info);e.compliance=t.interpolateString(n,function(t){return e[t]});var o=i.layouts[i.layout];o||(o=i.layouts.basic);return t.interpolateString(o,function(t){return e[t]})}.call(this)),s=this.options.overrideHTML;if("string"==typeof s&&s.length&&(o=s),this.options.static){var r=c.call(this,'
'+o+"
");r.style.display="",this.element=r.firstChild,this.element.style.display="none",t.addClass(this.element,"cc-invisible")}else this.element=c.call(this,o);(function(){var i=this.setStatus.bind(this),n=this.close.bind(this),o=this.options.dismissOnTimeout;"number"==typeof o&&o>=0&&(this.dismissTimeout=window.setTimeout(function(){i(e.status.dismiss),n(!0)},Math.floor(o)));var s=this.options.dismissOnScroll;if("number"==typeof s&&s>=0){var r=function(t){window.pageYOffset>Math.floor(s)&&(i(e.status.dismiss),n(!0),window.removeEventListener("scroll",r),this.onWindowScroll=null)};this.options.enabled&&(this.onWindowScroll=r,window.addEventListener("scroll",r))}var a=this.options.dismissOnWindowClick,c=this.options.ignoreClicksFrom;if(a){var l=function(o){for(var s=!1,r=o.path.length,a=c.length,u=0;uo&&(i=!0),i?t.hasClass(n,"cc-active")||t.addClass(n,"cc-active"):t.hasClass(n,"cc-active")&&t.removeClass(n,"cc-active")},200);this.onMouseMove=o,window.addEventListener("mousemove",o)}}}.call(this),this.options.autoOpen&&this.autoOpen()},o.prototype.destroy=function(){this.onButtonClick&&this.element&&(this.element.removeEventListener("click",this.onButtonClick),this.onButtonClick=null),this.dismissTimeout&&(clearTimeout(this.dismissTimeout),this.dismissTimeout=null),this.onWindowScroll&&(window.removeEventListener("scroll",this.onWindowScroll),this.onWindowScroll=null),this.onWindowClick&&(window.removeEventListener("click",this.onWindowClick),this.onWindowClick=null),this.onMouseMove&&(window.removeEventListener("mousemove",this.onMouseMove),this.onMouseMove=null),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=null,this.revokeBtn&&this.revokeBtn.parentNode&&this.revokeBtn.parentNode.removeChild(this.revokeBtn),this.revokeBtn=null,function(i){if(t.isPlainObject(i)){var n=t.hash(JSON.stringify(i)),o=e.customStyles[n];if(o&&!--o.references){var s=o.element.ownerNode;s&&s.parentNode&&s.parentNode.removeChild(s),e.customStyles[n]=null}}}(this.options.palette),this.options=null},o.prototype.open=function(t){if(this.element)return this.isOpen()||(e.hasTransition?this.fadeIn():this.element.style.display="",this.options.revokable&&this.toggleRevokeButton(),this.options.onPopupOpen.call(this)),this},o.prototype.close=function(t){if(this.element)return this.isOpen()&&(e.hasTransition?this.fadeOut():this.element.style.display="none",t&&this.options.revokable&&this.toggleRevokeButton(!0),this.options.onPopupClose.call(this)),this},o.prototype.fadeIn=function(){var i=this.element;if(e.hasTransition&&i&&(this.afterTransition&&r.call(this,i),t.hasClass(i,"cc-invisible"))){if(i.style.display="",this.options.static){var n=this.element.clientHeight;this.element.parentNode.style.maxHeight=n+"px"}this.openingTimeout=setTimeout(s.bind(this,i),20)}},o.prototype.fadeOut=function(){var i=this.element;e.hasTransition&&i&&(this.openingTimeout&&(clearTimeout(this.openingTimeout),s.bind(this,i)),t.hasClass(i,"cc-invisible")||(this.options.static&&(this.element.parentNode.style.maxHeight=""),this.afterTransition=r.bind(this,i),i.addEventListener(e.transitionEnd,this.afterTransition),t.addClass(i,"cc-invisible")))},o.prototype.isOpen=function(){return this.element&&""==this.element.style.display&&(!e.hasTransition||!t.hasClass(this.element,"cc-invisible"))},o.prototype.toggleRevokeButton=function(e){this.revokeBtn&&(this.revokeBtn.style.display=e?"":"none")},o.prototype.revokeChoice=function(e){this.options.enabled=!0,this.clearStatus(),this.options.onRevokeChoice.call(this),e||this.autoOpen()},o.prototype.hasAnswered=function(t){return Object.keys(e.status).indexOf(this.getStatus())>=0},o.prototype.hasConsented=function(t){var i=this.getStatus();return i==e.status.allow||i==e.status.dismiss},o.prototype.autoOpen=function(e){!this.hasAnswered()&&this.options.enabled?this.open():this.hasAnswered()&&this.options.revokable&&this.toggleRevokeButton(!0)},o.prototype.setStatus=function(i){var n=this.options.cookie,o=t.getCookie(n.name),s=Object.keys(e.status).indexOf(o)>=0;Object.keys(e.status).indexOf(i)>=0?(t.setCookie(n.name,i,n.expiryDays,n.domain,n.path,n.secure),this.options.onStatusChange.call(this,i,s)):this.clearStatus()},o.prototype.getStatus=function(){return t.getCookie(this.options.cookie.name)},o.prototype.clearStatus=function(){var e=this.options.cookie;t.setCookie(e.name,"",-1,e.domain,e.path)},o}(),e.Location=function(){var e={timeout:5e3,services:["ipinfo"],serviceDefinitions:{ipinfo:function(){return{url:"//ipinfo.io",headers:["Accept: application/json"],callback:function(e,t){try{var i=JSON.parse(t);return i.error?s(i):{code:i.country}}catch(e){return s({error:"Invalid response ("+e+")"})}}}},ipinfodb:function(e){return{url:"//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}",isScript:!0,callback:function(e,t){try{var i=JSON.parse(t);return"ERROR"==i.statusCode?s({error:i.statusMessage}):{code:i.countryCode}}catch(e){return s({error:"Invalid response ("+e+")"})}}}},maxmind:function(){return{url:"//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js",isScript:!0,callback:function(e){window.geoip2?geoip2.country(function(t){try{e({code:t.country.iso_code})}catch(t){e(s(t))}},function(t){e(s(t))}):e(new Error("Unexpected response format. The downloaded script should have exported `geoip2` to the global scope"))}}}}};function i(i){t.deepExtend(this.options={},e),t.isPlainObject(i)&&t.deepExtend(this.options,i),this.currentServiceIndex=-1}function n(e,t,i){var n,o=document.createElement("script");o.type="text/"+(e.type||"javascript"),o.src=e.src||e,o.async=!1,o.onreadystatechange=o.onload=function(){var e=o.readyState;clearTimeout(n),t.done||e&&!/loaded|complete/.test(e)||(t.done=!0,t(),o.onreadystatechange=o.onload=null)},document.body.appendChild(o),n=setTimeout(function(){t.done=!0,t(),o.onreadystatechange=o.onload=null},i)}function o(e,t,i,n,o){var s=new(window.XMLHttpRequest||window.ActiveXObject)("MSXML2.XMLHTTP.3.0");if(s.open(n?"POST":"GET",e,1),s.setRequestHeader("Content-type","application/x-www-form-urlencoded"),Array.isArray(o))for(var r=0,a=o.length;r3&&t(s)}),s.send(n)}function s(e){return new Error("Error ["+(e.code||"UNKNOWN")+"]: "+e.error)}return i.prototype.getNextService=function(){var e;do{e=this.getServiceByIdx(++this.currentServiceIndex)}while(this.currentServiceIndex=0,revokable:t.revokable.indexOf(e)>=0,explicitAction:t.explicitAction.indexOf(e)>=0}},i.prototype.applyLaw=function(e,t){var i=this.get(t);return i.hasLaw||(e.enabled=!1,"function"==typeof e.onNoCookieLaw&&e.onNoCookieLaw(t,i)),this.options.regionalLaw&&(i.revokable&&(e.revokable=!0),i.explicitAction&&(e.dismissOnScroll=!1,e.dismissOnTimeout=!1)),e},i}(),e.initialise=functi \ No newline at end of file diff --git a/templates/SwiftBlue/global_header.tpl b/templates/SwiftBlue/global_header.tpl index 4588902..599022f 100644 --- a/templates/SwiftBlue/global_header.tpl +++ b/templates/SwiftBlue/global_header.tpl @@ -5,10 +5,10 @@ - - - - + + + + @@ -19,10 +19,10 @@ - - - - + + + + {words:index of} {info:dir} @ Beit Dina Bible Arheology and Translation Institute @@ -73,7 +73,7 @@ td.row2 { background-color: #BADBF5; } td.row3 { background-color: #80BBEC; } /* - This is for the table cell above the Topics, Post & Last posts on the http://beitdina.net/forum/index.php page + This is for the table cell above the Topics, Post & Last posts on the http://mesianic.uv.ro/forum/index.php page By default this is the fading out gradiated silver background. However, you could replace this with a bitmap specific for each forum */ @@ -144,7 +144,7 @@ a.mainmenu:hover{ text-decoration: underline; color : #041642; font-family: "Tre a.cattitle { text-decoration: none; color : #072978; } a.cattitle:hover{ text-decoration: underline; } -/* Forum title: Text and link to the forums used in: http://beitdina.net/forum/index.php */ +/* Forum title: Text and link to the forums used in: http://mesianic.uv.ro/forum/index.php */ .forumlink { font-weight: bold; font-size: 12px; color : #072978; } a.forumlink { text-decoration: none; color : #072978; } a.forumlink:hover{ text-decoration: underline; color : #041642; } @@ -265,17 +265,17 @@ function checkSearch() } else if (document.search_block.search_engine.value == 'site') { - window.open('http://beitdina.net/forum/index.php?page=5&mode=results&search_terms=all&search_keywords=' + document.search_block.search_keywords.value, '_self', ''); + window.open('http://mesianic.uv.ro/forum/index.php?page=5&mode=results&search_terms=all&search_keywords=' + document.search_block.search_keywords.value, '_self', ''); return false; } else if (document.search_block.search_engine.value == 'kb') { - window.open('http://beitdina.net/forum/index.php?page=&mode=search&search_terms=all&search_keywords=' + document.search_block.search_keywords.value, '_self', ''); + window.open('http://mesianic.uv.ro/forum/index.php?page=&mode=search&search_terms=all&search_keywords=' + document.search_block.search_keywords.value, '_self', ''); return false; } else if (document.search_block.search_engine.value == 'pafiledb') { - window.open('http://beitdina.net/forum/index.php?page=&action=search&search_terms=all&search_keywords=' + document.search_block.search_keywords.value, '_self', ''); + window.open('http://mesianic.uv.ro/forum/index.php?page=&action=search&search_terms=all&search_keywords=' + document.search_block.search_keywords.value, '_self', ''); return false; } else diff --git a/templates/SwiftBlue/global_header2.tpl b/templates/SwiftBlue/global_header2.tpl new file mode 100644 index 0000000..599022f --- /dev/null +++ b/templates/SwiftBlue/global_header2.tpl @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +{words:index of} {info:dir} @ Beit Dina Bible Arheology and Translation Institute + + + + + + + + + + + + + + + + diff --git a/templates/SwiftBlue/index.html b/templates/SwiftBlue/index.html new file mode 100644 index 0000000..83bd54d --- /dev/null +++ b/templates/SwiftBlue/index.html @@ -0,0 +1,6581 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +אִינדֶקס שֶׁל ./ @ Beit Dina Bible Arheology and Translation Institute + + + + + + + + + + + + + + + + + + +#Bibliuta @ Undernet + + + + - - - - - diff --git a/templates/SwiftBlueBeitDina/SwiftBlue.cfg b/templates/SwiftBlueBeitDina/SwiftBlue.cfg new file mode 100644 index 0000000..d4ccfb7 --- /dev/null +++ b/templates/SwiftBlueBeitDina/SwiftBlue.cfg @@ -0,0 +1,293 @@ +The mxBB Development Team'; + +// +// When creating a new template, you normally "clone" a template and modify a number of *.tpl files. +// For similar templates this means only a few files are different. +// For example: you may have a template similar to subSilver, but with a different overall_header.tpl - the other files are identical. +// Then this template should only contain one *.tpl file, namely overall_header.tpl, +// and with $mx_template_settings['cloned_template'] = 'subSilver'. +// If this template is a full set of *.tpl files, leave this blank. +$mx_template_settings['cloned_template'] = '_core'; + +// +// Block border graphics are defined in mx_main_layout.tpl, within the 'graph_border' template environment. +// Turning this setting 'false' will disable block border graphics. +$mx_template_settings['border_graphics'] = false; + +/********************************************************************************\ +| Define what graphics bundles to use +| - these are very handy paths to ALL kind of phpBB/MX-Publisher graphics +\********************************************************************************/ +$mx_images['mx_graphics']['general'] = file_exists( $mx_root_path . $current_template_path . "/images/logo.gif" ) ? $current_template_path . "/images" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/logo.gif" ) ? $cloned_template_path . "/images" : $default_template_path . "/images" ); +$mx_images['mx_graphics']['page_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/page_icons" ) ? $current_template_path . "/images/page_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/page_icons" ) ? $cloned_template_path . "/images/page_icons" : $default_template_path . "/images/page_icons" ); +$mx_images['mx_graphics']['block_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/block_icons" ) ? $current_template_path . "/images/block_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/block_icons" ) ? $cloned_template_path . "/images/block_icons" : $default_template_path . "/images/block_icons" ); +$mx_images['mx_graphics']['menu_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/menu_icons" ) ? $current_template_path . "/images/menu_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/menu_icons" ) ? $cloned_template_path . "/images/menu_icons" : $default_template_path . "/images/menu_icons" ); +$mx_images['mx_graphics']['admin_icons'] = file_exists( $mx_root_path . $current_template_path . "/images/admin_icons" ) ? $current_template_path . "/images/admin_icons" : ( file_exists( $mx_root_path . $cloned_template_path . "/images/admin_icons" ) ? $cloned_template_path . "/images/admin_icons" : $default_template_path . "/images/admin_icons" ); +$mx_images['mx_graphics']['phpbb_icons'] = !empty($current_template_path) && file_exists( $phpbb_root_path . $current_template_path . "/images" ) ? $current_template_path . "/images" : ( !empty($cloned_template_path) && file_exists( $phpbb_root_path . $cloned_template_path . "/images" ) ? $cloned_template_path . "/images" : $default_template_path . "/images"); + +// +// Prefix all paths to get full img URLs +// +$current_template_images = PORTAL_URL . $mx_images['mx_graphics']['general']; // Logo etc +$current_template_page_images = PORTAL_URL . $mx_images['mx_graphics']['page_icons']; // Used by adminCP - Pages +$current_template_block_images = PORTAL_URL . $mx_images['mx_graphics']['block_icons']; // Used by userCP block buttons +$current_template_menu_images = PORTAL_URL . $mx_images['mx_graphics']['menu_icons']; // Used by adminCP - Navigation Menu +$current_template_admin_images = PORTAL_URL . $mx_images['mx_graphics']['admin_icons']; // Internal graphics for the MX-Publisher adminCP +$current_template_phpbb_images = PHPBB_URL . $mx_images['mx_graphics']['phpbb_icons']; // phpBB graphics template +$current_template_theme_images = PORTAL_URL . $current_template_path . '/theme/images'; + +// +// Standalone MX-Publisher installation? Where are the phpbb images? +// +//$current_template_phpbb_images = PHPBB_URL . $mx_images['mx_graphics']['phpbb_icons']; // phpBB graphics template +$current_template_phpbb_images = PHPBB_URL . $mx_images['mx_graphics']['phpbb_icons']; // phpBB graphics template + +// +// Define the icon css style +// +$mx_images['mx_graphics']['icon_style'] = +''; + +/********************************************************************************\ +| Page Navigation Images +| 1. If you want to control the overall_header.tpl images from this *.cfg file, make defintions below +| 2. Or if not, use hardcoded image paths in overall_header.tpl, just like in the phpBB standard subSilver overall_header.tpl. +\********************************************************************************/ +// +// Use MX-Publisher graphics - normally the menu_icons bundle +// +$mx_images['mx_nav_home'] = "$current_template_menu_images/icon_home.gif"; // {NAV_IMAGES_HOME} +$mx_images['mx_nav_forum'] = "$current_template_menu_images/icon_forum.gif"; // {NAV_IMAGES_FORUM} +$mx_images['mx_nav_profile'] = "$current_template_menu_images/icon_profile.gif"; // {NAV_IMAGES_PROFILE} +$mx_images['mx_nav_faq'] = "$current_template_menu_images/icon_faq.gif"; // {NAV_IMAGES_FAQ} +$mx_images['mx_nav_search'] = "$current_template_menu_images/icon_search.gif"; // {NAV_IMAGES_SEARCH} +$mx_images['mx_nav_members'] = "$current_template_menu_images/icon_members.gif"; // {NAV_IMAGES_MEMBERS} +$mx_images['mx_nav_groups'] = "$current_template_menu_images/icon_groups.gif"; // {NAV_IMAGES_GROUPS} +$mx_images['mx_nav_mail'] = "$current_template_menu_images/icon_mail.gif"; // {NAV_IMAGES_PRIVMSG} +$mx_images['mx_nav_login'] = "$current_template_menu_images/icon_login.gif"; // {NAV_IMAGES_LOGIN_LOGOUT} +$mx_images['mx_nav_register'] = "$current_template_menu_images/icon_register.gif"; // {NAV_IMAGES_REGISTER} + +// +// Use standard phpBB graphics +// +/* +$mx_images['mx_nav_home'] = "$current_template_phpbb_images/icon_minipost.gif"; +$mx_images['mx_nav_forum'] = "$current_template_phpbb_images/icon_minipost.gif"; +$mx_images['mx_nav_profile'] = "$current_template_phpbb_images/icon_mini_profile.gif"; +$mx_images['mx_nav_faq'] = "$current_template_phpbb_images/icon_mini_faq.gif"; +$mx_images['mx_nav_search'] = "$current_template_phpbb_images/icon_mini_search.gif"; +$mx_images['mx_nav_members'] = "$current_template_phpbb_images/icon_mini_members.gif"; +$mx_images['mx_nav_groups'] = "$current_template_phpbb_images/icon_mini_groups.gif"; +$mx_images['mx_nav_mail'] = "$current_template_phpbb_images/icon_mini_message.gif"; +$mx_images['mx_nav_login'] = "$current_template_phpbb_images/icon_mini_login.gif"; +$mx_images['mx_nav_register'] = "$current_template_phpbb_images/icon_mini_register.gif"; +*/ + +/********************************************************************************\ +| Block Images +| - these images are used for the block editCP buttons and controls +\********************************************************************************/ +$mx_images['mx_contract'] = "$current_template_block_images/contract.gif"; +$mx_images['mx_expand'] = "$current_template_block_images/expand.gif"; +$mx_images['mx_block_edit_admin'] = "$current_template_block_images/block_edit_admin.gif"; +$mx_images['mx_block_edit_split'] = "$current_template_block_images/block_edit_split.gif"; +$mx_images['mx_block_edit'] = "$current_template_block_images/block_edit.gif"; +$mx_images['mx_block_hidden'] = "$current_template_block_images/block_hidden.gif"; + +/********************************************************************************\ +| adminCP/editCP Images +| - these images are used for the adminCP & block editCP +\********************************************************************************/ +$mx_images['mx_spacer'] = "$current_template_phpbb_images/spacer.gif"; + +// +// phpBB Graphics - for standalone MX-Publisher installation +/* +$images['icon_quote'] = "$current_template_phpbb_images/{LANG}/icon_quote.gif"; +$images['icon_edit'] = "$current_template_phpbb_images/{LANG}/icon_edit.gif"; +$images['icon_search'] = "$current_template_phpbb_images/{LANG}/icon_search.gif"; +$images['icon_profile'] = "$current_template_phpbb_images/{LANG}/icon_profile.gif"; +$images['icon_pm'] = "$current_template_phpbb_images/{LANG}/icon_pm.gif"; +$images['icon_email'] = "$current_template_phpbb_images/{LANG}/icon_email.gif"; +$images['icon_delpost'] = "$current_template_phpbb_images/icon_delete.gif"; +$images['icon_ip'] = "$current_template_phpbb_images/{LANG}/icon_ip.gif"; +$images['icon_www'] = "$current_template_phpbb_images/{LANG}/icon_www.gif"; +$images['icon_icq'] = "$current_template_phpbb_images/{LANG}/icon_icq_add.gif"; +$images['icon_aim'] = "$current_template_phpbb_images/{LANG}/icon_aim.gif"; +$images['icon_yim'] = "$current_template_phpbb_images/{LANG}/icon_yim.gif"; +$images['icon_msnm'] = "$current_template_phpbb_images/{LANG}/icon_msnm.gif"; +$images['icon_minipost'] = "$current_template_phpbb_images/icon_minipost.gif"; +$images['icon_gotopost'] = "$current_template_phpbb_images/icon_minipost.gif"; +$images['icon_minipost_new'] = "$current_template_phpbb_images/icon_minipost_new.gif"; +$images['icon_latest_reply'] = "$current_template_phpbb_images/icon_latest_reply.gif"; +$images['icon_newest_reply'] = "$current_template_phpbb_images/icon_newest_reply.gif"; + +$images['forum'] = "$current_template_phpbb_images/folder_big.gif"; +$images['forum_new'] = "$current_template_phpbb_images/folder_new_big.gif"; +$images['forum_locked'] = "$current_template_phpbb_images/folder_locked_big.gif"; + +$images['folder'] = "$current_template_phpbb_images/folder.gif"; +$images['folder_new'] = "$current_template_phpbb_images/folder_new.gif"; +$images['folder_hot'] = "$current_template_phpbb_images/folder_hot.gif"; +$images['folder_hot_new'] = "$current_template_phpbb_images/folder_new_hot.gif"; +$images['folder_locked'] = "$current_template_phpbb_images/folder_lock.gif"; +$images['folder_locked_new'] = "$current_template_phpbb_images/folder_lock_new.gif"; +$images['folder_sticky'] = "$current_template_phpbb_images/folder_sticky.gif"; +$images['folder_sticky_new'] = "$current_template_phpbb_images/folder_sticky_new.gif"; +$images['folder_announce'] = "$current_template_phpbb_images/folder_announce.gif"; +$images['folder_announce_new'] = "$current_template_phpbb_images/folder_announce_new.gif"; + +$images['post_new'] = "$current_template_phpbb_images/{LANG}/post.gif"; +$images['post_locked'] = "$current_template_phpbb_images/{LANG}/reply-locked.gif"; +$images['reply_new'] = "$current_template_phpbb_images/{LANG}/reply.gif"; +$images['reply_locked'] = "$current_template_phpbb_images/{LANG}/reply-locked.gif"; + +$images['pm_inbox'] = "$current_template_phpbb_images/msg_inbox.gif"; +$images['pm_outbox'] = "$current_template_phpbb_images/msg_outbox.gif"; +$images['pm_savebox'] = "$current_template_phpbb_images/msg_savebox.gif"; +$images['pm_sentbox'] = "$current_template_phpbb_images/msg_sentbox.gif"; +$images['pm_readmsg'] = "$current_template_phpbb_images/folder.gif"; +$images['pm_unreadmsg'] = "$current_template_phpbb_images/folder_new.gif"; +$images['pm_replymsg'] = "$current_template_phpbb_images/{LANG}/reply.gif"; +$images['pm_postmsg'] = "$current_template_phpbb_images/{LANG}/msg_newpost.gif"; +$images['pm_quotemsg'] = "$current_template_phpbb_images/{LANG}/icon_quote.gif"; +$images['pm_editmsg'] = "$current_template_phpbb_images/{LANG}/icon_edit.gif"; +$images['pm_new_msg'] = ""; +$images['pm_no_new_msg'] = ""; + +$images['Topic_watch'] = ""; +$images['topic_un_watch'] = ""; +$images['topic_mod_lock'] = "$current_template_phpbb_images/topic_lock.gif"; +$images['topic_mod_unlock'] = "$current_template_phpbb_images/topic_unlock.gif"; +$images['topic_mod_split'] = "$current_template_phpbb_images/topic_split.gif"; +$images['topic_mod_move'] = "$current_template_phpbb_images/topic_move.gif"; +$images['topic_mod_delete'] = "$current_template_phpbb_images/topic_delete.gif"; + +$images['voting_graphic'][0] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][1] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][2] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][3] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][4] = "$current_template_phpbb_images/voting_bar.gif"; +*/ + +$images['voting_graphic'][0] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][1] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][2] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][3] = "$current_template_phpbb_images/voting_bar.gif"; +$images['voting_graphic'][4] = "$current_template_phpbb_images/voting_bar.gif"; + +// +// Define common theme colors (if not present in db) +// +$template_config_row['body_bgcolor'] = "FFFFFF"; +$template_config_row['body_text'] = "383B3F"; +$template_config_row['body_link'] = "006699"; +$template_config_row['body_vlink'] = "006699"; +$template_config_row['body_alink'] = "006699"; +$template_config_row['body_hlink'] = "f3a625"; +$template_config_row['tr_color1'] = "F7EEEE"; // row1 +$template_config_row['tr_color2'] = "FBF4F4"; // row2 +$template_config_row['tr_color3'] = "f1f1f1"; // row3 +$template_config_row['th_color1'] = "FFA34F"; // bodyline border color +$template_config_row['th_color2'] = "333333"; // forumline border color +$template_config_row['th_color3'] = "d1d7dc"; // boxes border color +$template_config_row['td_color1'] = "F7EEEE"; // code/quote boxes background +$template_config_row['td_color2'] = "FBF4F4"; // post box background +$template_config_row['fontface1'] = "Verdana,Arial,Helvetica,sans-serif"; +$template_config_row['fontface2'] = "Trebuchet MS"; +$template_config_row['fontface3'] = "Courier, \'Courier New\', sans-serif"; +$template_config_row['fontsize3'] = "12"; +$template_config_row['fontcolor1'] = "383B3F"; // Main font color +$template_config_row['fontcolor2'] = "726363"; +$template_config_row['fontcolor3'] = "FFA34F"; + + +/********************************************************************************\ +| CORE Images +\********************************************************************************/ +// +// Logo +// +$mx_images['mx_logo'] = "$current_template_theme_images/logo.gif"; + +// +// SiteLog +// +$mx_images['mx_dot'] = $images['folder']; + +// +// Online Block +// +$mx_images['mx_who_is_online'] = "$current_template_theme_images/whosonline.gif"; +?> diff --git a/templates/SwiftBlueBeitDina/SwiftBlue.css b/templates/SwiftBlueBeitDina/SwiftBlue.css new file mode 100644 index 0000000..a40417e --- /dev/null +++ b/templates/SwiftBlueBeitDina/SwiftBlue.css @@ -0,0 +1,3477 @@ +/* phpBB3 Style Sheet + -------------------------------------------------------------- + Style name: SwiftBlue + Based on style: SwiftBlue Theme for phpBB2 by BitByBit, http://www.bitbybit.f2s.com + Original author: OryNider, using subsilver2 Theme as a base. + This is an alternative subsilver2 style with purple-blue colors. + -------------------------------------------------------------- +*/ + +/* Layout + ------------ */ +* { + /* Reset browsers default margin, padding and font sizes */ + margin: 0; + padding: 0; +} + +abbr { + text-decoration: none; +} + +html { + font-size: 100%; +} +/* General page style. The scroll bar colours only visible in IE5.5+ */ +body { + background-color: #E3F0FB; + scrollbar-face-color: #BADBF5; + scrollbar-highlight-color: #E3F0FB; + scrollbar-shadow-color: #BADBF5; + scrollbar-3dlight-color: #80BBEC; + scrollbar-arrow-color: #072978; + scrollbar-track-color: #DAECFA; + scrollbar-darkshadow-color: #4B8DF1; + padding-right: 0px; + padding-left: 0px; + background: url("./images/backgroundbluelight.gif"); + padding-bottom: 0px; + margin: 5px 10px 10px; + font-family: Verdana, Geneva, 'Lucida Grande', Arial, Helvetica, sans-serif, droid-serif; + padding-top: 0px; + font-size: 89.5%; + margin: 0; +} + +#wrapheader { + min-height: 120px; + height: auto !important; + height: 120px; +/* background-image: url('./images/background.gif'); + background-repeat: repeat-x;*/ +/* padding: 0 25px 15px 25px;*/ + padding: 0; +} + +#wrapcentre { + margin: 15px 25px 0 25px; +} + +#wrapfooter { + text-align: center; + clear: both; +} + +#wrapnav { + width: 100%; + margin: 0; + background-color: #DAECFA; + border-width: 1px; + border-style: solid; + border-color: #A9B8C2; +} + +#logodesc { + margin-bottom: 5px; + padding: 5px 25px; + background: transparent none 0 0 no-repeat; + border-bottom: 1px solid #D9DFE4; +} + +#menubar { + margin: 0 25px; +} + +#datebar { + margin: 10px 25px 0 25px; +} + +#findbar { + width: 100%; + margin: 0; + padding: 0; + border: 0; +} + +.forumrules { + background-color: #F9CC79; + border-width: 1px; + border-style: solid; + border-color: #BB9860; + padding: 4px; + font-weight: normal; + font-size: 1.1em; + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} + +.forumrules h3 { + color: red; +} + +#pageheader { } +#pagecontent { } +#pagefooter { } + +#poll { } +#postrow { } +#postdata { } + + +/* Text + --------------------- */ +h1 { + color: black; + font-family: "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; + font-weight: bold; + font-size: 1.8em; + text-decoration: none; +} + +h2 { + font-family: Arial, Helvetica, sans-serif; + font-weight: bold; + font-size: 1.5em; + text-decoration: none; + line-height: 120%; +} + +h3 { + font-size: 1.3em; + font-weight: bold; + font-family: Arial, Helvetica, sans-serif; + line-height: 120%; +} + +h4 { + margin: 0; + font-size: 1.1em; + font-weight: bold; +} + +p { + font-size: 1.1em; +} + +p.moderators { + margin: 0; + float: left; + color: black; + font-weight: bold; +} + +.rtl p.moderators { + float: right; +} + +p.linkmcp { + margin: 0; + float: right; + white-space: nowrap; +} + +.rtl p.linkmcp { + float: left; +} + +p.breadcrumbs { + margin: 0; + float: left; + color: black; + font-weight: bold; + white-space: normal; + font-size: 1em; +} + +.rtl p.breadcrumbs { + float: right; +} + +p.datetime { + margin: 0; + float: right; + white-space: nowrap; + font-size: 1em; +} + +.rtl p.datetime { + float: left; +} + +p.searchbar { + padding: 2px 0; + white-space: nowrap; +} + +p.searchbarreg { + margin: 0; + float: right; + white-space: nowrap; +} + +.rtl p.searchbarreg { + float: left; +} + +p.forumdesc { + padding-bottom: 4px; +} + +p.topicauthor { + margin: 1px 0; +} + +p.topicdetails { + margin: 1px 0; +} + +.postreported, .postreported a:visited, .postreported a:hover, .postreported a:link, .postreported a:active { + margin: 1px 0; + color: red; + font-weight:bold; +} + +.postapprove, .postapprove a:visited, .postapprove a:hover, .postapprove a:link, .postapprove a:active { + color: green; + font-weight:bold; +} + +.postapprove img, .postreported img { + vertical-align: bottom; +} + +.postauthor { + color: #000000; +} + +.postdetails { + color: #000000; +} + +/* The content of the posts (body of text) */ +.postbody { + font-size : 15px; + line-height: 14px; + font-family: "Trebuchet MS", "Lucida Grande", Helvetica, Arial, Times, sans-serif; +} + +.postbody li, ol, ul { + margin: 0 0 0 1.5em; +} + +.rtl .postbody li, .rtl ol, .rtl ul { + margin: 0 1.5em 0 0; +} + +.posthilit { + background-color: yellow; +} + +.nav { + color: black; + font-weight: bold; +} + +/* Action-bars (container for post/reply buttons, pagination, etc.) +---------------------------------------- */ + +fa-fw { + width: 1.28571429em; + text-align: center; +} + +.action-bar { + font-size: 11px; + margin: 4px 0; +} + +.forabg + .action-bar { + margin-top: 2em; +} + +.action-bar .button { + margin-right: 5px; + float: left; +} + +.action-bar .button-search { + margin-right: 0; +} + +.action-bar .newtopic, .action-bar .postreply { + border-color: #1C0046; + background-color: #AB95CB; /* Old browsers */ /* FF3.6+ */ + background-image: -webkit-linear-gradient(top, #AB95CB 0%, #1A0040 100%); + background-image: linear-gradient(to bottom, #AB95CB 0%,#1A0040 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#AB95CB', endColorstr='#1A0040',GradientType=0 ); /* IE6-9 */ +} + +.action-bar .newtopic:hover, .action-bar .postreply:hover { + background-color: #1A0040; /* Old browsers */ /* FF3.6+ */ + background-image: -webkit-linear-gradient(top, #1A0040 0%, #AB95CB 100%); + background-image: linear-gradient(to bottom, #1A0040 0%,#AB95CB 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1A0040', endColorstr='#AB95CB',GradientType=0 ); /* IE6-9 */ +} + +.pagination { + padding: 4px; + color: black; + font-size: 1em; + font-weight: bold; +} + +.cattitle { + +} + +/* General text */ +.gen { + margin: 1px 1px; + font-size: 15px; +} + +.genmed { + margin: 1px 1px; + font-size: 14px; +} + +.gensmall { + margin: 1px 1px; + font-size: 11px; +} +.gen,.genmed,.gensmall { color : #000000; } +a.gen,a.genmed,a.gensmall { color: #072978; text-decoration: none; } +a.gen:hover,a.genmed:hover,a.gensmall:hover { color: #041642; text-decoration: underline; } + + +/* The register, login, search etc links at the top of the page */ +.mainmenu { font-size : 11px; color : #000000 } +a.mainmenu { text-decoration: none; color : #072978; } +a.mainmenu:hover{ text-decoration: underline; color : #041642; } + +/* Forum category titles */ +.cattitle { font-weight: bold; font-size: 12px ; letter-spacing: 1px; color : #072978} +a.cattitle { text-decoration: none; color : #072978; } +a.cattitle:hover{ text-decoration: underline; } + +/* Forum title: Text and link to the forums used in: index.php */ +.forumlink { font-weight: bold; font-size: 12px; color : #072978; } +a.forumlink { text-decoration: none; color : #072978; } +a.forumlink:hover{ text-decoration: underline; color : #041642; } + +/* Used for the navigation text, (Page 1,2,3 etc) and the navigation bar when in a forum */ +.nav { font-weight: bold; font-size: 11px; color : #000000;} +a.nav { text-decoration: none; color : #072978; } +a.nav:hover { text-decoration: underline; } + + +/* titles for the topics: could specify viewed link colour too */ +.topictitle,h1,h2 { font-weight: bold; font-size: 11px; color : #000000; } +a.topictitle:link { text-decoration: none; color : #072978; } +a.topictitle:visited { text-decoration: none; color : #072978; } +a.topictitle:hover { text-decoration: underline; color : #041642; } + + +/* Name of poster in viewmsg.php and viewtopic.php and other places */ +.name { font-size : 11px; color : #000000;} + +/* Location, number of posts, post date etc */ +.postdetails { font-size : 10px; color : #000000; } + +a.postlink:link { text-decoration: none; color : #072978 } +a.postlink:visited { text-decoration: none; color : #072978; } +a.postlink:hover { text-decoration: underline; color : #041642} + + +/* Quote & Code blocks */ +.code { + font-family: Courier, 'Courier New', sans-serif; font-size: 11px; color: #006600; + background-color: #FAFAFA; border: #80BBEC; border-style: solid; + border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px +} + +.quote { + font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #444444; line-height: 125%; + background-color: #FAFAFA; border: #80BBEC; border-style: solid; + border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px +} + + +/* Copyright and bottom info */ +.copyright { font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; color: #444444; letter-spacing: -1px;} +a.copyright { color: #444444; text-decoration: none;} +a.copyright:hover { color: #000000; text-decoration: underline;} + + +.copyright { + color: #444; + font-weight: normal; + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} + +.titles { + font-family: "Lucida Grande", Helvetica, Arial, sans-serif; + font-weight: bold; + font-size: 1.3em; + text-decoration: none; +} + +.error { + color: red; +} + +/* Horizontal lists +----------------------------------------*/ +.navbar ul.linklist { + padding: 2px 0; + list-style-type: none; +} + +ul.linklist { + display: block; + margin: 0; +} + +.cp-main .panel { + padding: 5px 10px; +} + +ul.linklist > li { + float: left; + font-size: 1.1em; + line-height: 2.2em; + list-style-type: none; + margin-right: 7px; + width: auto; +} + +ul.linklist > li.rightside, p.rightside, a.rightside { + float: right; + margin-right: 0; + margin-left: 7px; + text-align: right; +} + +ul.navlinks { + border-top: 1px solid transparent; +} + +ul.leftside { + float: left; + margin-left: 0; + margin-right: 5px; + text-align: left; +} + +ul.rightside { + float: right; + margin-left: 5px; + margin-right: -5px; + text-align: right; +} + +ul.linklist li.responsive-menu { + position: relative; + margin: 0 5px 0 0; +} + +.hasjs ul.linklist.leftside, .hasjs ul.linklist.rightside { + max-width: 48%; +} + +.hasjs ul.linklist.fullwidth { + max-width: none; +} + +li.responsive-menu.dropdown-right .dropdown { + left: -9px; +} + +li.responsive-menu.dropdown-left .dropdown { + right: -6px; +} + +ul.linklist .dropdown { + top: 22px; +} + +ul.linklist .dropdown-up .dropdown { + bottom: 18px; + top: auto; +} + +/* Bulletin icons for list items +----------------------------------------*/ +ul.linklist.bulletin > li:before { + display: inline-block; + content: "\2022"; + font-size: inherit; + line-height: inherit; + padding-right: 4px; +} + +ul.linklist.bulletin > li:first-child:before, +ul.linklist.bulletin > li.rightside:last-child:before { + content: none; +} + +ul.linklist.bulletin > li.no-bulletin:before { + content: none; +} + +.responsive-menu:before { + display: none !important; +} + +/* Profile in overall_header.html */ +.header-profile { + display: inline-block; + vertical-align: top; +} + +a.header-avatar, +a.header-avatar:hover { + text-decoration: none; +} + +a.header-avatar img { + margin-bottom: 2px; + max-height: 20px; + vertical-align: middle; + width: auto; +} + +a.header-avatar span:after { + content: '\f0dd'; + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + padding-left: 6px; + padding-top: 2px; + vertical-align: top; +} + +/* -------------------------------------------------------------- /* + $Icons +/* -------------------------------------------------------------- */ + +/* Global module setup +---------------------------------------- */ + +/* Renamed version of .fa class for agnostic usage of icon fonts. + * Just change the name of the font after the 14/1 to the name of + * the font you wish to use. + */ +.icon, +.button .icon, +blockquote cite:before, +.uncited:before { + font-family: FontAwesome; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-variant: normal; + line-height: 1; + display: inline-block; + /* stylelint-disable order/declaration-block-properties-specified-order */ + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + /* stylelint-enable order/declaration-block-properties-specified-order */ + text-rendering: auto; /* optimizelegibility throws things off #1094 */ +} + +.icon:before { + padding-right: 2px; +} + +.button .icon:before { + padding-right: 0; +} + +/* Icon size classes - Default size is 14px, use these for small variations */ + +.icon.icon-xl { + font-size: 20px; +} + +.icon.icon-lg { + font-size: 18px; +} + +.icon.icon-md { + font-size: 12px; +} + +.icon.icon-sm { + font-size: 10px; +} + +/* icon modifiers */ +.icon-tiny { + font-size: 16px; + vertical-align: text-bottom; + width: 12px; + -webkit-transform: scale(0.65, 0.75); + transform: scale(0.65, 0.75); +} + +.arrow-right .icon { + float: right; +} + +.arrow-left:hover .icon { + margin-right: 5px; + margin-left: -5px; +} + +.arrow-left .icon { + float: left; +} + +.arrow-right:hover .icon { + margin-right: -5px; + margin-left: 5px; +} + +.post-buttons .dropdown-contents .icon { + float: right; + margin-left: 5px; +} + +.alert_close .icon:before { + border-radius: 50%; + display: block; + width: 11px; + height: 12px; + padding: 0; +} + +blockquote cite:before, +.uncited:before { + content: "\f10d"; /* Font Awesome quote-left */ +} + +.rtl blockquote cite:before, +.rtl .uncited:before { + content: "\f10e"; /* Font Awesome quote-right */ +} + +/* Dropdown menu +----------------------------------------*/ +.dropdown-container { + position: relative; +} + +.dropdown-container-right { + float: right; +} + +.dropdown-container-left { + float: left; +} + +.nojs .dropdown-container:hover .dropdown { + display: block !important; +} + +.dropdown { + display: none; + position: absolute; + left: 0; + top: 1.2em; + z-index: 2; + border: 1px solid transparent; + border-radius: 5px; + padding: 9px 0 0; + margin-right: -500px; +} + +.dropdown.live-search { + top: auto; +} + +.dropdown-container.topic-tools { + float: left; +} + +.dropdown-up .dropdown { + top: auto; + bottom: 1.2em; + padding: 0 0 9px; +} + +.dropdown-left .dropdown, .nojs .rightside .dropdown { + left: auto; + right: 0; + margin-left: -500px; + margin-right: 0; +} + +.dropdown-button-control .dropdown { + top: 24px; +} + +.dropdown-button-control.dropdown-up .dropdown { + top: auto; + bottom: 24px; +} + +.dropdown .pointer, .dropdown .pointer-inner { + position: absolute; + width: 0; + height: 0; + border-top-width: 0; + border-bottom: 10px solid transparent; + border-left: 10px dashed transparent; + border-right: 10px dashed transparent; + -webkit-transform: rotate(360deg); /* better anti-aliasing in webkit */ + display: block; +} + +.dropdown-up .pointer, .dropdown-up .pointer-inner { + border-bottom-width: 0; + border-top: 10px solid transparent; +} + +.dropdown .pointer { + right: auto; + left: 10px; + top: -1px; + z-index: 3; +} + +.dropdown-up .pointer { + bottom: -1px; + top: auto; +} + +.dropdown-left .dropdown .pointer, .nojs .rightside .dropdown .pointer { + left: auto; + right: 10px; +} + +.dropdown .pointer-inner { + top: auto; + bottom: -11px; + left: -10px; +} + +.dropdown-up .pointer-inner { + bottom: auto; + top: -11px; +} + +.dropdown .dropdown-contents { + z-index: 2; + overflow: hidden; + overflow-y: auto; + border: 1px solid transparent; + border-radius: 5px; + padding: 5px; + position: relative; + max-height: 300px; +} + +.dropdown-contents a { + display: block; + padding: 5px; +} + +.jumpbox { + margin: 5px 0; +} + +.jumpbox .dropdown li { + border-top: 1px solid transparent; +} + +.jumpbox .dropdown-select { + margin: 0; +} + +.jumpbox .dropdown-contents { + padding: 0; + text-decoration: none; +} + +.jumpbox .dropdown-contents li { + padding: 0; +} + +.jumpbox .dropdown-contents a { + margin-right: 20px; + padding: 5px 10px; + text-decoration: none; + width: 100%; +} + +.jumpbox .spacer { + display: inline-block; + width: 0px; +} + +.jumpbox .spacer + .spacer { + width: 20px; +} + +.dropdown-contents a { + display: block; + padding: 5px; +} + +.jumpbox .dropdown-select { + margin: 0; +} + +.jumpbox .dropdown-contents a { + text-decoration: none; +} + +.dropdown li { + display: list-item; + border-top: 1px dotted transparent; + float: none !important; + line-height: normal !important; + font-size: 1em !important; + list-style: none; + margin: 0; + white-space: nowrap; + text-align: left; +} + +.dropdown-contents > li { + padding-right: 15px; +} + +.dropdown-nonscroll > li { + padding-right: 0; +} + +.dropdown li:first-child, .dropdown li.separator + li, .dropdown li li { + border-top: 0; +} + +.dropdown li li:first-child { + margin-top: 4px; +} + +.dropdown li li:last-child { + padding-bottom: 0; +} + +.dropdown li li { + border-top: 1px dotted transparent; + padding-left: 18px; +} + +.wrap .dropdown li, .dropdown.wrap li, .dropdown-extended li { + white-space: normal; +} + +.dropdown li.separator { + border-top: 1px solid transparent; + padding: 0; +} + +.dropdown li.separator:first-child, .dropdown li.separator:last-child { + display: none !important; +} + +/* jQuery popups +---------------------------------------- */ +.phpbb_alert { + background-color: #FFFFFF; + border-color: #999999; +} +.darken { + background-color: #000000; +} + +.loading_indicator { + background-color: #000000; + background-image: url("./images/loading.gif"); +} + +.dropdown-extended ul li { + border-top-color: #B9B9B9; +} + +.dropdown-extended ul li:hover { + background-color: #cfd1f6; + color: #000000; +} + +.dropdown-extended .header, .dropdown-extended .footer { + border-color: #B9B9B9; + color: #000000; +} + +.dropdown-extended .footer { + border-top-style: solid; + border-top-width: 1px; +} + +.dropdown-extended .header { + background-color: #f1f2ff; /* Old browsers */ /* FF3.6+ */ + background-image: -webkit-linear-gradient(top, #f1f2ff 0%, #caceeb 100%); + background-image: linear-gradient(to bottom, #f1f2ff 0%,#caceeb 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f1f2ff', endColorstr='#caceeb',GradientType=0 ); /* IE6-9 */ +} + +.dropdown .pointer { + border-color: #B9B9B9 transparent; +} + +.dropdown .pointer-inner { + border-color: #FFF transparent; +} + +.dropdown-extended .pointer-inner { + border-color: #f1f2ff transparent; +} + +.dropdown .dropdown-contents { + background: #fff; + border-color: #B9B9B9; + box-shadow: 1px 3px 5px rgba(0, 0, 0, 0.2); +} + +.dropdown-up .dropdown-contents { + box-shadow: 1px 0 5px rgba(0, 0, 0, 0.2); +} + +.dropdown li, .dropdown li li { + border-color: #DCDCDC; +} + +.dropdown li.separator { + border-color: #DCDCDC; +} + +/* Notifications +---------------------------------------- */ + +.notification_list p.notification-time { + color: #4d4d77; +} + +li.notification-reported strong, li.notification-disapproved strong { + color: #0d5aa2; +} + +.badge { + background-color: #0d5aa2; + color: #ffffff; +} + +/* Responsive breadcrumbs +----------------------------------------*/ +.breadcrumbs .crumb { + float: left; + font-weight: bold; + word-wrap: normal; +} + +.breadcrumbs .crumb:before { + content: '\2039'; + font-weight: bold; + padding: 0 0.5em; +} + +.breadcrumbs .crumb:first-child:before { + content: none; +} + +.breadcrumbs .crumb a { + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: bottom; + overflow: hidden; +} + +.breadcrumbs.wrapped .crumb a { letter-spacing: -.3px; } +.breadcrumbs.wrapped .crumb.wrapped-medium a { letter-spacing: -.4px; } +.breadcrumbs.wrapped .crumb.wrapped-tiny a { letter-spacing: -.5px; } + +.breadcrumbs .crumb.wrapped-max a { max-width: 120px; } +.breadcrumbs .crumb.wrapped-wide a { max-width: 100px; } +.breadcrumbs .crumb.wrapped-medium a { max-width: 80px; } +.breadcrumbs .crumb.wrapped-small a { max-width: 60px; } +.breadcrumbs .crumb.wrapped-tiny a { max-width: 40px; } + +/* Tables + ------------ */ +/* General font families for common tags */ +font,th,td,p { font-family: Verdana, Arial, Helvetica, sans-serif } +a:link,a:active,a:visited { color : #006699; } +a:hover { text-decoration: underline; color : #DD6900; } +hr { height: 0px; border: solid #80BBEC 0px; border-top-width: 1px;} + + +/* This is the border line & background colour round the entire page */ +.bodyline { + background-color: #E3F0FB; + background-image: url("./images/bodyline.jpg"); + padding-bottom: 40px; + border: 1px #4B8DF1 solid; +} + +/* This is the outline round the main forum tables */ +.forumline { background-color: #E3F0FB; border: 2px #006699 solid; } + +.profile { + padding: 4px; +} + +.tablebg { + background-color: #A9B8C2; +} + +/* Main table cell colours and backgrounds */ + +.row1 { + background-color: #DAECFA; + padding: 4px; +} + +.row2 { + background-color: #BADBF5; + padding: 4px; +} + +.row3 { + background-color: #80BBEC; + padding: 4px; +} + +.row4 { + background-color: #E4E8EB; + padding: 4px; +} + +.col1 { + background-color: #BADBF5; + padding: 4px; +} + +.col2 { + background-color: #DAECFA; + padding: 4px; +} + + +/* + This is for the table cell above the Topics, Post & Last posts on the index.php page + By default this is the fading out gradiated silver background. + However, you could replace this with a bitmap specific for each forum +*/ +.rowpic { + background-color: #E3F0FB; + background-image: url('./images/cellpic2.jpg'); + background-repeat: repeat-y; +} + +.catdiv { + height: 28px; + background: white url('./images/cellpic2.jpg') repeat-y scroll top left; +} +.rtl .catdiv { + background: white url('./images/cellpic2_rtl.jpg') repeat-y scroll top right; +} + +/* Header cells - the blue and silver gradient backgrounds */ +th { + color: #FFA34F; font-size: 11px; font-weight : bold; + background-color: #006699; height: 25px; + background-image: url('./images/cellpic3.gif'); +} + +.cat { + height: 28px; + background-color: #C7D0D7; + text-indent: 4px; +} + + +.cat,.catHead,.catSides,.catLeft,.catRight,.catBottom { + background-image: url('./images/cellpic1.gif'); + background-color:#80BBEC; border: #E3F0FB; border-style: solid; height: 28px; +} + + +/* + Setting additional nice inner borders for the main table cells. + The names indicate which sides the border will be on. + Don't worry if you don't understand this, just ignore it :-) +*/ +td.cat,td.catHead,td.catBottom { + height: 29px; + border-width: 0px 0px 0px 0px; +} +th.thHead,th.thSides,th.thTop,th.thLeft,th.thRight,th.thBottom,th.thCornerL,th.thCornerR { + font-weight: bold; border: #E3F0FB; border-style: solid; height: 28px; } +td.row3Right,td.spaceRow { + background-color: #80BBEC; border: #E3F0FB; border-style: solid; } + +th.thHead,td.catHead { font-size: 12px; border-width: 1px 1px 0px 1px; } +th.thSides,td.catSides,td.spaceRow { border-width: 0px 1px 0px 1px; } +th.thRight,td.catRight,td.row3Right { border-width: 0px 1px 0px 0px; } +th.thLeft,td.catLeft { border-width: 0px 0px 0px 1px; } +th.thBottom,td.catBottom { border-width: 0px 1px 1px 1px; } +th.thTop { border-width: 1px 0px 0px 0px; } +th.thCornerL { border-width: 1px 0px 0px 1px; } +th.thCornerR { border-width: 1px 1px 0px 0px; } + +.spacer { + background-color: #80BBEC; +} + +hr { + height: 1px; + border-width: 0; + background-color: #80BBEC; + color: #80BBEC; +} + +.legend { + text-align:center; + margin: 0 auto; +} + +/* Links + ------------ */ + +a:link { + color: #006597; + text-decoration: none; +} + +a:active, +a:visited { + color: #005784; + text-decoration: none; +} + +a:hover { + color: #D46400; + text-decoration: underline; +} + +a.forumlink { + color: #069; + font-weight: bold; + font-family: "Lucida Grande", Helvetica, Arial, sans-serif; + font-size: 13px; +} + +a.topictitle { + margin: 1px 0; + font-family: "Lucida Grande", Helvetica, Arial, sans-serif; + font-weight: bold; + font-size: 13px; +} + +a.topictitle:visited { + color: #5493B4; + text-decoration: none; +} + +th a, +th a:visited { + color: #FFA34F !important; + text-decoration: none; +} + +th a:hover { + text-decoration: underline; +} + + +/* Form Elements + ------------ */ +form { + margin: 0; + padding: 0; + border: 0; +} + +input { + color: #333333; + font-family: "Lucida Grande", Verdana, Helvetica, sans-serif; + font-size: 12px; + font-weight: normal; + padding: 1px; + border: 1px solid #A9B8C2; + background-color: #FAFAFA; +} + +textarea { + background-color: #FAFAFA; + color: #333333; + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 15px; + font-weight: normal; + border: 1px solid #A9B8C2; + padding: 2px; +} + +select { + color: #333333; + background-color: #FAFAFA; + font-family: "Lucida Grande", Verdana, Helvetica, sans-serif; + font-size: 1.1em; + font-weight: normal; + border: 1px solid #A9B8C2; + padding: 1px; +} + +option { + padding: 0 1em 0 0; +} + +option.disabled-option { + color: graytext; +} + +.rtl option { + padding: 0 0 0 1em; +} + +input.radio { + border: none; + background-color: transparent; +} + +.post { + background-color: #DAECFA; + border-style: solid; + border-width: 1px; +} + +.btnbbcode { + color: #000000; + font-weight: normal; + font-size: 0.8em; + font-family: "Lucida Grande", Verdana, Helvetica, sans-serif; + background-color: #DAECFA; + border: 1px solid #666666; +} + +.btnmain { + font-weight: bold; + background-color: #DAECFA; + border: 1px solid #A9B8C2; + cursor: pointer; + padding: 1px 3px; + font-size: 0.8em; +} + +.btnlite { + font-weight: normal; + background-color: #DAECFA; + border: 1px solid #A9B8C2; + cursor: pointer; + padding: 1px 3px; + font-size: 0.8em; +} + +.btnfile { + font-weight: normal; + background-color: #DAECFA; + border: 1px solid #A9B8C2; + padding: 1px 3px; + font-size: 0.8em; +} + +.helpline { + background-color: #BADBF5; + border-style: none; +} + + +/* BBCode + ------------ */ +.quotetitle, .attachtitle { + margin: 10px 5px 0 5px; + padding: 4px; + border-width: 1px 1px 0 1px; + border-style: solid; + border-color: #A9B8C2; + color: #333333; + background-color: #A9B8C2; + font-size: 0.85em; + font-weight: bold; +} + +.quotetitle .quotetitle { + font-size: 1em; +} + +.quotecontent, .attachcontent { + margin: 0 5px 10px 5px; + padding: 5px; + border-color: #A9B8C2; + border-width: 0 1px 1px 1px; + border-style: solid; + font-weight: normal; + font-size: 1em; + line-height: 1.4em; + font-family: "Lucida Grande", "Trebuchet MS", Helvetica, Arial, sans-serif; + background-color: #FAFAFA; + color: #4B5C77; +} + +.attachcontent { + font-size: 0.85em; +} + +.codetitle { + margin: 10px 5px 0 5px; + padding: 2px 4px; + border-width: 1px 1px 0 1px; + border-style: solid; + border-color: #A9B8C2; + color: #333333; + background-color: #A9B8C2; + font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; + font-size: 0.8em; +} + +.codecontent { + direction: ltr; + margin: 0 5px 10px 5px; + padding: 5px; + border-color: #A9B8C2; + border-width: 0 1px 1px 1px; + border-style: solid; + font-weight: normal; + color: #006600; + font-size: 0.85em; + font-family: Monaco, 'Courier New', monospace; + background-color: #FAFAFA; +} + +.postimage { + max-width: 100%; +} + +.syntaxbg { + color: #E3F0FB; +} + +.syntaxcomment { + color: #FF8000; +} + +.syntaxdefault { + color: #0000BB; +} + +.syntaxhtml { + color: #000000; +} + +.syntaxkeyword { + color: #007700; +} + +.syntaxstring { + color: #DD0000; +} + + +/* Private messages + ------------------ */ +.pm_marked_colour { + background-color: #000000; +} + +.pm_replied_colour { + background-color: #A9B8C2; +} + +.pm_friend_colour { + background-color: #007700; +} + +.pm_foe_colour { + background-color: #DD0000; +} + + +/* Misc + ------------ */ +img { + border: none; +} + +.sep { + color: black; + background-color: #FFA34F; +} + +table.colortable td { + padding: 0; +} + +pre { + font-size: 1.1em; + font-family: Monaco, 'Courier New', monospace; +} + +.nowrap { + white-space: nowrap; +} + +.username-coloured { + font-weight: bold; +} + +.emoji { + min-height: 18px; + min-width: 18px; + height: 1em; + width: 1em; +} + +/* The largest text used in the index page title and toptic title etc. */ +.maintitle,h1,h2 { + font-weight: bold; font-size: 22px; font-family: "Trebuchet MS",Verdana, Arial, Helvetica, sans-serif; + text-decoration: none; line-height : 120%; color : #000000; +} + + +/* Form elements */ +input,textarea, select { + color : #000000; + font: normal 11px Verdana, Arial, Helvetica, sans-serif; + border-color : #000000; +} + +/* The text input fields background colour */ +input.post, textarea.post, select { + background-color : #E3F0FB; +} + +input { text-indent : 2px; } + +/* The buttons used for bbCode styling in message post */ +input.button { + background-color : #DAECFA; + color : #000000; + font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; +} + +/* The main submit button option */ +input.mainoption { + background-color : #FAFAFA; + font-weight : bold; +} + +/* None-bold submit button */ +input.liteoption { + background-color : #FAFAFA; + font-weight : normal; +} + +/* This is the line in the posting page which shows the rollover + help line. This is actually a text box, but if set to be the same + colour as the background no one will know ;) +*/ +.helpline { background-color: #BADBF5; border-style: none; } + + +/* Former imageset */ +span.imageset { + display: inline-block; + background: transparent none 0 0 no-repeat; + margin: 0; + padding: 0; + width: 0; + height: 0; + overflow: hidden; +} +a.imageset { + text-decoration: none !important; +} + +/* Global imageset items */ +.imageset.site_logo { + background-image: url("./images/site_logo.png"); + padding-top: 0px; + padding-left: 240px; + padding-right: 0px; + padding-bottom: 100px; +} +.imageset.upload_bar { + background-image: url("./images/upload_bar.gif"); + padding-left: 280px; + padding-top: 16px; +} +.imageset.poll_left { + background-image: url("./images/poll_left.gif"); + padding-left: 4px; + padding-top: 12px; +} +.imageset.poll_center { + background-image: url("./images/poll_center.gif"); + padding-left: 1px; + padding-top: 12px; +} +.imageset.poll_right { + background-image: url("./images/poll_right.gif"); + padding-left: 4px; + padding-top: 12px; +} +.imageset.forum_link { + background-image: url("./images/forum_link.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_read { + background-image: url("./images/forum_read.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_read_locked { + background-image: url("./images/forum_read_locked.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_read_subforum { + background-image: url("./images/forum_read_subforum.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_unread { + background-image: url("./images/forum_unread.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_unread_locked { + background-image: url("./images/forum_unread_locked.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.forum_unread_subforum { + background-image: url("./images/forum_unread_subforum.gif"); + padding-left: 46px; + padding-top: 25px; +} +.imageset.topic_moved { + background-image: url("./images/topic_moved.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read { + background-image: url("./images/topic_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_mine { + background-image: url("./images/topic_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_hot { + background-image: url("./images/topic_read_hot.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_hot_mine { + background-image: url("./images/topic_read_hot_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_locked { + background-image: url("./images/topic_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_read_locked_mine { + background-image: url("./images/topic_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread { + background-image: url("./images/topic_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_mine { + background-image: url("./images/topic_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_hot { + background-image: url("./images/topic_unread_hot.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_hot_mine { + background-image: url("./images/topic_unread_hot_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_locked { + background-image: url("./images/topic_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.topic_unread_locked_mine { + background-image: url("./images/topic_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read { + background-image: url("./images/sticky_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read_mine { + background-image: url("./images/sticky_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read_locked { + background-image: url("./images/sticky_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_read_locked_mine { + background-image: url("./images/sticky_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread { + background-image: url("./images/sticky_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread_mine { + background-image: url("./images/sticky_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread_locked { + background-image: url("./images/sticky_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.sticky_unread_locked_mine { + background-image: url("./images/sticky_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read { + background-image: url("./images/announce_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read_mine { + background-image: url("./images/announce_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read_locked { + background-image: url("./images/announce_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_read_locked_mine { + background-image: url("./images/announce_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread { + background-image: url("./images/announce_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread_mine { + background-image: url("./images/announce_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread_locked { + background-image: url("./images/announce_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.announce_unread_locked_mine { + background-image: url("./images/announce_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read { + background-image: url("./images/global_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read_mine { + background-image: url("./images/global_read_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read_locked { + background-image: url("./images/global_read_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_read_locked_mine { + background-image: url("./images/global_read_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread { + background-image: url("./images/global_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread_mine { + background-image: url("./images/global_unread_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread_locked { + background-image: url("./images/global_unread_locked.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.global_unread_locked_mine { + background-image: url("./images/global_unread_locked_mine.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.pm_read { + background-image: url("./images/topic_read.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.pm_unread { + background-image: url("./images/topic_unread.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.icon_post_target { + background-image: url("./images/icon_post_target.gif"); + padding-left: 12px; + padding-top: 9px; +} +.imageset.icon_post_target_unread { + background-image: url("./images/icon_post_target_unread.gif"); + padding-left: 12px; + padding-top: 9px; +} +.imageset.icon_topic_attach { + background-image: url("./images/icon_topic_attach.gif"); + padding-left: 14px; + padding-top: 18px; +} +.imageset.icon_topic_latest { + background-image: url("./images/icon_topic_latest.gif"); + padding-left: 18px; + padding-top: 9px; +} +.imageset.icon_topic_newest { + background-image: url("./images/icon_topic_newest.gif"); + padding-left: 18px; + padding-top: 9px; +} +.imageset.icon_topic_reported { + background-image: url("./images/icon_topic_reported.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.icon_topic_unapproved { + background-image: url("./images/icon_topic_unapproved.gif"); + padding-left: 19px; + padding-top: 18px; +} +.imageset.icon_topic_deleted { + background-image: url("./images/icon_topic_deleted.gif"); + padding-left: 14px; + padding-top: 14px; +} + + +/* English images for fallback */ +.imageset.phpbb_aol-icon, .imageset.icon_contact_aim { + background-image: url("./en/icon_contact_aim.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_contact_email { + background-image: url("./en/icon_contact_email.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_icq-icon, .imageset.icon_contact_icq { + background-image: url("./en/icon_contact_icq.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_contact_jabber { + background-image: url("./en/icon_contact_jabber.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_wlm-icon, .imageset.icon_contact_msnm { + background-image: url("./en/icon_contact_msnm.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_contact_pm { + background-image: url("./en/icon_contact_pm.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_yahoo-icon, .imageset.icon_contact_yahoo { + background-image: url("./en/icon_contact_yahoo.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.phpbb_website-icon, .imageset.icon_contact_www { + background-image: url("./en/icon_contact_www.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_post_delete { + background-image: url("./en/icon_post_delete.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.icon_post_edit { + background-image: url("./en/icon_post_edit.gif"); + padding-left: 90px; + padding-top: 20px; +} +.imageset.icon_post_info { + background-image: url("./en/icon_post_info.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.icon_post_quote { + background-image: url("./en/icon_post_quote.gif"); + padding-left: 90px; + padding-top: 20px; +} +.imageset.icon_post_report { + background-image: url("./en/icon_post_report.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.icon_user_online { + background-image: url("./en/icon_user_online.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_offline { + background-image: url("./en/icon_user_offline.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_profile { + background-image: url("./en/icon_user_profile.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_search { + background-image: url("./en/icon_user_search.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_warn { + background-image: url("./en/icon_user_warn.gif"); + padding-left: 20px; + padding-top: 20px; +} +.imageset.button_pm_new { + background-image: url("./en/button_pm_new.gif"); + padding-left: 97px; + padding-top: 27px; +} +.imageset.button_pm_reply { + background-image: url("./en/button_pm_reply.gif"); + padding-left: 90px; + padding-top: 20px; +} +.imageset.button_topic_locked { + background-image: url("./en/button_topic_locked.gif"); + padding-left: 97px; + padding-top: 27px; +} +.imageset.button_topic_new { + background-image: url("./en/button_topic_new.gif"); + padding-left: 97px; + padding-top: 27px; +} +.imageset.button_topic_reply { + background-image: url("./en/button_topic_reply.gif"); + padding-left: 97px; + padding-top: 27px; +} + +/* Responsive breadcrumbs +----------------------------------------*/ +.rtl .breadcrumbs .crumb { + float: right; +} + +/* Table styles +----------------------------------------*/ +table.table1 { + width: 100%; +} + +.ucp-main table.table1 { + padding: 2px; +} + +table.table1 thead th { + font-weight: normal; + text-transform: uppercase; + line-height: 1.3em; + font-size: 1em; + padding: 0 0 4px 3px; +} + +table.table1 thead th span { + padding-left: 7px; +} + +table.table1 tbody tr { + border: 1px solid transparent; +} + +table.table1 td { + font-size: 1.1em; +} + +table.table1 tbody td { + padding: 5px; + border-top: 1px solid transparent; +} + +table.table1 tbody th { + padding: 5px; + border-bottom: 1px solid transparent; + text-align: left; +} + +/* Specific column styles */ +table.table1 .name { text-align: left; } +table.table1 .center { text-align: center; } +table.table1 .reportby { width: 15%; } +table.table1 .posts { text-align: center; width: 7%; } +table.table1 .joined { text-align: left; width: 15%; } +table.table1 .active { text-align: left; width: 15%; } +table.table1 .mark { text-align: center; width: 7%; } +table.table1 .info { text-align: left; width: 30%; } +table.table1 .info div { width: 100%; white-space: normal; overflow: hidden; } +table.table1 .autocol { line-height: 2em; white-space: nowrap; } +table.table1 thead .autocol { padding-left: 1em; } + +table.table1 span.rank-img { + float: right; + width: auto; +} + +table.info td { + padding: 3px; +} + +table.info tbody th { + padding: 3px; + text-align: right; + vertical-align: top; + font-weight: normal; +} + +table.table1 thead th { + color: #FFFFFF; +} + +table.table1 tbody tr { + border-color: #BFC1CF; +} + +table.table1 tbody tr:hover, table.table1 tbody tr.hover { + background-color: #CFE1F6; + color: #000; +} + +table.table1 td { + color: #536482; +} + +table.table1 tbody td { + border-top-color: #FAFAFA; +} + +table.table1 tbody th { + border-bottom-color: #000000; + color: #333333; + background-color: #FFFFFF; +} + +table.info tbody th { + color: #000000; +} + +table.table1 td { + color: #536482; +} + +table.table1 td { + font-size: 1.1em; +} + +table.fixed-width-table { + table-layout: fixed; +} + +.rtl table.table1 thead th { + padding: 0 3px 4px 0; +} + +.rtl table.table1 thead th span { + padding-left: 0; + padding-right: 7px; +} + +.rtl table.table1 tbody th { + text-align: right; +} + +/* Specific column styles */ +.rtl table.table1 .name { text-align: right; } +.rtl table.table1 .joined { text-align: right; } +.rtl table.table1 .active { text-align: right; } +.rtl table.table1 .info { text-align: right; } +.rtl table.table1 thead .autocol { padding-left: 0; padding-right: 1em; } + +/* Specific column styles */ +.ltr table.table1 .name { text-align: left; } +.ltr table.table1 .joined { text-align: left; } +.ltr table.table1 .active { text-align: left; } +.ltr table.table1 .info { text-align: left; } +.ltr table.table1 thead .autocol { padding-right: 0; padding-left: 1em; } + +.rtl table.table1 span.rank-img { + float: left; +} + +.rtl table.info tbody th { + text-align: left; +} + +.rtl .forumbg table.table1 { + margin: 0 -1px -1px -2px; +} + +.forumbg table.table1 { + margin: 0; +} + +.forumbg-table > .inner { + margin: 0 -1px; +} + +.color_palette_placeholder table { + border-collapse: separate; + border-spacing: 1px; +} + + /* Control Panel Styles +---------------------------------------- */ + + +/* Main CP box +----------------------------------------*/ +.cp-menu { + float:left; + width: 19%; + margin-top: 1em; + margin-bottom: 5px; +} + +.cp-main { + float: left; + width: 81%; +} + +.cp-main .content { + padding: 0; +} + +.panel-container .panel p { + font-size: 1.1em; +} + +.panel-container .panel ol { + margin-left: 2em; + font-size: 1.1em; +} + +.panel-container .panel li.row { + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; +} + +ul.cplist { + margin-bottom: 5px; + border-top: 1px solid transparent; +} + +.panel-container .panel li.header dd, .panel-container .panel li.header dt { + margin-bottom: 2px; +} + +.panel-container table.table1 { + margin-bottom: 1em; +} + +.panel-container table.table1 thead th { + font-weight: bold; + border-bottom: 1px solid transparent; + padding: 5px; +} + +.panel-container table.table1 tbody th { + font-style: italic; + background-color: transparent !important; + border-bottom: none; +} + +.cp-main .pm-message { + border: 1px solid transparent; + margin: 10px 0; + width: auto; + float: none; +} + +.pm-message h2 { + padding-bottom: 5px; +} + +.cp-main .postbody h3, .cp-main .box2 h3 { + margin-top: 0; +} + +.panel-container .postbody p.author { + font-size: 1.1em; +} + +.cp-main .buttons { + margin-left: 0; +} + +.cp-main ul.linklist { + margin: 0; +} + +/* MCP Specific tweaks */ +.mcp-main .postbody { + width: 100%; +} + +.tabs-container h2 { + float: left; + margin-bottom: 0px; +} + +/* CP tabs shared +----------------------------------------*/ +.tabs, .minitabs { + line-height: normal; +} + +.tabs > ul, .minitabs > ul { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} + +.tabs .tab, .minitabs .tab { + display: block; + float: left; + font-size: 1em; + font-weight: bold; + line-height: 1.4em; +} + +.tabs .tab > a, .minitabs .tab > a { + display: block; + padding: 5px 9px; + position: relative; + text-decoration: none; + white-space: nowrap; + cursor: pointer; +} + +/* CP tabbed menu +----------------------------------------*/ +.tabs { + margin: 20px 0 0 7px; +} + +.tabs .tab > a { + border: 1px solid transparent; + border-radius: 4px 4px 0 0; + margin: 1px 1px 0 0; +} + +.tabs .activetab > a { + margin-top: 0; + padding-bottom: 7px; +} + +/* Mini tabbed menu used in MCP +----------------------------------------*/ +.minitabs { + float: right; + margin: 15px 7px 0 0; + max-width: 50%; +} + +.minitabs .tab { + float: right; +} + +.minitabs .tab > a { + border-radius: 5px 5px 0 0; + margin-left: 2px; +} + +.minitabs .tab > a:hover { + text-decoration: none; +} + +/* Responsive tabs +----------------------------------------*/ +.responsive-tab { + position: relative; +} + +.responsive-tab > a.responsive-tab-link { + display: block; + font-size: 1.6em; + position: relative; + width: 16px; + line-height: 0.9em; + text-decoration: none; +} + +.responsive-tab .responsive-tab-link:before { + content: ''; + position: absolute; + left: 10px; + top: 7px; + height: .125em; + width: 14px; + border-bottom: 0.125em solid transparent; + border-top: 0.375em double transparent; +} + +.tabs .dropdown, .minitabs .dropdown { + top: 20px; + margin-right: -2px; + font-size: 1.1em; + font-weight: normal; +} + +.minitabs .dropdown { + margin-right: -4px; +} + +.tabs .dropdown-up .dropdown, .minitabs .dropdown-up .dropdown { + bottom: 20px; + top: auto; +} + +.tabs .dropdown li { + text-align: right; +} + +.minitabs .dropdown li { + text-align: left; +} + +/* UCP navigation menu +----------------------------------------*/ +/* Container for sub-navigation list */ +.navigation { + width: 100%; + padding-top: 36px; +} + +.navigation ul { + list-style: none; +} + +/* Default list state */ +.navigation li { + display: inline; + font-weight: bold; + margin: 1px 0; + padding: 0; +} + +/* Link styles for the sub-section links */ +.navigation a { + display: block; + padding: 5px; + margin: 1px 0; + text-decoration: none; +} + +.navigation a:hover { + text-decoration: none; +} + +/* Preferences pane layout +----------------------------------------*/ +.cp-main h2 { + border-bottom: none; + padding: 0; + margin-left: 10px; +} + +/* Friends list */ +.cp-mini { + margin: 10px 15px 10px 5px; + max-height: 200px; + overflow-y: auto; + padding: 5px 10px; + border-radius: 7px; +} + +dl.mini dt { + font-weight: bold; +} + +dl.mini dd { + padding-top: 4px; +} + +.friend-online { + font-weight: bold; +} + +.friend-offline { + font-style: italic; +} + +/* PM Styles +----------------------------------------*/ +/* Defined rules list for PM options */ +ol.def-rules { + padding-left: 0; +} + +ol.def-rules li { + line-height: 180%; + padding: 1px; +} + +/* PM marking colours */ +.pmlist li.bg1 { + padding: 0 3px; +} + +.pmlist li.bg2 { + padding: 0 3px; +} + +.pmlist li.pm_message_reported_colour, .pm_message_reported_colour { + border-left-color: transparent; + border-right-color: transparent; +} + +.pmlist li.pm_marked_colour, .pm_marked_colour, +.pmlist li.pm_replied_colour, .pm_replied_colour, +.pmlist li.pm_friend_colour, .pm_friend_colour, +.pmlist li.pm_foe_colour, .pm_foe_colour { + padding: 0; + border: solid 3px transparent; + border-width: 0 3px; +} + +.pm-legend { + border-left-width: 10px; + border-left-style: solid; + border-right-width: 0; + margin-bottom: 3px; + padding-left: 3px; +} + +/* Avatar gallery */ +.gallery label { + position: relative; + float: left; + margin: 10px; + padding: 5px; + width: auto; + border: 1px solid transparent; + text-align: center; +} + +/* Responsive *CP navigation +----------------------------------------*/ +@media only screen and (max-width: 900px), only screen and (max-device-width: 900px) +{ + .nojs .tabs a span, .nojs .minitabs a span { + max-width: 40px; + overflow: hidden; + text-overflow: ellipsis; + letter-spacing: -.5px; + } + + .cp-menu, .navigation, .cp-main { + float: none; + width: auto; + margin: 0; + } + + .navigation { + padding: 0; + margin: 0 auto; + max-width: 320px; + } + + .navigation a { + background-image: none; + } + + .navigation li:first-child a { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + } + + .navigation li:last-child a { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } +} + +/* Misc layout styles +---------------------------------------- */ +/* column[1-2] styles are containers for two column layouts */ +.rtl .column1 { + float: right; + clear: right; +} + +.rtl .column2 { + float: left; + clear: left; +} + +/* General classes for placing floating blocks */ +.rtl .left-box { + float: right; + text-align: right; +} + +.rtl .right-box { + float: left; + text-align: left; +} + +.rtl dl.details dt { + float: right; + clear: right; + text-align: left; +} + +.rtl dl.details dd { + margin-right: 0; + margin-left: 0; + padding-right: 5px; + padding-left: 0; + float: right; +} + +*:first-child+html dl.details dd { + margin-right: 30%; + float: none; +} + +* html dl.details dd { + margin-right: 30%; + float: none; +} + +/* RTL imageset entries */ +.rtl .imageset.site_logo { + padding-right: 170px; + padding-left: 0; +} +.rtl .imageset.upload_bar { + padding-right: 280px; + padding-left: 0; +} +.rtl .imageset.poll_left, .rtl .imageset.poll_right { + padding-right: 4px; + padding-left: 0; +} +.rtl .imageset.poll_center { + padding-right: 1px; + padding-left: 0; +} +.rtl .imageset.forum_link, .rtl .imageset.forum_read, .rtl .imageset.forum_read_locked, .rtl .imageset.forum_read_subforum, .rtl .imageset.forum_unread, .rtl .imageset.forum_unread_locked, .rtl .imageset.forum_unread_subforum { + padding-right: 46px; + padding-left: 0; +} +.rtl .imageset.topic_moved, .rtl .imageset.topic_read, .rtl .imageset.topic_read_mine, .rtl .imageset.topic_read_hot, .rtl .imageset.topic_read_hot_mine, .rtl .imageset.topic_read_locked, .rtl .imageset.topic_read_locked_mine, .rtl .imageset.topic_unread, .rtl .imageset.topic_unread_mine, .rtl .imageset.topic_unread_hot, .rtl .imageset.topic_unread_hot_mine, .rtl .imageset.topic_unread_locked, .rtl .imageset.topic_unread_locked_mine, .rtl .imageset.sticky_read, .rtl .imageset.sticky_read_mine, .rtl .imageset.sticky_read_locked, .rtl .imageset.sticky_read_locked_mine, .rtl .imageset.sticky_unread, .rtl .imageset.sticky_unread_mine, .rtl .imageset.sticky_unread_locked, .rtl .imageset.sticky_unread_locked_mine, .rtl .imageset.announce_read, .rtl .imageset.announce_read_mine, .rtl .imageset.announce_read_locked, .rtl .imageset.announce_read_locked_mine, .rtl .imageset.announce_unread, .rtl .imageset.announce_unread_mine, .rtl .imageset.announce_unread_locked, .rtl .imageset.announce_unread_locked_mine, .rtl .imageset.global_read, .rtl .imageset.global_read_mine, .rtl .imageset.global_read_locked, .rtl .imageset.global_read_locked_mine, .rtl .imageset.global_unread, .rtl .imageset.global_unread_mine, .rtl .imageset.global_unread_locked, .rtl .imageset.global_unread_locked_mine, .rtl .imageset.pm_read, .rtl .imageset.pm_unread, .rtl .imageset.icon_topic_reported, .rtl .imageset.icon_topic_unapproved { + padding-right: 19px; + padding-left: 0; +} +.rtl .imageset.icon_post_target, .rtl .imageset.icon_post_target_unread { + padding-right: 12px; + padding-left: 0; +} +.rtl .imageset.icon_topic_attach { + padding-right: 14px; + padding-left: 0; +} +.rtl .imageset.icon_topic_latest, .rtl .imageset.icon_topic_newest { + padding-right: 18px; + padding-left: 0; +} + +#notification_list { + display: none; + position: absolute; + width: 310px; + z-index: 1; + box-shadow: 3px 3px 5px darkgray; +} + +#notification_list .notification_scroll { + max-height: 350px; + overflow-y: auto; + overflow-x: hidden; +} + +#notification_list table { + width: 100%; +} + +#notification_list .notification_title { + padding: 3px; +} + +#notification_list .notification_title:after { + clear: both; + content: ''; + display: block; +} + +#notification_list .header { + padding: 5px; + font-weight: bold; + border: 1px solid #A9B8C2; + border-bottom: 0; +} + +#notification_list > .header > .header_settings { + float: right; + font-weight: normal; + text-transform: none; +} + +#notification_list .header:after { + content: ''; + display: table; + clear: both; +} + +#notification_list .footer { + text-align: center; + font-size: 1.2em; + border: 1px solid #A9B8C2; + border-top: 0; +} + +.notification_list img { + max-width: 50px; + max-height: 50px; +} + +#notification_list .footer > a { + display: block; +} + +#notification_list .notification-time { + font-size: 0.9em; + float: right; +} + +.notification_list .notifications_time { + font-size: 0.8em; +} + + +/* Responsive Design +---------------------------------------- */ + +@media (max-width: 320px) { + select, .inputbox { + max-width: 240px; + } +} + +/* Notifications list +----------------------------------------*/ +@media (max-width: 350px) { + .dropdown-extended .dropdown-contents { + width: auto; + } +} + +@media (max-width: 430px) { + .action-bar .search-box .inputbox { + width: 120px; + } + + .section-viewtopic .search-box .inputbox { + width: 57px; + } + + .action-bar .search-box .inputbox ::-moz-placeholder { + content: "Search..."; + } + + .action-bar .search-box .inputbox :-ms-input-placeholder { + content: "Search..."; + } + + .action-bar .search-box .inputbox ::-webkit-input-placeholder { + content: "Search..."; + } +} + +@media (max-width: 500px) { + dd label { + white-space: normal; + } + + select, .inputbox { + max-width: 260px; + } + + .captcha-panel dd.captcha { + margin-left: 0; + } + + .captcha-panel dd.captcha-image img { + width: 100%; + } + + dl.details dt, dl.details dd { + width: auto; + float: none; + text-align: left; + } + + dl.details dd { + margin-left: 20px; + } + + p.responsive-center { + float: none; + text-align: center; + margin-bottom: 5px; + } + + .action-bar > div { + margin-bottom: 5px; + } + + .action-bar > .pagination { + float: none; + clear: both; + padding-bottom: 1px; + text-align: center; + } + + .action-bar > .pagination li.page-jump { + margin: 0 2px; + } + + p.jumpbox-return { + display: none; + } + + .display-options > label:nth-child(1) { + display: block; + margin-bottom: 5px; + } + + .attach-controls { + margin-top: 5px; + width: 100%; + } + + .quick-links .dropdown-trigger span { + display: none; + } +} + +@media (max-width: 550px) { + ul.topiclist.forums dt { + margin-right: 0; + } + + ul.topiclist.forums dt .list-inner { + margin-right: 0; + } + + ul.topiclist.forums dd.lastpost { + display: none; + } +} + +@media (max-width: 700px) { + .responsive-hide { display: none !important; } + .responsive-show { display: block !important; } + .responsive-show-inline { display: inline !important; } + .responsive-show-inline-block { display: inline-block !important; } + + /* Content wrappers + ----------------------------------------*/ + html { + height: auto; + } + + body { + padding: 0; + } + + .wrap { + border: none; + border-radius: 0; + margin: 0; + min-width: 290px; + padding: 0 5px; + } + + /* Common block wrappers + ----------------------------------------*/ + .headerbar, .navbar, .forabg, .forumbg, .post, .panel { + border-radius: 0; + margin-left: -5px; + margin-right: -5px; + } + + .cp-main .forabg, .cp-main .forumdb, .cp-main .post, .cp-main .panel { + border-radius: 7px; + } + + /* Logo block + ----------------------------------------*/ + .site-description { + float: none; + width: auto; + text-align: center; + } + + .logo { + /* change display value to inline-block to show logo */ + display: none; + float: none; + padding: 10px; + } + + .site-description h1, .site-description p { + text-align: inherit; + float: none; + margin: 5px; + line-height: 1.2em; + overflow: hidden; + text-overflow: ellipsis; + } + + .site-description p, .search-header { + display: none; + } + + /* Navigation + ----------------------------------------*/ + .headerbar + .navbar { + margin-top: -5px; + } + + /* Search + ----------------------------------------*/ + .responsive-search { display: block !important; } + + /* .topiclist lists + ----------------------------------------*/ + li.header dt { + text-align: center; + text-transform: none; + line-height: 1em; + font-size: 1.2em; + padding-bottom: 4px; + } + + ul.topiclist li.header dt, ul.topiclist li.header dt .list-inner { + margin-right: 0 !important; + padding-right: 0; + } + + ul.topiclist li.header dd { + display: none !important; + } + + ul.topiclist dt, ul.topiclist dt .list-inner, + ul.topiclist.missing-column dt, ul.topiclist.missing-column dt .list-inner, + ul.topiclist.two-long-columns dt, ul.topiclist.two-long-columns dt .list-inner, + ul.topiclist.two-columns dt, ul.topiclist.two-columns dt .list-inner { + margin-right: 0; + } + + ul.topiclist dt .list-inner.with-mark { + padding-right: 34px; + } + + ul.topiclist dt .list-inner { + min-height: 28px; + } + + ul.topiclist li.header dt .list-inner { + min-height: 0; + } + + ul.topiclist dd { + display: none; + } + ul.topiclist dd.mark { + display: block; + } + + /* Forums and topics lists + ----------------------------------------*/ + ul.topiclist.forums dt { + margin-right: -250px; + } + + ul.topiclist dd.mark { + display: block; + position: absolute; + right: 5px; + top: 0; + margin: 0; + width: auto; + min-width: 0; + text-align: left; + } + + ul.topiclist.forums dd.topics dfn, ul.topiclist.topics dd.posts dfn { + position: relative; + left: 0; + width: auto; + display: inline; + font-weight: normal; + } + + li.row .responsive-show strong { + font-weight: bold; + color: inherit; + } + + ul.topiclist li.row dt a.subforum { + vertical-align: bottom; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100px; + } + + /* Forums and topics lists + ----------------------------------------*/ + dd.cat-title { + width: 50px; + min-width: 20px; + overflow: hidden; + text-align: left; + line-height: 2.2em; + font-size: 1.1em; + } + + dd.catdiv { + min-width: 20px; + overflow: hidden; + text-align: center; + line-height: 2.2em; + font-size: 1.1em; + } + + dd.topicdetails { + width: 50px; + overflow: hidden; + margin-left: 2px; + margin-right: 2px; + text-align: left; + line-height: 1.2em; + font-size: 1.1em; + } + + dd.forumdesc { + margin-left: 2px; + margin-right: 2px; + text-align: left; + line-height: 1.2em; + font-size: 1.1em; + } + + dd.nav { + overflow: hidden; + text-align: center; + font-size: 1.1em; + } + + dd.views { + min-width: 100px; + overflow: hidden; + text-align: center; + font-size: 1.1em; + } + + dd.answers { + min-width: 60px; + overflow: hidden; + text-align: center; + line-height: 1.2em; + font-size: 1.1em; + } + + dd.forumlink { + min-width: 60px; + text-align: center; + font-size: 1.1em; + } + + dd.lastpost { + width: 50px; + min-width: 10px; + text-align: left; + font-size: 1.1em; + } + + div.legend { + text-align: center; + vertical-align: middle; + line-height: 1.2em; + font-size: 1.1em; + } + + /* Responsive breadcrumbs + ----------------------------------------*/ + .rtl .breadcrumbs .crumb { + float: right; + } + + /* Table styles + ----------------------------------------*/ + .rtl table.table1 thead th { + padding: 0 3px 4px 0; + } + + .rtl table.table1 thead th span { + padding-left: 0; + padding-right: 7px; + } + + .rtl table.table1 tbody th { + text-align: right; + } + + /* Specific column styles */ + .rtl table.table1 .name { text-align: right; } + .rtl table.table1 .joined { text-align: right; } + .rtl table.table1 .active { text-align: right; } + .rtl table.table1 .info { text-align: right; } + .rtl table.table1 thead .autocol { padding-left: 0; padding-right: 1em; } + + .rtl table.table1 span.rank-img { + float: left; + } + + .rtl table.info tbody th { + text-align: left; + } + + .rtl .forumbg table.table1 { + margin: 0 -1px -1px -2px; + } + + /* Misc layout styles + ---------------------------------------- */ + /* column[1-2] styles are containers for two column layouts */ + .rtl .column1 { + float: right; + clear: right; + } + + .rtl .column2 { + float: left; + clear: left; + } + + /* General classes for placing floating blocks */ + .rtl .left-box { + float: right; + text-align: right; + } + + .rtl .right-box { + float: left; + text-align: left; + } + + .rtl dl.details dt { + float: right; + clear: right; + text-align: left; + } + + .rtl dl.details dd { + margin-right: 0; + margin-left: 0; + padding-right: 5px; + padding-left: 0; + float: right; + } + + *:first-child+html dl.details dd { + margin-right: 30%; + float: none; + } + + * html dl.details dd { + margin-right: 30%; + float: none; + } + + /* Pagination + ----------------------------------------*/ + .pagination > ul { + margin: 5px 0 0; + } + + .row .pagination .ellipsis + li { + display: none !important; + } + + /* Responsive tables + ----------------------------------------*/ + table { + border-collapse: collapse; + border-spacing: 0; + } + + table.responsive, table.responsive tbody, table.responsive tr, table.responsive td { + display: block; + } + + table.responsive thead, table.responsive th { + display: none; + } + + table.responsive.show-header thead, table.responsive.show-header th:first-child { + display: block; + width: auto !important; + text-align: left !important; + } + + table.responsive.show-header th:first-child span.rank-img { + display: none; + } + + table.responsive tr { + margin: 2px 0; + } + + table.responsive td { + width: auto !important; + text-align: left !important; + padding: 4px; + } + + table.responsive td.empty { + display: none !important; + } + + table.responsive td > dfn { + display: inline-block !important; + } + + table.responsive td > dfn:after { + content: ':'; + padding-right: 5px; + } + + table.responsive span.rank-img { + float: none; + padding-right: 5px; + } + + table.responsive.memberlist td:first-child input[type="checkbox"] { + float: right; + } + + /* Tabbed menu + Based on: http://www.alistapart.com/articles/slidingdoors2/ + ----------------------------------------*/ + #tabs { + line-height: normal; + margin: 0 0 -6px 7px; + min-width: 600px; + } + + .rtl #tabs { + margin: 0 7px -6px 0; + } + + #tabs ul { + margin:0; + padding: 0; + list-style: none; + } + + #tabs li { + display: inline; + margin: 0; + padding: 0; + font-size: 0.85em; + font-weight: bold; + } + + #tabs a { + float: left; + background:url("images/bg_tabs1.gif") no-repeat 0% -34px; + margin: 0 1px 0 0; + padding: 0 0 0 7px; + text-decoration: none; + position: relative; + } + + .rtl #tabs a { + float: right; + } + + #tabs a span { + float: left; + display: block; + background: url("images/bg_tabs2.gif") no-repeat 100% -34px; + padding: 7px 10px 4px 4px; + color: #767676; + white-space: nowrap; + font-family: Arial, Helvetica, sans-serif; + text-transform: uppercase; + font-weight: bold; + } + + .rtl #tabs a span { + float: right; + } + + /* Commented Backslash Hack hides rule from IE5-Mac \*/ + #tabs a span, .rtl #tabs a span { float:none;} + /* End hack */ + + #tabs a:hover span { + color: #BC2A4D; + } + + #tabs #activetab a { + background-position: 0 0; + border-bottom: 1px solid #DCDEE2; + } + + #tabs #activetab a span { + background-position: 100% 0; + padding-bottom: 5px; + color: #23649F; + } + + #tabs a:hover { + background-position: 0 -69px; + } + + #tabs a:hover span { + background-position: 100% -69px; + } + + #tabs #activetab a:hover span { + color: #115098; + } + + /* Forms + ----------------------------------------*/ + fieldset dt, fieldset.fields1 dt, fieldset.fields2 dt { + width: auto; + float: none; + } + + fieldset dd, fieldset.fields1 dd, fieldset.fields2 dd { + margin-left: 0px; + } + + textarea, dd textarea, .message-box textarea { + width: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + dl.pmlist dt { + width: auto !important; + margin-bottom: 5px; + } + + dl.pmlist dd { + display: inline-block; + margin-left: 0 !important; + } + + dl.pmlist dd:first-of-type { + padding-left: 20px; + } + + .smiley-box, .message-box { + float: none; + width: auto; + } + + .smiley-box { + margin-top: 5px; + } + + .bbcode-status { + display: none; + } + + .colour-palette, .colour-palette tbody, .colour-palette tr { + display: block; + } + + .colour-palette td { + display: inline-block; + margin-right: 2px; + } + + .horizontal-palette td:nth-child(2n), .vertical-palette tr:nth-child(2n) { + display: none; + } + + fieldset.quick-login label { + display: block; + margin-bottom: 5px; + white-space: normal; + } + + fieldset.quick-login label > span { + display: inline-block; + min-width: 100px; + } + + fieldset.quick-login input.inputbox { + width: 85%; + max-width: 300px; + margin-left: 20px; + } + + fieldset.quick-login label[for="autologin"] { + display: inline-block; + text-align: right; + min-width: 50%; + } + + /* User profile + ----------------------------------------*/ + .column1, .column2, .left-box.profile-details { + float: none; + width: auto; + } + + /* Polls + ----------------------------------------*/ + fieldset.polls dt { + width: 90%; + } + + fieldset.polls dd.resultbar { + padding-left: 20px; + } + + fieldset.polls dd.poll_option_percent { + width: 20%; + } + + fieldset.polls dd.resultbar, fieldset.polls dd.poll_option_percent { + margin-top: 5px; + } + + /* Post + ----------------------------------------*/ + .postbody { + position: inherit; + } + + .postprofile, .postbody, .search .postbody { + display: block; + width: auto; + float: none; + padding: 0; + min-height: 0; + } + + .post .postprofile { + width: auto; + border-width: 0 0 1px 0; + padding-bottom: 5px; + margin: 0; + margin-bottom: 5px; + min-height: 40px; + overflow: hidden; + } + + .postprofile dd { + display: none; + } + + .postprofile dt, .postprofile dd.profile-rank, .search .postprofile dd { + display: block; + margin: 0; + } + + .postprofile .has-avatar .avatar-container { + margin: 0; + overflow: inherit; + } + + .postprofile .avatar-container:after { + clear: none; + } + + .postprofile .avatar { + margin-right: 5px; + } + + .postprofile .avatar img { + width: auto !important; + height: auto !important; + max-height: 32px; + } + + .has-profile .postbody h3 { + margin-left: 0 !important; + margin-right: 0 !important; + } + + .has-profile .post-buttons { + right: 30px; + top: 15px; + } + + .online { + background-size: 40px; + } + + /* Misc stuff + ----------------------------------------*/ + h2 { + margin-top: .5em; + } + + p { + margin-bottom: .5em; + overflow: hidden; + } + + p.rightside { + margin-bottom: 0; + } + + fieldset.display-options label { + display: block; + clear: both; + margin-bottom: 5px; + } + + dl.mini dd.pm-legend { + float: left; + min-width: 200px; + } + + .topicreview { + margin: 0 -5px; + padding: 0 5px; + } + + fieldset.display-actions { + white-space: normal; + } + + .phpbb_alert { + width: auto; + margin: 0 5px; + } + + .attach-comment dfn { + width: 100%; + } +} + +@media (min-width: 700px) { + .postbody { width: 70%; } +} + +@media (min-width: 850px) { + .postbody { width: 76%; } +} + +@media (max-width: 850px) { + .postprofile { width: 28%; } + + +} + +@media (min-width: 701px) and (max-width: 950px) { + + ul.topiclist dt { + margin-right: -410px; + } + + ul.topiclist dt .list-inner { + margin-right: 410px; + } + + dd.posts, dd.topics, dd.views { + width: 80px; + } +} + + + +/* Show scrollbars for items with overflow on iOS devices +----------------------------------------*/ +.postbody .content::-webkit-scrollbar, .topicreview::-webkit-scrollbar, .post_details::-webkit-scrollbar, .codebox code::-webkit-scrollbar, .attachbox dd::-webkit-scrollbar, .attach-image::-webkit-scrollbar, .dropdown-extended ul::-webkit-scrollbar { + width: 8px; + height: 8px; + -webkit-appearance: none; + background: rgba(0, 0, 0, .1); + border-radius: 3px; +} + +.postbody .content::-webkit-scrollbar-thumb, .topicreview::-webkit-scrollbar-thumb, .post_details::-webkit-scrollbar-thumb, .codebox code::-webkit-scrollbar-thumb, .attachbox dd::-webkit-scrollbar-thumb, .attach-image::-webkit-scrollbar-thumb, .dropdown-extended ul::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, .3); + border-radius: 3px; +} + +#memberlist tr.inactive, #team tr.inactive { + font-style: italic; +} diff --git a/templates/SwiftBlueBeitDina/admin/SwiftBlue.css b/templates/SwiftBlueBeitDina/admin/SwiftBlue.css new file mode 100644 index 0000000..86295aa --- /dev/null +++ b/templates/SwiftBlueBeitDina/admin/SwiftBlue.css @@ -0,0 +1,12 @@ +@CHARSET "UTF-8"; + +BODY { + margin:5px; +} +TH, TD { + font-size: 68.5%; +} + +.gen { + font-size: 1.1em; +} diff --git a/templates/SwiftBlueBeitDina/admin/admin.css b/templates/SwiftBlueBeitDina/admin/admin.css new file mode 100644 index 0000000..56db12e --- /dev/null +++ b/templates/SwiftBlueBeitDina/admin/admin.css @@ -0,0 +1,45 @@ +fieldset { + border: 0px; +} +div#admintabs { + display:inline; +} +div#admintabs ul { + margin: 0px; + padding: 0px; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + font-weight: bold; + color: #000; + line-height: 30px; + white-space: nowrap; +} +div#admintabs li { + margin: 2px; + padding: 2px; + list-style-type: none; + display: inline; + border: 1px solid #777; + background-color: #fff; +} +div#admintabs li a { + text-decoration: none; + padding: 2px 10px; + color: #000; +} +div#admintabs li a:link { + color: #000: +} +div#admintabs li a:visited { + color: #000; +} +div#admintabs li a:hover { + color: #777; +} +div#admintabs li.activetab { + border: 1px solid #777; + background-color: #ddd; +} +div#admintabs li.activetab a, div#tabs li.activetab a:link, div#tabs li.activetab a:visited, div#tabs li.activetab a:hover { + color: #777; +} \ No newline at end of file diff --git a/af/index.htm b/templates/SwiftBlueBeitDina/admin/index.htm similarity index 100% rename from af/index.htm rename to templates/SwiftBlueBeitDina/admin/index.htm diff --git a/templates/SwiftBlueBeitDina/admin/mainpage_header.html b/templates/SwiftBlueBeitDina/admin/mainpage_header.html new file mode 100644 index 0000000..2af2e83 --- /dev/null +++ b/templates/SwiftBlueBeitDina/admin/mainpage_header.html @@ -0,0 +1,31 @@ + + + +{META} + +{SITENAME} - {L_MX_ADMIN} + + + + + + + + +{MX_ADDITIONAL_CSS} +{MX_ICON_CSS} + + +
+ + + + + + + + + + + + +
+ + beitdina.net + +   + אִינדֶקס שֶׁל ./ @ #Bibliuta
+
beitdina.net
Portalul canalului #Bibliuta de pe Undernet 
+ + + + + + + + + + + + + + + +
  +
+ Căutare: + + + + + +
+
 
+
+ + + +
אִינדֶקס שֶׁל . /
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ קוֹבֶץ + + מידה + + תאריך + + תיאור +
+ + + + + [dir] + 009_January + 0.1 days old + + 283.2 KB + + 2020-Dec-14 + + 009_January +
+ + + + + [dir] + 2012_September + 0.1 days old + + 141.6 KB + + 2020-Dec-14 + + 2012_September +
+ + + + + [dir] + adevarul_despre_sabat_files + 0.1 days old + + 445.3 KB + + 2020-Dec-14 + + @ 05:12:44 +
+ + + + + [dir] + assets + 0.1 days old + + 3.3 MB + + 2020-Dec-14 + + assets +
+ + + + + [dir] + B-Ziua_YomhaTeruah_files + 0.1 days old + + 1.8 MB + + 2020-Dec-14 + + B-Ziua_YomhaTeruah_files +
+ + + + + [dir] + classes1 + 0.1 days old + + 305.8 KB + + 2020-Dec-14 + + classes1 +
+ + + + + [dir] + fratele_cel_mare_in_israel_si_tehnologia_sfarsitului_files + 0.1 days old + + 359.7 KB + + 2020-Dec-14 + + @ 05:27:03 +
+ + + + + [dir] + Hanuka_files + 0.1 days old + + 1.7 MB + + 2020-Dec-14 + + Hanuka_files +
+ + + + + [dir] + images + 0.1 days old + + 3.8 MB + + 2020-Dec-14 + + images +
+ + + + + [dir] + images_yomteruah + 0.1 days old + + 388.0 KB + + 2020-Dec-14 + + images_yomteruah +
+ + + + + [dir] + is-this-end-time-tech-mark-of-beast_files + 0.1 days old + + 642.9 KB + + 2020-Dec-14 + + @ 05:31:18 +
+ + + + + [dir] + Lunar calendar - Calendar.sk_files + 0.1 days old + + 189.0 KB + + 2020-Dec-14 + + LUNAR CALENDAR - CALENDAR @ 05:33:21 +
+ + + + + [dir] + sabat_files + 0.1 days old + + 398.2 KB + + 2020-Dec-14 + + sabat_files +
+ + + + + [dir] + Sarbatoarea_Innoirii_files + 0.1 days old + + 652.2 KB + + 2020-Dec-14 + + @ 05:33:32 +
+ + + + + [dir] + Sarbatori Pascale Fericite_files + 0.1 days old + + 496.2 KB + + 2020-Dec-14 + + @ 05:33:36 +
+ + + + + [dir] + Tehnologia_Sfarshitului_Veacului_files + 0.1 days old + + 429.4 KB + + 2020-Dec-14 + + @ 05:33:47 +
+ + + + + [dir] + yom_kippur_2013 + 0.1 days old + + 269.4 KB + + 2020-Dec-14 + + yom_kippur_2013 +
+ + + + + [dir] + Yom_Kippur_2013_en_files + 0.1 days old + + 224.2 KB + + 2020-Dec-14 + + Yom_Kippur_2013_en_files +
+ + + + + [dir] + Yom_Kippur_2013_ro_files + 0.1 days old + + 2.0 KB + + 2020-Dec-14 + + Yom_Kippur_2013_ro_files +
+ + + + + [dir] + Yom_Teruah_2013_ro_files + 0.1 days old + + 123.4 KB + + 2020-Dec-14 + + Yom_Teruah_2013_ro_files +
+ + + + + [png] + 2F529537_3879949733014_198386502_n.jpg.png תְמוּנָה ממזערת 2F529537_3879949733014_198386502_n.jpg.png + [calculate md5sum] + + 99.0 KB + + 2018-Dec-02 + + +
+ + + + + [htm] + 144.000.htm + [calculate md5sum] + + 46.3 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + 2013_Situatia_din_Israel_si_boicotul_UE.htm + [calculate md5sum] + + 33.6 KB + + 2013-Aug-31 + + +
+ + + + + [jpg] + 4872_1_ftc_dp.jpg תְמוּנָה ממזערת 4872_1_ftc_dp.jpg + [calculate md5sum] + + 29.4 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 4872_2_exc_dp.jpg תְמוּנָה ממזערת 4872_2_exc_dp.jpg + [calculate md5sum] + + 46.9 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 4872_3_exc_dp.jpg תְמוּנָה ממזערת 4872_3_exc_dp.jpg + [calculate md5sum] + + 42.0 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 4872_4_exc.jpg תְמוּנָה ממזערת 4872_4_exc.jpg + [calculate md5sum] + + 41.1 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 4872_5_exc.jpg תְמוּנָה ממזערת 4872_5_exc.jpg + [calculate md5sum] + + 33.6 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 4872_6_exc.jpg תְמוּנָה ממזערת 4872_6_exc.jpg + [calculate md5sum] + + 34.6 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 4872_7_exc.jpg תְמוּנָה ממזערת 4872_7_exc.jpg + [calculate md5sum] + + 38.7 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 4872_99_bkc.jpg תְמוּנָה ממזערת 4872_99_bkc.jpg + [calculate md5sum] + + 34.9 KB + + 2012-Apr-14 + + +
+ + + + + [jpg] + 49588.jpg תְמוּנָה ממזערת 49588.jpg + [calculate md5sum] + + 28.6 KB + + 2012-Sep-19 + + +
+ + + + + [jpg] + 529537_3879949733014_198386502_n.jpg תְמוּנָה ממזערת 529537_3879949733014_198386502_n.jpg + [calculate md5sum] + + 10.5 KB + + 2018-Dec-02 + + +
+ + + + + [jpg] + 551645_10150654444292810_56347292809_9562496_1509058014_n.jpg תְמוּנָה ממזערת 551645_10150654444292810_56347292809_9562496_1509058014_n.jpg + [calculate md5sum] + + 55.6 KB + + 2012-Apr-19 + + +
+ + + + + [jpg] + 564770_194976290621224_100003265640343_314236_440238530_n.jpg תְמוּנָה ממזערת 564770_194976290621224_100003265640343_314236_440238530_n.jpg + [calculate md5sum] + + 100.2 KB + + 2012-Apr-21 + + +
+ + + + + [jpg] + 575563_10150665032602810_56347292809_9610241_1607041119_n.jpg תְמוּנָה ממזערת 575563_10150665032602810_56347292809_9610241_1607041119_n.jpg + [calculate md5sum] + + 86.1 KB + + 2012-Apr-19 + + +
+ + + + + [html] + about_home_gatherings.html + [calculate md5sum] + + 115.3 KB + + 2013-Aug-11 + + +
+ + + + + [pdf] + about_home_gatherings_en.pdf + [calculate md5sum] + + 209.0 KB + + 2010-Jun-21 + + +
+ + + + + [pdf] + about_home_gatherings_ro_v2.14_coperta.pdf + [calculate md5sum] + + 35.7 KB + + 2011-May-03 + + +
+ + + + + [htm] + adevarul_despre_sabat.htm + [calculate md5sum] + + 239.8 KB + + 2013-Aug-25 + + +
+ + + + + [pdf] + adevarul_despre_sabat.pdf + [calculate md5sum] + + 661.7 KB + + 2013-Aug-25 + + +
+ + + + + [htm] + adevarul_despre_sabat_old.htm + [calculate md5sum] + + 359.3 KB + + 2013-Jan-22 + + +
+ + + + + [htm] + adevarul_despre_sabat_vd.htm + [calculate md5sum] + + 62.3 KB + + 2011-Jan-01 + + +
+ + + + + [htm] + adunarea.htm + [calculate md5sum] + + 129.8 KB + + 2005-Feb-04 + + +
+ + + + + [pdf] + alcoolul_moderatzie_sau_abstinenta.pdf + [calculate md5sum] + + 224.9 KB + + 2010-Nov-14 + + +
+ + + + + [pdf] + alfabetul_ebraic.pdf + [calculate md5sum] + + 115.8 KB + + 2011-Mar-07 + + +
+ + + + + [pdf] + aramaic-hebrew_alphabet_numeric_values_rom.pdf + [calculate md5sum] + + 49.3 KB + + 2011-Mar-07 + + +
+ + + + + [pdf] + Archive for the Jubilee Year Category.pdf + [calculate md5sum] + + 63.5 KB + + 2011-Aug-05 + + +
+ + + + + [php] + AutoIndex.conf2.php + 0.6 days old[calculate md5sum] + + 555.0  B + + 2020-Dec-14 + + AUTOINDEX.CONF2 @ 04:33:00 +
+ + + + + [html] + autoindexlicense.html + [calculate md5sum] + + 18.8 KB + + 2019-Sep-17 + + +
+ + + + + [htm] + B-Hagadah-mesianic.htm + [calculate md5sum] + + 46.7 KB + + 2012-Apr-11 + + +
+ + + + + [html] + b-hagadah-mesianic.html + [calculate md5sum] + + 77.1 KB + + 2012-Apr-11 + + +
+ + + + + [pdf] + B-Lupta_spitituala.pdf + [calculate md5sum] + + 256.4 KB + + 2011-Mar-07 + + +
+ + + + + [pdf] + B-Lupta_spitituala4.pdf + [calculate md5sum] + + 253.7 KB + + 2004-Jan-23 + + +
+ + + + + [htm] + B-Ziua_YomhaTerua.htm + [calculate md5sum] + + 155.9 KB + + 2012-Sep-16 + + +
+ + + + + [html] + B-Ziua_YomhaTeruah.html + [calculate md5sum] + + 212.1 KB + + 2012-Sep-21 + + +
+ + + + + [html] + B-Ziua_YomhaTeruah0.html + [calculate md5sum] + + 176.1 KB + + 2012-Sep-19 + + +
+ + + + + [html] + B-Ziua_YomhaTeruah2.html + [calculate md5sum] + + 157.3 KB + + 2012-Sep-16 + + +
+ + + + + [pdf] + bentscher.pdf + [calculate md5sum] + + 202.3 KB + + 2012-Sep-19 + + +
+ + + + + [htm] + botez.htm + [calculate md5sum] + + 173.5 KB + + 2004-Mar-24 + + +
+ + + + + [htm] + botezs.htm + [calculate md5sum] + + 111.6 KB + + 2005-Mar-16 + + +
+ + + + + [htm] + Botez_r.htm + [calculate md5sum] + + 25.3 KB + + 2003-Oct-08 + + +
+ + + + + [jpg] + bread-wine-herbs2.jpg תְמוּנָה ממזערת bread-wine-herbs2.jpg + [calculate md5sum] + + 42.5 KB + + 2012-Apr-14 + + +
+ + + + + [htm] + calauzire.htm + [calculate md5sum] + + 52.5 KB + + 2005-Feb-04 + + +
+ + + + + [pdf] + Calendar2011.pdf + [calculate md5sum] + + 397.0 KB + + 2011-Feb-05 + + +
+ + + + + [htm] + cand_daruri.htm + [calculate md5sum] + + 32.1 KB + + 2011-Jan-01 + + +
+ + + + + [pdf] + Cantarea lui Moise si a Mielului.pdf + [calculate md5sum] + + 138.9 KB + + 2011-Mar-22 + + +
+ + + + + [pdf] + Cantarea lui Moise si a Mielului din carte.pdf + [calculate md5sum] + + 137.8 KB + + 2011-Mar-23 + + +
+ + + + + [pdf] + cardurile-de-sanatate-intra-art_guv.pdf + [calculate md5sum] + + 15.9 KB + + 2011-Jan-08 + + +
+ + + + + [html] + change_log.html + [calculate md5sum] + + 5.0 KB + + 2019-Sep-17 + + +
+ + + + + [jpg] + coldencaff.jpg תְמוּנָה ממזערת coldencaff.jpg + [calculate md5sum] + + 34.5 KB + + 2013-Aug-31 + + +
+ + + + + [php] + config2.php + 0.9 days old[calculate md5sum] + + 19.1 KB + + 2020-Dec-13 + + CONFIG2 @ 10:08:00 +
+ + + + + [jpg] + Coranul.jpg תְמוּנָה ממזערת Coranul.jpg + [calculate md5sum] + + 11.0 KB + + 2005-Aug-26 + + +
+ + + + + [htm] + Craciun&Hanuca-Certitudini.htm + [calculate md5sum] + + 22.0 KB + + 2018-Dec-21 + + +
+ + + + + [html] + Craciun&Hanuca-Certitudini.html + [calculate md5sum] + + 22.0 KB + + 2018-Dec-21 + + +
+ + + + + [htm] + craciun.htm + [calculate md5sum] + + 48.7 KB + + 2005-Feb-04 + + +
+ + + + + [pdf] + CRACIUN_A5.pdf + [calculate md5sum] + + 110.1 KB + + 2012-Apr-13 + + +
+ + + + + [pdf] + Create in me book pg 37-38.pdf + [calculate md5sum] + + 87.0 KB + + 2011-Mar-22 + + +
+ + + + + [jpg] + createlulav.jpg תְמוּנָה ממזערת createlulav.jpg + [calculate md5sum] + + 40.5 KB + + 2013-Sep-20 + + +
+ + + + + [htm] + data.htm + [calculate md5sum] + + 32.6 KB + + 2005-Feb-04 + + +
+ + + + + [pdf] + Days_of_Elijah_and_Enoch.pdf + [calculate md5sum] + + 66.6 KB + + 2010-Dec-10 + + +
+ + + + + [htm] + duhuri.htm + [calculate md5sum] + + 6.9 KB + + 2003-Oct-07 + + +
+ + + + + [htm] + editorial.htm + [calculate md5sum] + + 11.3 KB + + 2011-Jan-01 + + +
+ + + + + [htm] + editorial_feb_2003.htm + [calculate md5sum] + + 11.3 KB + + 2011-Jan-01 + + +
+ + + + + [html] + efeseni2-aparat_critic_si_traduceri.html + [calculate md5sum] + + 67.6 KB + + 2013-Aug-06 + + +
+ + + + + [pdf] + El-Ehad3.pdf + [calculate md5sum] + + 141.9 KB + + 2010-Nov-09 + + +
+ + + + + [htm] + evanghelia.htm + [calculate md5sum] + + 48.7 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + evrei.htm + [calculate md5sum] + + 107.8 KB + + 2005-Feb-04 + + +
+ + + + + [pdf] + exodus3.pdf + [calculate md5sum] + + 199.6 KB + + 2007-Nov-28 + + +
+ + + + + [htm] + Explicarea_traditiilor_de_Hanuca.htm + [calculate md5sum] + + 22.0 KB + + 2012-Dec-13 + + +
+ + + + + [htm] + formula_botez.htm + [calculate md5sum] + + 90.0 KB + + 2013-Apr-13 + + +
+ + + + + [htm] + Fratele_cel_Mare_in_Israel.htm + [calculate md5sum] + + 60.1 KB + + 2011-Nov-21 + + +
+ + + + + [htm] + fratele_cel_mare_in_israel_si_tehnologia_sfarsitului.htm + [calculate md5sum] + + 95.6 KB + + 2012-Jul-10 + + +
+ + + + + [htm] + Hanuca2012.htm + [calculate md5sum] + + 28.6 KB + + 2012-Dec-13 + + +
+ + + + + [htm] + Hanuka.htm + [calculate md5sum] + + 26.7 KB + + 2018-Dec-02 + + +
+ + + + + [html] + Hanuka.html + [calculate md5sum] + + 26.7 KB + + 2018-Dec-21 + + +
+ + + + + [pdf] + Hanuka.pdf + [calculate md5sum] + + 225.8 KB + + 2011-Dec-17 + + +
+ + + + + [htm] + Hanuka2013.htm + [calculate md5sum] + + 29.5 KB + + 2013-Nov-27 + + +
+ + + + + [htm] + Hanuka2014.htm + [calculate md5sum] + + 28.1 KB + + 2013-Nov-27 + + +
+ + + + + [htm] + Hanuka2018.htm + [calculate md5sum] + + 30.0 KB + + 2018-Dec-02 + + +
+ + + + + [htm] + Hanuka2019.htm + 1.3 days old[calculate md5sum] + + 29.8 KB + + 2020-Dec-13 + + +
+ + + + + [htm] + Hanuka2020.htm + 1.1 days old[calculate md5sum] + + 27.2 KB + + 2020-Dec-13 + + +
+ + + + + [htm] + Hanuka2021.htm + 1.3 days old[calculate md5sum] + + 29.8 KB + + 2020-Dec-13 + + +
+ + + + + [htm] + Hanuka2022.htm + 1.2 days old[calculate md5sum] + + 29.8 KB + + 2020-Dec-13 + + +
+ + + + + [htm] + Hanuka2023.htm + 1.2 days old[calculate md5sum] + + 29.7 KB + + 2020-Dec-13 + + +
+ + + + + [htm] + Hanukah.htm + [calculate md5sum] + + 28.1 KB + + 2013-Nov-27 + + +
+ + + + + [html] + Hanukah.html + [calculate md5sum] + + 28.1 KB + + 2013-Nov-27 + + +
+ + + + + [htm] + har.htm + [calculate md5sum] + + 54.9 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + iadul.htm + [calculate md5sum] + + 250.7 KB + + 2011-Jan-01 + + +
+ + + + + [htm] + ilie.htm + [calculate md5sum] + + 40.5 KB + + 2005-Mar-15 + + +
+ + + + + [jpg] + Image010.jpg תְמוּנָה ממזערת Image010.jpg + [calculate md5sum] + + 44.1 KB + + 2011-Nov-21 + + +
+ + + + + [jpg] + Image030.jpg תְמוּנָה ממזערת Image030.jpg + [calculate md5sum] + + 37.2 KB + + 2013-Sep-06 + + +
+ + + + + [gif] + image2.gif תְמוּנָה ממזערת image2.gif + [calculate md5sum] + + 1.0 KB + + 2005-Feb-04 + + +
+ + + + + [gif] + image3.gif תְמוּנָה ממזערת image3.gif + [calculate md5sum] + + 45.6 KB + + 2011-Jan-01 + + +
+ + + + + [gif] + image4.gif תְמוּנָה ממזערת image4.gif + [calculate md5sum] + + 33.9 KB + + 2005-Feb-04 + + +
+ + + + + [jpg] + Image4.jpg תְמוּנָה ממזערת Image4.jpg + [calculate md5sum] + + 75.3 KB + + 2013-Sep-20 + + +
+ + + + + [html] + incredin_are.html + [calculate md5sum] + + 1.9 KB + + 2003-Dec-14 + + +
+ + + + + [html] + index.html + [calculate md5sum] + + 36.3 KB + + 2017-Mar-07 + + +
+ + + + + [php] + index.php + 0 days old[calculate md5sum] + + 18.4 KB + + 2020-Dec-14 + + INDEX @ 07:18:54 +
+ + + + + [php] + index0.php + [calculate md5sum] + + 18.4 KB + + 2020-Feb-04 + + +
+ + + + + [htm] + Inspecting Rosh Hashanah Symbols.htm + [calculate md5sum] + + 42.1 KB + + 2013-Sep-10 + + +
+ + + + + [htm] + invrap.htm + [calculate md5sum] + + 52.1 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + iosif.htm + [calculate md5sum] + + 49.0 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + is-this-end-time-tech-mark-of-beast.htm + [calculate md5sum] + + 14.4 KB + + 2013-Feb-26 + + +
+ + + + + [htm] + islam.htm + [calculate md5sum] + + 49.7 KB + + 2005-Feb-04 + + +
+ + + + + [pdf] + Is_Christmas_Pagan.pdf + [calculate md5sum] + + 126.0 KB + + 2012-Apr-13 + + +
+ + + + + [htm] + jertfele.htm + [calculate md5sum] + + 59.6 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + juraminte.htm + [calculate md5sum] + + 37.0 KB + + 2005-Feb-04 + + +
+ + + + + [html] + license.html + [calculate md5sum] + + 18.8 KB + + 2019-Sep-17 + + +
+ + + + + [pdf] + License.pdf + [calculate md5sum] + + 22.0 KB + + 2010-Dec-21 + + +
+ + + + + [htm] + Lunar calendar - Calendar.sk.htm + [calculate md5sum] + + 84.2 KB + + 2013-Mar-01 + + +
+ + + + + [pdf] + Lupta_spitituala.pdf + [calculate md5sum] + + 258.7 KB + + 2011-Jan-23 + + +
+ + + + + [jpg] + Ma-Nishtana.jpg תְמוּנָה ממזערת Ma-Nishtana.jpg + [calculate md5sum] + + 32.4 KB + + 2012-Apr-14 + + +
+ + + + + [htm] + mariolo4.htm + [calculate md5sum] + + 17.7 KB + + 2005-Mar-18 + + +
+ + + + + [htm] + mariologie.htm + [calculate md5sum] + + 30.8 KB + + 2011-Jan-01 + + +
+ + + + + [htm] + martori.htm + [calculate md5sum] + + 49.6 KB + + 2005-Feb-05 + + +
+ + + + + [htm] + masturbarea.htm + [calculate md5sum] + + 43.6 KB + + 2011-Jan-01 + + +
+ + + + + [htm] + nascut.htm + [calculate md5sum] + + 31.6 KB + + 2005-Feb-04 + + +
+ + + + + [html] + nasterea_lui_mesia.html + [calculate md5sum] + + 2.5 KB + + 2012-Nov-26 + + +
+ + + + + [htm] + Noah_Torah.htm + [calculate md5sum] + + 24.6 KB + + 2013-Oct-05 + + +
+ + + + + [pdf] + NTTF_01_Introducere_ED8_12_2011.pdf + [calculate md5sum] + + 192.3 KB + + 2007-Nov-28 + + +
+ + + + + [htm] + numele.htm + [calculate md5sum] + + 159.4 KB + + 2011-Jan-01 + + +
+ + + + + [pdf] + Page6 from howsurearewe2.pdf + [calculate md5sum] + + 108.7 KB + + 2010-Nov-11 + + +
+ + + + + [pdf] + Piatza roshie - torul e de vanzare.pdf + [calculate md5sum] + + 131.4 KB + + 2011-Nov-29 + + +
+ + + + + [htm] + ploaia.htm + [calculate md5sum] + + 58.3 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + post.htm + [calculate md5sum] + + 40.4 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + posturi-postul_de_toamna.htm + [calculate md5sum] + + 15.3 KB + + 2013-Aug-06 + + +
+ + + + + [html] + posturi-postul_de_toamna.html + [calculate md5sum] + + 15.3 KB + + 2013-Aug-06 + + +
+ + + + + [htm] + puterea.htm + [calculate md5sum] + + 8.9 KB + + 2003-Dec-11 + + +
+ + + + + [htm] + Readme.htm + [calculate md5sum] + + 18.5 KB + + 2019-Nov-07 + + +
+ + + + + [md] + README.md + [calculate md5sum] + + 465.0  B + + 2018-Jul-20 + + +
+ + + + + [pdf] + recycle_human_body_v4.pdf + [calculate md5sum] + + 233.2 KB + + 2011-May-03 + + +
+ + + + + [htm] + reforma.htm + [calculate md5sum] + + 24.4 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + restabilire.htm + [calculate md5sum] + + 108.6 KB + + 2005-Feb-04 + + +
+ + + + + [htm] + sabat.htm + [calculate md5sum] + + 360.9 KB + + 2013-Jan-22 + + +
+ + + + + [html] + Sarbatoarea_Innoirii.html + [calculate md5sum] + + 25.7 KB + + 2013-Jun-20 + + +
+ + + + + [jpg] + Sarbatoarea_Innoirii_html_d4ce375.jpg תְמוּנָה ממזערת Sarbatoarea_Innoirii_html_d4ce375.jpg + [calculate md5sum] + + 40.8 KB + + 2013-Jun-20 + + +
+ + + + + [html] + Sarbatoarile_Domnului_Cincizecimea.html + [calculate md5sum] + + 7.4 KB + + 2011-Jun-07 + + +
+ + + + + [htm] + Sarbatori Pascale Fericite.htm + [calculate md5sum] + + 55.3 KB + + 2013-Mar-26 + + +
+ + + + + [jpg] + seder.jpg תְמוּנָה ממזערת seder.jpg + [calculate md5sum] + + 27.9 KB + + 2012-Apr-14 + + +
+ + + + + [pdf] + Song of Moses and of The Lamb from book.pdf + [calculate md5sum] + + 48.7 KB + + 2011-Mar-23 + + +
+ + + + + [htm] + Stiri_din_Israel.htm + [calculate md5sum] + + 32.6 KB + + 2012-Dec-14 + + +
+ + + + + [htm] + Stiri_din_Israel_Decembrie2012_1.htm + [calculate md5sum] + + 35.1 KB + + 2012-Dec-24 + + +
+ + + + + [pdf] + Studii-Matei_28_19.pdf + [calculate md5sum] + + 238.6 KB + + 2009-Jul-15 + + +
+ + + + + [htm] + Sucot_2012_ro.htm + [calculate md5sum] + + 34.8 KB + + 2012-Oct-08 + + +
+ + + + + [htm] + Sucot_2014_ro.htm + [calculate md5sum] + + 60.0 KB + + 2013-Sep-21 + + +
+ + + + + [htm] + tehnologia_sfarshitului_veacului.htm + [calculate md5sum] + + 45.5 KB + + 2012-Jul-10 + + +
+ + + + + [pdf] + The-option-of-donating-oragans-and-blood.pdf + [calculate md5sum] + + 233.2 KB + + 2012-Jul-15 + + +
+ + + + + [pdf] + The Song of Moses and of Lamb.pdf + [calculate md5sum] + + 54.5 KB + + 2011-Mar-22 + + +
+ + + + + [htm] + Tisha B'Av_2011_ro.htm + [calculate md5sum] + + 31.4 KB + + 2013-Jul-16 + + +
+ + + + + [html] + Tisha_bAv_2008_ro.html + [calculate md5sum] + + 13.6 KB + + 2013-Jul-16 + + +
+ + + + + [html] + Tisha_bAv_2011.html + [calculate md5sum] + + 13.5 KB + + 2013-Jul-16 + + +
+ + + + + [html] + Tisha_bAv_2013.html + [calculate md5sum] + + 32.8 KB + + 2013-Jul-16 + + +
+ + + + + [html] + Tisha_bAv_2013_card_en.html + [calculate md5sum] + + 13.1 KB + + 2013-Jul-16 + + +
+ + + + + [html] + Tisha_bAv_2013_en.html + [calculate md5sum] + + 27.2 KB + + 2013-Jul-16 + + +
+ + + + + [html] + Tisha_bAv_2013_no_pictures.html + [calculate md5sum] + + 28.3 KB + + 2013-Jul-16 + + +
+ + + + + [pdf] + unde_merg_datele_noastre.pdf + [calculate md5sum] + + 207.8 KB + + 2011-Nov-18 + + +
+ + + + + [htm] + vindec.htm + [calculate md5sum] + + 122.5 KB + + 2005-Feb-05 + + +
+ + + + + [htm] + vita_vie.htm + [calculate md5sum] + + 3.1 KB + + 2004-Jan-30 + + +
+ + + + + [jpg] + yeshua_the-lamb-of-god.jpg תְמוּנָה ממזערת yeshua_the-lamb-of-god.jpg + [calculate md5sum] + + 43.6 KB + + 2012-Apr-19 + + +
+ + + + + [htm] + yomim_noraim.htm + [calculate md5sum] + + 24.4 KB + + 2013-Sep-11 + + +
+ + + + + [htm] + Yom_Kippur_2011_ro.htm + [calculate md5sum] + + 12.3 KB + + 2012-Sep-26 + + +
+ + + + + [htm] + Yom_Kippur_2012.htm + [calculate md5sum] + + 23.7 KB + + 2012-Sep-26 + + +
+ + + + + [htm] + Yom_Kippur_2012_ro.htm + [calculate md5sum] + + 12.3 KB + + 2012-Sep-26 + + +
+ + + + + [htm] + Yom_Kippur_2013_en.htm + [calculate md5sum] + + 39.5 KB + + 2013-Sep-14 + + +
+ + + + + [htm] + Yom_Kippur_2013_ro.htm + [calculate md5sum] + + 38.2 KB + + 2013-Sep-14 + + +
+ + + + + [jpg] + Yom_Te1.jpg תְמוּנָה ממזערת Yom_Te1.jpg + [calculate md5sum] + + 14.4 KB + + 2013-Sep-03 + + +
+ + + + + [htm] + yom_teruah2013.htm + [calculate md5sum] + + 15.0 KB + + 2013-Sep-05 + + +
+ + + + + [htm] + Yom_Teruah_2013-ro.htm + [calculate md5sum] + + 27.4 KB + + 2013-Sep-03 + + +
+ + + + + [htm] + Yom_Teruah_2013_ro.htm + [calculate md5sum] + + 46.5 KB + + 2013-Sep-04 + + +
+ + + + + + + +

+ Page + << + 1 + >> + of 1 +

+ + + + + + + + +

+ + + + + + + + + +
+
+ Search Search: +


+
+
+
+ Login User Account: +
Username:
Password:

+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/SwiftBlue/table_header.tpl b/templates/SwiftBlue/table_header.tpl index a2c8978..cabe445 100644 --- a/templates/SwiftBlue/table_header.tpl +++ b/templates/SwiftBlue/table_header.tpl @@ -61,38 +61,6 @@
+ + + + + + + + +
logo MX-Publisher

{ADMIN_TITLE}

{L_LOGGED_IN_AS} {USERNAME}{L_LOGOUT} ]{L_ADMIN_INDEX} • + {L_PORTAL_INDEX} +
+

{L_SKIP}

diff --git a/templates/SwiftBlueBeitDina/ajax.js b/templates/SwiftBlueBeitDina/ajax.js new file mode 100644 index 0000000..d85ba35 --- /dev/null +++ b/templates/SwiftBlueBeitDina/ajax.js @@ -0,0 +1,394 @@ +/* global phpbb */ + +(function($) { // Avoid conflicts with other libraries + +'use strict'; + +// This callback will mark all forum icons read +phpbb.addAjaxCallback('mark_forums_read', function(res) { + var readTitle = res.NO_UNREAD_POSTS; + var unreadTitle = res.UNREAD_POSTS; + var iconsArray = { + forum_unread: 'forum_read', + forum_unread_subforum: 'forum_read_subforum', + forum_unread_locked: 'forum_read_locked' + }; + + $('li.row').find('dl[class*="forum_unread"]').each(function() { + var $this = $(this); + + $.each(iconsArray, function(unreadClass, readClass) { + if ($this.hasClass(unreadClass)) { + $this.removeClass(unreadClass).addClass(readClass); + } + }); + $this.children('dt[title="' + unreadTitle + '"]').attr('title', readTitle); + }); + + // Mark subforums read + $('a.subforum[class*="unread"]').removeClass('unread').addClass('read').children('.icon.icon-red').removeClass('icon-red').addClass('icon-blue'); + + // Mark topics read if we are watching a category and showing active topics + if ($('#active_topics').length) { + phpbb.ajaxCallbacks.mark_topics_read.call(this, res, false); + } + + // Update mark forums read links + $('[data-ajax="mark_forums_read"]').attr('href', res.U_MARK_FORUMS); + + phpbb.closeDarkenWrapper(3000); +}); + +/** +* This callback will mark all topic icons read +* +* @param {bool} [update_topic_links=true] Whether "Mark topics read" links +* should be updated. Defaults to true. +*/ +phpbb.addAjaxCallback('mark_topics_read', function(res, updateTopicLinks) { + var readTitle = res.NO_UNREAD_POSTS; + var unreadTitle = res.UNREAD_POSTS; + var iconsArray = { + global_unread: 'global_read', + announce_unread: 'announce_read', + sticky_unread: 'sticky_read', + topic_unread: 'topic_read' + }; + var iconsState = ['', '_hot', '_hot_mine', '_locked', '_locked_mine', '_mine']; + var unreadClassSelectors; + var classMap = {}; + var classNames = []; + + if (typeof updateTopicLinks === 'undefined') { + updateTopicLinks = true; + } + + $.each(iconsArray, function(unreadClass, readClass) { + $.each(iconsState, function(key, value) { + // Only topics can be hot + if ((value === '_hot' || value === '_hot_mine') && unreadClass !== 'topic_unread') { + return true; + } + classMap[unreadClass + value] = readClass + value; + classNames.push(unreadClass + value); + }); + }); + + unreadClassSelectors = '.' + classNames.join(',.'); + + $('li.row').find(unreadClassSelectors).each(function() { + var $this = $(this); + $.each(classMap, function(unreadClass, readClass) { + if ($this.hasClass(unreadClass)) { + $this.removeClass(unreadClass).addClass(readClass); + } + }); + $this.children('dt[title="' + unreadTitle + '"]').attr('title', readTitle); + }); + + // Remove link to first unread post + $('a.unread').has('.icon-red').remove(); + + // Update mark topics read links + if (updateTopicLinks) { + $('[data-ajax="mark_topics_read"]').attr('href', res.U_MARK_TOPICS); + } + + phpbb.closeDarkenWrapper(3000); +}); + +// This callback will mark all notifications read +phpbb.addAjaxCallback('notification.mark_all_read', function(res) { + if (typeof res.success !== 'undefined') { + phpbb.markNotifications($('[data-notification-unread="true"]'), 0); + phpbb.closeDarkenWrapper(3000); + } +}); + +// This callback will mark a notification read +phpbb.addAjaxCallback('notification.mark_read', function(res) { + if (typeof res.success !== 'undefined') { + var unreadCount = Number($('#notification-button strong').html()) - 1; + phpbb.markNotifications($(this).parent('[data-notification-unread="true"]'), unreadCount); + } +}); + +/** + * Mark notification popup rows as read. + * + * @param {jQuery} $popup jQuery object(s) to mark read. + * @param {int} unreadCount The new unread notifications count. + */ +phpbb.markNotifications = function($popup, unreadCount) { + // Remove the unread status. + $popup.removeClass('bg2'); + $popup.find('a.mark_read').remove(); + + // Update the notification link to the real URL. + $popup.each(function() { + var link = $(this).find('a'); + link.attr('href', link.attr('data-real-url')); + }); + + // Update the unread count. + $('strong', '#notification-button').html(unreadCount); + // Remove the Mark all read link and hide notification count if there are no unread notifications. + if (!unreadCount) { + $('#mark_all_notifications').remove(); + $('#notification-button > strong').addClass('hidden'); + } + + // Update page title + var $title = $('title'); + var originalTitle = $title.text().replace(/(\((\d+)\))/, ''); + $title.text((unreadCount ? '(' + unreadCount + ')' : '') + originalTitle); +}; + +// This callback finds the post from the delete link, and removes it. +phpbb.addAjaxCallback('post_delete', function() { + var $this = $(this), + postId; + + if ($this.attr('data-refresh') === undefined) { + postId = $this[0].href.split('&p=')[1]; + var post = $this.parents('#p' + postId).css('pointer-events', 'none'); + if (post.hasClass('bg1') || post.hasClass('bg2')) { + var posts1 = post.nextAll('.bg1'); + post.nextAll('.bg2').removeClass('bg2').addClass('bg1'); + posts1.removeClass('bg1').addClass('bg2'); + } + post.fadeOut(function() { + $(this).remove(); + }); + } +}); + +// This callback removes the approve / disapprove div or link. +phpbb.addAjaxCallback('post_visibility', function(res) { + var remove = (res.visible) ? $(this) : $(this).parents('.post'); + $(remove).css('pointer-events', 'none').fadeOut(function() { + $(this).remove(); + }); + + if (res.visible) { + // Remove the "Deleted by" message from the post on restoring. + remove.parents('.post').find('.post_deleted_msg').css('pointer-events', 'none').fadeOut(function() { + $(this).remove(); + }); + } +}); + +// This removes the parent row of the link or form that fired the callback. +phpbb.addAjaxCallback('row_delete', function() { + $(this).parents('tr').remove(); +}); + +// This handles friend / foe additions removals. +phpbb.addAjaxCallback('zebra', function(res) { + var zebra; + + if (res.success) { + zebra = $('.zebra'); + zebra.first().html(res.MESSAGE_TEXT); + zebra.not(':first').html(' ').prev().html(' '); + } +}); + +/** + * This callback updates the poll results after voting. + */ +phpbb.addAjaxCallback('vote_poll', function(res) { + if (typeof res.success !== 'undefined') { + var poll = $(this).closest('.topic_poll'); + var panel = poll.find('.panel'); + var resultsVisible = poll.find('dl:first-child .resultbar').is(':visible'); + var mostVotes = 0; + + // Set min-height to prevent the page from jumping when the content changes + var updatePanelHeight = function (height) { + height = (typeof height === 'undefined') ? panel.find('.inner').outerHeight() : height; + panel.css('min-height', height); + }; + updatePanelHeight(); + + // Remove the View results link + if (!resultsVisible) { + poll.find('.poll_view_results').hide(500); + } + + if (!res.can_vote) { + poll.find('.polls, .poll_max_votes, .poll_vote, .poll_option_select').fadeOut(500, function () { + poll.find('.resultbar, .poll_option_percent, .poll_total_votes').show(); + }); + } else { + // If the user can still vote, simply slide down the results + poll.find('.resultbar, .poll_option_percent, .poll_total_votes').show(500); + } + + // Get the votes count of the highest poll option + poll.find('[data-poll-option-id]').each(function() { + var option = $(this); + var optionId = option.attr('data-poll-option-id'); + mostVotes = (res.vote_counts[optionId] >= mostVotes) ? res.vote_counts[optionId] : mostVotes; + }); + + // Update the total votes count + poll.find('.poll_total_vote_cnt').html(res.total_votes); + + // Update each option + poll.find('[data-poll-option-id]').each(function() { + var $this = $(this); + var optionId = $this.attr('data-poll-option-id'); + var voted = (typeof res.user_votes[optionId] !== 'undefined'); + var mostVoted = (res.vote_counts[optionId] === mostVotes); + var percent = (!res.total_votes) ? 0 : Math.round((res.vote_counts[optionId] / res.total_votes) * 100); + var percentRel = (mostVotes === 0) ? 0 : Math.round((res.vote_counts[optionId] / mostVotes) * 100); + var altText; + + altText = $this.attr('data-alt-text'); + if (voted) { + $this.attr('title', $.trim(altText)); + } else { + $this.attr('title', ''); + }; + $this.toggleClass('voted', voted); + $this.toggleClass('most-votes', mostVoted); + + // Update the bars + var bar = $this.find('.resultbar div'); + var barTimeLapse = (res.can_vote) ? 500 : 1500; + var newBarClass = (percent === 100) ? 'pollbar5' : 'pollbar' + (Math.floor(percent / 20) + 1); + + setTimeout(function () { + bar.animate({ width: percentRel + '%' }, 500) + .removeClass('pollbar1 pollbar2 pollbar3 pollbar4 pollbar5') + .addClass(newBarClass) + .html(res.vote_counts[optionId]); + + var percentText = percent ? percent + '%' : res.NO_VOTES; + $this.find('.poll_option_percent').html(percentText); + }, barTimeLapse); + }); + + if (!res.can_vote) { + poll.find('.polls').delay(400).fadeIn(500); + } + + // Display "Your vote has been cast." message. Disappears after 5 seconds. + var confirmationDelay = (res.can_vote) ? 300 : 900; + poll.find('.vote-submitted').delay(confirmationDelay).slideDown(200, function() { + if (resultsVisible) { + updatePanelHeight(); + } + + $(this).delay(5000).fadeOut(500, function() { + resizePanel(300); + }); + }); + + // Remove the gap resulting from removing options + setTimeout(function() { + resizePanel(500); + }, 1500); + + var resizePanel = function (time) { + var panelHeight = panel.height(); + var innerHeight = panel.find('.inner').outerHeight(); + + if (panelHeight !== innerHeight) { + panel.css({ minHeight: '', height: panelHeight }) + .animate({ height: innerHeight }, time, function () { + panel.css({ minHeight: innerHeight, height: '' }); + }); + } + }; + } +}); + +/** + * Show poll results when clicking View results link. + */ +$('.poll_view_results a').click(function(e) { + // Do not follow the link + e.preventDefault(); + + var $poll = $(this).parents('.topic_poll'); + + $poll.find('.resultbar, .poll_option_percent, .poll_total_votes').show(500); + $poll.find('.poll_view_results').hide(500); +}); + +$('[data-ajax]').each(function() { + var $this = $(this); + var ajax = $this.attr('data-ajax'); + var filter = $this.attr('data-filter'); + + if (ajax !== 'false') { + var fn = (ajax !== 'true') ? ajax : null; + filter = (filter !== undefined) ? phpbb.getFunctionByName(filter) : null; + + phpbb.ajaxify({ + selector: this, + refresh: $this.attr('data-refresh') !== undefined, + filter: filter, + callback: fn + }); + } +}); + + +/** + * This simply appends #preview to the action of the + * QR action when you click the Full Editor & Preview button + */ +$('#qr_full_editor').click(function() { + $('#qr_postform').attr('action', function(i, val) { + return val + '#preview'; + }); +}); + + +/** + * Make the display post links to use JS + */ +$('.display_post').click(function(e) { + // Do not follow the link + e.preventDefault(); + + var postId = $(this).attr('data-post-id'); + $('#post_content' + postId).show(); + $('#profile' + postId).show(); + $('#post_hidden' + postId).hide(); +}); + +/** +* Toggle the member search panel in memberlist.php. +* +* If user returns to search page after viewing results the search panel is automatically displayed. +* In any case the link will toggle the display status of the search panel and link text will be +* appropriately changed based on the status of the search panel. +*/ +$('#member_search').click(function () { + var $memberlistSearch = $('#memberlist_search'); + + $memberlistSearch.slideToggle('fast'); + phpbb.ajaxCallbacks.alt_text.call(this); + + // Focus on the username textbox if it's available and displayed + if ($memberlistSearch.is(':visible')) { + $('#username').focus(); + } + return false; +}); + +/** +* Automatically resize textarea +*/ +$(function() { + var $textarea = $('textarea:not(#message-box textarea, .no-auto-resize)'); + phpbb.resizeTextArea($textarea, { minHeight: 75, maxHeight: 250 }); + phpbb.resizeTextArea($('textarea', '#message-box')); +}); + + +})(jQuery); // Avoid conflicts with other libraries diff --git a/templates/SwiftBlueBeitDina/alternate.css b/templates/SwiftBlueBeitDina/alternate.css new file mode 100644 index 0000000..20c39b3 --- /dev/null +++ b/templates/SwiftBlueBeitDina/alternate.css @@ -0,0 +1,134 @@ +/** + * An alternate stylesheet. + * + * @package AutoIndex + * @author Justin Hagstrom + * @version 1.0.0 (February 03, 2005) + * + * @copyright Copyright (C) 2002-2005 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* Body */ +.autoindex_body, html +{ + font-family: verdana, lucidia, sans-serif; + font-size: 13px; + background-color: #FCFCFC; +} + +/* Images */ +.autoindex_body img +{ + border: none; +} + +/* Tables */ +.autoindex_table +{ + width: 100%; + border: none; + border-spacing: 2px; +} +.light_row +{ + background-color: #FEFEFE; + font-size: 12px; +} +.dark_row +{ + background-color: #EEEEEE; + font-size: 12px; +} +.light_row:hover, .dark_row:hover +{ + background-color: #FFF2BF; +} +.autoindex_td +{ + border: 1px solid #FAFAFA; + font-size: 12px; + padding: 1px; + text-align: left; + white-space: nowrap; +} +.autoindex_td_right +{ + border: 1px solid #FAFAFA; + font-size: 12px; + padding: 1px; + text-align: right; + white-space: nowrap; +} +.autoindex_td:hover, .autoindex_td_right:hover +{ + font-size: 12px; + padding: 1px; + border: 1px solid #FFCC00; +} +.autoindex_th +{ + background-color: #FFCC00; + border: 1px solid #AA9339; + font-size: 12px; + padding: 2px; +} + +/* Links */ +.plain_link +{ + color: #000000; + text-decoration: none; +} +.autoindex_a:visited, .autoindex_a:active +{ + color: #00008F; + text-decoration: none; +} +.autoindex_a:link +{ + color: #0000FF; + text-decoration: none; +} +.autoindex_a:hover +{ + color: #392266; + text-decoration: none; +} + +/* Buttons */ +.button +{ + color: #707070; + background-color: #F2F6FC; + font-family: arial, sans-serif; + font-size: 11px; + text-align: left; + vertical-align: middle; + font-weight: bold; + cursor: pointer; + border: 0px outset #CBCBCB; + padding: 3px 10px 3px 10px; +} + +/* Misc. */ +.paragraph +{ + background: #F2F6FC; + color: #000020; + font-size: 13px; +} +.autoindex_hr +{ + color: #000020; + background-color: #000020; + border: none; + width: 75%; + height: 1px; +} +.autoindex_small +{ + font-size: 10px; +} \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/biblia_online.js b/templates/SwiftBlueBeitDina/biblia_online.js new file mode 100644 index 0000000..4dc009e --- /dev/null +++ b/templates/SwiftBlueBeitDina/biblia_online.js @@ -0,0 +1,9 @@ +document.writeln(""); +document.writeln(""); \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/collapsiblecategories.js b/templates/SwiftBlueBeitDina/collapsiblecategories.js new file mode 100644 index 0000000..ee11fcc --- /dev/null +++ b/templates/SwiftBlueBeitDina/collapsiblecategories.js @@ -0,0 +1,40 @@ +(function($) { // Avoid conflicts with other libraries + + 'use strict'; + + // Get the collapsible element (has class .topiclist.forums OR .collapsible) + $.fn.getCollapsible = function() { + return this.closest('.forabg').find('.topiclist.forums, .collapsible').eq(0); + }; + + $('a.collapse-btn').each(function() { + var $this = $(this), + hidden = $this.attr('data-hidden'), + $content = $this.getCollapsible(); + + // Return if no collapsible content could be found + if (!$content.length) { + return; + } + + // Unhide the collapse buttons (makes them JS dependent) + $this.show(); + + // Hide hidden forums on load + if (hidden) { + $content.hide(); + } + }); + + phpbb.addAjaxCallback('phpbb_collapse', function(res) { + if (res.success) { + $(this) + .toggleClass('collapse-show collapse-hide') + .getCollapsible() + .stop(true, true) + .slideToggle('fast') + ; + } + }); + +})(jQuery); // Avoid conflicts with other libraries diff --git a/templates/SwiftBlueBeitDina/cookieconsent.min.css b/templates/SwiftBlueBeitDina/cookieconsent.min.css new file mode 100644 index 0000000..d4d4390 --- /dev/null +++ b/templates/SwiftBlueBeitDina/cookieconsent.min.css @@ -0,0 +1,6 @@ +.cc-window{opacity:1;-webkit-transition:opacity 1s ease;transition:opacity 1s ease}.cc-window.cc-invisible{opacity:0}.cc-animate.cc-revoke{-webkit-transition:transform 1s ease;-webkit-transition:-webkit-transform 1s ease;transition:-webkit-transform 1s ease;transition:transform 1s ease;transition:transform 1s ease,-webkit-transform 1s ease}.cc-animate.cc-revoke.cc-top{-webkit-transform:translateY(-2em);transform:translateY(-2em)}.cc-animate.cc-revoke.cc-bottom{-webkit-transform:translateY(2em);transform:translateY(2em)}.cc-animate.cc-revoke.cc-active.cc-top{-webkit-transform:translateY(0);transform:translateY(0)}.cc-animate.cc-revoke.cc-active.cc-bottom{-webkit-transform:translateY(0);transform:translateY(0)}.cc-revoke:hover{-webkit-transform:translateY(0);transform:translateY(0)}.cc-grower{max-height:0;overflow:hidden;-webkit-transition:max-height 1s;transition:max-height 1s} +.cc-revoke,.cc-window{position:fixed;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:Helvetica,Calibri,Arial,sans-serif;font-size:16px;line-height:1.5em;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;z-index:9999}.cc-window.cc-static{position:static}.cc-window.cc-floating{padding:2em;max-width:24em;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner{padding:1em 1.8em;width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.cc-revoke{padding:.5em}.cc-revoke:hover{text-decoration:underline}.cc-header{font-size:18px;font-weight:700}.cc-btn,.cc-close,.cc-link,.cc-revoke{cursor:pointer}.cc-link{opacity:.8;display:inline-block;padding:.2em;text-decoration:underline}.cc-link:hover{opacity:1}.cc-link:active,.cc-link:visited{color:initial}.cc-btn{display:block;padding:.4em .8em;font-size:.9em;font-weight:700;border-width:2px;border-style:solid;text-align:center;white-space:nowrap}.cc-highlight .cc-btn:first-child{background-color:transparent;border-color:transparent}.cc-highlight .cc-btn:first-child:focus,.cc-highlight .cc-btn:first-child:hover{background-color:transparent;text-decoration:underline}.cc-close{display:block;position:absolute;top:.5em;right:.5em;font-size:1.6em;opacity:.9;line-height:.75}.cc-close:focus,.cc-close:hover{opacity:1} +.cc-revoke.cc-top{top:0;left:3em;border-bottom-left-radius:.5em;border-bottom-right-radius:.5em}.cc-revoke.cc-bottom{bottom:0;left:3em;border-top-left-radius:.5em;border-top-right-radius:.5em}.cc-revoke.cc-left{left:3em;right:unset}.cc-revoke.cc-right{right:3em;left:unset}.cc-top{top:1em}.cc-left{left:1em}.cc-right{right:1em}.cc-bottom{bottom:1em}.cc-floating>.cc-link{margin-bottom:1em}.cc-floating .cc-message{display:block;margin-bottom:1em}.cc-window.cc-floating .cc-compliance{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}.cc-window.cc-banner{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cc-banner.cc-top{left:0;right:0;top:0}.cc-banner.cc-bottom{left:0;right:0;bottom:0}.cc-banner .cc-message{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-width:100%;margin-right:1em}.cc-compliance{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:justify;align-content:space-between}.cc-floating .cc-compliance>.cc-btn{-webkit-box-flex:1;-ms-flex:1;flex:1}.cc-btn+.cc-btn{margin-left:.5em} +@media print{.cc-revoke,.cc-window{display:none}}@media screen and (max-width:900px){.cc-btn{white-space:normal}}@media screen and (max-width:414px) and (orientation:portrait),screen and (max-width:736px) and (orientation:landscape){.cc-window.cc-top{top:0}.cc-window.cc-bottom{bottom:0}.cc-window.cc-banner,.cc-window.cc-floating,.cc-window.cc-left,.cc-window.cc-right{left:0;right:0}.cc-window.cc-banner{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner .cc-compliance{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.cc-window.cc-floating{max-width:none}.cc-window .cc-message{margin-bottom:1em}.cc-window.cc-banner{-webkit-box-align:unset;-ms-flex-align:unset;align-items:unset}.cc-window.cc-banner .cc-message{margin-right:0}} +.cc-floating.cc-theme-classic{padding:1.2em;border-radius:5px}.cc-floating.cc-type-info.cc-theme-classic .cc-compliance{text-align:center;display:inline;-webkit-box-flex:0;-ms-flex:none;flex:none}.cc-theme-classic .cc-btn{border-radius:5px}.cc-theme-classic .cc-btn:last-child{min-width:140px}.cc-floating.cc-type-info.cc-theme-classic .cc-btn{display:inline-block} +.cc-theme-edgeless.cc-window{padding:0}.cc-floating.cc-theme-edgeless .cc-message{margin:2em;margin-bottom:1.5em}.cc-banner.cc-theme-edgeless .cc-btn{margin:0;padding:.8em 1.8em;height:100%}.cc-banner.cc-theme-edgeless .cc-message{margin-left:1em}.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn{margin-left:0} \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/cookieconsent.min.js b/templates/SwiftBlueBeitDina/cookieconsent.min.js new file mode 100644 index 0000000..1e3dccf --- /dev/null +++ b/templates/SwiftBlueBeitDina/cookieconsent.min.js @@ -0,0 +1 @@ +!function(e){if(!e.hasInitialised){var t={escapeRegExp:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},hasClass:function(e,t){var i=" ";return 1===e.nodeType&&(i+e.className+i).replace(/[\n\t]/g,i).indexOf(i+t+i)>=0},addClass:function(e,t){e.className+=" "+t},removeClass:function(e,t){var i=new RegExp("\\b"+this.escapeRegExp(t)+"\\b");e.className=e.className.replace(i,"")},interpolateString:function(e,t){return e.replace(/{{([a-z][a-z0-9\-_]*)}}/gi,function(e){return t(arguments[1])||""})},getCookie:function(e){var t=("; "+document.cookie).split("; "+e+"=");return t.length<2?void 0:t.pop().split(";").shift()},setCookie:function(e,t,i,n,o,s){var r=new Date;r.setHours(r.getHours()+24*(i||365));var a=[e+"="+t,"expires="+r.toUTCString(),"path="+(o||"/")];n&&a.push("domain="+n),s&&a.push("secure"),document.cookie=a.join(";")},deepExtend:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(i in e&&this.isPlainObject(e[i])&&this.isPlainObject(t[i])?this.deepExtend(e[i],t[i]):e[i]=t[i]);return e},throttle:function(e,t){var i=!1;return function(){i||(e.apply(this,arguments),i=!0,setTimeout(function(){i=!1},t))}},hash:function(e){var t,i,n=0;if(0===e.length)return n;for(t=0,i=e.length;t=128?"#000":"#fff"},getLuminance:function(e){var t=parseInt(this.normaliseHex(e),16),i=38+(t>>16),n=38+(t>>8&255),o=38+(255&t);return"#"+(16777216+65536*(i<255?i<1?0:i:255)+256*(n<255?n<1?0:n:255)+(o<255?o<1?0:o:255)).toString(16).slice(1)},isMobile:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},isPlainObject:function(e){return"object"==typeof e&&null!==e&&e.constructor==Object},traverseDOMPath:function(e,i){return e&&e.parentNode?t.hasClass(e,i)?e:this.traverseDOMPath(e.parentNode,i):null}};e.status={deny:"deny",allow:"allow",dismiss:"dismiss"},e.transitionEnd=function(){var e=document.createElement("div"),t={t:"transitionend",OT:"oTransitionEnd",msT:"MSTransitionEnd",MozT:"transitionend",WebkitT:"webkitTransitionEnd"};for(var i in t)if(t.hasOwnProperty(i)&&void 0!==e.style[i+"ransition"])return t[i];return""}(),e.hasTransition=!!e.transitionEnd;var i=Object.keys(e.status).map(t.escapeRegExp);e.customStyles={},e.Popup=function(){var n={enabled:!0,container:null,cookie:{name:"cookieconsent_status",path:"/",domain:"",expiryDays:365,secure:!1},onPopupOpen:function(){},onPopupClose:function(){},onInitialise:function(e){},onStatusChange:function(e,t){},onRevokeChoice:function(){},onNoCookieLaw:function(e,t){},content:{header:"Cookies used on the website!",message:"This website uses cookies to ensure you get the best experience on our website.",dismiss:"Got it!",allow:"Allow cookies",deny:"Decline",link:"Learn more",href:"https://www.cookiesandyou.com",close:"❌",target:"_blank",policy:"Cookie Policy"},elements:{header:'{{header}} ',message:'{{message}}',messagelink:'{{message}} {{link}}',dismiss:'{{dismiss}}',allow:'{{allow}}',deny:'{{deny}}',link:'{{link}}',close:'{{close}}'},window:'',revokeBtn:'
{{policy}}
',compliance:{info:'
{{dismiss}}
',"opt-in":'
{{deny}}{{allow}}
',"opt-out":'
{{deny}}{{allow}}
'},type:"info",layouts:{basic:"{{messagelink}}{{compliance}}","basic-close":"{{messagelink}}{{compliance}}{{close}}","basic-header":"{{header}}{{message}}{{link}}{{compliance}}"},layout:"basic",position:"bottom",theme:"block",static:!1,palette:null,revokable:!1,animateRevokable:!0,showLink:!0,dismissOnScroll:!1,dismissOnTimeout:!1,dismissOnWindowClick:!1,ignoreClicksFrom:["cc-revoke","cc-btn"],autoOpen:!0,autoAttach:!0,whitelistPage:[],blacklistPage:[],overrideHTML:null};function o(){this.initialise.apply(this,arguments)}function s(e){this.openingTimeout=null,t.removeClass(e,"cc-invisible")}function r(t){t.style.display="none",t.removeEventListener(e.transitionEnd,this.afterTransition),this.afterTransition=null}function a(){var e=this.options.position.split("-"),t=[];return e.forEach(function(e){t.push("cc-"+e)}),t}function c(n){var o=this.options,s=document.createElement("div"),r=o.container&&1===o.container.nodeType?o.container:document.body;s.innerHTML=n;var a=s.children[0];return a.style.display="none",t.hasClass(a,"cc-window")&&e.hasTransition&&t.addClass(a,"cc-invisible"),this.onButtonClick=function(n){var o=t.traverseDOMPath(n.target,"cc-btn")||n.target;if(t.hasClass(o,"cc-btn")){var s=o.className.match(new RegExp("\\bcc-("+i.join("|")+")\\b")),r=s&&s[1]||!1;r&&(this.setStatus(r),this.close(!0))}t.hasClass(o,"cc-close")&&(this.setStatus(e.status.dismiss),this.close(!0));t.hasClass(o,"cc-revoke")&&this.revokeChoice()}.bind(this),a.addEventListener("click",this.onButtonClick),o.autoAttach&&(r.firstChild?r.insertBefore(a,r.firstChild):r.appendChild(a)),a}function l(e){return"000000"==(e=t.normaliseHex(e))?"#222":t.getLuminance(e)}function u(e,t){for(var i=0,n=e.length;i=0;o&&t(n);return o}.call(this)&&(this.options.enabled=!1),u(this.options.blacklistPage,location.pathname)&&(this.options.enabled=!1),u(this.options.whitelistPage,location.pathname)&&(this.options.enabled=!0);var o=this.options.window.replace("{{classes}}",function(){var i=this.options,n="top"==i.position||"bottom"==i.position?"banner":"floating";t.isMobile()&&(n="floating");var o=["cc-"+n,"cc-type-"+i.type,"cc-theme-"+i.theme];i.static&&o.push("cc-static");o.push.apply(o,a.call(this));(function(i){var n=t.hash(JSON.stringify(i)),o="cc-color-override-"+n,s=t.isPlainObject(i);this.customStyleSelector=s?o:null,s&&function(i,n,o){if(e.customStyles[i])return void++e.customStyles[i].references;var s={},r=n.popup,a=n.button,c=n.highlight;r&&(r.text=r.text?r.text:t.getContrast(r.background),r.link=r.link?r.link:r.text,s[o+".cc-window"]=["color: "+r.text,"background-color: "+r.background],s[o+".cc-revoke"]=["color: "+r.text,"background-color: "+r.background],s[o+" .cc-link,"+o+" .cc-link:active,"+o+" .cc-link:visited"]=["color: "+r.link],a&&(a.text=a.text?a.text:t.getContrast(a.background),a.border=a.border?a.border:"transparent",s[o+" .cc-btn"]=["color: "+a.text,"border-color: "+a.border,"background-color: "+a.background],a.padding&&s[o+" .cc-btn"].push("padding: "+a.padding),"transparent"!=a.background&&(s[o+" .cc-btn:hover, "+o+" .cc-btn:focus"]=["background-color: "+(a.hover||l(a.background))]),c?(c.text=c.text?c.text:t.getContrast(c.background),c.border=c.border?c.border:"transparent",s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+c.text,"border-color: "+c.border,"background-color: "+c.background]):s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+r.text]));var u=document.createElement("style");document.head.appendChild(u),e.customStyles[i]={references:1,element:u.sheet};var h=-1;for(var p in s)s.hasOwnProperty(p)&&u.sheet.insertRule(p+"{"+s[p].join(";")+"}",++h)}(n,i,"."+o);return s}).call(this,this.options.palette);this.customStyleSelector&&o.push(this.customStyleSelector);return o}.call(this).join(" ")).replace("{{children}}",function(){var e={},i=this.options;i.showLink||(i.elements.link="",i.elements.messagelink=i.elements.message);Object.keys(i.elements).forEach(function(n){e[n]=t.interpolateString(i.elements[n],function(e){var t=i.content[e];return e&&"string"==typeof t&&t.length?t:""})});var n=i.compliance[i.type];n||(n=i.compliance.info);e.compliance=t.interpolateString(n,function(t){return e[t]});var o=i.layouts[i.layout];o||(o=i.layouts.basic);return t.interpolateString(o,function(t){return e[t]})}.call(this)),s=this.options.overrideHTML;if("string"==typeof s&&s.length&&(o=s),this.options.static){var r=c.call(this,'
'+o+"
");r.style.display="",this.element=r.firstChild,this.element.style.display="none",t.addClass(this.element,"cc-invisible")}else this.element=c.call(this,o);(function(){var i=this.setStatus.bind(this),n=this.close.bind(this),o=this.options.dismissOnTimeout;"number"==typeof o&&o>=0&&(this.dismissTimeout=window.setTimeout(function(){i(e.status.dismiss),n(!0)},Math.floor(o)));var s=this.options.dismissOnScroll;if("number"==typeof s&&s>=0){var r=function(t){window.pageYOffset>Math.floor(s)&&(i(e.status.dismiss),n(!0),window.removeEventListener("scroll",r),this.onWindowScroll=null)};this.options.enabled&&(this.onWindowScroll=r,window.addEventListener("scroll",r))}var a=this.options.dismissOnWindowClick,c=this.options.ignoreClicksFrom;if(a){var l=function(o){for(var s=!1,r=o.path.length,a=c.length,u=0;uo&&(i=!0),i?t.hasClass(n,"cc-active")||t.addClass(n,"cc-active"):t.hasClass(n,"cc-active")&&t.removeClass(n,"cc-active")},200);this.onMouseMove=o,window.addEventListener("mousemove",o)}}}.call(this),this.options.autoOpen&&this.autoOpen()},o.prototype.destroy=function(){this.onButtonClick&&this.element&&(this.element.removeEventListener("click",this.onButtonClick),this.onButtonClick=null),this.dismissTimeout&&(clearTimeout(this.dismissTimeout),this.dismissTimeout=null),this.onWindowScroll&&(window.removeEventListener("scroll",this.onWindowScroll),this.onWindowScroll=null),this.onWindowClick&&(window.removeEventListener("click",this.onWindowClick),this.onWindowClick=null),this.onMouseMove&&(window.removeEventListener("mousemove",this.onMouseMove),this.onMouseMove=null),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=null,this.revokeBtn&&this.revokeBtn.parentNode&&this.revokeBtn.parentNode.removeChild(this.revokeBtn),this.revokeBtn=null,function(i){if(t.isPlainObject(i)){var n=t.hash(JSON.stringify(i)),o=e.customStyles[n];if(o&&!--o.references){var s=o.element.ownerNode;s&&s.parentNode&&s.parentNode.removeChild(s),e.customStyles[n]=null}}}(this.options.palette),this.options=null},o.prototype.open=function(t){if(this.element)return this.isOpen()||(e.hasTransition?this.fadeIn():this.element.style.display="",this.options.revokable&&this.toggleRevokeButton(),this.options.onPopupOpen.call(this)),this},o.prototype.close=function(t){if(this.element)return this.isOpen()&&(e.hasTransition?this.fadeOut():this.element.style.display="none",t&&this.options.revokable&&this.toggleRevokeButton(!0),this.options.onPopupClose.call(this)),this},o.prototype.fadeIn=function(){var i=this.element;if(e.hasTransition&&i&&(this.afterTransition&&r.call(this,i),t.hasClass(i,"cc-invisible"))){if(i.style.display="",this.options.static){var n=this.element.clientHeight;this.element.parentNode.style.maxHeight=n+"px"}this.openingTimeout=setTimeout(s.bind(this,i),20)}},o.prototype.fadeOut=function(){var i=this.element;e.hasTransition&&i&&(this.openingTimeout&&(clearTimeout(this.openingTimeout),s.bind(this,i)),t.hasClass(i,"cc-invisible")||(this.options.static&&(this.element.parentNode.style.maxHeight=""),this.afterTransition=r.bind(this,i),i.addEventListener(e.transitionEnd,this.afterTransition),t.addClass(i,"cc-invisible")))},o.prototype.isOpen=function(){return this.element&&""==this.element.style.display&&(!e.hasTransition||!t.hasClass(this.element,"cc-invisible"))},o.prototype.toggleRevokeButton=function(e){this.revokeBtn&&(this.revokeBtn.style.display=e?"":"none")},o.prototype.revokeChoice=function(e){this.options.enabled=!0,this.clearStatus(),this.options.onRevokeChoice.call(this),e||this.autoOpen()},o.prototype.hasAnswered=function(t){return Object.keys(e.status).indexOf(this.getStatus())>=0},o.prototype.hasConsented=function(t){var i=this.getStatus();return i==e.status.allow||i==e.status.dismiss},o.prototype.autoOpen=function(e){!this.hasAnswered()&&this.options.enabled?this.open():this.hasAnswered()&&this.options.revokable&&this.toggleRevokeButton(!0)},o.prototype.setStatus=function(i){var n=this.options.cookie,o=t.getCookie(n.name),s=Object.keys(e.status).indexOf(o)>=0;Object.keys(e.status).indexOf(i)>=0?(t.setCookie(n.name,i,n.expiryDays,n.domain,n.path,n.secure),this.options.onStatusChange.call(this,i,s)):this.clearStatus()},o.prototype.getStatus=function(){return t.getCookie(this.options.cookie.name)},o.prototype.clearStatus=function(){var e=this.options.cookie;t.setCookie(e.name,"",-1,e.domain,e.path)},o}(),e.Location=function(){var e={timeout:5e3,services:["ipinfo"],serviceDefinitions:{ipinfo:function(){return{url:"//ipinfo.io",headers:["Accept: application/json"],callback:function(e,t){try{var i=JSON.parse(t);return i.error?s(i):{code:i.country}}catch(e){return s({error:"Invalid response ("+e+")"})}}}},ipinfodb:function(e){return{url:"//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}",isScript:!0,callback:function(e,t){try{var i=JSON.parse(t);return"ERROR"==i.statusCode?s({error:i.statusMessage}):{code:i.countryCode}}catch(e){return s({error:"Invalid response ("+e+")"})}}}},maxmind:function(){return{url:"//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js",isScript:!0,callback:function(e){window.geoip2?geoip2.country(function(t){try{e({code:t.country.iso_code})}catch(t){e(s(t))}},function(t){e(s(t))}):e(new Error("Unexpected response format. The downloaded script should have exported `geoip2` to the global scope"))}}}}};function i(i){t.deepExtend(this.options={},e),t.isPlainObject(i)&&t.deepExtend(this.options,i),this.currentServiceIndex=-1}function n(e,t,i){var n,o=document.createElement("script");o.type="text/"+(e.type||"javascript"),o.src=e.src||e,o.async=!1,o.onreadystatechange=o.onload=function(){var e=o.readyState;clearTimeout(n),t.done||e&&!/loaded|complete/.test(e)||(t.done=!0,t(),o.onreadystatechange=o.onload=null)},document.body.appendChild(o),n=setTimeout(function(){t.done=!0,t(),o.onreadystatechange=o.onload=null},i)}function o(e,t,i,n,o){var s=new(window.XMLHttpRequest||window.ActiveXObject)("MSXML2.XMLHTTP.3.0");if(s.open(n?"POST":"GET",e,1),s.setRequestHeader("Content-type","application/x-www-form-urlencoded"),Array.isArray(o))for(var r=0,a=o.length;r3&&t(s)}),s.send(n)}function s(e){return new Error("Error ["+(e.code||"UNKNOWN")+"]: "+e.error)}return i.prototype.getNextService=function(){var e;do{e=this.getServiceByIdx(++this.currentServiceIndex)}while(this.currentServiceIndex=0,revokable:t.revokable.indexOf(e)>=0,explicitAction:t.explicitAction.indexOf(e)>=0}},i.prototype.applyLaw=function(e,t){var i=this.get(t);return i.hasLaw||(e.enabled=!1,"function"==typeof e.onNoCookieLaw&&e.onNoCookieLaw(t,i)),this.options.regionalLaw&&(i.revokable&&(e.revokable=!0),i.explicitAction&&(e.dismissOnScroll=!1,e.dismissOnTimeout=!1)),e},i}(),e.initialise=function(i,n,o){var s=new e.Law(i.law);n||(n=function(){}),o||(o=function(){});var r=Object.keys(e.status),a=t.getCookie("cookieconsent_status");r.indexOf(a)>=0?n(new e.Popup(i)):e.getCountryCode(i,function(t){delete i.law,delete i.location,t.code&&(i=s.applyLaw(i,t.code)),n(new e.Popup(i))},function(t){delete i.law,delete i.location,o(t,new e.Popup(i))})},e.getCountryCode=function(t,i,n){t.law&&t.law.countryCode?i({code:t.law.countryCode}):t.location?new e.Location(t.location).locate(function(e){i(e||{})},n):i({})},e.utils=t,e.hasInitialised=!0,window.cookieconsent=e}}(window.cookieconsent||{}); \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/core.js b/templates/SwiftBlueBeitDina/core.js new file mode 100644 index 0000000..59d77e1 --- /dev/null +++ b/templates/SwiftBlueBeitDina/core.js @@ -0,0 +1,1819 @@ +/* global bbfontstyle */ + +var phpbb = {}; +phpbb.alertTime = 100; + +(function($) { // Avoid conflicts with other libraries + +'use strict'; + +// define a couple constants for keydown functions. +var keymap = { + TAB: 9, + ENTER: 13, + ESC: 27, + ARROW_UP: 38, + ARROW_DOWN: 40 +}; + +var $dark = $('#darkenwrapper'); +var $loadingIndicator; +var phpbbAlertTimer = null; + +phpbb.isTouch = (window && typeof window.ontouchstart !== 'undefined'); + +// Add ajax pre-filter to prevent cross-domain script execution +$.ajaxPrefilter(function(s) { + if (s.crossDomain) { + s.contents.script = false; + } +}); + +/** + * Display a loading screen + * + * @returns {object} Returns loadingIndicator. + */ +phpbb.loadingIndicator = function() { + if (!$loadingIndicator) { + $loadingIndicator = $('#loading_indicator'); + } + + if (!$loadingIndicator.is(':visible')) { + $loadingIndicator.fadeIn(phpbb.alertTime); + // Wait 60 seconds and display an error if nothing has been returned by then. + phpbb.clearLoadingTimeout(); + phpbbAlertTimer = setTimeout(function() { + phpbb.showTimeoutMessage(); + }, 60000); + } + + return $loadingIndicator; +}; + +/** + * Show timeout message + */ +phpbb.showTimeoutMessage = function () { + var $alert = $('#phpbb_alert'); + + if ($loadingIndicator.is(':visible')) { + phpbb.alert($alert.attr('data-l-err'), $alert.attr('data-l-timeout-processing-req')); + } +}; + +/** + * Clear loading alert timeout +*/ +phpbb.clearLoadingTimeout = function() { + if (phpbbAlertTimer !== null) { + clearTimeout(phpbbAlertTimer); + phpbbAlertTimer = null; + } +}; + + +/** +* Close popup alert after a specified delay +* +* @param {int} delay Delay in ms until darkenwrapper's click event is triggered +*/ +phpbb.closeDarkenWrapper = function(delay) { + phpbbAlertTimer = setTimeout(function() { + $('#darkenwrapper').trigger('click'); + }, delay); +}; + +/** + * Display a simple alert similar to JSs native alert(). + * + * You can only call one alert or confirm box at any one time. + * + * @param {string} title Title of the message, eg "Information" (HTML). + * @param {string} msg Message to display (HTML). + * + * @returns {object} Returns the div created. + */ +phpbb.alert = function(title, msg) { + var $alert = $('#phpbb_alert'); + $alert.find('.alert_title').html(title); + $alert.find('.alert_text').html(msg); + + $(document).on('keydown.phpbb.alert', function(e) { + if (e.keyCode === keymap.ENTER || e.keyCode === keymap.ESC) { + phpbb.alert.close($alert, true); + e.preventDefault(); + e.stopPropagation(); + } + }); + phpbb.alert.open($alert); + + return $alert; +}; + +/** +* Handler for opening an alert box. +* +* @param {jQuery} $alert jQuery object. +*/ +phpbb.alert.open = function($alert) { + if (!$dark.is(':visible')) { + $dark.fadeIn(phpbb.alertTime); + } + + if ($loadingIndicator && $loadingIndicator.is(':visible')) { + $loadingIndicator.fadeOut(phpbb.alertTime, function() { + $dark.append($alert); + $alert.fadeIn(phpbb.alertTime); + }); + } else if ($dark.is(':visible')) { + $dark.append($alert); + $alert.fadeIn(phpbb.alertTime); + } else { + $dark.append($alert); + $alert.show(); + $dark.fadeIn(phpbb.alertTime); + } + + $alert.on('click', function(e) { + e.stopPropagation(); + }); + + $dark.one('click', function(e) { + phpbb.alert.close($alert, true); + e.preventDefault(); + e.stopPropagation(); + }); + + $alert.find('.alert_close').one('click', function(e) { + phpbb.alert.close($alert, true); + e.preventDefault(); + }); +}; + +/** +* Handler for closing an alert box. +* +* @param {jQuery} $alert jQuery object. +* @param {bool} fadedark Whether to remove dark background. +*/ +phpbb.alert.close = function($alert, fadedark) { + var $fade = (fadedark) ? $dark : $alert; + + $fade.fadeOut(phpbb.alertTime, function() { + $alert.hide(); + }); + + $alert.find('.alert_close').off('click'); + $(document).off('keydown.phpbb.alert'); +}; + +/** + * Display a simple yes / no box to the user. + * + * You can only call one alert or confirm box at any one time. + * + * @param {string} msg Message to display (HTML). + * @param {function} callback Callback. Bool param, whether the user pressed + * yes or no (or whatever their language is). + * @param {bool} fadedark Remove the dark background when done? Defaults + * to yes. + * + * @returns {object} Returns the div created. + */ +phpbb.confirm = function(msg, callback, fadedark) { + var $confirmDiv = $('#phpbb_confirm'); + $confirmDiv.find('.alert_text').html(msg); + fadedark = typeof fadedark !== 'undefined' ? fadedark : true; + + $(document).on('keydown.phpbb.alert', function(e) { + if (e.keyCode === keymap.ENTER || e.keyCode === keymap.ESC) { + var name = (e.keyCode === keymap.ENTER) ? 'confirm' : 'cancel'; + + $('input[name="' + name + '"]').trigger('click'); + e.preventDefault(); + e.stopPropagation(); + } + }); + + $confirmDiv.find('input[type="button"]').one('click.phpbb.confirmbox', function(e) { + var confirmed = this.name === 'confirm'; + + callback(confirmed); + $confirmDiv.find('input[type="button"]').off('click.phpbb.confirmbox'); + phpbb.alert.close($confirmDiv, fadedark || !confirmed); + + e.preventDefault(); + e.stopPropagation(); + }); + + phpbb.alert.open($confirmDiv); + + return $confirmDiv; +}; + +/** + * Turn a querystring into an array. + * + * @argument {string} string The querystring to parse. + * @returns {object} The object created. + */ +phpbb.parseQuerystring = function(string) { + var params = {}, i, split; + + string = string.split('&'); + for (i = 0; i < string.length; i++) { + split = string[i].split('='); + params[split[0]] = decodeURIComponent(split[1]); + } + return params; +}; + + +/** + * Makes a link use AJAX instead of loading an entire page. + * + * This function will work for links (both standard links and links which + * invoke confirm_box) and forms. It will be called automatically for links + * and forms with the data-ajax attribute set, and will call the necessary + * callback. + * + * For more info, view the following page on the phpBB wiki: + * http://wiki.phpbb.com/JavaScript_Function.phpbb.ajaxify + * + * @param {object} options Options. + */ +phpbb.ajaxify = function(options) { + var $elements = $(options.selector), + refresh = options.refresh, + callback = options.callback, + overlay = (typeof options.overlay !== 'undefined') ? options.overlay : true, + isForm = $elements.is('form'), + isText = $elements.is('input[type="text"], textarea'), + eventName; + + if (isForm) { + eventName = 'submit'; + } else if (isText) { + eventName = 'keyup'; + } else { + eventName = 'click'; + } + + $elements.on(eventName, function(event) { + var action, method, data, submit, that = this, $this = $(this); + + if ($this.find('input[type="submit"][data-clicked]').attr('data-ajax') === 'false') { + return; + } + + /** + * Handler for AJAX errors + */ + function errorHandler(jqXHR, textStatus, errorThrown) { + if (typeof console !== 'undefined' && console.log) { + console.log('AJAX error. status: ' + textStatus + ', message: ' + errorThrown); + } + phpbb.clearLoadingTimeout(); + var responseText, errorText = false; + try { + responseText = JSON.parse(jqXHR.responseText); + responseText = responseText.message; + } catch (e) {} + if (typeof responseText === 'string' && responseText.length > 0) { + errorText = responseText; + } else if (typeof errorThrown === 'string' && errorThrown.length > 0) { + errorText = errorThrown; + } else { + errorText = $dark.attr('data-ajax-error-text-' + textStatus); + if (typeof errorText !== 'string' || !errorText.length) { + errorText = $dark.attr('data-ajax-error-text'); + } + } + phpbb.alert($dark.attr('data-ajax-error-title'), errorText); + } + + /** + * This is a private function used to handle the callbacks, refreshes + * and alert. It calls the callback, refreshes the page if necessary, and + * displays an alert to the user and removes it after an amount of time. + * + * It cannot be called from outside this function, and is purely here to + * avoid repetition of code. + * + * @param {object} res The object sent back by the server. + */ + function returnHandler(res) { + var alert; + + phpbb.clearLoadingTimeout(); + + // Is a confirmation required? + if (typeof res.S_CONFIRM_ACTION === 'undefined') { + // If a confirmation is not required, display an alert and call the + // callbacks. + if (typeof res.MESSAGE_TITLE !== 'undefined') { + alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + } else { + $dark.fadeOut(phpbb.alertTime); + + if ($loadingIndicator) { + $loadingIndicator.fadeOut(phpbb.alertTime); + } + } + + if (typeof phpbb.ajaxCallbacks[callback] === 'function') { + phpbb.ajaxCallbacks[callback].call(that, res); + } + + // If the server says to refresh the page, check whether the page should + // be refreshed and refresh page after specified time if required. + if (res.REFRESH_DATA) { + if (typeof refresh === 'function') { + refresh = refresh(res.REFRESH_DATA.url); + } else if (typeof refresh !== 'boolean') { + refresh = false; + } + + phpbbAlertTimer = setTimeout(function() { + if (refresh) { + window.location = res.REFRESH_DATA.url; + } + + // Hide the alert even if we refresh the page, in case the user + // presses the back button. + $dark.fadeOut(phpbb.alertTime, function() { + if (typeof alert !== 'undefined') { + alert.hide(); + } + }); + }, res.REFRESH_DATA.time * 1000); // Server specifies time in seconds + } + } else { + // If confirmation is required, display a dialog to the user. + phpbb.confirm(res.MESSAGE_BODY, function(del) { + if (!del) { + return; + } + + phpbb.loadingIndicator(); + data = $('
' + res.S_HIDDEN_FIELDS + '
').serialize(); + $.ajax({ + url: res.S_CONFIRM_ACTION, + type: 'POST', + data: data + '&confirm=' + res.YES_VALUE + '&' + $('form', '#phpbb_confirm').serialize(), + success: returnHandler, + error: errorHandler + }); + }, false); + } + } + + // If the element is a form, POST must be used and some extra data must + // be taken from the form. + var runFilter = (typeof options.filter === 'function'); + data = {}; + + if (isForm) { + action = $this.attr('action').replace('&', '&'); + data = $this.serializeArray(); + method = $this.attr('method') || 'GET'; + + if ($this.find('input[type="submit"][data-clicked]')) { + submit = $this.find('input[type="submit"][data-clicked]'); + data.push({ + name: submit.attr('name'), + value: submit.val() + }); + } + } else if (isText) { + var name = $this.attr('data-name') || this.name; + action = $this.attr('data-url').replace('&', '&'); + data[name] = this.value; + method = 'POST'; + } else { + action = this.href; + data = null; + method = 'GET'; + } + + var sendRequest = function() { + var dataOverlay = $this.attr('data-overlay'); + if (overlay && (typeof dataOverlay === 'undefined' || dataOverlay === 'true')) { + phpbb.loadingIndicator(); + } + + var request = $.ajax({ + url: action, + type: method, + data: data, + success: returnHandler, + error: errorHandler, + cache: false + }); + + request.always(function() { + if ($loadingIndicator && $loadingIndicator.is(':visible')) { + $loadingIndicator.fadeOut(phpbb.alertTime); + } + }); + }; + + // If filter function returns false, cancel the AJAX functionality, + // and return true (meaning that the HTTP request will be sent normally). + if (runFilter && !options.filter.call(this, data, event, sendRequest)) { + return; + } + + sendRequest(); + event.preventDefault(); + }); + + if (isForm) { + $elements.find('input:submit').click(function () { + var $this = $(this); + + // Remove data-clicked attribute from any submit button of form + $this.parents('form:first').find('input:submit[data-clicked]').removeAttr('data-clicked'); + + $this.attr('data-clicked', 'true'); + }); + } + + return this; +}; + +phpbb.search = { + cache: { + data: [] + }, + tpl: [], + container: [] +}; + +/** + * Get cached search data. + * + * @param {string} id Search ID. + * @returns {bool|object} Cached data object. Returns false if no data exists. + */ +phpbb.search.cache.get = function(id) { + if (this.data[id]) { + return this.data[id]; + } + return false; +}; + +/** + * Set search cache data value. + * + * @param {string} id Search ID. + * @param {string} key Data key. + * @param {string} value Data value. + */ +phpbb.search.cache.set = function(id, key, value) { + if (!this.data[id]) { + this.data[id] = { results: [] }; + } + this.data[id][key] = value; +}; + +/** + * Cache search result. + * + * @param {string} id Search ID. + * @param {string} keyword Keyword. + * @param {Array} results Search results. + */ +phpbb.search.cache.setResults = function(id, keyword, results) { + this.data[id].results[keyword] = results; +}; + +/** + * Trim spaces from keyword and lower its case. + * + * @param {string} keyword Search keyword to clean. + * @returns {string} Cleaned string. + */ +phpbb.search.cleanKeyword = function(keyword) { + return $.trim(keyword).toLowerCase(); +}; + +/** + * Get clean version of search keyword. If textarea supports several keywords + * (one per line), it fetches the current keyword based on the caret position. + * + * @param {jQuery} $input Search input|textarea. + * @param {string} keyword Input|textarea value. + * @param {bool} multiline Whether textarea supports multiple search keywords. + * + * @returns string Clean string. + */ +phpbb.search.getKeyword = function($input, keyword, multiline) { + if (multiline) { + var line = phpbb.search.getKeywordLine($input); + keyword = keyword.split('\n').splice(line, 1); + } + return phpbb.search.cleanKeyword(keyword); +}; + +/** + * Get the textarea line number on which the keyword resides - for textareas + * that support multiple keywords (one per line). + * + * @param {jQuery} $textarea Search textarea. + * @returns {int} The line number. + */ +phpbb.search.getKeywordLine = function ($textarea) { + var selectionStart = $textarea.get(0).selectionStart; + return $textarea.val().substr(0, selectionStart).split('\n').length - 1; +}; + +/** + * Set the value on the input|textarea. If textarea supports multiple + * keywords, only the active keyword is replaced. + * + * @param {jQuery} $input Search input|textarea. + * @param {string} value Value to set. + * @param {bool} multiline Whether textarea supports multiple search keywords. + */ +phpbb.search.setValue = function($input, value, multiline) { + if (multiline) { + var line = phpbb.search.getKeywordLine($input), + lines = $input.val().split('\n'); + lines[line] = value; + value = lines.join('\n'); + } + $input.val(value); +}; + +/** + * Sets the onclick event to set the value on the input|textarea to the + * selected search result. + * + * @param {jQuery} $input Search input|textarea. + * @param {object} value Result object. + * @param {jQuery} $row Result element. + * @param {jQuery} $container jQuery object for the search container. + */ +phpbb.search.setValueOnClick = function($input, value, $row, $container) { + $row.click(function() { + phpbb.search.setValue($input, value.result, $input.attr('data-multiline')); + phpbb.search.closeResults($input, $container); + }); +}; + +/** + * Runs before the AJAX search request is sent and determines whether + * there is a need to contact the server. If there are cached results + * already, those are displayed instead. Executes the AJAX request function + * itself due to the need to use a timeout to limit the number of requests. + * + * @param {Array} data Data to be sent to the server. + * @param {object} event Onkeyup event object. + * @param {function} sendRequest Function to execute AJAX request. + * + * @returns {boolean} Returns false. + */ +phpbb.search.filter = function(data, event, sendRequest) { + var $this = $(this), + dataName = ($this.attr('data-name') !== undefined) ? $this.attr('data-name') : $this.attr('name'), + minLength = parseInt($this.attr('data-min-length'), 10), + searchID = $this.attr('data-results'), + keyword = phpbb.search.getKeyword($this, data[dataName], $this.attr('data-multiline')), + cache = phpbb.search.cache.get(searchID), + key = event.keyCode || event.which, + proceed = true; + data[dataName] = keyword; + + // No need to search if enter was pressed + // for selecting a value from the results. + if (key === keymap.ENTER) { + return false; + } + + if (cache.timeout) { + clearTimeout(cache.timeout); + } + + var timeout = setTimeout(function() { + // Check min length and existence of cache. + if (minLength > keyword.length) { + proceed = false; + } else if (cache.lastSearch) { + // Has the keyword actually changed? + if (cache.lastSearch === keyword) { + proceed = false; + } else { + // Do we already have results for this? + if (cache.results[keyword]) { + var response = { + keyword: keyword, + results: cache.results[keyword] + }; + phpbb.search.handleResponse(response, $this, true); + proceed = false; + } + + // If the previous search didn't yield results and the string only had characters added to it, + // then we won't bother sending a request. + if (keyword.indexOf(cache.lastSearch) === 0 && cache.results[cache.lastSearch].length === 0) { + phpbb.search.cache.set(searchID, 'lastSearch', keyword); + phpbb.search.cache.setResults(searchID, keyword, []); + proceed = false; + } + } + } + + if (proceed) { + sendRequest.call(this); + } + }, 350); + phpbb.search.cache.set(searchID, 'timeout', timeout); + + return false; +}; + +/** + * Handle search result response. + * + * @param {object} res Data received from server. + * @param {jQuery} $input Search input|textarea. + * @param {bool} fromCache Whether the results are from the cache. + * @param {function} callback Optional callback to run when assigning each search result. + */ +phpbb.search.handleResponse = function(res, $input, fromCache, callback) { + if (typeof res !== 'object') { + return; + } + + var searchID = $input.attr('data-results'), + $container = $(searchID); + + if (this.cache.get(searchID).callback) { + callback = this.cache.get(searchID).callback; + } else if (typeof callback === 'function') { + this.cache.set(searchID, 'callback', callback); + } + + if (!fromCache) { + this.cache.setResults(searchID, res.keyword, res.results); + } + + this.cache.set(searchID, 'lastSearch', res.keyword); + this.showResults(res.results, $input, $container, callback); +}; + +/** + * Show search results. + * + * @param {Array} results Search results. + * @param {jQuery} $input Search input|textarea. + * @param {jQuery} $container Search results container element. + * @param {function} callback Optional callback to run when assigning each search result. + */ +phpbb.search.showResults = function(results, $input, $container, callback) { + var $resultContainer = $('.search-results', $container); + this.clearResults($resultContainer); + + if (!results.length) { + $container.hide(); + return; + } + + var searchID = $container.attr('id'), + tpl, + row; + + if (!this.tpl[searchID]) { + tpl = $('.search-result-tpl', $container); + this.tpl[searchID] = tpl.clone().removeClass('search-result-tpl'); + tpl.remove(); + } + tpl = this.tpl[searchID]; + + $.each(results, function(i, item) { + row = tpl.clone(); + row.find('.search-result').html(item.display); + + if (typeof callback === 'function') { + callback.call(this, $input, item, row, $container); + } + row.appendTo($resultContainer).show(); + }); + $container.show(); + + phpbb.search.navigateResults($input, $container, $resultContainer); +}; + +/** + * Clear search results. + * + * @param {jQuery} $container Search results container. + */ +phpbb.search.clearResults = function($container) { + $container.children(':not(.search-result-tpl)').remove(); +}; + +/** + * Close search results. + * + * @param {jQuery} $input Search input|textarea. + * @param {jQuery} $container Search results container. + */ +phpbb.search.closeResults = function($input, $container) { + $input.off('.phpbb.search'); + $container.hide(); +}; + +/** + * Navigate search results. + * + * @param {jQuery} $input Search input|textarea. + * @param {jQuery} $container Search results container. + * @param {jQuery} $resultContainer Search results list container. + */ +phpbb.search.navigateResults = function($input, $container, $resultContainer) { + // Add a namespace to the event (.phpbb.search), + // so it can be unbound specifically later on. + // Rebind it, to ensure the event is 'dynamic'. + $input.off('.phpbb.search'); + $input.on('keydown.phpbb.search', function(event) { + var key = event.keyCode || event.which, + $active = $resultContainer.children('.active'); + + switch (key) { + // Close the results + case keymap.ESC: + phpbb.search.closeResults($input, $container); + break; + + // Set the value for the selected result + case keymap.ENTER: + if ($active.length) { + var value = $active.find('.search-result > span').text(); + + phpbb.search.setValue($input, value, $input.attr('data-multiline')); + } + + phpbb.search.closeResults($input, $container); + + // Do not submit the form + event.preventDefault(); + break; + + // Navigate the results + case keymap.ARROW_DOWN: + case keymap.ARROW_UP: + var up = key === keymap.ARROW_UP, + $children = $resultContainer.children(); + + if (!$active.length) { + if (up) { + $children.last().addClass('active'); + } else { + $children.first().addClass('active'); + } + } else if ($children.length > 1) { + if (up) { + if ($active.is(':first-child')) { + $children.last().addClass('active'); + } else { + $active.prev().addClass('active'); + } + } else { + if ($active.is(':last-child')) { + $children.first().addClass('active'); + } else { + $active.next().addClass('active'); + } + } + + $active.removeClass('active'); + } + + // Do not change cursor position in the input element + event.preventDefault(); + break; + } + }); +}; + +$('#phpbb').click(function() { + var $this = $(this); + + if (!$this.is('.live-search') && !$this.parents().is('.live-search')) { + phpbb.search.closeResults($('input, textarea'), $('.live-search')); + } +}); + +phpbb.history = {}; + +/** +* Check whether a method in the native history object is supported. +* +* @param {string} fn Method name. +* @returns {bool} Returns true if the method is supported. +*/ +phpbb.history.isSupported = function(fn) { + return !(typeof history === 'undefined' || typeof history[fn] === 'undefined'); +}; + +/** +* Wrapper for the pushState and replaceState methods of the +* native history object. +* +* @param {string} mode Mode. Either push or replace. +* @param {string} url New URL. +* @param {string} [title] Optional page title. +* @param {object} [obj] Optional state object. +*/ +phpbb.history.alterUrl = function(mode, url, title, obj) { + var fn = mode + 'State'; + + if (!url || !phpbb.history.isSupported(fn)) { + return; + } + if (!title) { + title = document.title; + } + if (!obj) { + obj = null; + } + + history[fn](obj, title, url); +}; + +/** +* Wrapper for the native history.replaceState method. +* +* @param {string} url New URL. +* @param {string} [title] Optional page title. +* @param {object} [obj] Optional state object. +*/ +phpbb.history.replaceUrl = function(url, title, obj) { + phpbb.history.alterUrl('replace', url, title, obj); +}; + +/** +* Wrapper for the native history.pushState method. +* +* @param {string} url New URL. +* @param {string} [title] Optional page title. +* @param {object} [obj] Optional state object. +*/ +phpbb.history.pushUrl = function(url, title, obj) { + phpbb.history.alterUrl('push', url, title, obj); +}; + +/** +* Hide the optgroups that are not the selected timezone +* +* @param {bool} keepSelection Shall we keep the value selected, or shall the +* user be forced to repick one. +*/ +phpbb.timezoneSwitchDate = function(keepSelection) { + var $timezoneCopy = $('#timezone_copy'); + var $timezone = $('#timezone'); + var $tzDate = $('#tz_date'); + var $tzSelectDateSuggest = $('#tz_select_date_suggest'); + + if ($timezoneCopy.length === 0) { + // We make a backup of the original dropdown, so we can remove optgroups + // instead of setting display to none, because IE and chrome will not + // hide options inside of optgroups and selects via css + $timezone.clone() + .attr('id', 'timezone_copy') + .css('display', 'none') + .attr('name', 'tz_copy') + .insertAfter('#timezone'); + } else { + // Copy the content of our backup, so we can remove all unneeded options + $timezone.html($timezoneCopy.html()); + } + + if ($tzDate.val() !== '') { + $timezone.children('optgroup').remove(':not([data-tz-value="' + $tzDate.val() + '"])'); + } + + if ($tzDate.val() === $tzSelectDateSuggest.attr('data-suggested-tz')) { + $tzSelectDateSuggest.css('display', 'none'); + } else { + $tzSelectDateSuggest.css('display', 'inline'); + } + + var $tzOptions = $timezone.children('optgroup[data-tz-value="' + $tzDate.val() + '"]').children('option'); + + if ($tzOptions.length === 1) { + // If there is only one timezone for the selected date, we just select that automatically. + $tzOptions.prop('selected', true); + keepSelection = true; + } + + if (typeof keepSelection !== 'undefined' && !keepSelection) { + var $timezoneOptions = $timezone.find('optgroup option'); + if ($timezoneOptions.filter(':selected').length <= 0) { + $timezoneOptions.filter(':first').prop('selected', true); + } + } +}; + +/** +* Display the date/time select +*/ +phpbb.timezoneEnableDateSelection = function() { + $('#tz_select_date').css('display', 'block'); +}; + +/** +* Preselect a date/time or suggest one, if it is not picked. +* +* @param {bool} forceSelector Shall we select the suggestion? +*/ +phpbb.timezonePreselectSelect = function(forceSelector) { + + // The offset returned here is in minutes and negated. + var offset = (new Date()).getTimezoneOffset(); + var sign = '-'; + + if (offset < 0) { + sign = '+'; + offset = -offset; + } + + var minutes = offset % 60; + var hours = (offset - minutes) / 60; + + if (hours < 10) { + hours = '0' + hours.toString(); + } else { + hours = hours.toString(); + } + + if (minutes < 10) { + minutes = '0' + minutes.toString(); + } else { + minutes = minutes.toString(); + } + + var prefix = 'UTC' + sign + hours + ':' + minutes; + var prefixLength = prefix.length; + var selectorOptions = $('option', '#tz_date'); + var i; + + var $tzSelectDateSuggest = $('#tz_select_date_suggest'); + + for (i = 0; i < selectorOptions.length; ++i) { + var option = selectorOptions[i]; + + if (option.value.substring(0, prefixLength) === prefix) { + if ($('#tz_date').val() !== option.value && !forceSelector) { + // We do not select the option for the user, but notify him, + // that we would suggest a different setting. + phpbb.timezoneSwitchDate(true); + $tzSelectDateSuggest.css('display', 'inline'); + } else { + option.selected = true; + phpbb.timezoneSwitchDate(!forceSelector); + $tzSelectDateSuggest.css('display', 'none'); + } + + var suggestion = $tzSelectDateSuggest.attr('data-l-suggestion'); + + $tzSelectDateSuggest.attr('title', suggestion.replace('%s', option.innerHTML)); + $tzSelectDateSuggest.attr('value', suggestion.replace('%s', option.innerHTML.substring(0, 9))); + $tzSelectDateSuggest.attr('data-suggested-tz', option.innerHTML); + + // Found the suggestion, there cannot be more, so return from here. + return; + } + } +}; + +phpbb.ajaxCallbacks = {}; + +/** + * Adds an AJAX callback to be used by phpbb.ajaxify. + * + * See the phpbb.ajaxify comments for information on stuff like parameters. + * + * @param {string} id The name of the callback. + * @param {function} callback The callback to be called. + */ +phpbb.addAjaxCallback = function(id, callback) { + if (typeof callback === 'function') { + phpbb.ajaxCallbacks[id] = callback; + } + return this; +}; + +/** + * This callback handles live member searches. + */ +phpbb.addAjaxCallback('member_search', function(res) { + phpbb.search.handleResponse(res, $(this), false, phpbb.getFunctionByName('phpbb.search.setValueOnClick')); +}); + +/** + * This callback alternates text - it replaces the current text with the text in + * the alt-text data attribute, and replaces the text in the attribute with the + * current text so that the process can be repeated. + */ +phpbb.addAjaxCallback('alt_text', function() { + var $anchor, + updateAll = $(this).data('update-all'), + altText; + + if (updateAll !== undefined && updateAll.length) { + $anchor = $(updateAll); + } else { + $anchor = $(this); + } + + $anchor.each(function() { + var $this = $(this); + altText = $this.attr('data-alt-text'); + $this.attr('data-alt-text', $.trim($this.text())); + $this.attr('title', altText); + $this.children('span').text(altText); + }); +}); + +/** + * This callback is based on the alt_text callback. + * + * It replaces the current text with the text in the alt-text data attribute, + * and replaces the text in the attribute with the current text so that the + * process can be repeated. + * Additionally it replaces the class of the link's parent + * and changes the link itself. + */ +phpbb.addAjaxCallback('toggle_link', function() { + var $anchor, + updateAll = $(this).data('update-all') , + toggleText, + toggleUrl, + toggleClass; + + if (updateAll !== undefined && updateAll.length) { + $anchor = $(updateAll); + } else { + $anchor = $(this); + } + + $anchor.each(function() { + var $this = $(this); + + // Toggle link url + toggleUrl = $this.attr('data-toggle-url'); + $this.attr('data-toggle-url', $this.attr('href')); + $this.attr('href', toggleUrl); + + // Toggle class of link parent + toggleClass = $this.attr('data-toggle-class'); + $this.attr('data-toggle-class', $this.children().attr('class')); + $this.children('.icon').attr('class', toggleClass); + + // Toggle link text + toggleText = $this.attr('data-toggle-text'); + $this.attr('data-toggle-text', $this.children('span').text()); + $this.attr('title', $.trim(toggleText)); + $this.children('span').text(toggleText); + }); +}); + +/** +* Automatically resize textarea +* +* This function automatically resizes textarea elements when user +* types text. +* +* @param {jQuery} $items jQuery object(s) to resize +* @param {object} [options] Optional parameter that adjusts default +* configuration. See configuration variable +* +* Optional parameters: +* minWindowHeight {number} Minimum browser window height when textareas are resized. Default = 500 +* minHeight {number} Minimum height of textarea. Default = 200 +* maxHeight {number} Maximum height of textarea. Default = 500 +* heightDiff {number} Minimum difference between window and textarea height. Default = 200 +* resizeCallback {function} Function to call after resizing textarea +* resetCallback {function} Function to call when resize has been canceled + +* Callback function format: function(item) {} +* this points to DOM object +* item is a jQuery object, same as this +*/ +phpbb.resizeTextArea = function($items, options) { + // Configuration + var configuration = { + minWindowHeight: 500, + minHeight: 200, + maxHeight: 500, + heightDiff: 200, + resizeCallback: function() {}, + resetCallback: function() {} + }; + + if (phpbb.isTouch) { + return; + } + + if (arguments.length > 1) { + configuration = $.extend(configuration, options); + } + + function resetAutoResize(item) { + var $item = $(item); + if ($item.hasClass('auto-resized')) { + $(item) + .css({ height: '', resize: '' }) + .removeClass('auto-resized'); + configuration.resetCallback.call(item, $item); + } + } + + function autoResize(item) { + function setHeight(height) { + height += parseInt($item.css('height'), 10) - $item.innerHeight(); + $item + .css({ height: height + 'px', resize: 'none' }) + .addClass('auto-resized'); + configuration.resizeCallback.call(item, $item); + } + + var windowHeight = $(window).height(); + + if (windowHeight < configuration.minWindowHeight) { + resetAutoResize(item); + return; + } + + var maxHeight = Math.min( + Math.max(windowHeight - configuration.heightDiff, configuration.minHeight), + configuration.maxHeight + ), + $item = $(item), + height = parseInt($item.innerHeight(), 10), + scrollHeight = (item.scrollHeight) ? item.scrollHeight : 0; + + if (height < 0) { + return; + } + + if (height > maxHeight) { + setHeight(maxHeight); + } else if (scrollHeight > (height + 5)) { + setHeight(Math.min(maxHeight, scrollHeight)); + } + } + + $items.on('focus change keyup', function() { + $(this).each(function() { + autoResize(this); + }); + }).change(); + + $(window).resize(function() { + $items.each(function() { + if ($(this).hasClass('auto-resized')) { + autoResize(this); + } + }); + }); +}; + +/** +* Check if cursor in textarea is currently inside a bbcode tag +* +* @param {object} textarea Textarea DOM object +* @param {Array} startTags List of start tags to look for +* For example, Array('[code]', '[code=') +* @param {Array} endTags List of end tags to look for +* For example, Array('[/code]') +* +* @returns {boolean} True if cursor is in bbcode tag +*/ +phpbb.inBBCodeTag = function(textarea, startTags, endTags) { + var start = textarea.selectionStart, + lastEnd = -1, + lastStart = -1, + i, index, value; + + if (typeof start !== 'number') { + return false; + } + + value = textarea.value.toLowerCase(); + + for (i = 0; i < startTags.length; i++) { + var tagLength = startTags[i].length; + if (start >= tagLength) { + index = value.lastIndexOf(startTags[i], start - tagLength); + lastStart = Math.max(lastStart, index); + } + } + if (lastStart === -1) { + return false; + } + + if (start > 0) { + for (i = 0; i < endTags.length; i++) { + index = value.lastIndexOf(endTags[i], start - 1); + lastEnd = Math.max(lastEnd, index); + } + } + + return (lastEnd < lastStart); +}; + + +/** +* Adjust textarea to manage code bbcode +* +* This function allows to use tab characters when typing code +* and keeps indentation of previous line of code when adding new +* line while typing code. +* +* Editor's functionality is changed only when cursor is between +* [code] and [/code] bbcode tags. +* +* @param {object} textarea Textarea DOM object to apply editor to +*/ +phpbb.applyCodeEditor = function(textarea) { + // list of allowed start and end bbcode code tags, in lower case + var startTags = ['[code]', '[code='], + startTagsEnd = ']', + endTags = ['[/code]']; + + if (!textarea || typeof textarea.selectionStart !== 'number') { + return; + } + + if ($(textarea).data('code-editor') === true) { + return; + } + + function inTag() { + return phpbb.inBBCodeTag(textarea, startTags, endTags); + } + + /** + * Get line of text before cursor + * + * @param {boolean} stripCodeStart If true, only part of line + * after [code] tag will be returned. + * + * @returns {string} Line of text + */ + function getLastLine(stripCodeStart) { + var start = textarea.selectionStart, + value = textarea.value, + index = value.lastIndexOf('\n', start - 1); + + value = value.substring(index + 1, start); + + if (stripCodeStart) { + for (var i = 0; i < startTags.length; i++) { + index = value.lastIndexOf(startTags[i]); + if (index >= 0) { + var tagLength = startTags[i].length; + + value = value.substring(index + tagLength); + if (startTags[i].lastIndexOf(startTagsEnd) !== tagLength) { + index = value.indexOf(startTagsEnd); + + if (index >= 0) { + value = value.substr(index + 1); + } + } + } + } + } + + return value; + } + + /** + * Append text at cursor position + * + * @param {string} text Text to append + */ + function appendText(text) { + var start = textarea.selectionStart, + end = textarea.selectionEnd, + value = textarea.value; + + textarea.value = value.substr(0, start) + text + value.substr(end); + textarea.selectionStart = textarea.selectionEnd = start + text.length; + } + + $(textarea).data('code-editor', true).on('keydown', function(event) { + var key = event.keyCode || event.which; + + // intercept tabs + if (key === keymap.TAB && + !event.ctrlKey && + !event.shiftKey && + !event.altKey && + !event.metaKey) { + if (inTag()) { + appendText('\t'); + event.preventDefault(); + return; + } + } + + // intercept new line characters + if (key === keymap.ENTER) { + if (inTag()) { + var lastLine = getLastLine(true), + code = '' + /^\s*/g.exec(lastLine); + + if (code.length > 0) { + appendText('\n' + code); + event.preventDefault(); + } + } + } + }); +}; + +/** + * Show drag and drop animation when textarea is present + * + * This function will enable the drag and drop animation for a specified + * textarea. + * + * @param {HTMLElement} textarea Textarea DOM object to apply editor to + */ +phpbb.showDragNDrop = function(textarea) { + if (!textarea) { + return; + } + + $('body').on('dragenter dragover', function () { + $(textarea).addClass('drag-n-drop'); + }).on('dragleave dragout dragend drop', function() { + $(textarea).removeClass('drag-n-drop'); + }); + $(textarea).on('dragenter dragover', function () { + $(textarea).addClass('drag-n-drop-highlight'); + }).on('dragleave dragout dragend drop', function() { + $(textarea).removeClass('drag-n-drop-highlight'); + }); +}; + +/** +* List of classes that toggle dropdown menu, +* list of classes that contain visible dropdown menu +* +* Add your own classes to strings with comma (probably you +* will never need to do that) +*/ +phpbb.dropdownHandles = '.dropdown-container.dropdown-visible .dropdown-toggle'; +phpbb.dropdownVisibleContainers = '.dropdown-container.dropdown-visible'; + +/** +* Dropdown toggle event handler +* This handler is used by phpBB.registerDropdown() and other functions +*/ +phpbb.toggleDropdown = function() { + var $this = $(this), + options = $this.data('dropdown-options'), + parent = options.parent, + visible = parent.hasClass('dropdown-visible'), + direction; + + if (!visible) { + // Hide other dropdown menus + $(phpbb.dropdownHandles).each(phpbb.toggleDropdown); + + // Figure out direction of dropdown + direction = options.direction; + var verticalDirection = options.verticalDirection, + offset = $this.offset(); + + if (direction === 'auto') { + if (($(window).width() - $this.outerWidth(true)) / 2 > offset.left) { + direction = 'right'; + } else { + direction = 'left'; + } + } + parent.toggleClass(options.leftClass, direction === 'left') + .toggleClass(options.rightClass, direction === 'right'); + + if (verticalDirection === 'auto') { + var height = $(window).height(), + top = offset.top - $(window).scrollTop(); + + verticalDirection = (top < height * 0.7) ? 'down' : 'up'; + } + parent.toggleClass(options.upClass, verticalDirection === 'up') + .toggleClass(options.downClass, verticalDirection === 'down'); + } + + options.dropdown.toggle(); + parent.toggleClass(options.visibleClass, !visible) + .toggleClass('dropdown-visible', !visible); + + // Check dimensions when showing dropdown + // !visible because variable shows state of dropdown before it was toggled + if (!visible) { + var windowWidth = $(window).width(); + + options.dropdown.find('.dropdown-contents').each(function() { + var $this = $(this); + + $this.css({ + marginLeft: 0, + left: 0, + marginRight: 0, + maxWidth: (windowWidth - 4) + 'px' + }); + + var offset = $this.offset().left, + width = $this.outerWidth(true); + + if (offset < 2) { + $this.css('left', (2 - offset) + 'px'); + } else if ((offset + width + 2) > windowWidth) { + $this.css('margin-left', (windowWidth - offset - width - 2) + 'px'); + } + + // Check whether the vertical scrollbar is present. + $this.toggleClass('dropdown-nonscroll', this.scrollHeight === $this.innerHeight()); + + }); + var freeSpace = parent.offset().left - 4; + + if (direction === 'left') { + options.dropdown.css('margin-left', '-' + freeSpace + 'px'); + + // Try to position the notification dropdown correctly in RTL-responsive mode + if (options.dropdown.hasClass('dropdown-extended')) { + var contentWidth, + fullFreeSpace = freeSpace + parent.outerWidth(); + + options.dropdown.find('.dropdown-contents').each(function() { + contentWidth = parseInt($(this).outerWidth(), 10); + $(this).css({ marginLeft: 0, left: 0 }); + }); + + var maxOffset = Math.min(contentWidth, fullFreeSpace) + 'px'; + options.dropdown.css({ + width: maxOffset, + marginLeft: -maxOffset + }); + } + } else { + options.dropdown.css('margin-right', '-' + (windowWidth + freeSpace) + 'px'); + } + } + + // Prevent event propagation + if (arguments.length > 0) { + try { + var e = arguments[0]; + e.preventDefault(); + e.stopPropagation(); + } catch (error) { } + } + return false; +}; + +/** +* Toggle dropdown submenu +*/ +phpbb.toggleSubmenu = function(e) { + $(this).siblings('.dropdown-submenu').toggle(); + e.preventDefault(); +}; + +/** +* Register dropdown menu +* Shows/hides dropdown, decides which side to open to +* +* @param {jQuery} toggle Link that toggles dropdown. +* @param {jQuery} dropdown Dropdown menu. +* @param {Object} options List of options. Optional. +*/ +phpbb.registerDropdown = function(toggle, dropdown, options) { + var ops = { + parent: toggle.parent(), // Parent item to add classes to + direction: 'auto', // Direction of dropdown menu. Possible values: auto, left, right + verticalDirection: 'auto', // Vertical direction. Possible values: auto, up, down + visibleClass: 'visible', // Class to add to parent item when dropdown is visible + leftClass: 'dropdown-left', // Class to add to parent item when dropdown opens to left side + rightClass: 'dropdown-right', // Class to add to parent item when dropdown opens to right side + upClass: 'dropdown-up', // Class to add to parent item when dropdown opens above menu item + downClass: 'dropdown-down' // Class to add to parent item when dropdown opens below menu item + }; + if (options) { + ops = $.extend(ops, options); + } + ops.dropdown = dropdown; + + ops.parent.addClass('dropdown-container'); + toggle.addClass('dropdown-toggle'); + + toggle.data('dropdown-options', ops); + + toggle.click(phpbb.toggleDropdown); + $('.dropdown-toggle-submenu', ops.parent).click(phpbb.toggleSubmenu); +}; + +/** +* Get the HTML for a color palette table. +* +* @param {string} dir Palette direction - either v or h +* @param {int} width Palette cell width. +* @param {int} height Palette cell height. +*/ +phpbb.colorPalette = function(dir, width, height) { + var r, g, b, + numberList = new Array(6), + color = '', + html = ''; + + numberList[0] = '00'; + numberList[1] = '40'; + numberList[2] = '80'; + numberList[3] = 'BF'; + numberList[4] = 'FF'; + + var tableClass = (dir === 'h') ? 'horizontal-palette' : 'vertical-palette'; + html += ''; + + for (r = 0; r < 5; r++) { + if (dir === 'h') { + html += ''; + } + + for (g = 0; g < 5; g++) { + if (dir === 'v') { + html += ''; + } + + for (b = 0; b < 5; b++) { + color = '' + numberList[r] + numberList[g] + numberList[b]; + html += ''; + } + + if (dir === 'v') { + html += ''; + } + } + + if (dir === 'h') { + html += ''; + } + } + html += '
'; + html += '
'; + return html; +}; + +/** +* Register a color palette. +* +* @param {jQuery} el jQuery object for the palette container. +*/ +phpbb.registerPalette = function(el) { + var orientation = el.attr('data-color-palette') || el.attr('data-orientation'), // data-orientation kept for backwards compat. + height = el.attr('data-height'), + width = el.attr('data-width'), + target = el.attr('data-target'), + bbcode = el.attr('data-bbcode'); + + // Insert the palette HTML into the container. + el.html(phpbb.colorPalette(orientation, width, height)); + + // Add toggle control. + $('#color_palette_toggle').click(function(e) { + el.toggle(); + e.preventDefault(); + }); + + // Attach event handler when a palette cell is clicked. + $(el).on('click', 'a', function(e) { + var color = $(this).attr('data-color'); + + if (bbcode) { + bbfontstyle('[color=#' + color + ']', '[/color]'); + } else { + $(target).val(color); + } + e.preventDefault(); + }); +}; + +/** +* Set display of page element +* +* @param {string} id The ID of the element to change +* @param {int} action Set to 0 if element display should be toggled, -1 for +* hiding the element, and 1 for showing it. +* @param {string} type Display type that should be used, e.g. inline, block or +* other CSS "display" types +*/ +phpbb.toggleDisplay = function(id, action, type) { + if (!type) { + type = 'block'; + } + + var $element = $('#' + id); + + var display = $element.css('display'); + if (!action) { + action = (display === '' || display === type) ? -1 : 1; + } + $element.css('display', ((action === 1) ? type : 'none')); +}; + +/** +* Toggle additional settings based on the selected +* option of select element. +* +* @param {jQuery} el jQuery select element object. +*/ +phpbb.toggleSelectSettings = function(el) { + el.children().each(function() { + var $this = $(this), + $setting = $($this.data('toggle-setting')); + $setting.toggle($this.is(':selected')); + + // Disable any input elements that are not visible right now + if ($this.is(':selected')) { + $($this.data('toggle-setting') + ' input').prop('disabled', false); + } else { + $($this.data('toggle-setting') + ' input').prop('disabled', true); + } + }); +}; + +/** +* Get function from name. +* Based on http://stackoverflow.com/a/359910 +* +* @param {string} functionName Function to get. +* @returns function +*/ +phpbb.getFunctionByName = function (functionName) { + var namespaces = functionName.split('.'), + func = namespaces.pop(), + context = window; + + for (var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } + return context[func]; +}; + +/** +* Register page dropdowns. +*/ +phpbb.registerPageDropdowns = function() { + var $body = $('body'); + + $body.find('.dropdown-container').each(function() { + var $this = $(this), + $trigger = $this.find('.dropdown-trigger:first'), + $contents = $this.find('.dropdown'), + options = { + direction: 'auto', + verticalDirection: 'auto' + }, + data; + + if (!$trigger.length) { + data = $this.attr('data-dropdown-trigger'); + $trigger = data ? $this.children(data) : $this.children('a:first'); + } + + if (!$contents.length) { + data = $this.attr('data-dropdown-contents'); + $contents = data ? $this.children(data) : $this.children('div:first'); + } + + if (!$trigger.length || !$contents.length) { + return; + } + + if ($this.hasClass('dropdown-up')) { + options.verticalDirection = 'up'; + } + if ($this.hasClass('dropdown-down')) { + options.verticalDirection = 'down'; + } + if ($this.hasClass('dropdown-left')) { + options.direction = 'left'; + } + if ($this.hasClass('dropdown-right')) { + options.direction = 'right'; + } + + phpbb.registerDropdown($trigger, $contents, options); + }); + + // Hide active dropdowns when click event happens outside + $body.click(function(e) { + var $parents = $(e.target).parents(); + if (!$parents.is(phpbb.dropdownVisibleContainers)) { + $(phpbb.dropdownHandles).each(phpbb.toggleDropdown); + } + }); +}; + +/** + * Handle avatars to be lazy loaded. + */ +phpbb.lazyLoadAvatars = function loadAvatars() { + $('.avatar[data-src]').each(function () { + var $avatar = $(this); + + $avatar + .attr('src', $avatar.data('src')) + .removeAttr('data-src'); + }); +}; + +var recaptchaForm = $('.g-recaptcha').parents('form'); +var submitButton = null; +var programaticallySubmitted = false; + +phpbb.recaptchaOnLoad = function () { + // Listen to submit buttons in order to know which one was pressed + $('input[type="submit"]').each(function () { + $(this).on('click', function () { + submitButton = this; + }); + }); + + recaptchaForm.on('submit', function (e) { + if (!programaticallySubmitted) { + grecaptcha.execute(); + e.preventDefault(); + } + }); +} + +phpbb.recaptchaOnSubmit = function () { + programaticallySubmitted = true; + // If concrete button was clicked (e.g. preview instead of submit), + // let's trigger the same action + if (submitButton) { + submitButton.click(); + } else { + // Rename input[name="submit"] so that we can submit the form + if (typeof recaptchaForm.submit !== 'function') { + recaptchaForm.submit.name = 'submit_btn'; + } + recaptchaForm.submit(); + } +} + +// reCAPTCHA doesn't accept callback functions nested inside objects +// so we need to make this helper functions here +window.phpbbRecaptchaOnLoad = function() { + phpbb.recaptchaOnLoad(); +} +window.phpbbRecaptchaOnSubmit = function() { + phpbb.recaptchaOnSubmit(); +} + +$(window).on('load', phpbb.lazyLoadAvatars); + +/** +* Apply code editor to all textarea elements with data-bbcode attribute +*/ +$(function() { + $('textarea[data-bbcode]').each(function() { + phpbb.applyCodeEditor(this); + }); + + phpbb.registerPageDropdowns(); + + $('[data-color-palette], [data-orientation]').each(function() { + phpbb.registerPalette($(this)); + }); + + // Update browser history URL to point to specific post in viewtopic.php + // when using view=unread#unread link. + phpbb.history.replaceUrl($('#unread[data-url]').data('url')); + + // Hide settings that are not selected via select element. + $('select[data-togglable-settings]').each(function() { + var $this = $(this); + + $this.change(function() { + phpbb.toggleSelectSettings($this); + }); + phpbb.toggleSelectSettings($this); + }); +}); + +})(jQuery); // Avoid conflicts with other libraries diff --git a/templates/SwiftBlueBeitDina/default.css b/templates/SwiftBlueBeitDina/default.css new file mode 100644 index 0000000..c5d7350 --- /dev/null +++ b/templates/SwiftBlueBeitDina/default.css @@ -0,0 +1,128 @@ +/** + * The default CSS stylesheet used for all templates. + * + * @package AutoIndex + * @author Justin Hagstrom + * @version 1.0.2 (February 05, 2004) + * + * @copyright Copyright (C) 2002-2004 Justin Hagstrom + * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL) + * + * @link http://autoindex.sourceforge.net + */ + +/* Body */ +.autoindex_body, html +{ + font-family: verdana, lucidia, sans-serif; + font-size: 13px; + background-color: #F0F0F0; +} + +/* Images */ +.autoindex_body img +{ + border: none; +} + +/* Tables */ +.autoindex_table +{ + width: 100%; + border: none; + border-spacing: 2px; +} +.light_row +{ + background-color: #F2F6FC; + font-size: 13px; +} +.dark_row +{ + background-color: #DADEEE; + font-size: 13px; +} +.autoindex_td +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: left; + white-space: nowrap; +} +.autoindex_td_right +{ + font-size: 13px; + font-family: verdana, lucidia, sans-serif; + vertical-align: top; + border: 1px solid #7F8FA9; + padding: 0px; + text-align: right; + white-space: nowrap; +} +.autoindex_th +{ + font-size: 13px; + background-color: #7F8FAD; + border: 1px solid #000010; + padding: 0px; +} + +/* Links */ +.plain_link +{ + color: #000000; + text-decoration: none; +} +.autoindex_a:visited, .autoindex_a:active +{ + color: #00008F; + text-decoration: none; +} +.autoindex_a:link +{ + color: #0000FF; + text-decoration: none; +} +.autoindex_a:hover +{ + color: #0000FF; + text-decoration: overline underline; +} + +/* Buttons */ +.button +{ + color: #707070; + background-color: #F2F6FC; + font-family: sans-serif; + font-size: 11px; + text-align: left; + vertical-align: middle; + font-weight: bold; + cursor: pointer; + border: none; + padding: 3px 10px 3px 10px; +} + +/* Misc. */ +.paragraph +{ + background: #F2F6FC; + font-size: 13px; + color: #000020; +} +.autoindex_hr +{ + color: #000020; + background-color: #000020; + border: none; + width: 75%; + height: 1px; +} +.autoindex_small +{ + font-size: 10px; +} \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/documente.js b/templates/SwiftBlueBeitDina/documente.js new file mode 100644 index 0000000..b393e37 --- /dev/null +++ b/templates/SwiftBlueBeitDina/documente.js @@ -0,0 +1,22 @@ +var displaymode=0 +var iframecode='' + +if (displaymode==0) +document.write(iframecode) + +function gone(){ +var selectedurl=document.jumpy.example.options[document.jumpy.example.selectedIndex].value +if (document.getElementById&&displaymode==0) +document.getElementById("external").src=selectedurl +else if (document.all&&displaymode==0) +document.all.external.src=selectedurl +else{ +if (!window.win2||win2.closed) +win2=window.open(selectedurl) +//else if win2 already exists +else{ +win2.location=selectedurl +win2.focus() +} +} +} \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/dynifs.js b/templates/SwiftBlueBeitDina/dynifs.js new file mode 100644 index 0000000..579190e --- /dev/null +++ b/templates/SwiftBlueBeitDina/dynifs.js @@ -0,0 +1,83 @@ +/*************************************************************\ + * DYNIFS - Dynamic IFrame Auto Size v1.0.0 + * + * Copyright (C) 2006, Markus (phpMiX) + * This script is released under GPL License. + * Feel free to use this script (or part of it) wherever you need + * it ...but please, give credit to original author. Thank you. :-) + * We will also appreciate any links you could give us. + * http://www.phpmix.org + * + * Enjoy! ;-) +\*************************************************************/ + +var DYNIFS = { + // Storage for known IFrames. + iframes: {}, + // Here we save any previously installed onresize handler. + oldresize: null, + // Flag that tell us if we have already installed our onresize handler. + ready: false, + // The document dimensions last time onresize was executed. + dim: [-1,-1], + // Timer ID used to defer the actual resize action. + timerID: 0, + // Obtain the dimensions (width,height) of the given document. + getDim: function(d) { + var w=480, h=580, scr_h, off_h; + if( d.height ) { return [d.width,d.height]; } + with( d.body ) { + if( scrollHeight ) { h=scr_h=scrollHeight; w=scrollWidth; } + if( offsetHeight ) { h=off_h=offsetHeight; w=offsetWidth; } + if( scr_h && off_h ) h=Math.max(scr_h, off_h); + } + return [w,h]; + }, + // This is our window.onresize handler. + onresize: function() { + // Invoke any previously installed onresize handler. + if( typeof this.oldresize == 'function' ) { this.oldresize(); } + // Check if the document dimensions really changed. + var dim = this.getDim(document); + if( this.dim[0] == dim[0] && this.dim[1] == dim[1] ) return; + // Defer the resize action to prevent endless loop in quirksmode. + if( this.timerID ) return; + this.timerID = setTimeout('DYNIFS.deferred_resize();', 10); + }, + // This is where the actual IFrame resize is invoked. + deferred_resize: function() { + // Walk the list of known IFrames to see if they need to be resized. + for( var id in this.iframes ) this.resize(id); + // Store resulting document dimensions. + this.dim = this.getDim(document); + // Clear the timer flag. + this.timerID = 0; + }, + // This is invoked when the IFrame is loaded or when the main window is resized. + resize: function(id) { + // Browser compatibility check. + if( !window.frames || !window.frames[id] || !document.getElementById || !document.body ) + return; + // Get references to the IFrame window and layer. + var iframe = window.frames[id]; + var div = document.getElementById(id); + if( !div ) return; + // Save the IFrame id for later use in our onresize handler. + if( !this.iframes[id] ) { + this.iframes[id] = true; + } + // Should we inject our onresize event handler? + if( !this.ready ) { + this.ready = true; + this.oldresize = window.onresize; + window.onresize = new Function('DYNIFS.onresize();'); + } + // This appears to be necessary in MSIE to compute the height + // when the IFrame'd document is in quirksmode. + // OTOH, it doesn't seem to break anything in standards mode, so... + if( document.all ) div.style.height = '0px'; + // Resize the IFrame container. + var dim = this.getDim(iframe.document); + div.style.height = (dim[1]+30) + 'px'; + } +}; \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/each_file.tpl b/templates/SwiftBlueBeitDina/each_file.tpl new file mode 100644 index 0000000..984f3ac --- /dev/null +++ b/templates/SwiftBlueBeitDina/each_file.tpl @@ -0,0 +1,39 @@ +
+ {file:if:is_file} /* if it is a file, make a direct link */ + + {end if} + {file:if:is_dir} /* otherwise, for directories, display the folder with autoindex */ + + {end if} + {if:icon_path}[{file:file_ext}]{end if:icon_path} + {file:filename} {file:thumbnail} + {file:new_icon}{file:md5_link}{file:delete_link}{file:rename_link}{file:edit_description_link}{file:ftp_upload_link} + + {file:downloads} + + {file:size} + + {file:date} + + {file:description} +
'); + + for (r = 0; r < 5; r++) + { + if (dir == 'h') + { + document.writeln(''); + } + + for (g = 0; g < 5; g++) + { + if (dir == 'v') + { + document.writeln(''); + } + + for (b = 0; b < 5; b++) + { + color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); + document.write(''); + } + + if (dir == 'v') + { + document.writeln(''); + } + } + + if (dir == 'h') + { + document.writeln(''); + } + } + document.writeln('
'); + document.write('#' + color + ''); + document.writeln('
'); +} + + +/** +* Caret Position object +*/ +function caretPosition() +{ + var start = null; + var end = null; +} + + +/** +* Get the caret position in an textarea +*/ +function getCaretPosition(txtarea) +{ + var caretPos = new caretPosition(); + + // simple Gecko/Opera way + if(txtarea.selectionStart || txtarea.selectionStart == 0) + { + caretPos.start = txtarea.selectionStart; + caretPos.end = txtarea.selectionEnd; + } + // dirty and slow IE way + else if(document.selection) + { + + // get current selection + var range = document.selection.createRange(); + + // a new selection of the whole textarea + var range_all = document.body.createTextRange(); + range_all.moveToElementText(txtarea); + + // calculate selection start point by moving beginning of range_all to beginning of range + var sel_start; + for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) + { + range_all.moveStart('character', 1); + } + + txtarea.sel_start = sel_start; + + // we ignore the end value for IE, this is already dirty enough and we don't need it + caretPos.start = txtarea.sel_start; + caretPos.end = txtarea.sel_start; + } + + return caretPos; +} \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/en/button_pm_new.gif b/templates/SwiftBlueBeitDina/en/button_pm_new.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0d124e6415693068e6b315eb16bce665883ed64 GIT binary patch literal 2094 zcmds#jZ+hM8pnT|Hy{KJ5HY+c8(wUR*e;d|Ua2m@mmsMwYNx5@&IFlWhSOfK;$=?S z+W;O5VqJ^H9nb1o5f+C|S1zN!wz=M7&@LM3-jq3aETel)>g9T1W1BhC8Rt0sH|{g@ zoq3*T=9ziE&+}}q-&DQU;{o~LcK}#^)*t|=Ksi|8S#2128HN`ZGAWjvjwMAU$qF(H zB?d~7Xi|Yie4MK$d1+LNmXo6tl(8;8kxWLT(PVO=JuXF)3h$*k!EU$1nS`I0L`jUrV$~GC zkBdkmCrMI_cgoO@VOU>CCI~_lMbyuU(ImkLw4jhsE-5LQjVG*rj%C@P9A|jJ@Aso9 zisN{UvkL-8bC9B_IBT`jkdtEZczi+C)zyL|xmghkqSdBuIy*qmh|ejN}D@mw6w_i4+Sd zmX{zY3M>>QL5>@ZMoE@wLG~^j1Nw0aTCG-`h8V@Oq9Q7Bx7#htvTp(ZvjLq9lsUJX z6(Tb+Hv^*~Kg9_ldA72$lHw(|*B6qMP(+51bJ9?h6)1`^wwe`VGVdm-zJsF?lI9Nj z+qq!KK@iU#=Kqn@d7w=#up7zo&eZHOm&l(FcQ4isp!O3*6GzQ2wS=thrt2NLy`*2V zchslpw_kEij$OQU3fntYg7-fp5$hF5wGx0iu3B`%?;G>pI&JSS`{m8x$Tt_OQU>ib zOXfGE{9#um9Ok-etvl8&Yq&D|4Ocb1LTNvhp3UL|n9Lco9j z{YPsMef-rpp4tqICa`+8bjj-x$_qT2jOWg{CvqVgRWApPZo(s;^?l_TiDu;t0wE=#2Z z3RCxA&R<-`5D(I@(6}o5xhVFPI&*Y$V6o1_ch;J?*1dhz+kM4(FPIbIrV>Ip(y^>& z5?^VWX4wlb5%Jm&P94Al`rTg|kptHD+#x38Ob4yIcl$(r+FBm}N>@5Dzw27Y#v0P5 zfe+Hiyi9X6++^OsAF0hukd|#Ap=kb?S$}rY5wKsQFM6V! z%I^IaiRe($s5N|EdSnrSpYP19vOm@u2&aeqWbQSzP&YT%qh6wa&6onZz~|v(yaP=+ zIoH|}4lfH4>ByXp zhTCoV`nOsG!Ghr55cL}W@LZd_dfd}x+Q;DC z%gF|-C3RhcIbrvG*VEZ`MCI#g2NM>Lg?R5?z>@V}%c_&Tc1T??Ok~+ooAPa!?(QpQ z*QrLahwpHCuG*gB--K$zy5w)!N!_240TLN(ArTx?RU88vU_ueK42&f1SXA<1mKk)f zw*~?koXvtcwWT{PENaR4dAE9bjvJ&T z2O!`bg7|?|q{EyOpcfp6e~xpy|duEBEw7T6X<(T8<2@ zIWZEc|IhjN0lS!3WYcY%K~!63hJJBpa%$h9e$%^xs#=R~WnJFlWMp{V(x&vUTOa*& N4z$_Vt5x8Y{{a*hW_z_ zWo`QwPz2rvKz2`*20$990CPNW17MqL&bWL5mydN*TrisAqA5HOrLQI_KEX~Vy-e6c zhXRq5FBn(Y2{*}M4DX?WWGGQ?_2PjD!NqdTZYv%@33hgN7NbK585*8U;%vkhidVq6 z!%Jy28nwd*L6D0H7k6UOXw=JwD_{Z`T?7{`x8h7VIT}fEH&PytCz(u!!{JCIf_QvR zns?%~TrQ8rVg?T@GJVq7+1W*KN~Mwr#`Jo<%jJ@Gd0`mV>2xr`1%ts0H&RBUanGJT z48x!(iXcdJbv4Z=3@6y3p`q5+R$xSp7;E+h5{X2cn;st@Z*wy`7fq6+!EBkCnQ>4& zlpWHsWwN*l?n;u`!iOIh{@i!OE@P zF1r&l?7TD=noKZ?!8q%7yQyIG$BEkl<52{4YqeTnKxvvraK>tPba!`?Y|v~rQ=vFY zg&Y_~^KlHr1Ofq!IJywjZnt+iT8zA1w6$M?4FJVu?~G zc2$?LF)2&*ojsKQu-2_CD9F!iMH8_4^vRL;rKLxazP`xOQd8Rj{kcLpd`$6{ZPn)H z!${LX!!7>YnSozEhkBBd(67O)V%=>fH1v9I)<)Gy?Q!knbi>jYmMl~<(;5%7-Kn@| zo616Kec9eu&VT#WmG3N5qy4YZ^m`e3yLXvv;SU!qtsCGrUpXaSA$zrhNvWPWH^1<+ zt-<4s-w$0s?^?6H+yA>pxHvmmrg0kfFF5|`@|Okb>*|k7*YB41oya~|s@)gAb#<)d zPS5dotaq#&)O#W4#U&`vb^Ozl^IZIi$2N$4(Tn|0MK2z{j2x+bz8B0s)^jpeCMk>Q z_b}1-_x}^0I=?R-UcY=wQp6qmnpV!N3RJ$NvM$o=J{SC;hd1U}+iU!pPqq>Jn^w0V z+W9N^GDIwwzB!z=BHo@Z{lYme5|p3vPWC4HLz!Tml$-1w=x-A`YAz8S6`;{C1a);O zgS|_lvo$T1*Pbuf76?a*HCa_>^Pa(E{_F+LQ`bMzFON(1zIrtIh-;nPDFn3<_(0Zj zIh_vlorlxG;)rfSG`~*TcVw9d-ruxxaHxLe=|5y=`>JAo`@$NH&L(u$ueyoN!wf$y zd`GX)Vk<>{|9~WMja~>a!;Zz@DCsmH(cOZxHYjKF`_kWS<+h8+dd~+REokxlJg*^F z_MW&qwrMzjvqA=mGOMR!XSiiRARa4BgBFi9l~lqPw=}4I5LME)F!IC zcF&f+EL_DD?v|(J6b|rEM($1{;TM3+ia4D^&?Ff{l#7{bKa9C@Q612A_jkEWHl zr@t@38|abJX;EK#W*4WGy}^Uw0!S`7x*PQVmyig>ntQJ~y z&NF4I%)CQmYrmdOjO42;pmac9KmQxoBme*a literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/button_topic_locked.gif b/templates/SwiftBlueBeitDina/en/button_topic_locked.gif new file mode 100644 index 0000000000000000000000000000000000000000..4fcb7d6c3bdb90a309dd096ac1249257000f17bc GIT binary patch literal 2032 zcmdr~jZ+l&8Q%Newn>9zIa_$XWqiC0BkrnFt) zz%!y*0!cTBWRVXShevLQu+@TmnHMPzDslPueBOL6Qu|`vSAR04D}$P856r3J3ub zqF6rYn(+ommM2+mY;J|&eL!4cg_Y4+KbTtykg%UNF#M87Tp<`vV6kD|>!ZznDjocJkgp z64uW!j3|n{AO!nX0s-9RrdhxRFJb^q(<~vr`_uUXP-v z)oSH=-sooZI1Sm{27_UY7fB$*$H!-6WRRXY15P<8U^bhrB(PH;9-}zX?{>Q#G#9MO zx&aMDmiG}9U57Q;NY;iEZ17{W!Nm$zf~7~t5C@@cpp68h)oNM67w@D98c+;pB^bzx zK~*H+MT!AVrxUi}faA>sgCK~5WNYae*os*!7J(ymIvo&1f~4F8DKZWx&FOF&qX0&8 z7!5GoO|ZhKu<}!K{*M5!Losj?4dLU>a8&w!j_I8|g+!%0O-#kOJO0_ja{>M$Xx`D5 zqc@K9Pj~3{UEV)EGB7RCt6=gv8j|pf9pT@gnDZR;XJti5a`7nrS)aM%W;A1$NTlJh z$=)xe*5Xatj>Gexe7IQJ^^$r&F5;ycNEVh*RFuCjIlGcV*NU&bH-7{B_xA&5`oH`9 zgYcw$qSBu>`0g{RoX7~NCN=wyCzdW)t{*+1{locIMMj|6)g5;hi9x-^?$1-q{MuyU zmBlZ*-obs+8&_Y6NA1GGyh0xJMM=-=o44AeA(~@IE|dLa==aE;tL`sv=dr7cd&^N8 z|LDeX1U6#pn+{1Np-Yvg3-v#WdD~nX-!{W&OTpV2JC7Q!_f>Hnn!CTclzdWBq3XdD z2Yfvai8NX_T^$O0tOwPV>07kYT^33vg`LRVH>;I{ z4*4bu8t7EC;r#J9!**BH%b}SH_4~FGH`;E^9PD`g?F3uYot=1%BD_vtvw==s=No0a zJcP6-^QeB28aaXVU4}bFV~A@<$zgfhNZdfDDl7Zt=E{5REvk)k5e11Dkf_3+wxb?J zQ_9x+Y=oaVAm4=&l95FEmDkkXYNM`qOK0{EV>#T7*W{VY=zUdBa$#?0TGrxH-gj@U zO`#hty>j(Nn*>D8UPicUhp;Edr;?5}Oq_`1eltE*T!Wn^@fFnI+0(r|p}Asv zV2a4CW7G@8wdZ8gj?r(YdJ~1mAoN~r!rx>@6q5T|a-BPSqaER%^T%#lzgi?>8vq|V zdlNGKMSG`pE6q$yZ9x8N+!I;vjR?7$oOMyzKePMSlOd`4XQY}>5sx$*>f*+qr z%zNm%nybu0A!JNpiu{UJ`OZotM3b6An;x(J@TWZMq%^ExBC^Zx(ph>#HV8mvLYnNl zP^i|gQ+5H(7HebZ37zbP&Q!(Ebn*ZEwAJiMO?cooTPh-6{dOWw3CSM)7lyph&_~xP zWi~Ix1}m--rZPGfkHzD&EC+`)4B8;N6Lq#nul;pi8%#2Q`e^}Ec&Fh zYq=At(<+~DJT+vAgj#Xe)1+Z^*N>k?(K7?vPSzI}{^MU!-OhoZ$KIAEiADvNKbU!I YqP_b0D`^|+zkc>o(Ti=E7KO6^2T_h&l>h($ literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/button_topic_new.gif b/templates/SwiftBlueBeitDina/en/button_topic_new.gif new file mode 100644 index 0000000000000000000000000000000000000000..802ed4f00ab08a8de832d08501accee51ca33be0 GIT binary patch literal 2061 zcmds#|5sD@8OJ~Q0tpcC0zpy<5GrcQHzRUR(-vKV2!ZD4)n;wx(JrEEQx|Q{RC=qj z-h@n|rFvWIdZk#e8jp7@Yd_kkSHjS8%&$&3bOt)pVri#FfeDzp>YO zetORP{rvELKkXfD)~7aZ1ZChg0ID9U6#(RcIxx$RyVJl+(~uYB%($H4r3}kUqMTun zNOJ@C&1Tyi;j8zs20!C)I9NfZki_$lAP9lyWY(ef z(lT_*tW`*6s;jHXSvV2$BEu(#$CHsr#AGr_(Cu=$C{83P+QaZxt2NAWb#-+{qY()L z4H2KrG&eWLVlmesayp$1!-P0d;8}?yxG`}DL2|r6F)WQF50juMiWlYS>1i9q(KPM# zdczForZ@-1g&AljS&oCPt*w4C4B_l)1jQ5?rVxSxM|%AP1(7Yx84R=GAYPOhUgD(` zjYJ80Md(3@oAtP9gkhKn{a%*$c>N5L5Jz(yOR&7mSOrn^`~57-hN;>1B(vEpab6Zl z1RQhXI2rDz6O%?Fl9`?+7{pKBj|y^AQxi$C!-ACLd}EU`!^@&5dORL$7}C7tW{{0! zV`AD%b8KvwU{NBGz$y6S^ZdV{odKm?`3!8mUqV3TPGcdZt5AE zLZK{37?b-#uFe;#4{f<~IP$G@#?WS9BHk@;=OwJ+|sf ziR!L+tdVQziN2~uwXPW$#1$K|_PO3-?5cvnxlIvQ$M&krJwHr5SbhDoAA&QQIbM?? zx6p|P)aCfv3g2MUl97dW|C&Vp{C+%9X$D%8-VnBrXlf|HU~ZNSgrD}PO! zys-R8V83U@F-*or0(jdIMa!)Xu&u5>#q^aKW2P;6ONcd!+`v;RrN`~kr@afx;a4n*3dmWvl_kaKMxlK{1%wL(H zRuWck3hJ>)LzUZZB3Xjn*pB%`f4%i*yJC{&aI4 z8GJcj?)~PRSdrX7Hmc7A^_%_Dzw)1X*RLwp?7-rqg|Ro|qXqy2M{GW*s4vqNDzNNp zw;DkMGkj-sX?BslbmDt^qWfs8WxlR(dQX$8Dun%E-r<-0Tb1tlde6|ZRJ_Ho-E!+{ z!IKavE0vD@77 zT}Oebr2_b3kIX94fw*^EY?Z>Kqb)G!ZTQFXdxy;mIVa2A1OB4jaS*hex7nnU4{VKl zjZgZSBHv<2Hmw_pP(RI4Vt@ct9}(~fI3YwPCFo>0kg`l9hJ z-nY}N`+V)1`rj`wfnG;I7qj)%I+eQDv_RR|e*Nh$zdJyTovfIWuVnA}?oGWpYhA-X zdOzKeulTiVe%S*iE0=iiHq{@gUeqz#`Fv6D8#<7M-1I?Hl|BnqJ-(A}dn|(T6o{#L zVf4oHm;QYi_MfU*n&Ze78^Hx@-fCT!W~J}*U^u<0{*{igu6a{5?|i9#>yh9(=P%yd vwkxqt`)Zff90Y(dtlGkJqM|NOWy=d|_uU$KL((4g#G)Ye>tfoJ{)u=!{G literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/button_topic_reply.gif b/templates/SwiftBlueBeitDina/en/button_topic_reply.gif new file mode 100644 index 0000000000000000000000000000000000000000..4551695796f29bf2c7a4cc767d48206713359685 GIT binary patch literal 2128 zcmdr~|5Fop8s5zpNCJdJz6JSWKq%2d8<0vw&TbSjC~CY?FIw~hhsU1MHhSI}1nmaG zv09`HqPMo{Er@05Fzx4*v1^ZOKP#xq7@hTG#++iiv>BQ^y-qCjOk1X0`fuFx)B8Tp zJkLAt%(J1g!m_Hi7D+=6AxPHu3KT(9NInw5&)gt_(=-soV0bbZ7NjsMNd91$=ER5| zrV(Et%y1$D{WK>4F*rIk2cZtLFyw0 z$qhsWPE*h?2!M!$LxJYScGHQncL>3G)Mvbu*A4Y24+;BA@nu$vnCs1>=iXM_EP2n1CYnI#GMf4osej|P32z&Q}?d0-v%P@~jrpQcOCH%g! z;N;b#!-Awbja+n&9Z$N|JM)UnU@YVQs(@JA#w|s4{Pd<{vA?vPdUWgKkG}Yfkk1x; zmALmobbNMIVfd+UE3?jGn<28-_rBJ;V&CUeAIH`XHpJ)sv^4AM^||F4`ZK=TwY{;+ z4io1$|Lw}_50l?`{OK-M7hGq*`@!b?>Gn2@Dx>$v9|qdA8BRDNTI;(~ckq|@eQ{^k zkG;zujU8IpN@2|pruD~HyIh*S)=L*ZKS;>y)^{dkl#U}FWm|aRQK~{B0)6d#Q*!5X z{Nbc(X=wyk_uKlR`jVFBq_@@WERvT zvdn}L=Wk<{O#M^mA}+bbNuAx|0G?ybT~7W)T23t*ALza>SF3AWd{0|X z%C&wq=R}*5xo$)q&rz7_#-6Kt&|+inBYi1E+O&lOuJJSzG+tNiU>CB{y7z=xlf66X=R{4rOr|-uZz075g&-hYVr8MFTik2yz#+J`Q88O)(+I<*gFPaD>8n_ z;yYxr*m7N=XDF|i;ngo!QJ#z>o6f2z0qz%#pUgDh`1=+^q7_D?2R?$&W+)C0um>}nR9)`=cj%+YysxjK&_WEn=BYE4&;8a;~d?=0ib zx3EqsZc)f{LE*6%wWmZWvpv?5P2%{ql6~)D37Z{->ZGlCSi2&#Iv;H++0cXcFS%#@ zMusm{c$9I&4FB-WxAbHBb2!nFX|nCd(8sG5z@MyXpjKS0^&v2}@d<+HJ~U~)hU0nD zgtgH;jTvH|oxoGJH*QqU#N4;;HfX8)B?HI2%_|?o7`=wn3jBaln^)!hQPBhs|3%;Y zD{x-j@%*Q9-Q!(7_onv`4|=Dgj)2U6yuI33F55YGV&cksnye%J4|f|U4hLRx@Ogn_ zbt~og66PmV^=i*<<$;=RUb8KX-u%zydsZ6~+oEYni#79uYrgZQ#kw|aHS-BkxC~83 zVv3wRl4arxCWynjbSAbwG-R(?UjMJvn0zr6*vFNoGH;UeU+KHDf%@ZlIxL+2Bhssr_xbfVTt%Z^1w`lIrlf*ER8b8U3T4C|31iFoR4X<4eR0rXOwPU(&U57hsi^g8kVPT4qI1Tp1AYJPiD`BIvZZNT8VDAE6?W3 zWZ6Az!Dc;M8~Yo_U|IA=v2|z9dqbphw)l5?(m35`lgRSCKi>b4~Ar%W$Y_`Lla>NQJ+{QT$c4*PdR!EVPlu<`9MQT#C8IJ$L&#NcTizm;E z=UKD1Mg3Zb9>~Bh04knBIRNAU6`19@_Z8^IW+g^)kwk`1WH6HD;u${`p<-z^o}qP93Cuyd6*#5ZUTRiB|$cx zjsZN9aNB^h4bahKHY?8xki!fjjGv08f;5k_0^tPNEKKrAl!`UUBzlXJqL(pY%uC1G158_hagkA*-I?J56-(*8 zl+i~G44@W2GclF28cS9-sR=e_xA&$~z~kQI!5JSFHTlBwYQ&7d0Y;EWpg0F4(&|J4 z0&NGgS+x++)Hrbz^$I))y7bu$lwg3mMp`X}Z7vLK_UTkG(ol?`x zx3u-f!utH87uPc_>mGdk`HG%t=Gn2T{GT9k;@6>ff9`Car~4xZ+CWh7Kl6W_96mu` zKEExwsm?xPR2WNj70!5vr)YQhao)nMP4=i;)*2p};|7r{9e~{HDj47DqVrw_rr+JN zAp1t{t%5S`93@BIt@5H;gYryUNq^BXONlnG2vWwq+6jOZReJ5sUT%f!YGpa97|p8$ zNSAkE`{X_Ga;@+Z)VQwf`qC5DQ*)Lb_mB41tVZlPx%M&T7Qf0yiwakHT?M(b_XmZw z@TuIF`+b1++usi)4i!6|j^r2W6(h!FziAKEo);S2`4^IXs6^xx=uq&;s_8-yuA3GC zQa}caUCb|{K|l#2aAwcb`=;D13v4M^N literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_contact_email.gif b/templates/SwiftBlueBeitDina/en/icon_contact_email.gif new file mode 100644 index 0000000000000000000000000000000000000000..4314bc7a3ce125191382616071124740bdb7e560 GIT binary patch literal 1628 zcmd5)|8Em@0R439)@=+eqreab-56s)2i-uvPHkah1BMw`$TTH6q>?#{c39Y=)!ash zH*CVG7dh}q4p-zN2Rq0C2RZc0j_rUN4``t15pQsbhZItv%z`sG{tMp^FE8(>_g-Gz z$`y+iZ>k3t&;~&9Q=D{lSstLmqC)a9K}qF%2`-+(7%4zUDM=kpDvX>63-Pqd7W%^^;-#Y+!YL3b zg~A-pMLl5&qeT}kP(cW#1x!$ANwdK;74kL_qOlpr{4O@098PJBtd|F9iKkPVhany%cFD3EuBoT16 zQ=*TKl4yHEivtg)>pC8A%Oew!evA=A-ugudYl9i2xyIT~p}s~!)aVctBp4p|a1`z) z#bI5Lc~asCmOx~Yr_pwSAy_gbYbh>_Na_fq6du&$0vA;SOiYL;DAW)8J;Ui#SkgoW zA5JH5QG>z~5pdIzqQ_X6jjJLiF=$F*(i&Hf@(8aev1n|h7KMg*#o`asBo-E8noQe* z3{4=(7>Up##>vg32s1JsfEq9!33I6!0U%5lk+edRLC8%AQ96K-Bhh^Al$3~~G8?k^ z$dPW8oJho3mIz8TLJ6`a5iI7_HC0p+c)LsCVT6`2K3)@IA)G@g-VW24uZBh4h^P9+ z>;7lRc@8pjCYPI$18a<9XSpTjVBZ({UE3e}F7!=(-8`>F;mmLy*g2GXd;X!XObezo z6HlcRhc556Z|*PE*R9=G^WM9nB$vKy#^!tSidM0Q9AM5*iz?N_-}E>>sj9z!Wm?_n zsY`EL?83<-H+rGI-4%`@!C=h!ydj=-F$)G$2K-O#(^ptFzV)#tcf17&_^O@&viJ!!+zxh2OLSI;iW)9x9{;FBbaQre9J3Zy_MZBEm1p6WqWhhUK~@GW4M%E z{;w^w%w{c2z!eCBxr2_$-?QN`nD}6OP2S_)wvnp7J)3oiBx+{AxCEa%49BJlS%j3@}38^1!36f>Vzc z1ar&si|=NX(Mjhl;D+vIPqJG(jJEZSk<3NDRgT<7@UVaKh1ivb!dlGgG>*nT`0&g; zp*3>$-U2uaj3zTc)@V2Aosio9-R1l-P^9-e#@YeOEyWp@ z<2i%*uasbRkU68 oDQCbBjf2UftzO2>r>@GFKVg^h915fqvS^xk5 literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_contact_icq.gif b/templates/SwiftBlueBeitDina/en/icon_contact_icq.gif new file mode 100644 index 0000000000000000000000000000000000000000..b53edca0e572fe2d0b0eaebf0d18cf8ec7010021 GIT binary patch literal 1617 zcmV-X2Cn%>Nk%w1VMqWJ0CxZYA^8LW00031EC2ui07w870H*+EnE(I)0001)wak~Z z$N~C)s?Zw0F(d<3ks~u+n>GEDSfJ%#o(X3 z(~hXU&*u2c$Kbcw^eB9%3vHgz z=lIO!_`lxv0E7UNxXHud_qp5k#^Uz?W0j1iyROdYh@rNXu*SaK_J*Faz1;S#&F3V1 zs-4K>oVm}8x!4qPp{mN`cC5}A7#N+u+OO2_E`zX|w#}i&;VOTuwb$^G!QWk=$84(2 zx!U!3vD2y0>R_VB#o_n4*6d`Y$a8Z5Mv}X<((A0p+uq&)w%78(+U*u|qldZK7CvdO;N@Lrq1kEy>tiL+CcyI`Wo zlDX9%c&3Q6(Y4p{%H;UZ<@RWy#C@&J(B}Axq_~Z!ydHL>qQKXgw#=Zu)Y9kqWSzfW zoxzvA*ovdLkgC6zxzcZ{%a^mrkE*}R;ql4i_hF;SileuNp0TURqs>G{&=`ID}~o43xR$>m+1!*->@gq^X6ptPL1&c564leNv6waSN}vxS|p zuh8kD%jJopwgqXMZK=zTslJV{$^>Ydk*vW0Vv|&nwE$88P?NM%k+lS9n*d>wmHU;} z>G{>^`IfTBRF}Alt;LhB!vFvP00000000R800RgdNU)&6g9sBUT*$EChYt-SN}RY* zfB<_REDC@~v7^U<078oNfWRVxlLA7BT*C?FgSO`#+DuL(E zpgrF}_4&q;BR4>wGIgXBDbQR-?bs3I@Q4MXjD%TY0TkMho?W;Q(9|LmCZ04}KF&G+7eZdlg%MyDbTL8!iv4!s1PYWOiv$2s z0VxraLd1FDg#d^QvcQ1|CU{^Vlq~Rv7Hu53hZcae0YD!I>cIvZ3Btfb7ig%#fFHb( zFhm&*fH2<$7YH)K3M#~?oMk#4!oZC<=6E9?b}(Q_k2+QYKpi+nG9(2^QV<3TSSVsa z2}vli1`-=w(ZhTTc!NSciRV9A*! zlt6+MNem$+l|8gjga#VSrv`f{NU?&L0!$E>MV(0SNduHtYH0&M&hxbKw#{#$U*>% z4G_o@!z;ApVgnp>&@l@fxY!Uw46Pj7!nZ}xpaHBL;6Q~5=u$D?dnZEU3$G|?v(|?~Kt?P?%>P P6G57H?)gsw1q1*)P>w}8 literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_contact_jabber.gif b/templates/SwiftBlueBeitDina/en/icon_contact_jabber.gif new file mode 100644 index 0000000000000000000000000000000000000000..0847363c111180c9f95f48343df7ce5b56584607 GIT binary patch literal 1653 zcmdUt|5K880LMQd&_hyMDyOE7XqnlUNv+FPITTl9?nY*1Wu9%WHdAMvrR%5>nt93^ zagLrj=8!RCNbZS<&~e-&Jw9Vd?1>Tch!}^?QAZs4ZB|>Y{*1kTdf)rE*WGLTj%~S{ z4)Z}GXar#C6AB3c5?Bph^6I++j(qiU%JnwIAkk%XxI%MJn-0$H&qe*SI>&@-V$R@+ z+JdwH${GbSlXGHDfd`)T%FMo5rNz??!@an_RBmR}bUz=svaSWGRM}qq>4Oc9Ud*R7 zy90p$9-L)0^}+@_LOe`vP>c1h>Ry}P9k!3p-IugJ|9QaVo%VgN(%OQnMg3K3TPPHg zp?=CoUGr2W)P-`5W1Qilc){@t*AM{SEEFP=Hycf1~nVfPgP;k*yuEasrmujom z=n3bvAaawd6TuDch{8lMvrA%dzA5ep@5}n#5uwhJ zCDiKd<0^|=?+jYK5!5}dwoim4LcJ@@JfZ4$J#=XMQQxG7cnD+T5{ti3Hb}s*0tz7 zb(B|#yL57k4^+u(H1<}`ug2}2azfF)S7y}VzT%7ecD1QWVUd`< zYDdWGpEPv&O_Ff*Lj1BK1^*g*SPXG$MwQFSNGp@qp0@vSOb2br?)LWRgP30~ z=d2=!sHljUl)I-ARR%@Uts}ow3`esgj0Q|6f$Mx#_)uk+u zqG6@fr=HBdtDTpzG7B|cy?3*I%wF5aC0(8;6NsQ@^b#!vkSSXYv)pDq&8a#wb*1hQ zJ3eidNW@>)GIIHcEjZ&G|4_E#jj_{$^TZcBIoUg;NWm>)MR{WByTwat?-pOm2%Tk7 z(MUr6dtn-v&7*-0;i#qZA1n2s`qGk(c~t6S_B(t)eDJ|gXU|X1(q8au_CC(wbtG$! zM#<>u;thOrSzKja%v(T*{EArc*J*Eq=&jSNFjYi@_)6YV5an1QUJt8h$?;^?p4u@w zyW=&ep-prweQiA{Ikg<&UYN&@Qj>x3@!>^~ZxKX?aKL3`oXUkjeuzkqUk_wlGA{|T zCe)T??fLX1a&70@zN<_M==+=mQg4DByt?p#xRtVd{z+2C;_+SX`K#iS#LL&@3}J$d zOck_DkiTKiGD;JI(_^OxxCvnT0Y+VGsy~--hD;QGyEm7FeY7uGQUZ%2T zv5CF83hC_xT>5Y(LSuq5u67k@;|v*jS1X$r@Fj$`Y<1z6*6i&~L_RfX963*25AQmc zx)d3ygJ#IeRw@(TRZC@>kL531@BW$wHbqB1NlgahByV}vK$Wf^Om;akwv!{${A02N+My5;hp3)(!u5x zFIyQ(+FxHX>lglA^62kBM90*(MA;A-`6P{&TKu}|71eZ y7#a9W*+Pc*y+c19vrscu-yC0lBXYWA=Yktp%EpE}!wZgrnWvE-;}YY+=KlbI>*t*S literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_contact_msnm.gif b/templates/SwiftBlueBeitDina/en/icon_contact_msnm.gif new file mode 100644 index 0000000000000000000000000000000000000000..813e021537d305ab572fa72cdb6ff6ddaaf59e7b GIT binary patch literal 1572 zcmdUt@lO+H9LC?$0;LowP_Zb?RuKy}?qoQt15yy>V48FWw~G?PfCdZNlkNkqN2%@AWkP;WLTcO(#TLKEJjg`l37UtXw?8_^_M(1<=S7vl8G=xG z`06DZqX-mD0h*@-$f=5=A)g}fNRpDW(=XTw%1-f&CQ>SL5-gzOEaXW+0Dc*GWgEp4 z4C$c=w~v65f;34?BBPrEkOL4pDGu;SN>PBv=ZDCNlEBMKN!8*N$Ry*Y2++~qF(%T{ zC?I3JES2_0+h!(xG-tsD59Q}X#fg(7k8lQJtPF${l12-Xmq%^}$7q3I7*O5CLdnh0 z79Yc=T7wc!a%?KgM@J_)GfpZmV&>{<;9-E>4eS(X;6SO@(h%M+NS>}RXko(2++bLi zX6C~3Of;4N)Qf6TY-#t?eDu|>{#P=-1bSmJ4*5vXSWvN3qEsukL#ztn-!H2Jwl@wu zn{O_3j`R92OBZ=EkQM-UarSO3Yp91CE%5$2()#V?U{A^ZziMk7YwNa~ zvI|Mkl7IO3_pctfH@@QhbnZE(;O#E}O23~EUc(>v)+kLqaWRs zT~^;*6M2sMN;;k=Km6y>^}H+MCo6p}-MR;vSs0*Meq3)kwB`W3vR;?dTQO1=A?{ZN zO$%F=4;|UmT(oAl-1TyHQ>63R6K$yq)JSJKaKGmE-cbVjTwAoU>@htWd}Oco=+YNq z-JR*v+hxzbqS>js%srvHYx!HMW+w_-V`pc(KdYf4rZ-(MVoG041#@hj{*Ajpe;j14 zi(dk59XSI!<7zji%Ew*7&i|vD#&{2VcAcUUPIA((r|K*84$6!0D^kcNI31d6<}` z{~WX4@fh7!Q;{LZJPizB0-&>3Be2ovZ~~9%%=#)K6@&gO$`NR1~vHGTE zr~QE&Wk;$i>2pI<_O!He+%sZaE0qTfr<&t|(DRcUf(Bz)KDctwm)+>pmxiFuku#t! z|H@w3Tz*PCe$#bH4wzP5Ftd-Z+k0H|l6_T(GC0pvqjJY#d3jpe7#qo~I_A50YpKma z->7~%_vCi%aB(MSSoC#eZux`KKp9qWCy-avP_p(`(U>>!8?pDozf(K+{%p$Kk&fy& pS4vpq9y#24dF%ckzst+kKcGkdXrHb*ZdgwYKK-*JQ)d8g{ReZPi6;O6 literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_contact_pm.gif b/templates/SwiftBlueBeitDina/en/icon_contact_pm.gif new file mode 100644 index 0000000000000000000000000000000000000000..92ed18dcff33dfbdc55963ffcffd9c27ab15233e GIT binary patch literal 1603 zcmdT?{cjXi6n)#>ZD#2%Orb4Yf8W*q(uZ_W=V_ue1Q zJ?Ac2x|qK&lL9566@bdWLID5*U?%YEX74D->OQsHybg(uEbQc=j@}B1@Iy8x^W5+Y&uIqXVK&Iho z9JX^Q4S6W8nh0n}LAGab$Z{CjA(mm|4>jGz3g54(&M4^T-BSjZcf5Y-lDDbmWO3fgE5EpkoMiSrAn0 zU|9w!k)&B!)g+T(gH>b++b)rT&sfZ(AsJDIt6jc2;f-dS<7ac1c9Z3Fvf-}<>oCs!RF+Q$S)^u~@Q zZ#|spCKn?{>Gru(8XkB1&IE=Jr+R9dYI@k=b!}zG`bQf&D&{YYZH#Ar3T~e??G&3? z_TkLc?SRQtW}evFRnfTeaXOP!nx;-;uZ?P%2b)eS!J>*4>0JAl;R)Xw)|xxYP9J#n z7?XUdEA)xd)NSF9o6Ek~R=@M!ZhovI+}*ktZn^r%+6a7){$Vrzy&_XPXRE!da)N6W z%coM6&Ytt5FFp@)5_)OFH&Ld=iP#+_>zhureDGT5l;3{&xX$#L-O2vlrPT+HKUY!N zpD8TfRGwp-FKpR=e$vAEpDFF_-oj%?hh}`*yK3>Q*6VZ5zr5cr?(b~m|L6=1)&|0K;P!S50+hO^HzS;(;Vfh!li5Gv9H`x_{QMb*aE|;pSVh>DlE9? z%{#7WMGd$hT+%DnM~YSi6dJTZPy|7In>G^YtSV@%!rwF(DI-g(Zruczu@7k*K(Ir; zyKvgZUy`Be>WOKW4$5<^j@Yd6rS-Asb$}=CwG!)NorloIeN?rE_l0NXc1C4BIaD~i zr1ISE=>x^*IB}Dhq#r9E3(ZK>yjv5Z&8HF*z!5LeSIIkK;>7g$xwj90`oJfv+oEf# z>MP#?bC$=S8xX>Q2&Oxyaszd#;wALhKrG_EJLCBG>i`aazRr0YQU6%S3*2{xdfE!L zk;0M%L|j^(1ew8LsJcBgL73N37hQ0qeJ~c}tY7neS0}l(t@J^uolJR4X4b*1-o I2@UT54^o+ik^lez literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_contact_www.gif b/templates/SwiftBlueBeitDina/en/icon_contact_www.gif new file mode 100644 index 0000000000000000000000000000000000000000..c186628cecc1a85ec0a7fce271da02df5024ee7d GIT binary patch literal 1589 zcmdr~+fNi{9R2pfGTeuYg1FWNL05`)t%z$%?Qn@KbZy3Jn^mzL8=7ntnxUn#sk9wn zjpL=wR56Z-_}LqyB92JuJhaUR?8B@@yAsr`q3xQ|WLo!OYH9qMOhVUxqvz?D^Keei zIluabE$&TwJs=Ns08sR=)dYYEl!FAGaD%`vCQeaSMI{22NJPUBMQ1cDsWBz0Pt9Q| zqM_M&HHJg6c{!pv0un2!3kwScEc6J9lan|(!b6#d3duqSs-RhPak3yGH!o9y(juvn zs`({VL@}R;tbVZ|0BI4)QQc6|HH-xmMNyp=WTOrMM&PA{rYuKvsKzK>HdsLTMWY4q zvIVrtZI3PzDh*+pPoSp*G<>4d)x&jgsWaNj)kbp6o zZuAod2RKoV%waV)Zx{yc=UG21K%~n)mV-dS5f_m7005*bia|g@EQJNa;p=SfWQ|c` zK6HG(zuj=>$$COThdSQT88CWFj7|{IF^J$O#wx~?jy-}ztD20lTgAMNnJDHY1X&-( zm_#~O0%U=QiD&?-9#+86gJeb(7$Ly2i5V0?B-~?|g$jfs%>*#w{4DQq_?$k@Ekyy; zow6<}s+&m^F1b0y=NEM?!U^)678fLi;RH6}2xS2(vMlMUXoP|oy3{9|#$mJ17^)Bg z&F$VQV~VDobqH7$35pmu(UcYv3mhIwR9%v01cC7_VH^iWuifA)46)?N^ZZ{xEC35( z_sDR(hsZ5!Qgz3wS1!M{q2F`uv+DJYFJCLXbK}mEV~*M!D|MpeY~|biy>0JUZi@L! z8*lVCT>t9k*~-lc0j4bI>t z)OD4aJi6?~vG_f+Kg~%qm%1#r!HQl$a?RGOJ43p3!*Y3fO4(d|UGJFuV3N;WF)%XL zwc94-`h~E$b#*B}pi2)XvSS--?>3E(jE%mPv=~6&ZWHSM+P;~M$p=ha>i%tjG@*%I zMW9%@BXm`F|5nsIe6HqD<^^Yea)UTLkvUMc%SX3Oojch5OU6@RL8T_zbOPAxRS>K0 znMo<5*_L8U@Ed!T{q$c{XLx!acda(RDY$M=p~H7ORP?T= z{%Ne+Li!mqkxA=amJ$)6bil#;9ohP0WDcJSowGE=g<8i49y%%Wqd*bicwOU=MJT=a zg)P?=8&6rG957pjt+1waD=tBMvx+H!vSla2q-O;=)c5RnNjpE;)Y5j?+NP~b z%b{jWhcj(e?Cg1N%aSjXQoN+eT4V1pCl`AKYTve7to;nxucPFrXmYY|e<8zpKP{EH zl1<*4hDEjIZPtM!&POUB$`>3Dhelr_doo7eNTtY;zB3nxDg$7AXn9C}+Wc`1)jc@% z;jZcP&Y%mdd0}QEx%`;j6t6FJrbX^m2d0Ho_aM>b3Jbd8p>YeLvgV9U?a#l zO}bEcRjy-u*7^gDRPsQ@gvXgb(`mA~+UX&icOn>wB!z0Dl{+1&8nDLRxo)i-5LPwSYjPWA@ZJf3a8*Saz4 e9(Cn!uWZecP2P2@OL5HoM;(5^=dYzH@Z5h|a*uof literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_contact_yahoo.gif b/templates/SwiftBlueBeitDina/en/icon_contact_yahoo.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b817041d1d7535d6d348152659fe5dc55f7410c GIT binary patch literal 1583 zcmds#|8LZE7{_~G*KK#>;BIpJ#yU5*a}0Cf7&n-)`^s%zq~OF37wuqR35%8l;WWdQ zZD@rJ3JferOg9Ep)TJn2ih_Q&F|1&;j3qV%NHvHZ-n1H#5)bkCH+=o{Fh zaeZB=yd@0zpiK~zch7EtAPZCiC3x673Xxo*RCH5P4NjD0&EzG8lVqS7f~@gC6%<`m zbOESPE5}I+!%Kp!C-6}GHB~j?AS0=)AO&fW7L`zI9}g5AkBX`xDLN@60u5FGaeFDj z1A>>M45JgY9>6474bTF^i=twfo=`kOvZBlg5-S1&4$>?eC)#liuq=;61%+ZbpaIpu zIAB5n0}23DrzO=4;i9Zkf*ei^t9m>TQ8>}Sql#vjC=tin6h<)psNo8!QBKn|A&B3+ zc{3I!X^s;_5HF}P3nF?T3=}OEi^Y)|iDG~NL|NmaG{#9L6qIm^O)Nsfe3TBe62?j) zMr1f%PsAc&4GFVAH3JwB0WVEeYkyQyNrC_tn@*+?r9xyByZ;mQB zrDK!?6qKYjjO0a`3R8ZZ;RH!VNt6+JR`8RI5`Fj{|6||>kPXfbi~MjG>@9BQuugA^ zC%>w@b8G+DcE7u7?XH4vj$}Of>`8vc*t^|(0!x;EEAL*NyY%g2j9k?%?+m>eN0trt zA6-%hb*AJroDeP_3MZ#*womRUEL`+uMN{psduQhtMkw{-mhZiT#OSu1Vh{QOGHZzE zH{?5~l^(*HEsw2rrauy0G4Ubw6GMMR+frvmBx=j3!&8DxFGUrkW2b9!%K+AsQ?$*M zF^^2%Q%(Qds2x9=#Eb~fdFu}PhiOaC)?3g)*bYCxV|8?4oa_YOtnYo#+ZCAS1 zx1*5y&NNHzLfH5tk793kH09QT`*&!#I%(zu`S{P>a9JJ8Og=j1WwW-g?6K^w{-?$1 zm9tMlpvnS;d~{{UUB~K|*A1OJWwp6nuOskNfjnnkN#ooLsY#`v)?0!vwRvn*(Et-~ z3Ih8=DhaXL4h-icd!gU}bHgnnwp6;PZ}at&)3+k&_Ho(iF3>8y=`|zu*7;@SbefkS zx;8-{&xM?}jnqII6uP$}$u-YYX>CoLzp8g1CDu6h0s^(UiifKLGr{EHO=S@g+FQ61 z9ku7;K}&~igEHLPvZH>Dt>?ggZQZPzt8XVaHPRPLoCO}s%ohj8#~djIA`k}mHFRYi zwz9+4R~59={VDrkmjxQErq2{C&0U^ih_ zNFshga?(i89qGjcmDBTFIYN|@JWH_V|XU(h@sM3zH%MpNfRz_u9DxYwQj zu-vwUXF?L=)Yx(e>KRjye{CN4D7P>7&202cZ6N-T%JI2DZLU%b+m}K^-e8;A$JZkL zvuIqAu(8u-SqRd^mVxQO=u)VE>YHmd9KnR{wb=${(P!^RoBLf3f7rSZqKPbpGMfxp zGtQybg(loS^Ff0LZFhWet%S!{!fNMQvA3*YKo!odm6e{h%-u6NPU+WO`IqToU zYz2Io-7VHnayzZnQf;-Qm)AWavH6=|Pec0$ZigA_8HF?>b?*#$kT#OeO=l^w^hU03 z@(Q~P6mU68Q;TUfPXO1btW-#sQrrr`6Mt|0&%Z1X^&8-#_E1#KhVrNwEY+-{k;{k& zE|8)!Oj}5YpRPZs%?CI!eNiAV>e8ACmxWG^Nj z4KNv3%M(Dpk+qB55)DoyBf?3Wd3MR>#=NJd1NWyw2KE|s%9h674-IV^-le(^JL y_jkH4=OjJx90iUXYQo;Zvl8yd=agCi_n?g6W#lJcd^Lfqb+IlPf8lUgkp2f)YO81f literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_post_edit.gif b/templates/SwiftBlueBeitDina/en/icon_post_edit.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ff5f8a9fedec0d5a5fb59fbd173bda1020c455b GIT binary patch literal 1674 zcmdVY@l%s^00!{y*cfw68@O`Dm@l+qdP~SNLs<2K6DBNsO|B-byHQgy$p%MCgxw1+ z8Mv-t%ie6-z*n8e8@|xgWpCa)e9Kqcc`w|e)y?abmaSTbxa!TkNdJsJKRx&S@ci`D zuB$0u-P8zFU>5*Ie@jFFh=2jyako1TwqSQ67GkkbG?o&$l;Ed0Dv=?gDK;t4d?uO{ zf=nV5n+ecyf0!$CkvNk`CX;h>b3T#{$1?#crtb<8(PWV2yND>A$lMvcefu^}$AJUm zd46VQ#)F4RF69o#1wkOWG{a}?0oEM|vAht9&p2=vIDDy8ssW=k8jYm+Aa_k5W9b0J zVd1EkpfQH`2B~;FjuNb1ufKdva5x+*T_nr0o*<=ADD+*#?CdPTCLsvI*<>b@F`$G} zsU!%(X0styJBp%e4PITBp-di5Xp2Fp)@@5Gz5kot>RVOM@pIZEI`u zQE^*<*8|B*FE_geoSvN<4@Y0L=ro>sDOnT;g}&-W@Hkm`MFIigq-H7D57A8G(p zb!%Chqi3CRhjh2>;@Huz-Y9no^RFrq{1K zRCwJnui7K;9=3k+@|8=chQB%agN>QE{%;5+<9*SLEN+e+aMrPMotWVE;CU)T?Xje8Rxby;~lxJlEAUIXrM|EVyyF z=C>n9-^n&uclJH=rxYz1eSXaP_SqZrvJ0T+tWB=Xo3utv>x6A+UH*c{b;;45qw;s_ zA6I_d_uA>t{`!3$1kZsb{}2OaVAhelk5ulv!GBiyZ=rFvfAK>#>e7NBd!PvH^`6hy z=r+`qSe;1U!l#`*7o~EO{;EsWUptuf?o+88iJTOHg8U)+>Ra?H_95r_tB+-6sY$%& zr322qaZgc8QDn)hSR|rBov?KNVn9Rcf3(1GJLW)#8q8Cw@9S-`$im58WTA6}N#v ziTZ_=aCPVFmx`nxy*|A)3sbu%hsyK2yF!sTog3ZR(FEsm1UXfH5`sJ5l zvUm=aM=&;8!Eza5oynBaBx%;;dt5w^V9@BR4X!d<1^WcN~Ljw}sQyrr5QxG+} zrmz^NtMtz?5jvbau>E?tIzAXV`|Aq(uV+VOB2=nqE-U@CRMxuVQ>?~o_++ITDw}V( z(%YSr#Z>h#t)xk2aijl{I(a#qXOf-pHg$_NyV5rgMG~70_vr<^DXkzSr&*iM1Re&Rzv3>g2B_hH{lE1zdHeIKCA*9Y=GP3%qO5 z4uN-+j0j*Os-ic9)YB)k%X7i5iKU38`^QyoASvwcU4AQtzrUk1rNR%N1$~x@18^{! rsmcwVQBJ0p5T@95>U?G#?l%v<@jJ7qG?w#>a(ZGm`dH}(7*zfT&{4+% literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_post_info.gif b/templates/SwiftBlueBeitDina/en/icon_post_info.gif new file mode 100644 index 0000000000000000000000000000000000000000..95dcb7549904478883a9f83b4bbd7a3aaf1d4c42 GIT binary patch literal 1090 zcmeH^TThyI0Ehn~om8PSEj7luS);aTdWdGO%&bjOYil=`*wi+?X;Ut2HCdP0rm?QO zKt-l(-K;}FtPBu`fGr>g6_7K^3seqL4}kjO32<(;QBKK{O}{}uz@DpLp3C2Jo{>-9KI3dv@-xdv~)(nXiq+@XYREv{dVT2^A_ zK+LfbXKCKJgNb3=`ipVr%hy4+c6Q7gQTZcBzGIEd{N>z;iyUERFwRuDyTy~E3%kSi z4Use4H|CJfz2jQ~y>dIW8q@f;2^{Dvs%paf_5t5^puW!&PPl>zrFVB?F{)XNGEB?g z3T(*wK7n&f;`$TUCTdqMSXX1{2TZMRr%~jb2_-zC1YrPblY25AaWWrsrJlcEO^1Zm z)eG&Ca*9}B_8Q@s365RwR`RC90w~aN)n*3aYZ!!@3j4YA3x5j;u)*-`rii|9A^o&eV#paZo=T1E3F-E6H=XW@kHMVB9XT`F09--`MWamykml(!tp`x1-7SEOQ3J=uCfEXB7RKx6Hp++;klt>}|uw;)dQmCn>V zHLSZF!a;OaaWSz0k&^jw3A$i29dXTAj_5iL5b#u44ibfAzhmcie3YLt52}rohruQC zB?wL`GoC?rW?yrYpu;Bs1>e+CVd^HQa%&n~21@!_aQcTLRzX@f0>i7>E|aAV=pKhM z>7VMGTglj!^s((yL+|;Px# literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_post_quote.gif b/templates/SwiftBlueBeitDina/en/icon_post_quote.gif new file mode 100644 index 0000000000000000000000000000000000000000..2d5ad4f257673d53228f45f3de9c0ec4a9ee0257 GIT binary patch literal 1669 zcmc)I|5K8800;07-voh3jS-cSEh>-HJz1Hn&U-Rvthrq=H(fJF%{ zm?NjoLvoCWab%1fBSPjFLq_yO#E7v{W<*BJoFi(Ev*mL3SM2rU`|kbA``$ZVFDrU= z-yT2*M*&#z6psM_19HK<7uk7Gr*tISiFvK(l(Yfcw^>U3AOzeI-c~! zW_0fG+}xbpghnEfoYsE#c+wP@(z(XuMz_N3HToy@=(xr)qIHHm(HYCg6V*_l)!^-S zNBXQjS0w3=%?yR6t)Xeoaf87VO(v7lp-{fqI6FH_ZcyO`eJWc(WeavX!m(JaKw@Mz zYxx>SYZ%K72S@oc77lG*b#$okJ7~uYIL4hE;2wDYGg)_bO4nb z(Q1_wQRo}R-AA;}9;0h?bhM(=jKN?kE8nS6I(VJtc7sc98)?^AGBY!UI&_10pnJfH zm;!RSoW)|1$>gGXsRFHyADd!Y|K%GWRHZuH_mP%Xg@ zi+(;^{N=wzhcETt{EAD!@^4ZU%!1-=n>!~zmoYI_m+J3$E`NRd8~){XK2&!?l9qD( z1|O3RxHVOWM`1BOn)*GbQ!#vbZSHOM&}{viFLOTO8(z-%Ebse>L4+f6y)8?2N)TRQ zML)oSwlh9{1c|Mp-PCWH3HFJSYRF}!2?JTw1*d0pP;n0W8H!VP85TJWdv z^);&G^aIyk(nbLPcu4#!r;=hic-Njq0fiSC>N((NZvksUX8~&8p2B$Nd>??%-MMz` z&vhz6ZD!}!HE^RVaweIJgq2?iJ{jdl2^4cBu%bev??DelpJtz|9%sZ8LY zFyE?kP*yeysBJlQ0uOcR0OrggYz>UVl5DQK@7by8WzZf7vtkiS@1m~L!n$a8ITpUr z?FVWXhQ}Gj0b=#F+J#Ly7x40(y6o-bS{+19z4{Q&Ua*><7$&~5&*~;M_T2O?EQ4?& z=t|XBNa`YX_JmrJL569P;`JY3PtlGMrLO{rc&>)KexgM(d5=JboBN2OLd(-_IJ!VR z{Kk6Cg%hbuU0v>F8<}%mZJEt{sBf%5$l_GxIm1eb8HePnyv00^{?ky?W7 zGXrvhSP7a4wj!|WdZ`h+m|VU88Ur+}D7{`?3Sj!)8NX>^x;eM>Mmc50NlI24 z45wvhVz4BzrqdoU84u%)jK6ivaL81(bG`D113a@m5 z^G@$U`_l)8!T3La7_a7UiS?~%e1>bMJLNp?-|=UUe)t_fn{eSC-F%F$`EfT4w)_V- Cqw1Rg literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_post_report.gif b/templates/SwiftBlueBeitDina/en/icon_post_report.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e4f29e3a58fcdc7eedca4823dbb9c4d6eb0d3a6 GIT binary patch literal 1096 zcmeH^=}*#e0EfRnAp2E7ZsJzdy6jp}F~^pbTO}P>t!di2Tb7!(t{1K2O(7W=U1}C6 zNr;f5q*x##hoFFRgrH~!XecOHmUeKx>i83S-}CCT=jG?wo4zMyOAZd;zzqPF$50Re z5Fmg*{B?C8zw*yi0wCygvEG{6Tp``ZuwgXvZaiAu?%=fbzUluW>KPSV#@SL!vwc$b z{##!#))$D`C!$JE$mEN3jD+ohC|B86(=o`?41j$0>vsX^;7p6-bDi;Honb^h9JctQ z4QAg9gn2{N!tgDrHvZWX$LdX@Z@K9hla8Bh80SHJbfh-iSPDjdmogbccjpZlT^IQ#hJz z!CEF~Rv|~_2`k*8+D?~z=tuiJjCRifp2qn^q}QIe|Z4@1(5J!iiD@T3(rR!?UCe=Y1pKF zIGFmNX2JS1s!}3URFW_o-3G5f?V#RES-It2!08L$r2@PY^NeVO-5ieF&Zt9%e`Hv>tFydiljK!Y$Hlk zY?Gdn$wyBk+z%A1P~a|nv)7)>eFhz+JQB~*zDYI0EoADSewJ^aB+{rthSEBDK7~|-YM{ioKmTA2*L^W-Gu)C5Wa=@!puqnaUT&b$**IH{@b0R z^e9*5j~6{BGK%;6*>1_5lajLIq)Y^zD6L%tw6TrmduJ4lBXHHVf$htMqEG{nRCLBg z`|$>z1TY&^%`f#)tHzx0y0Z%DX1=ILTuiHL%lK7G1;u*x(S?B>AFkf<piDBdZa5?$`0=HR9$9{i?v_XQZJTkRV|*cJ+mjJ z=R2hz|l$l4`{wF=z#KRyOrqxCLylqN}~H z&6qiBp)k;LW)aqK$juXL#@&{`Qzf?-ukr2Mm6e1xnB$veX}o2NbTdQA@9mM@;U{lX zZq7cqv4)@OkPivJO>dT2ge^q(GKiet@SRxy@<`tL z`kC8#aWZgp)z#sd1t#VaGclN(zWTksvq+S&8{y4A)bFrXr0L3o^M4p)1ki^607E8}7XSbN literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_user_online.gif b/templates/SwiftBlueBeitDina/en/icon_user_online.gif new file mode 100644 index 0000000000000000000000000000000000000000..47fe20446723106a94e9c6e321402ec538c2b432 GIT binary patch literal 1611 zcmchV_gm5l0LH%{DTNxPm}vtveQbDH*~!&iN6s=+D=O_N&%MgDY>++{Zc8n_h67Yo z6hje^p_u~^l;J?by>O50GE2r?&vo@r+~;|Jct7vYuiI%?^e+LY0At`j0HCxG5CDLH z1HgBFY!o20;CuBdcgkZ)3OJqb7PY+#nyxtwMKr;mRI&R%z8zf`PpgX>R>?w!$N!{zXOGC|$l3&&~;_ zN8y=-NM>})xJojk4ylfKJGLIdjP6^|%I7sf)UYIW38QyeG^Kv%O#5EHL7n) zOK$VH>J|;}{eoM_?Fy_4X&zJ2dzLO%p1oOz^Q-bJX?j=28zMCHfI{-D;>g+cvdZq^ zFnUy7-%3ss7ZO1TD3@dkCKKnaefJ`_!TDDGruGo;sw+d}EVEu$Z!UduK_5H93$AmIeRB7R=;&=Z;n`$G$* zvznICRsS+^g?Qx0E&pGj-vAxxj#CU0KN)JY@2Z$l+LjLA2F^dlEE8p#9*G6-_XAlQ!sD3^2LoHcX>+z~(=N{ukB-3LKRdP4pFD8LIN>e4{2aBvVKI|F+mr@!w)nPcK|Vw<}N;p80~ zKq5PBH{W}H_M2%5=~s&VoQ$x=`(H;hkd3s>%X`W3?=PRvK`}wU^HX8ZZ=f&+xpxM1 zwjW2!9bIPEK6LPhK#ex021v! ziMH(_qA->@;eSePhZ``$jR-6Flt~PZ@0?AqA|>f>vL7Y`C(+tq>rMV!gqF8EOYy)N z8#u(|{E6YYtza9w^d0g3e7D``a8=&!?HNc%ml({gS^a%Bm?Ffj6^4!h{+N=7#6tIl zqrf~RUN_ak0%P&`7$#LW&CG1CJ{V0BTbSLEW*C9dNf_cik5wMj66*{uet~s!f_ZAb z;RG9@iYxoAUtJA+j{qx1M2Hqo6y6wmwKtWJI9^B`jBil zBP20OLt72nok)HWxvaDJ%CWCfS5yF!V5mQ^!bv%i13TG&Cl-GfrWWWx>)ZoMBzIfsWh=V=jFvQMj z^^nY93>m9)3^39+zd!b=-5dkCmURdT&+%}PretCe18ewL{hJLZc?#_1sP%rIu!N&f zBu>c(bexg*AiMCZoz7=Y8fDvimp9)io)2mJ@5)Z@4Xn!`kpn+;qr`N+-A;Ap=M k0%LAzRg0UB(kHv^!X5ZYJ8LwRo4#vHNUe4r1Okr#2Z^o@IsgCw literal 0 HcmV?d00001 diff --git a/templates/SwiftBlueBeitDina/en/icon_user_profile.gif b/templates/SwiftBlueBeitDina/en/icon_user_profile.gif new file mode 100644 index 0000000000000000000000000000000000000000..632e870fa83bb91037dfbbd4a4a7f728db89a474 GIT binary patch literal 1601 zcmdr~|5Fro7=HH-;`kz-+z}VTwIJG=C!vs?hRt$_o=AF*XeUaY$=H=-JB_28nzJg& zs?4wzlWXGmp)_|Cr&Uzek#Rl(4QuMSiHxgJZN})T)F55sRXaoHztQv4GtbO3&pglj zE?79LtTrVMjlo)41+@wkF^lOk+?_KIV1;oIgGG~HC9qN zSqlo-!%70yfsY#nSu;$jG$A7JqAV&#ke4KN1XvVfz{Mc5y#&GxCn;lNV=fwn1WYob zDf$>mRfl3`Z#5$OL39UP(}NplOe+o4sHT z!cYq+Y}(+FYOS4<_>F@trAn*I>?)0__2wBb2#U;*NWuo96b2+&^l=i&@sS9Cs7k6< zMAI=I?2LdU+0KdK_-LFbh-8iqc~~KaNQ^=dVSvZI4NUB2-4FtZaKOq%fgnga$hr?3 zrVOkg`hwx%_BfHwu$~~pnWk<=8_XC@vt0CM=w_40;OvszRWB-C+OR2?D)9j^NPJjS zhp*}*&ehxOVI~~EW*`J18bVA2;o(-FDF@81YDUCnSJl&p`9H!o23A`R*H+$Guy9To z7fEeBjrK{Et$|Z$N)^hUU3rxMs;`-xyD40K*>P-fs?S;3Gmz~}HdTa4p zxSG4%aqRkGYFA3`9rgai+*PMbKehIao8~P4y7JJA)g+sFM6gTck5)9h&u+PzeReN< zyCc$ny!Ohhle;?8-KD<`+Pj@?)Pfw6!#>N-&Xnxp#l)?$ zy}3Ch9`-_L^q#F{S?MNR{zrmiN{Q&sYkR>VFS1`#XZ)LdXikOODFqQugaS8Ds22cI zvxhSFoSz62&R^JDWgFSUrPq)ZX?AH3f@VU|2hPn-Ue`0F1E~}Y^$35gMEoig9mNRol%fz9n z{)S0V)NNZHLh~95fQ17#*i3y;_gON2CaFFMyz?$#i%@9y+vYxISnrz&mlD&~Y9!}c zhwc94$)x`9M80e6;d|~t6N}S*7w_Cjw@LpzJOMfj>66d!4=hfw`z=>z{^&SRZsNxA zWyTME$t?l@F33V34O>pF`w}u{7f6%?hN!Z1DB1CD=P%zZBu>8)48N3^OaUaAqpNy4 z9O=a69Dmh^JM;Iojsyyp$rgXdH9tZ0=2N7lWAQfnQqtm*)b1Yp{e2adQ1r^T#JQ12 z-QO3QS3b`yD^ydwr&OwE+Wz{{J(In*FuqPDO^>ScvT~ykm^2;VSTr6gmXNN4EO;6I z(!hb$hju(`Dfs=bTj9p(v$U%H@1MK4wKlOkGcS!yOs!$a&LnSD-Y2)2`zN3LyzQX7 j)|#+o<$xn4)4733^iUN8cbndLIrtmDpm2a92zd2B-EDH`~39DH{YMW z`L1qnZF+rk8z=&w0#NzfWB|Yb>cKQGvr8bzPb)7fyrd*Ex*#D%(*;>Y8QmQbp`wka zbvT}uwaHj&(#wsw7|2T~ujjO+;viJ&nITR>jELs#fu+4sNu4YW34S3VA}psSSxHT3 zlOoD6BS}FRr)5r7L%h;Li7mmAkRa;{i%8((r)#p7!9oTH1%(#XV{qKf zh)~v=SaCdyql)IDq1pt3g3O7EoWg;q5=|tz6mE))D`~xV2ytob<5gBrLW~q-6*4Gh zGDuXhlFIUm*2ajsNJdml(IUx;B17rW+5;7gxL%lKM3s?LfuaPc@InGY)yE-0#fdB? zSxHtiA*lFV6g{M}NvwD)kT*?`trVwC^HeW6#FF(>z8b9ZJ z?_X89zQyuNr3(aP0QTNB6%;7zw9!9|v#xA!3^r_h;JTVO4=^*eF(U!qS&TJi)qri$ z+TB|{pT)mk-q){k5!1mkcfl8>FWlHDTZn5n2j4wfX<*78A09l=TtS#uJ}3H4JHnhH-osTcunw_C$DkJa<9iWf;Z)rH6a4b zow~WvIP|AR&Hz)-&YA=3n2wxW7xl}|3L3ZCJI6gYXD&(Z8Z}s4ZenI#n-Gu zNEPet7y~&G`*03OaK9VuPynX<=%ZnyP11JsmyoAEaE@Ml)Hh>S1&Ev1`FH<3X8B&|X2Y{o@7?BScj<@!Fs)_rC80=;k&Jbli1c=S uf~_5v?yo=P^mYS|Tv^-yci{PN$1k|KoW?CrorYw-0L8C7Hs}FVFE1gsxYMmRj11Z<;k_a|mQhHvKpD%lUBfOU}1bNBN}s zB!d7DfFA&$FpbIpfDE7<*kj*K0_}pm3hf1fT-Z)O*ht9(8^!{X)bmX8>++Ds2W8=$ zFLoEU((q>Lt_dE67Ch0UEU<3C=NOk0P$c1BOHTQss)yS`<8Ruf_@wv6ZIydO8-TY` z46)z3{MvG;z)GfsV(HL!+P9iSvxFC?0s#f&Jag9ZeAoVb7sV3Vr8;|L=hAe*l24q5 ze+T`~^x++qXW7vHou{MQ_B0NCe%?Yl!Wj2kBZ=Tf>d|&Ou%7bC%@7i)4n}p4|BwW> zRB%j3Y1GWeK=`HNj$C`W(^hqIZY`<*>f%i3mD0baJ$7Qk9hsh6^G1{Im89WZo6H-5 zNJliy4AWbgrl$!-a8rG?PkWAWe|80gV-v23341`@%AC1yN!`>c`-v;DhAfd?ku_wh zs5V^glvqMMrK_rIN>$&e++Rhd*ZR#U^cN$#L7Br4-szh#4{2tLJ0xnMvfmIyelsGn zEoOW@Oy%n#1j3M;r)p>tum=VD;4PU$WM7g|TMWd*DCQmYyA>Gbh_d~AkbKsVcS!T- z6*&KLsI!-+aNWFbRUAJh&_5XWthgCb`)CL2NbfedmNuDF4Kak#Pg;`+asDuA7|qNk7Kh$Tc{U@I7q3n8mqOnAJfjjU#WciIrV&X(fQ= z6n{)?p - + \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/en/stylesheet.css b/templates/SwiftBlueBeitDina/en/stylesheet.css new file mode 100644 index 0000000..07cdd0d --- /dev/null +++ b/templates/SwiftBlueBeitDina/en/stylesheet.css @@ -0,0 +1,31 @@ +/* Online image */ +.imageset.icon_contact_aim { background-image: url("./icon_contact_aim.gif"); } +.imageset.icon_contact_email { background-image: url("./icon_contact_email.gif"); } +.imageset.icon_contact_icq { background-image: url("./icon_contact_icq.gif"); } +.imageset.icon_contact_jabber { background-image: url("./icon_contact_jabber.gif"); } +.imageset.icon_contact_msnm { background-image: url("./icon_contact_msnm.gif"); } +.imageset.icon_contact_pm { background-image: url("./icon_contact_pm.gif"); } +.imageset.icon_contact_yahoo { background-image: url("./icon_contact_yahoo.gif"); } +.imageset.icon_contact_www { background-image: url("./icon_contact_www.gif"); } + +.imageset.icon_post_delete { background-image: url("./icon_post_delete.gif"); } +.imageset.icon_post_edit { background-image: url("./icon_post_edit.gif"); } +.imageset.icon_post_info { background-image: url("./icon_post_info.gif"); } +.imageset.icon_post_quote { background-image: url("./icon_post_quote.gif"); } +.imageset.icon_post_report { background-image: url("./icon_post_report.gif"); } + +.imageset.icon_user_online { background-image: url("./icon_user_online.gif"); } +.imageset.icon_user_offline { background-image: url("./icon_user_offline.gif"); } +.imageset.icon_user_profile { background-image: url("./icon_user_profile.gif"); } +.imageset.icon_user_search { + background-image: url("./icon_user_search.gif"); + padding-left: 72px; + padding-top: 20px; +} +.imageset.icon_user_warn { background-image: url("./icon_user_warn.gif"); } + +.imageset.button_pm_new { background-image: url("./button_pm_new.gif"); } +.imageset.button_pm_reply { background-image: url("./button_pm_reply.gif"); } +.imageset.button_topic_locked { background-image: url("./button_topic_locked.gif"); } +.imageset.button_topic_new { background-image: url("./button_topic_new.gif"); } +.imageset.button_topic_reply { background-image: url("./button_topic_reply.gif"); } \ No newline at end of file diff --git a/templates/SwiftBlueBeitDina/formIE.css b/templates/SwiftBlueBeitDina/formIE.css new file mode 100644 index 0000000..fde54cb --- /dev/null +++ b/templates/SwiftBlueBeitDina/formIE.css @@ -0,0 +1,19 @@ +/* Fancy form styles for IE */ + +input, textarea, select { +border-top-width : 1px; +border-right-width : 1px; +border-bottom-width : 1px; +border-left-width : 1px; +} + +input { text-indent : 2px; } + +input.button { +border-top-width : 1px; +border-right-width : 1px; +border-bottom-width : 1px; +border-left-width : 1px; +} + +.postbody { line-height: 18px} diff --git a/templates/SwiftBlueBeitDina/forum_fn.js b/templates/SwiftBlueBeitDina/forum_fn.js new file mode 100644 index 0000000..2e39365 --- /dev/null +++ b/templates/SwiftBlueBeitDina/forum_fn.js @@ -0,0 +1,937 @@ +/* global phpbb */ + +/** +* phpBB3 forum functions +*/ + +/** +* Find a member +*/ +function find_username(url) { + 'use strict'; + + popup(url, 760, 570, '_usersearch'); + return false; +} + +/** +* Window popup +*/ +function popup(url, width, height, name) { + 'use strict'; + + if (!name) { + name = '_popup'; + } + + window.open(url.replace(/&/g, '&'), name, 'height=' + height + ',resizable=yes,scrollbars=yes, width=' + width); + return false; +} + +/** +* Jump to page +*/ +function pageJump(item) { + 'use strict'; + + var page = parseInt(item.val(), 10), + perPage = item.attr('data-per-page'), + baseUrl = item.attr('data-base-url'), + startName = item.attr('data-start-name'); + + if (page !== null && !isNaN(page) && page === Math.floor(page) && page > 0) { + if (baseUrl.indexOf('?') === -1) { + document.location.href = baseUrl + '?' + startName + '=' + ((page - 1) * perPage); + } else { + document.location.href = baseUrl.replace(/&/g, '&') + '&' + startName + '=' + ((page - 1) * perPage); + } + } +} + +/** +* Mark/unmark checklist +* id = ID of parent container, name = name prefix, state = state [true/false] +*/ +function marklist(id, name, state) { + 'use strict'; + + jQuery('#' + id + ' input[type=checkbox][name]').each(function() { + var $this = jQuery(this); + if ($this.attr('name').substr(0, name.length) === name && !$this.prop('disabled')) { + $this.prop('checked', state); + } + }); +} + +/** +* Resize viewable area for attached image or topic review panel (possibly others to come) +* e = element +*/ +function viewableArea(e, itself) { + 'use strict'; + + if (!e) { + return; + } + + if (!itself) { + e = e.parentNode; + } + + if (!e.vaHeight) { + // Store viewable area height before changing style to auto + e.vaHeight = e.offsetHeight; + e.vaMaxHeight = e.style.maxHeight; + e.style.height = 'auto'; + e.style.maxHeight = 'none'; + e.style.overflow = 'visible'; + } else { + // Restore viewable area height to the default + e.style.height = e.vaHeight + 'px'; + e.style.overflow = 'auto'; + e.style.maxHeight = e.vaMaxHeight; + e.vaHeight = false; + } +} + +/** +* Alternate display of subPanels +*/ +jQuery(function($) { + 'use strict'; + + $('.sub-panels').each(function() { + + var $childNodes = $('a[data-subpanel]', this), + panels = $childNodes.map(function () { + return this.getAttribute('data-subpanel'); + }), + showPanel = this.getAttribute('data-show-panel'); + + if (panels.length) { + activateSubPanel(showPanel, panels); + $childNodes.click(function () { + activateSubPanel(this.getAttribute('data-subpanel'), panels); + return false; + }); + } + }); +}); + +/** +* Activate specific subPanel +*/ +function activateSubPanel(p, panels) { + 'use strict'; + + var i, showPanel; + + if (typeof p === 'string') { + showPanel = p; + } + $('input[name="show_panel"]').val(showPanel); + + if (typeof panels === 'undefined') { + panels = jQuery('.sub-panels a[data-subpanel]').map(function() { + return this.getAttribute('data-subpanel'); + }); + } + + for (i = 0; i < panels.length; i++) { + jQuery('#' + panels[i]).css('display', panels[i] === showPanel ? 'block' : 'none'); + jQuery('#' + panels[i] + '-tab').toggleClass('activetab', panels[i] === showPanel); + } +} + +function selectCode(a) { + 'use strict'; + + // Get ID of code block + var e = a.parentNode.parentNode.getElementsByTagName('CODE')[0]; + var s, r; + + // Not IE and IE9+ + if (window.getSelection) { + s = window.getSelection(); + // Safari and Chrome + if (s.setBaseAndExtent) { + var l = (e.innerText.length > 1) ? e.innerText.length - 1 : 1; + try { + s.setBaseAndExtent(e, 0, e, l); + } catch (error) { + r = document.createRange(); + r.selectNodeContents(e); + s.removeAllRanges(); + s.addRange(r); + } + } + // Firefox and Opera + else { + // workaround for bug # 42885 + if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) === '
') { + e.innerHTML = e.innerHTML + ' '; + } + + r = document.createRange(); + r.selectNodeContents(e); + s.removeAllRanges(); + s.addRange(r); + } + } + // Some older browsers + else if (document.getSelection) { + s = document.getSelection(); + r = document.createRange(); + r.selectNodeContents(e); + s.removeAllRanges(); + s.addRange(r); + } + // IE + else if (document.selection) { + r = document.body.createTextRange(); + r.moveToElementText(e); + r.select(); + } +} + +var inAutocomplete = false; +var lastKeyEntered = ''; + +/** +* Check event key +*/ +function phpbbCheckKey(event) { + 'use strict'; + + // Keycode is array down or up? + if (event.keyCode && (event.keyCode === 40 || event.keyCode === 38)) { + inAutocomplete = true; + } + + // Make sure we are not within an "autocompletion" field + if (inAutocomplete) { + // If return pressed and key changed we reset the autocompletion + if (!lastKeyEntered || lastKeyEntered === event.which) { + inAutocomplete = false; + return true; + } + } + + // Keycode is not return, then return. ;) + if (event.which !== 13) { + lastKeyEntered = event.which; + return true; + } + + return false; +} + +/** +* Apply onkeypress event for forcing default submit button on ENTER key press +*/ +jQuery(function($) { + 'use strict'; + + $('form input[type=text], form input[type=password]').on('keypress', function (e) { + var defaultButton = $(this).parents('form').find('input[type=submit].default-submit-action'); + + if (!defaultButton || defaultButton.length <= 0) { + return true; + } + + if (phpbbCheckKey(e)) { + return true; + } + + if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) { + defaultButton.click(); + return false; + } + + return true; + }); +}); + +/** +* Functions for user search popup +*/ +function insertUser(formId, value) { + 'use strict'; + + var $form = jQuery(formId), + formName = $form.attr('data-form-name'), + fieldName = $form.attr('data-field-name'), + item = opener.document.forms[formName][fieldName]; + + if (item.value.length && item.type === 'textarea') { + value = item.value + '\n' + value; + } + + item.value = value; +} + +function insert_marked_users(formId, users) { + 'use strict'; + + $(users).filter(':checked').each(function() { + insertUser(formId, this.value); + }); + + window.close(); +} + +function insert_single_user(formId, user) { + 'use strict'; + + insertUser(formId, user); + window.close(); +} + +/** +* Parse document block +*/ +function parseDocument($container) { + 'use strict'; + + var test = document.createElement('div'), + oldBrowser = (typeof test.style.borderRadius === 'undefined'), + $body = $('body'); + + /** + * Reset avatar dimensions when changing URL or EMAIL + */ + $container.find('input[data-reset-on-edit]').on('keyup', function() { + $(this.getAttribute('data-reset-on-edit')).val(''); + }); + + /** + * Pagination + */ + $container.find('.pagination .page-jump-form :button').click(function() { + var $input = $(this).siblings('input.inputbox'); + pageJump($input); + }); + + $container.find('.pagination .page-jump-form input.inputbox').on('keypress', function(event) { + if (event.which === 13 || event.keyCode === 13) { + event.preventDefault(); + pageJump($(this)); + } + }); + + $container.find('.pagination .dropdown-trigger').click(function() { + var $dropdownContainer = $(this).parent(); + // Wait a little bit to make sure the dropdown has activated + setTimeout(function() { + if ($dropdownContainer.hasClass('dropdown-visible')) { + $dropdownContainer.find('input.inputbox').focus(); + } + }, 100); + }); + + /** + * Adjust HTML code for IE8 and older versions + */ + // if (oldBrowser) { + // // Fix .linklist.bulletin lists + // $container + // .find('ul.linklist.bulletin > li') + // .filter(':first-child, .rightside:last-child') + // .addClass('no-bulletin'); + // } + + /** + * Resize navigation (breadcrumbs) block to keep all links on same line + */ + $container.find('.navlinks').each(function() { + var $this = $(this), + $left = $this.children().not('.rightside'), + $right = $this.children('.rightside'); + + if ($left.length !== 1 || !$right.length) { + return; + } + + function resize() { + var width = 0, + diff = $left.outerWidth(true) - $left.width(), + minWidth = Math.max($this.width() / 3, 240), + maxWidth; + + $right.each(function() { + var $this = $(this); + if ($this.is(':visible')) { + width += $this.outerWidth(true); + } + }); + + maxWidth = $this.width() - width - diff; + $left.css('max-width', Math.floor(Math.max(maxWidth, minWidth)) + 'px'); + } + + resize(); + $(window).resize(resize); + }); + + /** + * Makes breadcrumbs responsive + */ + $container.find('.breadcrumbs:not([data-skip-responsive])').each(function() { + var $this = $(this), + $links = $this.find('.crumb'), + length = $links.length, + classes = ['wrapped-max', 'wrapped-wide', 'wrapped-medium', 'wrapped-small', 'wrapped-tiny'], + classesLength = classes.length, + maxHeight = 0, + lastWidth = false, + wrapped = false; + + // Set tooltips + $this.find('a').each(function() { + var $link = $(this); + $link.attr('title', $link.text()); + }); + + // Function that checks breadcrumbs + function check() { + var height = $this.height(), + width; + + // Test max-width set in code for .navlinks above + width = parseInt($this.css('max-width'), 10); + if (!width) { + width = $body.width(); + } + + maxHeight = parseInt($this.css('line-height'), 10); + $links.each(function() { + if ($(this).height() > 0) { + maxHeight = Math.max(maxHeight, $(this).outerHeight(true)); + } + }); + + if (height <= maxHeight) { + if (!wrapped || lastWidth === false || lastWidth >= width) { + return; + } + } + lastWidth = width; + + if (wrapped) { + $this.removeClass('wrapped').find('.crumb.wrapped').removeClass('wrapped ' + classes.join(' ')); + if ($this.height() <= maxHeight) { + return; + } + } + + wrapped = true; + $this.addClass('wrapped'); + if ($this.height() <= maxHeight) { + return; + } + + for (var i = 0; i < classesLength; i++) { + for (var j = length - 1; j >= 0; j--) { + $links.eq(j).addClass('wrapped ' + classes[i]); + if ($this.height() <= maxHeight) { + return; + } + } + } + } + + // Run function and set event + check(); + $(window).resize(check); + }); + + /** + * Responsive link lists + */ + var selector = '.linklist:not(.navlinks, [data-skip-responsive]),' + + '.postbody .post-buttons:not([data-skip-responsive])'; + $container.find(selector).each(function() { + var $this = $(this), + filterSkip = '.breadcrumbs, [data-skip-responsive]', + filterLast = '.edit-icon, .quote-icon, [data-last-responsive]', + $linksAll = $this.children(), + $linksNotSkip = $linksAll.not(filterSkip), // All items that can potentially be hidden + $linksFirst = $linksNotSkip.not(filterLast), // The items that will be hidden first + $linksLast = $linksNotSkip.filter(filterLast), // The items that will be hidden last + persistent = $this.attr('id') === 'nav-main', // Does this list already have a menu (such as quick-links)? + html = '', + slack = 3; // Vertical slack space (in pixels). Determines how sensitive the script is in determining whether a line-break has occurred. + + // Add a hidden drop-down menu to each links list (except those that already have one) + if (!persistent) { + if ($linksNotSkip.is('.rightside')) { + $linksNotSkip.filter('.rightside:first').before(html); + $this.children('.responsive-menu').addClass('rightside'); + } else { + $this.append(html); + } + } + + // Set some object references and initial states + var $menu = $this.children('.responsive-menu'), + $menuContents = $menu.find('.dropdown-contents'), + persistentContent = $menuContents.find('li:not(.separator)').length, + lastWidth = false, + compact = false, + responsive1 = false, + responsive2 = false, + copied1 = false, + copied2 = false, + maxHeight = 0; + + // Find the tallest element in the list (we assume that all elements are roughly the same height) + $linksAll.each(function() { + if (!$(this).height()) { + return; + } + maxHeight = Math.max(maxHeight, $(this).outerHeight(true)); + }); + if (maxHeight < 1) { + return; // Shouldn't be possible, but just in case, abort + } else { + maxHeight = maxHeight + slack; + } + + function check() { + var width = $body.width(); + // We can't make it any smaller than this, so just skip + if (responsive2 && compact && (width <= lastWidth)) { + return; + } + lastWidth = width; + + // Reset responsive and compact layout + if (responsive1 || responsive2) { + $linksNotSkip.removeClass('hidden'); + $menuContents.children('.clone').addClass('hidden'); + responsive1 = responsive2 = false; + } + if (compact) { + $this.removeClass('compact'); + compact = false; + } + + // Unhide the quick-links menu if it has "persistent" content + if (persistent && persistentContent) { + $menu.removeClass('hidden'); + } else { + $menu.addClass('hidden'); + } + + // Nothing to resize if block's height is not bigger than tallest element's height + if ($this.height() <= maxHeight) { + return; + } + + // STEP 1: Compact + if (!compact) { + $this.addClass('compact'); + compact = true; + } + if ($this.height() <= maxHeight) { + return; + } + + // STEP 2: First responsive set - compact + if (compact) { + $this.removeClass('compact'); + compact = false; + } + // Copy the list items to the dropdown + if (!copied1) { + var $clones1 = $linksFirst.clone(); + $menuContents.prepend($clones1.addClass('clone clone-first').removeClass('leftside rightside')); + + if ($this.hasClass('post-buttons')) { + $('.button', $menuContents).removeClass('button'); + $('.sr-only', $menuContents).removeClass('sr-only'); + $('.js-responsive-menu-link').addClass('button').addClass('button-icon-only'); + $('.js-responsive-menu-link .icon').removeClass('fa-bars').addClass('fa-ellipsis-h'); + } + copied1 = true; + } + if (!responsive1) { + $linksFirst.addClass('hidden'); + responsive1 = true; + $menuContents.children('.clone-first').removeClass('hidden'); + $menu.removeClass('hidden'); + } + if ($this.height() <= maxHeight) { + return; + } + + // STEP 3: First responsive set + compact + if (!compact) { + $this.addClass('compact'); + compact = true; + } + if ($this.height() <= maxHeight) { + return; + } + + // STEP 4: Last responsive set - compact + if (!$linksLast.length) { + return; // No other links to hide, can't do more + } + if (compact) { + $this.removeClass('compact'); + compact = false; + } + // Copy the list items to the dropdown + if (!copied2) { + var $clones2 = $linksLast.clone(); + $menuContents.prepend($clones2.addClass('clone clone-last').removeClass('leftside rightside')); + copied2 = true; + } + if (!responsive2) { + $linksLast.addClass('hidden'); + responsive2 = true; + $menuContents.children('.clone-last').removeClass('hidden'); + } + if ($this.height() <= maxHeight) { + return; + } + + // STEP 5: Last responsive set + compact + if (!compact) { + $this.addClass('compact'); + compact = true; + } + } + + if (!persistent) { + phpbb.registerDropdown($menu.find('a.js-responsive-menu-link'), $menu.find('.dropdown'), false); + } + + // If there are any images in the links list, run the check again after they have loaded + $linksAll.find('img').each(function() { + $(this).on('load', function() { + check(); + }); + }); + + check(); + $(window).resize(check); + }); + + /** + * Do not run functions below for old browsers + */ + if (oldBrowser) { + return; + } + + /** + * Adjust topiclist lists with check boxes + */ + $container.find('ul.topiclist dd.mark').siblings('dt').children('.list-inner').addClass('with-mark'); + + /** + * Appends contents of all extra columns to first column in + * .topiclist lists for mobile devices. Copies contents as is. + * + * To add that functionality to .topiclist list simply add + * responsive-show-all to list of classes + */ + $container.find('.topiclist.responsive-show-all > li > dl').each(function() { + var $this = $(this), + $block = $this.find('dt .responsive-show:last-child'), + first = true; + + // Create block that is visible only on mobile devices + if (!$block.length) { + $this.find('dt > .list-inner').append('