From c0f79397dd75e03a7a40303f82926e8187697d07 Mon Sep 17 00:00:00 2001 From: M.Gergo Date: Fri, 8 Mar 2019 23:32:47 +0100 Subject: Rev: 4455 --- .../mayor-wiki/wiki/lib/plugins/bbcode/COPYING | 340 +++ .../mayor-wiki/wiki/lib/plugins/bbcode/README | 10 + .../wiki/lib/plugins/bbcode/plugin.info.txt | 7 + .../wiki/lib/plugins/bbcode/syntax/bold.php | 39 + .../wiki/lib/plugins/bbcode/syntax/code.php | 39 + .../wiki/lib/plugins/bbcode/syntax/color.php | 236 ++ .../wiki/lib/plugins/bbcode/syntax/deleted.php | 39 + .../wiki/lib/plugins/bbcode/syntax/email.php | 47 + .../wiki/lib/plugins/bbcode/syntax/image.php | 55 + .../wiki/lib/plugins/bbcode/syntax/italic.php | 39 + .../wiki/lib/plugins/bbcode/syntax/link.php | 60 + .../wiki/lib/plugins/bbcode/syntax/monospace.php | 39 + .../wiki/lib/plugins/bbcode/syntax/olist.php | 90 + .../wiki/lib/plugins/bbcode/syntax/quote.php | 73 + .../wiki/lib/plugins/bbcode/syntax/size.php | 104 + .../wiki/lib/plugins/bbcode/syntax/ulist.php | 72 + .../wiki/lib/plugins/bbcode/syntax/underline.php | 39 + .../mayor-wiki/wiki/lib/tpl/mayor/VERSION.txt | 1 + .../mayor-wiki/wiki/lib/tpl/mayor/conf/default.php | 17 + .../wiki/lib/tpl/mayor/conf/metadata.php | 17 + .../mayor-wiki/wiki/lib/tpl/mayor/design.css | 1029 ++++++++ .../mayor-wiki/wiki/lib/tpl/mayor/detail.php | 92 + .../mayor-wiki/wiki/lib/tpl/mayor/footer.html | 70 + .../wiki/lib/tpl/mayor/images/b/actions/admin.png | Bin 0 -> 1105 bytes .../lib/tpl/mayor/images/b/actions/backlink.png | Bin 0 -> 926 bytes .../wiki/lib/tpl/mayor/images/b/actions/create.png | Bin 0 -> 685 bytes .../lib/tpl/mayor/images/b/actions/delicious.gif | Bin 0 -> 129 bytes .../wiki/lib/tpl/mayor/images/b/actions/digg.gif | Bin 0 -> 958 bytes .../wiki/lib/tpl/mayor/images/b/actions/edit.png | Bin 0 -> 1061 bytes .../wiki/lib/tpl/mayor/images/b/actions/google.gif | Bin 0 -> 944 bytes .../lib/tpl/mayor/images/b/actions/history.png | Bin 0 -> 1285 bytes .../wiki/lib/tpl/mayor/images/b/actions/index.png | Bin 0 -> 892 bytes .../wiki/lib/tpl/mayor/images/b/actions/login.png | Bin 0 -> 1073 bytes .../lib/tpl/mayor/images/b/actions/previous.png | Bin 0 -> 915 bytes .../lib/tpl/mayor/images/b/actions/profile.png | Bin 0 -> 904 bytes .../wiki/lib/tpl/mayor/images/b/actions/recent.png | Bin 0 -> 1161 bytes .../wiki/lib/tpl/mayor/images/b/actions/show.png | Bin 0 -> 547 bytes .../lib/tpl/mayor/images/b/actions/subscribe.png | Bin 0 -> 936 bytes .../wiki/lib/tpl/mayor/images/b/actions/top.png | Bin 0 -> 948 bytes .../lib/tpl/mayor/images/b/actions/unsubscribe.png | Bin 0 -> 933 bytes .../wiki/lib/tpl/mayor/images/b/black_arrow.gif | Bin 0 -> 81 bytes .../lib/tpl/mayor/images/b/faded_background.png | Bin 0 -> 11180 bytes .../wiki/lib/tpl/mayor/images/b/favicon.png | Bin 0 -> 767 bytes .../wiki/lib/tpl/mayor/images/b/find.gif | Bin 0 -> 1112 bytes .../lib/tpl/mayor/images/b/gradient_background.png | Bin 0 -> 245 bytes .../wiki/lib/tpl/mayor/images/b/gradient_bc.png | Bin 0 -> 185 bytes .../wiki/lib/tpl/mayor/images/b/gradient_logo.png | Bin 0 -> 241 bytes .../lib/tpl/mayor/images/b/gradient_status.png | Bin 0 -> 197 bytes .../wiki/lib/tpl/mayor/images/b/user_icon.png | Bin 0 -> 1113 bytes .../wiki/lib/tpl/mayor/images/b/wiki_logo.png | Bin 0 -> 5177 bytes .../wiki/lib/tpl/mayor/images/bullet.gif | Bin 0 -> 51 bytes .../wiki/lib/tpl/mayor/images/button-cc.gif | Bin 0 -> 1231 bytes .../wiki/lib/tpl/mayor/images/button-css.png | Bin 0 -> 299 bytes .../wiki/lib/tpl/mayor/images/button-donate.gif | Bin 0 -> 200 bytes .../wiki/lib/tpl/mayor/images/button-dw.png | Bin 0 -> 427 bytes .../wiki/lib/tpl/mayor/images/button-php.gif | Bin 0 -> 269 bytes .../wiki/lib/tpl/mayor/images/button-rss.png | Bin 0 -> 280 bytes .../wiki/lib/tpl/mayor/images/button-xhtml.png | Bin 0 -> 321 bytes .../wiki/lib/tpl/mayor/images/buttonshadow.png | Bin 0 -> 257 bytes .../wiki/lib/tpl/mayor/images/closed.gif | Bin 0 -> 54 bytes .../wiki/lib/tpl/mayor/images/favicon.ico | Bin 0 -> 1406 bytes .../wiki/lib/tpl/mayor/images/favicon_blue.ico | Bin 0 -> 1406 bytes .../wiki/lib/tpl/mayor/images/favicon_green.ico | Bin 0 -> 1406 bytes .../wiki/lib/tpl/mayor/images/favicon_plain.ico | Bin 0 -> 7406 bytes .../wiki/lib/tpl/mayor/images/inputshadow.png | Bin 0 -> 155 bytes .../wiki/lib/tpl/mayor/images/link_icon.gif | Bin 0 -> 942 bytes .../wiki/lib/tpl/mayor/images/mail_icon.gif | Bin 0 -> 918 bytes .../mayor-wiki/wiki/lib/tpl/mayor/images/open.gif | Bin 0 -> 54 bytes .../wiki/lib/tpl/mayor/images/p/actions/admin.png | Bin 0 -> 1018 bytes .../lib/tpl/mayor/images/p/actions/backlink.png | Bin 0 -> 727 bytes .../wiki/lib/tpl/mayor/images/p/actions/create.png | Bin 0 -> 961 bytes .../lib/tpl/mayor/images/p/actions/delicious.gif | Bin 0 -> 129 bytes .../wiki/lib/tpl/mayor/images/p/actions/digg.gif | Bin 0 -> 958 bytes .../wiki/lib/tpl/mayor/images/p/actions/edit.png | Bin 0 -> 961 bytes .../wiki/lib/tpl/mayor/images/p/actions/google.gif | Bin 0 -> 944 bytes .../lib/tpl/mayor/images/p/actions/history.png | Bin 0 -> 1104 bytes .../wiki/lib/tpl/mayor/images/p/actions/index.png | Bin 0 -> 818 bytes .../wiki/lib/tpl/mayor/images/p/actions/login.png | Bin 0 -> 836 bytes .../lib/tpl/mayor/images/p/actions/previous.png | Bin 0 -> 824 bytes .../lib/tpl/mayor/images/p/actions/profile.png | Bin 0 -> 999 bytes .../wiki/lib/tpl/mayor/images/p/actions/recent.png | Bin 0 -> 1009 bytes .../wiki/lib/tpl/mayor/images/p/actions/show.png | Bin 0 -> 503 bytes .../lib/tpl/mayor/images/p/actions/subscribe.png | Bin 0 -> 955 bytes .../wiki/lib/tpl/mayor/images/p/actions/top.png | Bin 0 -> 992 bytes .../lib/tpl/mayor/images/p/actions/unsubscribe.png | Bin 0 -> 921 bytes .../lib/tpl/mayor/images/p/faded_background.png | Bin 0 -> 29017 bytes .../lib/tpl/mayor/images/p/gradient_background.png | Bin 0 -> 246 bytes .../wiki/lib/tpl/mayor/images/p/gradient_bc.png | Bin 0 -> 203 bytes .../wiki/lib/tpl/mayor/images/p/gradient_logo.png | Bin 0 -> 198 bytes .../lib/tpl/mayor/images/p/gradient_status.png | Bin 0 -> 151 bytes .../wiki/lib/tpl/mayor/images/p/wiki_logo.png | Bin 0 -> 7948 bytes .../wiki/lib/tpl/mayor/images/r/actions/admin.png | Bin 0 -> 1105 bytes .../lib/tpl/mayor/images/r/actions/backlink.png | Bin 0 -> 1007 bytes .../wiki/lib/tpl/mayor/images/r/actions/create.png | Bin 0 -> 685 bytes .../lib/tpl/mayor/images/r/actions/delicious.gif | Bin 0 -> 129 bytes .../wiki/lib/tpl/mayor/images/r/actions/digg.gif | Bin 0 -> 958 bytes .../wiki/lib/tpl/mayor/images/r/actions/edit.png | Bin 0 -> 1061 bytes .../wiki/lib/tpl/mayor/images/r/actions/google.gif | Bin 0 -> 944 bytes .../lib/tpl/mayor/images/r/actions/history.png | Bin 0 -> 1144 bytes .../wiki/lib/tpl/mayor/images/r/actions/index.png | Bin 0 -> 892 bytes .../wiki/lib/tpl/mayor/images/r/actions/login.png | Bin 0 -> 1111 bytes .../lib/tpl/mayor/images/r/actions/previous.png | Bin 0 -> 822 bytes .../lib/tpl/mayor/images/r/actions/profile.png | Bin 0 -> 904 bytes .../wiki/lib/tpl/mayor/images/r/actions/recent.png | Bin 0 -> 1370 bytes .../wiki/lib/tpl/mayor/images/r/actions/show.png | Bin 0 -> 547 bytes .../lib/tpl/mayor/images/r/actions/subscribe.png | Bin 0 -> 936 bytes .../wiki/lib/tpl/mayor/images/r/actions/top.png | Bin 0 -> 768 bytes .../lib/tpl/mayor/images/r/actions/unsubscribe.png | Bin 0 -> 933 bytes .../wiki/lib/tpl/mayor/images/r/black_arrow.gif | Bin 0 -> 81 bytes .../lib/tpl/mayor/images/r/faded_background.png | Bin 0 -> 5964 bytes .../wiki/lib/tpl/mayor/images/r/favicon.png | Bin 0 -> 667 bytes .../wiki/lib/tpl/mayor/images/r/find.gif | Bin 0 -> 1209 bytes .../lib/tpl/mayor/images/r/gradient_background.png | Bin 0 -> 247 bytes .../wiki/lib/tpl/mayor/images/r/gradient_bc.png | Bin 0 -> 185 bytes .../wiki/lib/tpl/mayor/images/r/gradient_logo.png | Bin 0 -> 244 bytes .../lib/tpl/mayor/images/r/gradient_status.png | Bin 0 -> 197 bytes .../wiki/lib/tpl/mayor/images/r/user_icon.png | Bin 0 -> 995 bytes .../wiki/lib/tpl/mayor/images/r/wiki_logo.png | Bin 0 -> 4967 bytes .../wiki/lib/tpl/mayor/images/tocdot2.gif | Bin 0 -> 810 bytes .../wiki/lib/tpl/mayor/images/windows.gif | Bin 0 -> 223 bytes .../mayor-wiki/wiki/lib/tpl/mayor/js/builder.js | 131 + .../mayor-wiki/wiki/lib/tpl/mayor/js/controls.js | 835 +++++++ .../mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js | 944 ++++++++ .../mayor-wiki/wiki/lib/tpl/mayor/js/effects.js | 1090 +++++++++ .../mayor-wiki/wiki/lib/tpl/mayor/js/prototype.js | 2515 ++++++++++++++++++++ .../wiki/lib/tpl/mayor/js/scriptaculous.js | 51 + .../mayor-wiki/wiki/lib/tpl/mayor/js/slider.js | 278 +++ .../wiki/lib/tpl/mayor/lang/en/settings.php | 22 + .../wiki/lib/tpl/mayor/lang/hu/settings.php | 22 + .../wiki/lib/tpl/mayor/lang/it/settings.php | 21 + .../mayor-wiki/wiki/lib/tpl/mayor/layout.css | 232 ++ mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/main.php | 362 +++ mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/media.css | 204 ++ .../mayor-wiki/wiki/lib/tpl/mayor/mediamanager.php | 44 + mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/print.css | 236 ++ mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/rtl.css | 111 + mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style.ini | 147 ++ .../mayor-wiki/wiki/lib/tpl/mayor/style_blue.ini | 147 ++ .../mayor-wiki/wiki/lib/tpl/mayor/style_green.ini | 147 ++ .../mayor-wiki/wiki/lib/tpl/mayor/style_plain.ini | 147 ++ .../wiki/lib/tpl/mayor/tplfn_sidebar.php | 97 + 141 files changed, 10337 insertions(+) create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/COPYING create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/README create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/plugin.info.txt create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/bold.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/code.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/color.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/deleted.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/email.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/image.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/italic.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/link.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/monospace.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/olist.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/quote.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/ulist.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/underline.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/VERSION.txt create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/default.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/metadata.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/design.css create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/detail.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/footer.html create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/admin.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/backlink.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/create.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/delicious.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/digg.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/edit.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/google.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/history.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/index.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/login.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/previous.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/profile.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/recent.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/show.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/subscribe.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/top.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/unsubscribe.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/black_arrow.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/faded_background.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/favicon.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/find.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_background.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_bc.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_logo.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_status.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/user_icon.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/wiki_logo.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/bullet.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-cc.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-css.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-donate.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-dw.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-php.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-rss.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-xhtml.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/buttonshadow.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/closed.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon.ico create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_blue.ico create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_green.ico create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_plain.ico create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/inputshadow.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/link_icon.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/mail_icon.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/open.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/admin.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/backlink.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/create.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/delicious.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/digg.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/edit.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/google.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/history.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/index.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/login.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/previous.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/profile.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/recent.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/show.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/subscribe.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/top.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/unsubscribe.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/faded_background.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_background.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_bc.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_logo.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_status.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/wiki_logo.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/admin.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/backlink.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/create.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/delicious.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/digg.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/edit.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/google.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/history.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/index.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/login.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/previous.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/profile.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/recent.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/show.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/subscribe.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/top.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/unsubscribe.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/black_arrow.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/faded_background.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/favicon.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/find.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_background.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_bc.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_logo.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_status.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/user_icon.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/wiki_logo.png create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/tocdot2.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/windows.gif create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/builder.js create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/controls.js create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/prototype.js create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/en/settings.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/hu/settings.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/it/settings.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/layout.css create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/main.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/media.css create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/mediamanager.php create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/print.css create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/rtl.css create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style.ini create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_blue.ini create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_green.ini create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_plain.ini create mode 100644 mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/tplfn_sidebar.php (limited to 'mayor-orig/mayor-wiki/wiki/lib') diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/COPYING b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/COPYING new file mode 100644 index 00000000..d60c31a9 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/README b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/README new file mode 100644 index 00000000..5ef21c3a --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/README @@ -0,0 +1,10 @@ +====== BBCode Plugin for DokuWiki ====== + +All documentation for the BBCode Plugin is available online at: + + * http://wiki.splitbrain.org/plugin:bbcode + +(c) 2005 - 2007 by Esther Brunner +(c) 2008 - 2010 by Gina Häußge, Michael Klier + +See COPYING for license info. diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/plugin.info.txt b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/plugin.info.txt new file mode 100644 index 00000000..58ad58cf --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/plugin.info.txt @@ -0,0 +1,7 @@ +base bbcode +author Michael Klier, Gina Häussge +email dokuwiki@chimeric.de +date 2010-06-04 +name BBCode Plugin +desc BBCode implementation for DokuWiki +url http://dokuwiki.org/plugin:bbcode diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/bold.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/bold.php new file mode 100644 index 00000000..dae1d964 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/bold.php @@ -0,0 +1,39 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_bold extends DokuWiki_Syntax_Plugin { + + function getType() { return 'formatting'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[b\](?=.*?\x5B/b\x5D)',$mode,'strong'); } + function postConnect() { $this->Lexer->addExitPattern('\[/b\]','strong'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/code.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/code.php new file mode 100644 index 00000000..c495fdd0 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/code.php @@ -0,0 +1,39 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_code extends DokuWiki_Syntax_Plugin { + + function getType() { return 'protected'; } + function getPType() { return 'block'; } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[code\](?=.*?\x5B/code\x5D)',$mode,'preformatted'); } + function postConnect() { $this->Lexer->addExitPattern('\[/code\]','preformatted'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + return true; + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/color.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/color.php new file mode 100644 index 00000000..f229eeae --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/color.php @@ -0,0 +1,236 @@ + + * @author Christopher Smith + * @author Luis Machuca Bezzaza + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_color extends DokuWiki_Syntax_Plugin { + + static $browsercolors = array ( + 'aliceblue' => '#f0f8ff' , + 'antiquewhite' => '#faebd7' , + 'aqua' => '#00ffff' , + 'aquamarine' => '#7fffd4' , + 'azure' => '#f0ffff' , + 'beige' => '#f5f5dc' , + 'bisque' => '#ffe4c4' , + 'black' => '#000000' , + 'blanchedalmond' => '#ffebcd' , + 'blue' => '#0000ff' , + 'blueviolet' => '#8a2be2' , + 'brown' => '#a52a2a' , + 'burlywood' => '#deb887' , + 'cadetblue' => '#5f9ea0' , + 'chartreuse' => '#7fff00' , + 'chocolate' => '#d2691e' , + 'coral' => '#ff7f50' , + 'cornflowerblue' => '#6495ed' , + 'cornsilk' => '#fff8dc' , + 'crimson' => '#dc143c' , + 'cyan' => '#00ffff' , + 'darkblue' => '#00008b' , + 'darkcyan' => '#008b8b' , + 'darkgoldenrod' => '#b8860b' , + 'darkgray' => '#a9a9a9' , + 'darkgreen' => '#006400' , + 'darkkhaki' => '#bdb76b' , + 'darkmagenta' => '#8b008b' , + 'darkolivegreen' => '#556b2f' , + 'darkorange' => '#ff8c00' , + 'darkorchid' => '#9932cc' , + 'darkred' => '#8b0000' , + 'darksalmon' => '#e9967a' , + 'darkseagreen' => '#8fbc8f' , + 'darkslateblue' => '#483d8b' , + 'darkslategray' => '#2f4f4f' , + 'darkturquoise' => '#00ced1' , + 'darkviolet' => '#9400d3' , + 'deeppink' => '#ff1493' , + 'deepskyblue' => '#00bfff' , + 'dimgray' => '#696969' , + 'dodgerblue' => '#1e90ff' , + 'firebrick' => '#b22222' , + 'floralwhite' => '#fffaf0' , + 'forestgreen' => '#228b22' , + 'fuchsia' => '#ff00ff' , + 'gainsboro' => '#dcdcdc' , + 'ghostwhite' => '#f8f8ff' , + 'gold' => '#ffd700' , + 'goldenrod' => '#daa520' , + 'gray' => '#808080' , + 'green' => '#008000' , + 'greenyellow' => '#adff2f' , + 'honeydew' => '#f0fff0' , + 'hotpink' => '#ff69b4' , + 'indianred' => '#cd5c5c' , + 'indigo' => '#4b0082' , + 'ivory' => '#fffff0' , + 'khaki' => '#f0e68c' , + 'lavender' => '#e6e6fa' , + 'lavenderblush' => '#fff0f5' , + 'lawngreen' => '#7cfc00' , + 'lemonchiffon' => '#fffacd' , + 'lightblue' => '#add8e6' , + 'lightcoral' => '#f08080' , + 'lightcyan' => '#e0ffff' , + 'lightgoldenrodyellow' => '#fafad2' , + 'lightgrey' => '#d3d3d3' , + 'lightgreen' => '#90ee90' , + 'lightpink' => '#ffb6c1' , + 'lightsalmon' => '#ffa07a' , + 'lightseagreen' => '#20b2aa' , + 'lightskyblue' => '#87cefa' , + 'lightslategray' => '#778899' , + 'lightsteelblue' => '#b0c4de' , + 'lightyellow' => '#ffffe0' , + 'lime' => '#00ff00' , + 'limegreen' => '#32cd32' , + 'linen' => '#faf0e6' , + 'magenta' => '#ff00ff' , + 'maroon' => '#800000' , + 'mediumaquamarine' => '#66cdaa' , + 'mediumblue' => '#0000cd' , + 'mediumorchid' => '#ba55d3' , + 'mediumpurple' => '#9370d8' , + 'mediumseagreen' => '#3cb371' , + 'mediumslateblue' => '#7b68ee' , + 'mediumspringgreen' => '#00fa9a' , + 'mediumturquoise' => '#48d1cc' , + 'mediumvioletred' => '#c71585' , + 'midnightblue' => '#191970' , + 'mintcream' => '#f5fffa' , + 'mistyrose' => '#ffe4e1' , + 'moccasin' => '#ffe4b5' , + 'navajowhite' => '#ffdead' , + 'navy' => '#000080' , + 'oldlace' => '#fdf5e6' , + 'olive' => '#808000' , + 'olivedrab' => '#6b8e23' , + 'orange' => '#ffa500' , + 'orangered' => '#ff4500' , + 'orchid' => '#da70d6' , + 'palegoldenrod' => '#eee8aa' , + 'palegreen' => '#98fb98' , + 'paleturquoise' => '#afeeee' , + 'palevioletred' => '#d87093' , + 'papayawhip' => '#ffefd5' , + 'peachpuff' => '#ffdab9' , + 'peru' => '#cd853f' , + 'pink' => '#ffc0cb' , + 'plum' => '#dda0dd' , + 'powderblue' => '#b0e0e6' , + 'purple' => '#800080' , + 'red' => '#ff0000' , + 'rosybrown' => '#bc8f8f' , + 'royalblue' => '#4169e1' , + 'saddlebrown' => '#8b4513' , + 'salmon' => '#fa8072' , + 'sandybrown' => '#f4a460' , + 'seagreen' => '#2e8b57' , + 'seashell' => '#fff5ee' , + 'sienna' => '#a0522d' , + 'silver' => '#c0c0c0' , + 'skyblue' => '#87ceeb' , + 'slateblue' => '#6a5acd' , + 'slategray' => '#708090' , + 'snow' => '#fffafa' , + 'springgreen' => '#00ff7f' , + 'steelblue' => '#4682b4' , + 'tan' => '#d2b48c' , + 'teal' => '#008080' , + 'thistle' => '#d8bfd8' , + 'tomato' => '#ff6347' , + 'turquoise' => '#40e0d0' , + 'violet' => '#ee82ee' , + 'wheat' => '#f5deb3' , + 'white' => '#ffffff' , + 'whitesmoke' => '#f5f5f5' , + 'yellow' => '#ffff00' , + 'yellowgreen' => '#9acd32' , + ); + + function getType() { return 'formatting'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[color=.*?\](?=.*?\x5B/color\x5D)',$mode,'plugin_bbcode_color'); } + function postConnect() { $this->Lexer->addExitPattern('\[/color\]','plugin_bbcode_color'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + switch ($state) { + case DOKU_LEXER_ENTER : + $match = substr($match, 7, -1); + if (preg_match('/".+?"/',$match)) $match = substr($match, 1, -1); // addition #1: unquote + return array($state, $match); + + case DOKU_LEXER_UNMATCHED : + return array($state, $match); + + case DOKU_LEXER_EXIT : + return array($state, ''); + + } + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + if($mode == 'xhtml') { + list($state, $match) = $data; + switch ($state) { + case DOKU_LEXER_ENTER : + if ($match = $this->_isValid($match)) { + $renderer->doc .= ''; // addition #2: SVG browser colors + } else { + $renderer->doc .= ''; + } + break; + + case DOKU_LEXER_UNMATCHED : + $renderer->doc .= $renderer->_xmlEntities($match); + break; + + case DOKU_LEXER_EXIT : + $renderer->doc .= ''; + break; + + } + return true; + } + return false; + } + + // validate color value $c + // this is cut price validation - only to ensure the basic format is correct and there is nothing harmful + // three basic formats "colorname", "#fff[fff]", "rgb(255[%],255[%],255[%])" + function _isValid($c) { + $c = trim($c); + + $pattern = "/ + ([a-zA-z]+)| #colorname - not verified + (\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))| #colorvalue + (rgb\(([0-9]{1,3}%?,){2}[0-9]{1,3}%?\)) #rgb triplet + /x"; + + if (preg_match($pattern, $c)) return $c; + if (!empty($this->browsercolors[$c])) return $this->browsercolors[$c]; + return ""; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/deleted.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/deleted.php new file mode 100644 index 00000000..69f84ac9 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/deleted.php @@ -0,0 +1,39 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_deleted extends DokuWiki_Syntax_Plugin { + + function getType() { return 'formatting'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[s\](?=.*?\x5B/s\x5D)',$mode,'deleted'); } + function postConnect() { $this->Lexer->addExitPattern('\[/s\]','deleted'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/email.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/email.php new file mode 100644 index 00000000..dd87d386 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/email.php @@ -0,0 +1,47 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_email extends DokuWiki_Syntax_Plugin { + + function getType() { return 'substition'; } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addSpecialPattern('\[email.+?\[/email\]',$mode,'plugin_bbcode_email'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + $match = trim(substr($match, 7, -8)); + $match = preg_split('/\]/u',$match,2); + if ( !isset($match[0]) ) { + $url = $match[1]; + $title = NULL; + } else { + $url = $match[0]; + $title = $match[1]; + } + $handler->_addCall('emaillink',array($url, $title), $pos); + return true; + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/image.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/image.php new file mode 100644 index 00000000..8b0d782e --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/image.php @@ -0,0 +1,55 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_image extends DokuWiki_Syntax_Plugin { + + function getType() { return 'substition'; } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addSpecialPattern('\[img.+?\[/img\]',$mode,'plugin_bbcode_image'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + $match = trim(substr($match, 5, -6)); + $match = preg_split('/\]/u',$match,2); + if ( !isset($match[0]) ) { + $url = $match[1]; + $title = NULL; + } else { + $url = $match[0]; + $title = $match[1]; + } + + // Check whether this is a local or remote image + if ( preg_match('#^(https?|ftp)#i',$url) ) { + $call = 'externalmedia'; + } else { + $call = 'internalmedia'; + } + + $handler->_addCall($call,array($url,$title,NULL,NULL,NULL,'cache'),$pos); + return true; + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/italic.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/italic.php new file mode 100644 index 00000000..de94cfad --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/italic.php @@ -0,0 +1,39 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_italic extends DokuWiki_Syntax_Plugin { + + function getType() { return 'formatting'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[i\](?=.*?\x5B/i\x5D)',$mode,'emphasis'); } + function postConnect() { $this->Lexer->addExitPattern('\[/i\]','emphasis'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/link.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/link.php new file mode 100644 index 00000000..e752dbd1 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/link.php @@ -0,0 +1,60 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_link extends DokuWiki_Syntax_Plugin { + + function getType() { return 'substition'; } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addSpecialPattern('\[url.+?\[/url\]',$mode,'plugin_bbcode_link'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + $match = substr($match, 5, -6); + if (preg_match('/".+?"/',$match)) $match = substr($match, 1, -1); // addition #1: unquote + $match = preg_split('/\]/u',$match,2); + if ( !isset($match[0]) ) { + $url = $match[1]; + $title = NULL; + } else { + $url = $match[0]; + $title = $match[1]; + } + + // external link (accepts all protocols) + if ( preg_match('#^([a-z0-9\-\.+]+?)://#i',$url) ) { + $handler->_addCall('externallink',array($url,$title),$pos); + + // local link + } elseif ( preg_match('!^#.+!',$url) ) { + $handler->_addCall('locallink',array(substr($url,1),$title),$pos); + + // internal link + } else { + $handler->_addCall('internallink',array($url,$title),$pos); + } + return true; + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/monospace.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/monospace.php new file mode 100644 index 00000000..dcaa931f --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/monospace.php @@ -0,0 +1,39 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_monospace extends DokuWiki_Syntax_Plugin { + + function getType() { return 'formatting'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[m\](?=.*?\x5B/m\x5D)',$mode,'monospace'); } + function postConnect() { $this->Lexer->addExitPattern('\[/m\]','monospace'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/olist.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/olist.php new file mode 100644 index 00000000..a4362db6 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/olist.php @@ -0,0 +1,90 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_olist extends DokuWiki_Syntax_Plugin { + + function getType() { return 'container'; } + function getPType() { return 'block'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled', 'protected'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[list=.*?\]\s*?\[\*\](?=.*?\x5B/list\x5D)', $mode, 'plugin_bbcode_olist'); } + function postConnect() { $this->Lexer->addExitPattern('\[/list\]', 'plugin_bbcode_olist'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + switch ($state) { + case DOKU_LEXER_ENTER : + // get the list type + $match = substr($match, 6, -4); + $match = preg_split('/\]/u',$match,2); + return array($state, $match[0]); + + case DOKU_LEXER_UNMATCHED : + return array($state, $match); + + case DOKU_LEXER_EXIT : + return array($state, ''); + + } + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + if($mode == 'xhtml') { + list($state, $match) = $data; + switch ($state) { + case DOKU_LEXER_ENTER : + switch ($match) { + case 'i': + $type = 'lower-roman'; + break; + case 'I': + $type = 'upper-roman'; + break; + case 'a': + $type = 'lower-alpha'; + break; + case 'A': + $type = 'upper-alpha'; + break; + default: + $type = 'decimal'; + } + $renderer->doc .= '
  1. '; + break; + + case DOKU_LEXER_UNMATCHED : + $match = $renderer->_xmlEntities($match); + $renderer->doc .= str_replace('[*]', '
  2. ', $match); + break; + + case DOKU_LEXER_EXIT : + $renderer->doc .= '
'; + break; + + } + return true; + } + return false; + } + +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/quote.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/quote.php new file mode 100644 index 00000000..866f7360 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/quote.php @@ -0,0 +1,73 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_quote extends DokuWiki_Syntax_Plugin { + + function getType() { return 'container'; } + function getPType() { return 'block'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled', 'protected'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[quote.*?\](?=.*?\x5B/quote\x5D)',$mode,'plugin_bbcode_quote'); } + function postConnect() { $this->Lexer->addExitPattern('\[/quote\]','plugin_bbcode_quote'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + switch ($state) { + case DOKU_LEXER_ENTER : + $match = explode('"',substr($match, 6, -1)); + return array($state, $match[1]); + + case DOKU_LEXER_UNMATCHED : + return array($state, $match); + + case DOKU_LEXER_EXIT : + return array($state, ''); + + } + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + if($mode == 'xhtml') { + list($state, $match) = $data; + switch ($state) { + case DOKU_LEXER_ENTER : + if ($match !== '') $renderer->doc .= '

'.$match.':

'; + $renderer->doc .= '
'; + break; + + case DOKU_LEXER_UNMATCHED : + $match = $renderer->_xmlEntities($match); + $renderer->doc .= str_replace("\n",'
',$match); + break; + + case DOKU_LEXER_EXIT : + $renderer->doc .= '
'; + break; + + } + return true; + } + return false; + } + +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php new file mode 100644 index 00000000..f111a98d --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/size.php @@ -0,0 +1,104 @@ + + * @author Luis Machuca Bezzaza + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_size extends DokuWiki_Syntax_Plugin { + + function getType() { return 'formatting'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[size=.*?\](?=.*?\x5B/size\x5D)',$mode,'plugin_bbcode_size'); } + function postConnect() { $this->Lexer->addExitPattern('\[/size\]','plugin_bbcode_size'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler) { + switch ($state) { + case DOKU_LEXER_ENTER : + $match = substr($match, 6, -1); + if (preg_match('/".+?"/',$match)) $match = substr($match, 1, -1); // addition #1: unquote + if (preg_match('/^[0-6]$/',$match)) $match = self::_relsz(intval($match) ); // addition #2: relative size number + else if (preg_match('/^\d+$/',$match)) $match .= 'px'; + return array($state, $match); + + case DOKU_LEXER_UNMATCHED : + return array($state, $match); + + case DOKU_LEXER_EXIT : + return array($state, ''); + + } + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + if($mode == 'xhtml') { + list($state, $match) = $data; + switch ($state) { + case DOKU_LEXER_ENTER : + $renderer->doc .= ''; + break; + + case DOKU_LEXER_UNMATCHED : + $renderer->doc .= $renderer->_xmlEntities($match); + break; + + case DOKU_LEXER_EXIT : + $renderer->doc .= ''; + break; + + } + return true; + } + return false; + } + + /** + * @fn _relsz + * @brief Returns a relative-size CSS keyword based on numbering. + * @author Luis Machuca Bezzaza + * + * Provides a mapping to the series of size-related keywords in CSS 2.1 + * (http://www.w3.org/TR/REC-CSS1/#font-size) + * Valid values are [0-6], with 3 for "medium" (as recommended by standard) + */ + private function _relsz ($value) { + switch ($value) { + case 0: + return 'xx-small'; break; + case 1: + return 'x-small'; break; + case 2: + return 'small'; break; + case 4: + return 'large'; break; + case 5: + return 'x-large'; break; + case 6: + return 'xx-large'; break; + case 3: + return 'medium'; break; + default: + return false; break; + } + } + +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/ulist.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/ulist.php new file mode 100644 index 00000000..beeffb10 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/ulist.php @@ -0,0 +1,72 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_ulist extends DokuWiki_Syntax_Plugin { + + function getType() { return 'container'; } + function getPType() { return 'block'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled', 'protected'); } + function getSort() { return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[list\]\s*?\[\*\](?=.*?\x5B/list\x5D)', $mode, 'plugin_bbcode_ulist'); } + function postConnect() { $this->Lexer->addExitPattern('\[/list\]', 'plugin_bbcode_ulist'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler){ + switch ($state) { + case DOKU_LEXER_ENTER : + return array($state, ''); + + case DOKU_LEXER_UNMATCHED : + return array($state, $match); + + case DOKU_LEXER_EXIT : + return array($state, ''); + + } + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + if($mode == 'xhtml'){ + list($state, $match) = $data; + switch ($state) { + case DOKU_LEXER_ENTER : + $renderer->doc .= '
  • '; + break; + + case DOKU_LEXER_UNMATCHED : + $match = $renderer->_xmlEntities($match); + $renderer->doc .= str_replace('[*]', '
  • ', $match); + break; + + case DOKU_LEXER_EXIT : + $renderer->doc .= '
'; + break; + + } + return true; + } + return false; + } + +} + +//Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/underline.php b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/underline.php new file mode 100644 index 00000000..ec34d5fd --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/plugins/bbcode/syntax/underline.php @@ -0,0 +1,39 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_bbcode_underline extends DokuWiki_Syntax_Plugin { + + function getType(){ return 'formatting'; } + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getSort(){ return 105; } + function connectTo($mode) { $this->Lexer->addEntryPattern('\[u\](?=.*?\x5B/u\x5D)',$mode,'underline'); } + function postConnect() { $this->Lexer->addExitPattern('\[/u\]','underline'); } + + /** + * Handle the match + */ + function handle($match, $state, $pos, &$handler){ + return array(); + } + + /** + * Create output + */ + function render($mode, &$renderer, $data) { + return true; + } +} +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/VERSION.txt b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/VERSION.txt new file mode 100644 index 00000000..a7bae7f1 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/VERSION.txt @@ -0,0 +1 @@ +20070323 \ No newline at end of file diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/default.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/default.php new file mode 100644 index 00000000..2e5bb309 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/default.php @@ -0,0 +1,17 @@ + + */ + +$conf['btl_sidebar_position'] = 'left' ; +$conf['btl_sidebar_name'] = 'sidebar' ; +$conf['btl_action_palette'] = 0; +$conf['btl_default_page_actions_status'] = 'open'; +$conf['btl_default_wiki_actions_status'] = 'closed'; +$conf['btl_default_user_actions_status'] = 'closed'; +$conf['btl_default_submit_actions_status'] = 'closed' ; +$conf['btl_language'] = 'en'; + +?> diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/metadata.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/metadata.php new file mode 100644 index 00000000..1f87369c --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/conf/metadata.php @@ -0,0 +1,17 @@ + + */ + +$meta['btl_sidebar_position'] = array('multichoice', '_choices' => array('left','right')); +$meta['btl_sidebar_name'] = array('string', '_pattern' => '#^[a-z]*#' ) ; +$meta['btl_action_palette'] = array('onoff'); +$meta['btl_default_user_actions_status'] = array('multichoice','_choices' => array('open','closed')); +$meta['btl_default_page_actions_status'] = array('multichoice','_choices' => array('open','closed')); +$meta['btl_default_wiki_actions_status'] = array('multichoice','_choices' => array('open','closed')); +$meta['btl_default_submit_actions_status'] = array('multichoice','_choices' => array('open','closed')); +$meta['btl_language'] = array('multichoice', '_choices' => array('en','hu','it')); + +?> diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/design.css b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/design.css new file mode 100644 index 00000000..3d28c913 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/design.css @@ -0,0 +1,1029 @@ +/** + * Design elements for default Template + * + * @author Andreas Gohr + * @author Anika Henke + * @author Riccardo Govoni + */ + +/* -------------- general elements --------------- */ + +* { padding: 0; margin: 0; } + +body { + font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif; + background-color: __rg_background__ ; + color: __text__; + background-image: url(__rg_background_gradient__); + background-repeat: repeat-x; + background-position: 0% 0%; +} + +div.dokuwiki { + width: 92% ; + margin-left: auto; + margin-right: auto; +} + +div.dokuwiki table { + font-size: 100%; +} + +div.dokuwiki tr, +div.dokuwiki td, +div.dokuwiki th { +} + +div.dokuwiki img { + border: 0; +} + +div.dokuwiki p, +div.dokuwiki blockquote, +div.dokuwiki table, +div.dokuwiki pre { + margin: 0 0 1.0em 0; +} + +div.dokuwiki hr { + border: 0px; + border-top: 1px solid __border__; + text-align: center; + height: 0px; +} + +div.dokuwiki div.nothing { + text-align: center; + margin: 2em; +} + +/* ---------------- shadows under the main content ------------------------ */ + +div.dokuwiki .page_lower_dark { + background-color: __rg_bread_lower_dark__ ; + height: 1px; + overflow: hidden; + clear: right; +} + +div.dokuwiki .page_lower_medium { + background-color: __rg_bread_lower_medium__ ; + height: 1px; + overflow: hidden; +} + +div.dokuwiki .page_lower_light { + background-color: __rg_bread_lower_light__ ; + height: 1px; + overflow: hidden; +} + +/* ---------------- action links ------------------------ */ + +div.smallpadding { + margin: 5px 0px 5px 2px ; +} + +a.recent { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_recent_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.index { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_index_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.edit { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_edit_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.create { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_create_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.revisions { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_revision_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.backlink { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_backlink_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.login, a.logout { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_login_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.subscribe { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_subscribe_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.unsubscribe { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_unsubscribe_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.profile { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_profile_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.admin { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_admin_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.show, a.source { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_show_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.previous { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_previous_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.top { + padding: 10px 24px 10px 1px; + background: transparent url(__rg_top_action__) no-repeat; + background-position: center right; + font-variant:small-caps; +} + +a.digg { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_digg_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.delicious { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_delicious_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +a.googlebookmark { + padding: 10px 1px 10px 24px ; + background: transparent url(__rg_google_action__) no-repeat; + background-position: center left; + font-variant:small-caps; +} + +/* ---------------- alignments ------------------------ */ + +div.dokuwiki .leftalign { text-align: left; } + +div.dokuwiki .centeralign { text-align: center; } + +div.dokuwiki .rightalign { text-align: right; } + +/* ---------------- forms ------------------------ */ + +div.dokuwiki form { + border: none; + display: inline; +} + +div.dokuwiki label.block { + display: block; + text-align: right; + font-weight: bold; +} + +div.dokuwiki label.simple { + display: block; + text-align: left; + font-weight: normal; +} + +div.dokuwiki label.block input.edit { + width: 50%; +} + +input.edit { + width: 40%; +} + +div.dokuwiki fieldset { + width: 300px; + text-align: center; + border: 1px solid __border__; + padding: 0.5em; + margin: auto; +} + +div.dokuwiki textarea.edit { + font-family: 14pt monospace; + color: __text__; + background-color: __background__; + border: 1px solid __border__; + padding: 0.3em 0 0 0.3em; + width: 100%; +} + +/* nice alphatransparency background except for IE <7 */ +html>body div.dokuwiki textarea.edit { + background: __background__ url(images/inputshadow.png) repeat-x top; +} + +div.dokuwiki input.edit, +div.dokuwiki select.edit { + font-size: 100%; + border: 1px solid __border__; + color: __text__; + background-color: __background__; + vertical-align: middle; + margin: 1px; + padding: 0.20em 0.3em; + display: inline; +} + +/* nice alphatransparency background except for IE <7 */ +html>body div.dokuwiki input.edit, +html>body div.dokuwiki select.edit { + background: __background__ url(images/inputshadow.png) repeat-x top; +} + +div.dokuwiki select.edit { + padding: 0.1em 0; +} + +div.dokuwiki input.missing { + font-size: 100%; + border: 1px solid __border__; + color: __text__; + background-color: #ffcccc; + vertical-align: middle; + margin: 1px; + padding: 0.20em 0.3em; + display: inline; +} + +/* edit form */ +div.dokuwiki div.toolbar, +div.dokuwiki div#wiki__editbar { + margin: 2px 0; + text-align: left; +} +div.dokuwiki div#size__ctl { + float: right; + width: 60px; + height: 2.7em; +} +div.dokuwiki #size__ctl img { + cursor: pointer; +} +div.dokuwiki div#wiki__editbar div.editButtons { + float: left; + padding: 0 1.0em 0.7em 0; +} +div.dokuwiki div#wiki__editbar div.summary { + float: left; +} +div.dokuwiki .nowrap { + white-space: nowrap; +} +div.dokuwiki div#draft__status { + float: right; + color: __text_alt__; +} + +/* --------- buttons ------------------- */ + + +div.dokuwiki input.button, +div.dokuwiki button.button { + border: 1px solid __border__; + color: __text__; + background-color: __rg_button_background__; + vertical-align: middle; + text-decoration: none; + font-size: 100%; + cursor: pointer; + margin: 1px; + padding: 0.125em 0.4em; +} + +/* nice alphatransparency background except for IE <7 */ +html>body div.dokuwiki input.button, +html>body div.dokuwiki button.button { + background: __rg_button_background__ url(images/buttonshadow.png) repeat-x bottom; +} + +div.dokuwiki input.button:hover, button.button:hover { + border: 1px solid __border__; + background-color: __rg_button_prelight__; +} + +* html div.dokuwiki input.button, +* html div.dokuwiki button.button { + height: 1.8em; +} + +div.dokuwiki div.secedit input.button { + border: 1px solid __border__; + color: __text__; + background-color: __rg_button_background__; + vertical-align: middle; + text-decoration: none; + margin: 0; + padding: 0; + font-size: 10px; + cursor: pointer; + float: right; + display: inline; +} + +div.dokuwiki div.secedit input.button:hover { + border: 1px solid __border__; + background-color: __rg_button_prelight__; +} + +/* ----------- page navigator ------------- */ + +div.dokuwiki div.pagenav { + margin: 1em 0 0 0; +} + +div.dokuwiki div.pagenav-prev { + text-align: right; + float: left; + width: 49% +} + +div.dokuwiki div.pagenav-next { + text-align: left; + float: right; + width: 49% +} + +/* --------------- Links ------------------ */ + +div.dokuwiki a:link, +div.dokuwiki a:visited { + color: __extern__; + text-decoration:underline; +} +div.dokuwiki a:hover, +div.dokuwiki a:active { + color:__hover__; + text-decoration:underline; +} + +div.dokuwiki h1 a, +div.dokuwiki h2 a, +div.dokuwiki h3 a, +div.dokuwiki h4 a, +div.dokuwiki h5 a, +div.dokuwiki h1 a:hover, +div.dokuwiki h2 a:hover, +div.dokuwiki h3 a:hover, +div.dokuwiki h4 a:hover, +div.dokuwiki h5 a:hover { + color:__text__; + text-decoration:none; +} + +/* external link */ +div.dokuwiki a.urlextern { + background: transparent url(images/link_icon.gif) 0px 1px no-repeat; + padding: 1px 0px 1px 16px; + color:__extern__; + text-decoration:underline; +} +div.dokuwiki a.urlextern:visited { + color: __visited__ ; +} +div.dokuwiki a.urlextern:hover { + color:__hover__ ; + text-decoration:underline; +} + +/* windows share */ +div.dokuwiki a.windows { + background: transparent url(images/windows.gif) 0px 1px no-repeat; + padding: 1px 0px 1px 16px; + color:__extern__; + text-decoration:underline; +} +div.dokuwiki a.windows:visited { + color:__visited__ ; +} +div.dokuwiki a.windows:hover { + color:__hover__; + text-decoration:underline; +} + +/* interwiki link (icon are set by dokuwiki) */ +div.dokuwiki a.interwiki { + color:__extern__; + text-decoration:underline; +} +div.dokuwiki a.interwiki:visited { + color:__visited__ ; +} +div.dokuwiki a.interwiki:hover { + color:__hover__ ; + text-decoration:underline; +} + +/* link to some embedded media */ +div.dokuwiki a.media { + color:__extern__; + text-decoration:underline; +} +div.dokuwiki a.media:hover { + color:__hover__; + text-decoration:underline +} + +/* email link */ +div.dokuwiki a.mail { + background: transparent url(images/mail_icon.gif) 0px 1px no-repeat; + padding: 1px 0px 1px 16px; + color:__extern__; + text-decoration:underline; +} +div.dokuwiki a.mail:hover { + color:__hover__ ; + text-decoration:underline; +} + +/* existing wikipage */ +div.dokuwiki a.wikilink1:link { color:__existing__; text-decoration:underline } +div.dokuwiki a.wikilink1:visited { color:__visited__; text-decoration:underline } +div.dokuwiki a.wikilink1:hover { color:__hover__; text-decoration:underline } + +/* not existing wikipage */ +div.dokuwiki a.wikilink2:link { color:__missing__; text-decoration:underline } +div.dokuwiki a.wikilink2:visited { color:__missing__; text-decoration:underline } +div.dokuwiki a.wikilink2:hover { color:__missing__; text-decoration:underline } + + +/* ------------- Page elements ----------------- */ + +div.dokuwiki div.preview { + background-color: __background_neu__; + margin: 0 0 0 2em; + padding: 4px; + border: 1px dashed __text__; +} + +/* ------------- Breadcrumbs ----------------- */ + +div.dokuwiki div.breadcrumbs { + background-color: __background_neu__; + color: __text_neu__; + font-size: 80%; + padding: 0 0 0 4px; + vertical-align:middle; + border-style : solid; + border-width: 1px 1px 1px 1px; + border-color: __rg_bread_border__ ; + background-image: url(__rg_breadcrumbs_gradient__); + background-repeat: repeat-x; + height: 17px; +} + +/* ------------- Breadcrumbs shadows ----------------- */ + +div.dokuwiki div.bread_upper_dark { + background-color: __rg_bread_upper_dark__ ; + height: 1px; + overflow: hidden; +} + +div.dokuwiki div.bread_lower_dark { + background-color: __rg_bread_lower_dark__ ; + height: 1px; + overflow: hidden; +} + +div.dokuwiki div.bread_lower_medium { + background-color: __rg_bread_lower_medium__ ; + height: 1px; + overflow: hidden; +} + +div.dokuwiki div.bread_lower_light { + background-color: __rg_bread_lower_light__ ; + height: 1px; + overflow: hidden; +} + + +div.dokuwiki span.user { + color: __text_other__; + font-size: 90%; +} + +div.dokuwiki li.minor { + color: __text_neu__; + font-style: italic; +} + +/* embedded images */ +div.dokuwiki img.media { + margin: 3px; +} + +div.dokuwiki img.medialeft { + border: 0; + float: left; + margin: 0 1.5em 0 0; +} + +div.dokuwiki img.mediaright { + border: 0; + float: right; + margin: 0 0 0 1.5em; +} + +div.dokuwiki img.mediacenter { + border: 0; + display: block; + margin: 0 auto; +} + +/* smileys */ +div.dokuwiki img.middle { + vertical-align: middle; +} + +div.dokuwiki acronym { + cursor: help; + border-bottom: 1px dotted __text__; +} + +/* general headline setup */ +div.dokuwiki h1, +div.dokuwiki h2, +div.dokuwiki h3, +div.dokuwiki h4, +div.dokuwiki h5 { + color: __text__; + background-color: transparent; + font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif; + font-size: 100%; + font-weight: normal; + margin: 0 0 1em 0; + padding: 0.5em 0 0 0; + border-bottom: 1px solid __border__; + clear: left; +} + +/* special headlines */ +div.dokuwiki h1 {font-size: 160%; margin-left: 0px; font-weight: bold;} +div.dokuwiki h2 {font-size: 150%; margin-left: 3px; border-bottom: 1px dotted __border__ } +div.dokuwiki h3 {font-size: 140%; margin-left: 6px; border-bottom: 1px dotted __border__ ; font-weight: bold;} +div.dokuwiki h4 {font-size: 120%; margin-left: 9px; border-bottom: none ; font-weight: bold;} +div.dokuwiki h5 {font-size: 100%; margin-left: 12px; border-bottom: none ; font-weight: bold;} + +/* special headlines for sidebar */ +div.dokuwiki div.sidebar h1 { clear: none; font-size: 120%; text-transform: uppercase; letter-spacing: 0.2em; text-align: center; margin-bottom: 5px;} +div.dokuwiki div.sidebar h2 { clear: none; font-size: 120%; text-transform: uppercase; letter-spacing: 0.2em; text-align: center; margin-bottom: 5px;} +div.dokuwiki div.sidebar h3 { clear: none; margin-bottom: 2px;} +div.dokuwiki div.sidebar h4 { clear: none; margin-bottom: 2px;} +div.dokuwiki div.sidebar h5 { clear: none; margin-bottom: 2px;} + +/* indent different sections */ +div.dokuwiki div.level1 {margin-left: 3px;} +div.dokuwiki div.level2 {margin-left: 6px;} +div.dokuwiki div.level3 {margin-left: 9px;} +div.dokuwiki div.level4 {margin-left: 12px;} +div.dokuwiki div.level5 {margin-left: 15px;} + +/* unordered lists */ +div.dokuwiki ul { + line-height: 1.5em; + list-style-type: square; + list-style-image: none; + margin: 0 0 0.5em 1.5em; + color: __text_alt__; +} + +/* ordered lists */ +div.dokuwiki ol { + line-height: 1.5em; + list-style-image: none; + margin: 0 0 0.5em 1.5em; + color: __text_alt__; + font-weight: bold; +} + +/* the list items overriding the ul/ol definition */ +div.dokuwiki .li { + color: __text__; + font-weight: normal; +} + +div.dokuwiki ol {list-style-type: decimal} +div.dokuwiki ol ol {list-style-type: upper-roman} +div.dokuwiki ol ol ol {list-style-type: lower-alpha} +div.dokuwiki ol ol ol ol {list-style-type: lower-greek} + +div.dokuwiki li.open { + list-style-image: url(images/open.gif); + /*list-style-type: circle;*/ +} + +div.dokuwiki li.closed { + list-style-image: url(images/closed.gif); + /*list-style-type: disc;*/ +} + +div.dokuwiki blockquote { + border-left: 2px solid __border__; + padding-left: 3px; +} + +div.dokuwiki pre { + font-size: 120%; + padding: 0.5em; + border: 1px dashed __rg_code_border__; + color: __text__; + overflow: auto; +} + +/* code blocks by indention */ +div.dokuwiki pre.pre { + background-color: __rg_code__ ; +} + +/* code blocks by code tag */ +div.dokuwiki pre.code { + background-color: __rg_code__ ; +} + +/* inline code words */ +div.dokuwiki code { + font-size: 120%; +} + +/* code blocks by file tag */ +div.dokuwiki pre.file { + font-size: 120%; + padding: 0.5em; + border: 1px dotted __rg_file_border__ ; + color: Black; + background-color: __rg_file__ ; + overflow: auto; +} + +/* Highlights the current page in the index */ +.curid { + font-weight: bold; +} + +/* inline tables */ +div.dokuwiki table.inline { + border-style: none; + background-color: __background__; +/* border-spacing: 0px; */ +/* border-collapse: collapse; */ +} + +div.dokuwiki table.inline th { + padding: 3px; + border: 1px solid __border__; + background-color: __background_alt__; +} + +div.dokuwiki table.inline td { + padding: 3px; + border: 1px solid __border__; +} + +/* ---------- table of contents ------------------- */ + +div.dokuwiki div.toc { + margin: 1.2em 0 0 2em; + float: right; + width: 200px; + font-size: 80%; + clear: both; +} + +div.dokuwiki div.sidebar div.toc { + display: none; +} + +div.dokuwiki div.tocheader { + border: 1px solid __border__; + background-color: __background_alt__; + text-align: left; + font-weight: bold; + padding: 3px; + margin-bottom: 2px; +} + +div.dokuwiki div.tocheader img { + width: 0.8em; + height: 0.8em; + float: right; + margin: 0.3em 3px 0 0; + cursor: pointer; +} + +div.dokuwiki #toc__inside { + border: 1px solid __border__; + background-color: __background__; + text-align: left; + padding: 0.5em 0 0.7em 0; +} + +div.dokuwiki ul.toc { + list-style-type: none; + list-style-image: none; + line-height: 1.2em; + padding-left: 1em; + margin: 0; +} + +div.dokuwiki ul.toc li { + background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat; + padding-left: 0.4em; +} + +div.dokuwiki ul.toc li.clear { + background-image: none; + padding-left: 0.4em; +} + +div.dokuwiki a.toc:link, +div.dokuwiki a.toc:visited { + color: __text__ ; + text-decoration:none; +} + +div.dokuwiki a.toc:hover, +div.dokuwiki a.toc:active { + color: __text__; + text-decoration:underline; +} + +/* ---------------------------- Diff rendering --------------------------*/ +div.dokuwiki table.diff { + background-color: __background__; + width: 100%; +} +div.dokuwiki td.diff-blockheader { + font-weight: bold; +} +div.dokuwiki table.diff th { + border-bottom: 1px solid __border__; + font-size: 120%; + width: 50%; + font-weight: normal; + text-align: left; +} +div.dokuwiki table.diff td { + font-family: monospace; + font-size: 100%; +} +div.dokuwiki td.diff-addedline { + background-color: #ddffdd; +} +div.dokuwiki td.diff-deletedline { + background-color: #ffffbb; +} +div.dokuwiki td.diff-context { + background-color: __background_neu__; +} +div.dokuwiki span.diffchange { + color: red; +} + +/* --------------------- footnotes -------------------------------- */ + +div.dokuwiki div.footnotes { + clear: both; + border-top: 1px solid __border__; + padding-left: 1em; + margin-top: 1em; +} + +div.dokuwiki div.fn { + font-size: 90%; +} + +div.dokuwiki a.fn_top { + vertical-align: super; + font-size: 80%; +} + +div.dokuwiki a.fn_bot { + vertical-align: super; + font-size: 80%; + font-weight: bold; +} + +/* insitu-footnotes */ +div.insitu-footnote { + font-size: 80%; + line-height: 1.2em; + border: 1px solid __border__; + background-color: __background_other__; + text-align: left; + padding: 4px; + max-width: 40%; /* IE's width is handled in javascript */ +} + +/* overcome IE issue with one line code or file boxes which require h. scrolling */ +* html .insitu-footnote pre.code, +* html .insitu-footnote pre.file { + padding-bottom: 18px; +} + +/* --------------- search result formating --------------- */ +div.dokuwiki .search_result { + margin-bottom: 6px; + padding: 0 10px 0 30px; +} + +div.dokuwiki .search_snippet { + color: __text_other__; + font-size: 12px; + margin-left: 20px; +} + +div.dokuwiki .search_sep { + color: __text__; +} + +div.dokuwiki .search_hit { + color: __text__; + background-color: __highlight__; +} + +div.dokuwiki div.search_quickresult { + margin: 0 0 15px 30px; + padding: 0 10px 10px 0; + border-bottom: 1px dashed __border__; +} +div.dokuwiki div.search_quickresult h3 { + margin: 0 0 1.0em 0; + font-size: 1em; + font-weight: bold; +} + +div.dokuwiki ul.search_quickhits { + margin: 0 0 0.5em 1.0em; +} + +div.dokuwiki ul.search_quickhits li { + margin: 0 1.0em 0 1.0em; + float:left; + width: 30%; +} + +/* ------------------ Additional ---------------------- */ + +div.footerinc { + text-align: center; +} +.footerinc a img { + opacity: 0.5; + border: 0; +} + +.footerinc a:hover img { + opacity: 1; +} + +/* ---------- AJAX quicksearch ----------- */ + +div.dokuwiki div.ajax_qsearch { + position: absolute; + right: 237px;; + width: 200px; + opacity: 0.9; + display: none; + font-size: 80%; + line-height: 1.2em; + border: 1px solid __border__; + background-color: __background_other__; + text-align: left; + padding: 4px; +} + +/* --------- Toolbar -------------------- */ +button.toolbutton { + background-color: __background__; + padding: 0px; + margin: 0 1px 0 0; + border: 1px solid __border__; + cursor: pointer; +} + +/* nice alphatransparency background except for IE <7 */ +html>body button.toolbutton { + background: __background__ url(images/buttonshadow.png) repeat-x bottom; +} + +div.picker { + width: 250px; + border: 1px solid __border__; + background-color: __background_alt__; +} + +button.pickerbutton { + padding: 0px; + margin: 0 1px 1px 0; + border: 0; + background-color: transparent; + font-size: 80%; + cursor: pointer; +} + +/* ---------- Spellchecking ------------- */ + +div.dokuwiki a.spell_error { + color: #f00; + text-decoration: underline; +} + +div.dokuwiki div#spell__suggest { + background-color: __background__; + padding: 2px; + border: 1px solid __text__; + font-size: 80%; + display: none; +} + +div.dokuwiki div#spell__result { + border: 1px solid __border__; + color: __text__; + font-size: 14px; + padding: 3px; + background-color: __background_other__; + display: none; +} + +div.dokuwiki span.spell_noerr { + color: #093; +} + +div.dokuwiki span.spell_wait { + color: #06c; +} + +/* --------------- Image Details ----------------- */ + +div.dokuwiki div.img_big { + float: left; + margin-right: 0.5em; +} + +div.dokuwiki dl.img_tags dt { + font-weight: bold; + background-color: __background_alt__; +} +div.dokuwiki dl.img_tags dd { + background-color: __background_neu__; +} + +div.dokuwiki div.imagemeta { + color: __text_neu__; + font-size: 70%; + line-height: 95%; +} + +div.dokuwiki div.imagemeta img.thumb { + float:left; + margin-right: 0.1em; +} diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/detail.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/detail.php new file mode 100644 index 00000000..d62031fb --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/detail.php @@ -0,0 +1,92 @@ + + */ + +// must be run from within DokuWiki +if (!defined('DOKU_INC')) die(); + +?> + + + + + + <?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?> + [<?php echo strip_tags($conf['title'])?>] + + + + + + + + +
+ + +
+ + +

+ +
+ +
+ +
+

+ +

+ +

+ +
+ '.$lang['img_date'].':
'.date($conf['dformat'],$t).'
'; + + $t = tpl_img_getTag('File.Name'); + if($t) print '
'.$lang['img_fname'].':
'.hsc($t).'
'; + + $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit')); + if($t) print '
'.$lang['img_artist'].':
'.hsc($t).'
'; + + $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright')); + if($t) print '
'.$lang['img_copyr'].':
'.hsc($t).'
'; + + $t = tpl_img_getTag('File.Format'); + if($t) print '
'.$lang['img_format'].':
'.hsc($t).'
'; + + $t = tpl_img_getTag('File.NiceSize'); + if($t) print '
'.$lang['img_fsize'].':
'.hsc($t).'
'; + + $t = tpl_img_getTag('Simple.Camera'); + if($t) print '
'.$lang['img_camera'].':
'.hsc($t).'
'; + + $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category')); + if($t) print '
'.$lang['img_keywords'].':
'.hsc($t).'
'; + + ?> +
+ +
+ + +
+
+ + + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/footer.html b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/footer.html new file mode 100644 index 00000000..f89194a6 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/footer.html @@ -0,0 +1,70 @@ + + + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/admin.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/admin.png new file mode 100644 index 00000000..bb6292a4 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/admin.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/backlink.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/backlink.png new file mode 100644 index 00000000..69a232c3 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/backlink.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/create.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/create.png new file mode 100644 index 00000000..cbc86459 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/create.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/delicious.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/delicious.gif new file mode 100644 index 00000000..a4d88e53 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/delicious.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/digg.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/digg.gif new file mode 100644 index 00000000..becd3b33 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/digg.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/edit.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/edit.png new file mode 100644 index 00000000..d5dccbb7 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/edit.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/google.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/google.gif new file mode 100644 index 00000000..15369dd7 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/google.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/history.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/history.png new file mode 100644 index 00000000..e32e1a55 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/history.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/index.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/index.png new file mode 100644 index 00000000..bc261a7f Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/index.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/login.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/login.png new file mode 100644 index 00000000..ba9f104f Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/login.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/previous.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/previous.png new file mode 100644 index 00000000..bc3d5d84 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/previous.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/profile.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/profile.png new file mode 100644 index 00000000..633ae914 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/profile.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/recent.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/recent.png new file mode 100644 index 00000000..b1808dec Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/recent.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/show.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/show.png new file mode 100644 index 00000000..17fb91d8 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/show.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/subscribe.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/subscribe.png new file mode 100644 index 00000000..d692bf84 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/subscribe.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/top.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/top.png new file mode 100644 index 00000000..b79a36d0 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/top.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/unsubscribe.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/unsubscribe.png new file mode 100644 index 00000000..d2b55aa5 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/actions/unsubscribe.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/black_arrow.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/black_arrow.gif new file mode 100644 index 00000000..72908cb6 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/black_arrow.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/faded_background.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/faded_background.png new file mode 100644 index 00000000..78d1bf03 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/faded_background.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/favicon.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/favicon.png new file mode 100644 index 00000000..bbeb278d Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/favicon.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/find.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/find.gif new file mode 100644 index 00000000..0a7193dd Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/find.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_background.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_background.png new file mode 100644 index 00000000..1e9a1736 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_background.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_bc.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_bc.png new file mode 100644 index 00000000..1cbabd3f Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_bc.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_logo.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_logo.png new file mode 100644 index 00000000..c4c3a89b Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_logo.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_status.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_status.png new file mode 100644 index 00000000..613693d3 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/gradient_status.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/user_icon.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/user_icon.png new file mode 100644 index 00000000..7335517b Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/user_icon.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/wiki_logo.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/wiki_logo.png new file mode 100644 index 00000000..397b73df Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/b/wiki_logo.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/bullet.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/bullet.gif new file mode 100644 index 00000000..e10e3760 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/bullet.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-cc.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-cc.gif new file mode 100644 index 00000000..5861d637 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-cc.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-css.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-css.png new file mode 100644 index 00000000..706325e1 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-css.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-donate.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-donate.gif new file mode 100644 index 00000000..ec682c6b Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-donate.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-dw.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-dw.png new file mode 100644 index 00000000..39d5f56a Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-dw.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-php.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-php.gif new file mode 100644 index 00000000..28f329aa Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-php.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-rss.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-rss.png new file mode 100644 index 00000000..b036f715 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-rss.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-xhtml.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-xhtml.png new file mode 100644 index 00000000..ec686442 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/button-xhtml.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/buttonshadow.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/buttonshadow.png new file mode 100644 index 00000000..f60be309 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/buttonshadow.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/closed.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/closed.gif new file mode 100644 index 00000000..ed106694 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/closed.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon.ico b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon.ico new file mode 100644 index 00000000..5720d1ed Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon.ico differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_blue.ico b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_blue.ico new file mode 100644 index 00000000..547aaae4 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_blue.ico differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_green.ico b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_green.ico new file mode 100644 index 00000000..ef55da6c Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_green.ico differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_plain.ico b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_plain.ico new file mode 100644 index 00000000..8b9616ab Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/favicon_plain.ico differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/inputshadow.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/inputshadow.png new file mode 100644 index 00000000..d286beb2 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/inputshadow.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/link_icon.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/link_icon.gif new file mode 100644 index 00000000..815ccb1b Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/link_icon.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/mail_icon.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/mail_icon.gif new file mode 100644 index 00000000..50a87a9a Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/mail_icon.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/open.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/open.gif new file mode 100644 index 00000000..d9adc8b8 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/open.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/admin.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/admin.png new file mode 100644 index 00000000..75dfdf60 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/admin.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/backlink.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/backlink.png new file mode 100644 index 00000000..b583cee8 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/backlink.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/create.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/create.png new file mode 100644 index 00000000..a0c8dcb5 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/create.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/delicious.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/delicious.gif new file mode 100644 index 00000000..a4d88e53 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/delicious.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/digg.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/digg.gif new file mode 100644 index 00000000..becd3b33 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/digg.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/edit.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/edit.png new file mode 100644 index 00000000..a0c8dcb5 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/edit.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/google.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/google.gif new file mode 100644 index 00000000..15369dd7 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/google.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/history.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/history.png new file mode 100644 index 00000000..e8a22abe Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/history.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/index.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/index.png new file mode 100644 index 00000000..f487164e Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/index.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/login.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/login.png new file mode 100644 index 00000000..66cc1e9e Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/login.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/previous.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/previous.png new file mode 100644 index 00000000..793412ac Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/previous.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/profile.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/profile.png new file mode 100644 index 00000000..c800c26c Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/profile.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/recent.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/recent.png new file mode 100644 index 00000000..2b937ff9 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/recent.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/show.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/show.png new file mode 100644 index 00000000..52a09596 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/show.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/subscribe.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/subscribe.png new file mode 100644 index 00000000..efa97566 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/subscribe.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/top.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/top.png new file mode 100644 index 00000000..7154e1d9 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/top.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/unsubscribe.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/unsubscribe.png new file mode 100644 index 00000000..951509c5 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/actions/unsubscribe.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/faded_background.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/faded_background.png new file mode 100644 index 00000000..eda77e26 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/faded_background.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_background.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_background.png new file mode 100644 index 00000000..d9c70825 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_background.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_bc.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_bc.png new file mode 100644 index 00000000..92bd4a42 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_bc.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_logo.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_logo.png new file mode 100644 index 00000000..6afaaa13 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_logo.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_status.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_status.png new file mode 100644 index 00000000..1b6a06bc Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/gradient_status.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/wiki_logo.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/wiki_logo.png new file mode 100644 index 00000000..0c192b94 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/p/wiki_logo.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/admin.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/admin.png new file mode 100644 index 00000000..bb6292a4 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/admin.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/backlink.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/backlink.png new file mode 100644 index 00000000..5658c4de Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/backlink.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/create.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/create.png new file mode 100644 index 00000000..cbc86459 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/create.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/delicious.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/delicious.gif new file mode 100644 index 00000000..a4d88e53 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/delicious.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/digg.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/digg.gif new file mode 100644 index 00000000..becd3b33 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/digg.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/edit.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/edit.png new file mode 100644 index 00000000..d5dccbb7 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/edit.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/google.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/google.gif new file mode 100644 index 00000000..15369dd7 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/google.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/history.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/history.png new file mode 100644 index 00000000..5a7d0d12 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/history.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/index.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/index.png new file mode 100644 index 00000000..bc261a7f Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/index.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/login.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/login.png new file mode 100644 index 00000000..9706d5d9 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/login.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/previous.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/previous.png new file mode 100644 index 00000000..9c538bec Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/previous.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/profile.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/profile.png new file mode 100644 index 00000000..633ae914 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/profile.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/recent.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/recent.png new file mode 100644 index 00000000..4eb61e98 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/recent.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/show.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/show.png new file mode 100644 index 00000000..17fb91d8 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/show.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/subscribe.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/subscribe.png new file mode 100644 index 00000000..d692bf84 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/subscribe.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/top.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/top.png new file mode 100644 index 00000000..3bd4b3f0 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/top.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/unsubscribe.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/unsubscribe.png new file mode 100644 index 00000000..d2b55aa5 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/actions/unsubscribe.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/black_arrow.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/black_arrow.gif new file mode 100644 index 00000000..72908cb6 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/black_arrow.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/faded_background.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/faded_background.png new file mode 100644 index 00000000..5c12fdb4 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/faded_background.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/favicon.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/favicon.png new file mode 100644 index 00000000..7fab664a Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/favicon.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/find.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/find.gif new file mode 100644 index 00000000..4bff3b79 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/find.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_background.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_background.png new file mode 100644 index 00000000..54fd373e Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_background.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_bc.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_bc.png new file mode 100644 index 00000000..1cbabd3f Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_bc.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_logo.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_logo.png new file mode 100644 index 00000000..48808546 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_logo.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_status.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_status.png new file mode 100644 index 00000000..613693d3 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/gradient_status.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/user_icon.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/user_icon.png new file mode 100644 index 00000000..9a540998 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/user_icon.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/wiki_logo.png b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/wiki_logo.png new file mode 100644 index 00000000..e8bde0f9 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/r/wiki_logo.png differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/tocdot2.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/tocdot2.gif new file mode 100644 index 00000000..3d39c2e7 Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/tocdot2.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/windows.gif b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/windows.gif new file mode 100644 index 00000000..4f12acce Binary files /dev/null and b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/images/windows.gif differ diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/builder.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/builder.js new file mode 100644 index 00000000..199afc12 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/builder.js @@ -0,0 +1,131 @@ +// script.aculo.us builder.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 + +// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +var Builder = { + NODEMAP: { + AREA: 'map', + CAPTION: 'table', + COL: 'table', + COLGROUP: 'table', + LEGEND: 'fieldset', + OPTGROUP: 'select', + OPTION: 'select', + PARAM: 'object', + TBODY: 'table', + TD: 'table', + TFOOT: 'table', + TH: 'table', + THEAD: 'table', + TR: 'table' + }, + // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken, + // due to a Firefox bug + node: function(elementName) { + elementName = elementName.toUpperCase(); + + // try innerHTML approach + var parentTag = this.NODEMAP[elementName] || 'div'; + var parentElement = document.createElement(parentTag); + try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 + parentElement.innerHTML = "<" + elementName + ">"; + } catch(e) {} + var element = parentElement.firstChild || null; + + // see if browser added wrapping tags + if(element && (element.tagName.toUpperCase() != elementName)) + element = element.getElementsByTagName(elementName)[0]; + + // fallback to createElement approach + if(!element) element = document.createElement(elementName); + + // abort if nothing could be created + if(!element) return; + + // attributes (or text) + if(arguments[1]) + if(this._isStringOrNumber(arguments[1]) || + (arguments[1] instanceof Array)) { + this._children(element, arguments[1]); + } else { + var attrs = this._attributes(arguments[1]); + if(attrs.length) { + try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 + parentElement.innerHTML = "<" +elementName + " " + + attrs + ">"; + } catch(e) {} + element = parentElement.firstChild || null; + // workaround firefox 1.0.X bug + if(!element) { + element = document.createElement(elementName); + for(attr in arguments[1]) + element[attr == 'class' ? 'className' : attr] = arguments[1][attr]; + } + if(element.tagName.toUpperCase() != elementName) + element = parentElement.getElementsByTagName(elementName)[0]; + } + } + + // text, or array of children + if(arguments[2]) + this._children(element, arguments[2]); + + return element; + }, + _text: function(text) { + return document.createTextNode(text); + }, + + ATTR_MAP: { + 'className': 'class', + 'htmlFor': 'for' + }, + + _attributes: function(attributes) { + var attrs = []; + for(attribute in attributes) + attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) + + '="' + attributes[attribute].toString().escapeHTML() + '"'); + return attrs.join(" "); + }, + _children: function(element, children) { + if(typeof children=='object') { // array can hold nodes and text + children.flatten().each( function(e) { + if(typeof e=='object') + element.appendChild(e) + else + if(Builder._isStringOrNumber(e)) + element.appendChild(Builder._text(e)); + }); + } else + if(Builder._isStringOrNumber(children)) + element.appendChild(Builder._text(children)); + }, + _isStringOrNumber: function(param) { + return(typeof param=='string' || typeof param=='number'); + }, + build: function(html) { + var element = this.node('div'); + $(element).update(html.strip()); + return element.down(); + }, + dump: function(scope) { + if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope + + var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " + + "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " + + "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+ + "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+ + "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+ + "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/); + + tags.each( function(tag){ + scope[tag] = function() { + return Builder.node.apply(Builder, [tag].concat($A(arguments))); + } + }); + } +} diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/controls.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/controls.js new file mode 100644 index 00000000..46f2cc18 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/controls.js @@ -0,0 +1,835 @@ +// script.aculo.us controls.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 + +// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// (c) 2005, 2006 Ivan Krstic (http://blogs.law.harvard.edu/ivan) +// (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com) +// Contributors: +// Richard Livsey +// Rahul Bhargava +// Rob Wills +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +// Autocompleter.Base handles all the autocompletion functionality +// that's independent of the data source for autocompletion. This +// includes drawing the autocompletion menu, observing keyboard +// and mouse events, and similar. +// +// Specific autocompleters need to provide, at the very least, +// a getUpdatedChoices function that will be invoked every time +// the text inside the monitored textbox changes. This method +// should get the text for which to provide autocompletion by +// invoking this.getToken(), NOT by directly accessing +// this.element.value. This is to allow incremental tokenized +// autocompletion. Specific auto-completion logic (AJAX, etc) +// belongs in getUpdatedChoices. +// +// Tokenized incremental autocompletion is enabled automatically +// when an autocompleter is instantiated with the 'tokens' option +// in the options parameter, e.g.: +// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' }); +// will incrementally autocomplete with a comma as the token. +// Additionally, ',' in the above example can be replaced with +// a token array, e.g. { tokens: [',', '\n'] } which +// enables autocompletion on multiple tokens. This is most +// useful when one of the tokens is \n (a newline), as it +// allows smart autocompletion after linebreaks. + +if(typeof Effect == 'undefined') + throw("controls.js requires including script.aculo.us' effects.js library"); + +var Autocompleter = {} +Autocompleter.Base = function() {}; +Autocompleter.Base.prototype = { + baseInitialize: function(element, update, options) { + this.element = $(element); + this.update = $(update); + this.hasFocus = false; + this.changed = false; + this.active = false; + this.index = 0; + this.entryCount = 0; + + if(this.setOptions) + this.setOptions(options); + else + this.options = options || {}; + + this.options.paramName = this.options.paramName || this.element.name; + this.options.tokens = this.options.tokens || []; + this.options.frequency = this.options.frequency || 0.4; + this.options.minChars = this.options.minChars || 1; + this.options.onShow = this.options.onShow || + function(element, update){ + if(!update.style.position || update.style.position=='absolute') { + update.style.position = 'absolute'; + Position.clone(element, update, { + setHeight: false, + offsetTop: element.offsetHeight + }); + } + Effect.Appear(update,{duration:0.15}); + }; + this.options.onHide = this.options.onHide || + function(element, update){ new Effect.Fade(update,{duration:0.15}) }; + + if(typeof(this.options.tokens) == 'string') + this.options.tokens = new Array(this.options.tokens); + + this.observer = null; + + this.element.setAttribute('autocomplete','off'); + + Element.hide(this.update); + + Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this)); + Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this)); + }, + + show: function() { + if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update); + if(!this.iefix && + (navigator.appVersion.indexOf('MSIE')>0) && + (navigator.userAgent.indexOf('Opera')<0) && + (Element.getStyle(this.update, 'position')=='absolute')) { + new Insertion.After(this.update, + ''); + this.iefix = $(this.update.id+'_iefix'); + } + if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50); + }, + + fixIEOverlapping: function() { + Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)}); + this.iefix.style.zIndex = 1; + this.update.style.zIndex = 2; + Element.show(this.iefix); + }, + + hide: function() { + this.stopIndicator(); + if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update); + if(this.iefix) Element.hide(this.iefix); + }, + + startIndicator: function() { + if(this.options.indicator) Element.show(this.options.indicator); + }, + + stopIndicator: function() { + if(this.options.indicator) Element.hide(this.options.indicator); + }, + + onKeyPress: function(event) { + if(this.active) + switch(event.keyCode) { + case Event.KEY_TAB: + case Event.KEY_RETURN: + this.selectEntry(); + Event.stop(event); + case Event.KEY_ESC: + this.hide(); + this.active = false; + Event.stop(event); + return; + case Event.KEY_LEFT: + case Event.KEY_RIGHT: + return; + case Event.KEY_UP: + this.markPrevious(); + this.render(); + if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); + return; + case Event.KEY_DOWN: + this.markNext(); + this.render(); + if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); + return; + } + else + if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || + (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return; + + this.changed = true; + this.hasFocus = true; + + if(this.observer) clearTimeout(this.observer); + this.observer = + setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); + }, + + activate: function() { + this.changed = false; + this.hasFocus = true; + this.getUpdatedChoices(); + }, + + onHover: function(event) { + var element = Event.findElement(event, 'LI'); + if(this.index != element.autocompleteIndex) + { + this.index = element.autocompleteIndex; + this.render(); + } + Event.stop(event); + }, + + onClick: function(event) { + var element = Event.findElement(event, 'LI'); + this.index = element.autocompleteIndex; + this.selectEntry(); + this.hide(); + }, + + onBlur: function(event) { + // needed to make click events working + setTimeout(this.hide.bind(this), 250); + this.hasFocus = false; + this.active = false; + }, + + render: function() { + if(this.entryCount > 0) { + for (var i = 0; i < this.entryCount; i++) + this.index==i ? + Element.addClassName(this.getEntry(i),"selected") : + Element.removeClassName(this.getEntry(i),"selected"); + + if(this.hasFocus) { + this.show(); + this.active = true; + } + } else { + this.active = false; + this.hide(); + } + }, + + markPrevious: function() { + if(this.index > 0) this.index-- + else this.index = this.entryCount-1; + this.getEntry(this.index).scrollIntoView(true); + }, + + markNext: function() { + if(this.index < this.entryCount-1) this.index++ + else this.index = 0; + this.getEntry(this.index).scrollIntoView(false); + }, + + getEntry: function(index) { + return this.update.firstChild.childNodes[index]; + }, + + getCurrentEntry: function() { + return this.getEntry(this.index); + }, + + selectEntry: function() { + this.active = false; + this.updateElement(this.getCurrentEntry()); + }, + + updateElement: function(selectedElement) { + if (this.options.updateElement) { + this.options.updateElement(selectedElement); + return; + } + var value = ''; + if (this.options.select) { + var nodes = document.getElementsByClassName(this.options.select, selectedElement) || []; + if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select); + } else + value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal'); + + var lastTokenPos = this.findLastToken(); + if (lastTokenPos != -1) { + var newValue = this.element.value.substr(0, lastTokenPos + 1); + var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/); + if (whitespace) + newValue += whitespace[0]; + this.element.value = newValue + value; + } else { + this.element.value = value; + } + this.element.focus(); + + if (this.options.afterUpdateElement) + this.options.afterUpdateElement(this.element, selectedElement); + }, + + updateChoices: function(choices) { + if(!this.changed && this.hasFocus) { + this.update.innerHTML = choices; + Element.cleanWhitespace(this.update); + Element.cleanWhitespace(this.update.down()); + + if(this.update.firstChild && this.update.down().childNodes) { + this.entryCount = + this.update.down().childNodes.length; + for (var i = 0; i < this.entryCount; i++) { + var entry = this.getEntry(i); + entry.autocompleteIndex = i; + this.addObservers(entry); + } + } else { + this.entryCount = 0; + } + + this.stopIndicator(); + this.index = 0; + + if(this.entryCount==1 && this.options.autoSelect) { + this.selectEntry(); + this.hide(); + } else { + this.render(); + } + } + }, + + addObservers: function(element) { + Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this)); + Event.observe(element, "click", this.onClick.bindAsEventListener(this)); + }, + + onObserverEvent: function() { + this.changed = false; + if(this.getToken().length>=this.options.minChars) { + this.startIndicator(); + this.getUpdatedChoices(); + } else { + this.active = false; + this.hide(); + } + }, + + getToken: function() { + var tokenPos = this.findLastToken(); + if (tokenPos != -1) + var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,''); + else + var ret = this.element.value; + + return /\n/.test(ret) ? '' : ret; + }, + + findLastToken: function() { + var lastTokenPos = -1; + + for (var i=0; i lastTokenPos) + lastTokenPos = thisTokenPos; + } + return lastTokenPos; + } +} + +Ajax.Autocompleter = Class.create(); +Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), { + initialize: function(element, update, url, options) { + this.baseInitialize(element, update, options); + this.options.asynchronous = true; + this.options.onComplete = this.onComplete.bind(this); + this.options.defaultParams = this.options.parameters || null; + this.url = url; + }, + + getUpdatedChoices: function() { + entry = encodeURIComponent(this.options.paramName) + '=' + + encodeURIComponent(this.getToken()); + + this.options.parameters = this.options.callback ? + this.options.callback(this.element, entry) : entry; + + if(this.options.defaultParams) + this.options.parameters += '&' + this.options.defaultParams; + + new Ajax.Request(this.url, this.options); + }, + + onComplete: function(request) { + this.updateChoices(request.responseText); + } + +}); + +// The local array autocompleter. Used when you'd prefer to +// inject an array of autocompletion options into the page, rather +// than sending out Ajax queries, which can be quite slow sometimes. +// +// The constructor takes four parameters. The first two are, as usual, +// the id of the monitored textbox, and id of the autocompletion menu. +// The third is the array you want to autocomplete from, and the fourth +// is the options block. +// +// Extra local autocompletion options: +// - choices - How many autocompletion choices to offer +// +// - partialSearch - If false, the autocompleter will match entered +// text only at the beginning of strings in the +// autocomplete array. Defaults to true, which will +// match text at the beginning of any *word* in the +// strings in the autocomplete array. If you want to +// search anywhere in the string, additionally set +// the option fullSearch to true (default: off). +// +// - fullSsearch - Search anywhere in autocomplete array strings. +// +// - partialChars - How many characters to enter before triggering +// a partial match (unlike minChars, which defines +// how many characters are required to do any match +// at all). Defaults to 2. +// +// - ignoreCase - Whether to ignore case when autocompleting. +// Defaults to true. +// +// It's possible to pass in a custom function as the 'selector' +// option, if you prefer to write your own autocompletion logic. +// In that case, the other options above will not apply unless +// you support them. + +Autocompleter.Local = Class.create(); +Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), { + initialize: function(element, update, array, options) { + this.baseInitialize(element, update, options); + this.options.array = array; + }, + + getUpdatedChoices: function() { + this.updateChoices(this.options.selector(this)); + }, + + setOptions: function(options) { + this.options = Object.extend({ + choices: 10, + partialSearch: true, + partialChars: 2, + ignoreCase: true, + fullSearch: false, + selector: function(instance) { + var ret = []; // Beginning matches + var partial = []; // Inside matches + var entry = instance.getToken(); + var count = 0; + + for (var i = 0; i < instance.options.array.length && + ret.length < instance.options.choices ; i++) { + + var elem = instance.options.array[i]; + var foundPos = instance.options.ignoreCase ? + elem.toLowerCase().indexOf(entry.toLowerCase()) : + elem.indexOf(entry); + + while (foundPos != -1) { + if (foundPos == 0 && elem.length != entry.length) { + ret.push("
  • " + elem.substr(0, entry.length) + "" + + elem.substr(entry.length) + "
  • "); + break; + } else if (entry.length >= instance.options.partialChars && + instance.options.partialSearch && foundPos != -1) { + if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) { + partial.push("
  • " + elem.substr(0, foundPos) + "" + + elem.substr(foundPos, entry.length) + "" + elem.substr( + foundPos + entry.length) + "
  • "); + break; + } + } + + foundPos = instance.options.ignoreCase ? + elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : + elem.indexOf(entry, foundPos + 1); + + } + } + if (partial.length) + ret = ret.concat(partial.slice(0, instance.options.choices - ret.length)) + return "
      " + ret.join('') + "
    "; + } + }, options || {}); + } +}); + +// AJAX in-place editor +// +// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor + +// Use this if you notice weird scrolling problems on some browsers, +// the DOM might be a bit confused when this gets called so do this +// waits 1 ms (with setTimeout) until it does the activation +Field.scrollFreeActivate = function(field) { + setTimeout(function() { + Field.activate(field); + }, 1); +} + +Ajax.InPlaceEditor = Class.create(); +Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99"; +Ajax.InPlaceEditor.prototype = { + initialize: function(element, url, options) { + this.url = url; + this.element = $(element); + + this.options = Object.extend({ + paramName: "value", + okButton: true, + okText: "ok", + cancelLink: true, + cancelText: "cancel", + savingText: "Saving...", + clickToEditText: "Click to edit", + okText: "ok", + rows: 1, + onComplete: function(transport, element) { + new Effect.Highlight(element, {startcolor: this.options.highlightcolor}); + }, + onFailure: function(transport) { + alert("Error communicating with the server: " + transport.responseText.stripTags()); + }, + callback: function(form) { + return Form.serialize(form); + }, + handleLineBreaks: true, + loadingText: 'Loading...', + savingClassName: 'inplaceeditor-saving', + loadingClassName: 'inplaceeditor-loading', + formClassName: 'inplaceeditor-form', + highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor, + highlightendcolor: "#FFFFFF", + externalControl: null, + submitOnBlur: false, + ajaxOptions: {}, + evalScripts: false + }, options || {}); + + if(!this.options.formId && this.element.id) { + this.options.formId = this.element.id + "-inplaceeditor"; + if ($(this.options.formId)) { + // there's already a form with that name, don't specify an id + this.options.formId = null; + } + } + + if (this.options.externalControl) { + this.options.externalControl = $(this.options.externalControl); + } + + this.originalBackground = Element.getStyle(this.element, 'background-color'); + if (!this.originalBackground) { + this.originalBackground = "transparent"; + } + + this.element.title = this.options.clickToEditText; + + this.onclickListener = this.enterEditMode.bindAsEventListener(this); + this.mouseoverListener = this.enterHover.bindAsEventListener(this); + this.mouseoutListener = this.leaveHover.bindAsEventListener(this); + Event.observe(this.element, 'click', this.onclickListener); + Event.observe(this.element, 'mouseover', this.mouseoverListener); + Event.observe(this.element, 'mouseout', this.mouseoutListener); + if (this.options.externalControl) { + Event.observe(this.options.externalControl, 'click', this.onclickListener); + Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener); + Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener); + } + }, + enterEditMode: function(evt) { + if (this.saving) return; + if (this.editing) return; + this.editing = true; + this.onEnterEditMode(); + if (this.options.externalControl) { + Element.hide(this.options.externalControl); + } + Element.hide(this.element); + this.createForm(); + this.element.parentNode.insertBefore(this.form, this.element); + if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField); + // stop the event to avoid a page refresh in Safari + if (evt) { + Event.stop(evt); + } + return false; + }, + createForm: function() { + this.form = document.createElement("form"); + this.form.id = this.options.formId; + Element.addClassName(this.form, this.options.formClassName) + this.form.onsubmit = this.onSubmit.bind(this); + + this.createEditField(); + + if (this.options.textarea) { + var br = document.createElement("br"); + this.form.appendChild(br); + } + + if (this.options.okButton) { + okButton = document.createElement("input"); + okButton.type = "submit"; + okButton.value = this.options.okText; + okButton.className = 'editor_ok_button'; + this.form.appendChild(okButton); + } + + if (this.options.cancelLink) { + cancelLink = document.createElement("a"); + cancelLink.href = "#"; + cancelLink.appendChild(document.createTextNode(this.options.cancelText)); + cancelLink.onclick = this.onclickCancel.bind(this); + cancelLink.className = 'editor_cancel'; + this.form.appendChild(cancelLink); + } + }, + hasHTMLLineBreaks: function(string) { + if (!this.options.handleLineBreaks) return false; + return string.match(/
    /i); + }, + convertHTMLLineBreaks: function(string) { + return string.replace(/
    /gi, "\n").replace(//gi, "\n").replace(/<\/p>/gi, "\n").replace(/

    /gi, ""); + }, + createEditField: function() { + var text; + if(this.options.loadTextURL) { + text = this.options.loadingText; + } else { + text = this.getText(); + } + + var obj = this; + + if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) { + this.options.textarea = false; + var textField = document.createElement("input"); + textField.obj = this; + textField.type = "text"; + textField.name = this.options.paramName; + textField.value = text; + textField.style.backgroundColor = this.options.highlightcolor; + textField.className = 'editor_field'; + var size = this.options.size || this.options.cols || 0; + if (size != 0) textField.size = size; + if (this.options.submitOnBlur) + textField.onblur = this.onSubmit.bind(this); + this.editField = textField; + } else { + this.options.textarea = true; + var textArea = document.createElement("textarea"); + textArea.obj = this; + textArea.name = this.options.paramName; + textArea.value = this.convertHTMLLineBreaks(text); + textArea.rows = this.options.rows; + textArea.cols = this.options.cols || 40; + textArea.className = 'editor_field'; + if (this.options.submitOnBlur) + textArea.onblur = this.onSubmit.bind(this); + this.editField = textArea; + } + + if(this.options.loadTextURL) { + this.loadExternalText(); + } + this.form.appendChild(this.editField); + }, + getText: function() { + return this.element.innerHTML; + }, + loadExternalText: function() { + Element.addClassName(this.form, this.options.loadingClassName); + this.editField.disabled = true; + new Ajax.Request( + this.options.loadTextURL, + Object.extend({ + asynchronous: true, + onComplete: this.onLoadedExternalText.bind(this) + }, this.options.ajaxOptions) + ); + }, + onLoadedExternalText: function(transport) { + Element.removeClassName(this.form, this.options.loadingClassName); + this.editField.disabled = false; + this.editField.value = transport.responseText.stripTags(); + Field.scrollFreeActivate(this.editField); + }, + onclickCancel: function() { + this.onComplete(); + this.leaveEditMode(); + return false; + }, + onFailure: function(transport) { + this.options.onFailure(transport); + if (this.oldInnerHTML) { + this.element.innerHTML = this.oldInnerHTML; + this.oldInnerHTML = null; + } + return false; + }, + onSubmit: function() { + // onLoading resets these so we need to save them away for the Ajax call + var form = this.form; + var value = this.editField.value; + + // do this first, sometimes the ajax call returns before we get a chance to switch on Saving... + // which means this will actually switch on Saving... *after* we've left edit mode causing Saving... + // to be displayed indefinitely + this.onLoading(); + + if (this.options.evalScripts) { + new Ajax.Request( + this.url, Object.extend({ + parameters: this.options.callback(form, value), + onComplete: this.onComplete.bind(this), + onFailure: this.onFailure.bind(this), + asynchronous:true, + evalScripts:true + }, this.options.ajaxOptions)); + } else { + new Ajax.Updater( + { success: this.element, + // don't update on failure (this could be an option) + failure: null }, + this.url, Object.extend({ + parameters: this.options.callback(form, value), + onComplete: this.onComplete.bind(this), + onFailure: this.onFailure.bind(this) + }, this.options.ajaxOptions)); + } + // stop the event to avoid a page refresh in Safari + if (arguments.length > 1) { + Event.stop(arguments[0]); + } + return false; + }, + onLoading: function() { + this.saving = true; + this.removeForm(); + this.leaveHover(); + this.showSaving(); + }, + showSaving: function() { + this.oldInnerHTML = this.element.innerHTML; + this.element.innerHTML = this.options.savingText; + Element.addClassName(this.element, this.options.savingClassName); + this.element.style.backgroundColor = this.originalBackground; + Element.show(this.element); + }, + removeForm: function() { + if(this.form) { + if (this.form.parentNode) Element.remove(this.form); + this.form = null; + } + }, + enterHover: function() { + if (this.saving) return; + this.element.style.backgroundColor = this.options.highlightcolor; + if (this.effect) { + this.effect.cancel(); + } + Element.addClassName(this.element, this.options.hoverClassName) + }, + leaveHover: function() { + if (this.options.backgroundColor) { + this.element.style.backgroundColor = this.oldBackground; + } + Element.removeClassName(this.element, this.options.hoverClassName) + if (this.saving) return; + this.effect = new Effect.Highlight(this.element, { + startcolor: this.options.highlightcolor, + endcolor: this.options.highlightendcolor, + restorecolor: this.originalBackground + }); + }, + leaveEditMode: function() { + Element.removeClassName(this.element, this.options.savingClassName); + this.removeForm(); + this.leaveHover(); + this.element.style.backgroundColor = this.originalBackground; + Element.show(this.element); + if (this.options.externalControl) { + Element.show(this.options.externalControl); + } + this.editing = false; + this.saving = false; + this.oldInnerHTML = null; + this.onLeaveEditMode(); + }, + onComplete: function(transport) { + this.leaveEditMode(); + this.options.onComplete.bind(this)(transport, this.element); + }, + onEnterEditMode: function() {}, + onLeaveEditMode: function() {}, + dispose: function() { + if (this.oldInnerHTML) { + this.element.innerHTML = this.oldInnerHTML; + } + this.leaveEditMode(); + Event.stopObserving(this.element, 'click', this.onclickListener); + Event.stopObserving(this.element, 'mouseover', this.mouseoverListener); + Event.stopObserving(this.element, 'mouseout', this.mouseoutListener); + if (this.options.externalControl) { + Event.stopObserving(this.options.externalControl, 'click', this.onclickListener); + Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener); + Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener); + } + } +}; + +Ajax.InPlaceCollectionEditor = Class.create(); +Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype); +Object.extend(Ajax.InPlaceCollectionEditor.prototype, { + createEditField: function() { + if (!this.cached_selectTag) { + var selectTag = document.createElement("select"); + var collection = this.options.collection || []; + var optionTag; + collection.each(function(e,i) { + optionTag = document.createElement("option"); + optionTag.value = (e instanceof Array) ? e[0] : e; + if((typeof this.options.value == 'undefined') && + ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true; + if(this.options.value==optionTag.value) optionTag.selected = true; + optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e)); + selectTag.appendChild(optionTag); + }.bind(this)); + this.cached_selectTag = selectTag; + } + + this.editField = this.cached_selectTag; + if(this.options.loadTextURL) this.loadExternalText(); + this.form.appendChild(this.editField); + this.options.callback = function(form, value) { + return "value=" + encodeURIComponent(value); + } + } +}); + +// Delayed observer, like Form.Element.Observer, +// but waits for delay after last key input +// Ideal for live-search fields + +Form.Element.DelayedObserver = Class.create(); +Form.Element.DelayedObserver.prototype = { + initialize: function(element, delay, callback) { + this.delay = delay || 0.5; + this.element = $(element); + this.callback = callback; + this.timer = null; + this.lastValue = $F(this.element); + Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); + }, + delayedListener: function(event) { + if(this.lastValue == $F(this.element)) return; + if(this.timer) clearTimeout(this.timer); + this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000); + this.lastValue = $F(this.element); + }, + onTimerEvent: function() { + this.timer = null; + this.callback(this.element, $F(this.element)); + } +}; diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js new file mode 100644 index 00000000..32c91bc3 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/dragdrop.js @@ -0,0 +1,944 @@ +// script.aculo.us dragdrop.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 + +// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +if(typeof Effect == 'undefined') + throw("dragdrop.js requires including script.aculo.us' effects.js library"); + +var Droppables = { + drops: [], + + remove: function(element) { + this.drops = this.drops.reject(function(d) { return d.element==$(element) }); + }, + + add: function(element) { + element = $(element); + var options = Object.extend({ + greedy: true, + hoverclass: null, + tree: false + }, arguments[1] || {}); + + // cache containers + if(options.containment) { + options._containers = []; + var containment = options.containment; + if((typeof containment == 'object') && + (containment.constructor == Array)) { + containment.each( function(c) { options._containers.push($(c)) }); + } else { + options._containers.push($(containment)); + } + } + + if(options.accept) options.accept = [options.accept].flatten(); + + Element.makePositioned(element); // fix IE + options.element = element; + + this.drops.push(options); + }, + + findDeepestChild: function(drops) { + deepest = drops[0]; + + for (i = 1; i < drops.length; ++i) + if (Element.isParent(drops[i].element, deepest.element)) + deepest = drops[i]; + + return deepest; + }, + + isContained: function(element, drop) { + var containmentNode; + if(drop.tree) { + containmentNode = element.treeNode; + } else { + containmentNode = element.parentNode; + } + return drop._containers.detect(function(c) { return containmentNode == c }); + }, + + isAffected: function(point, element, drop) { + return ( + (drop.element!=element) && + ((!drop._containers) || + this.isContained(element, drop)) && + ((!drop.accept) || + (Element.classNames(element).detect( + function(v) { return drop.accept.include(v) } ) )) && + Position.within(drop.element, point[0], point[1]) ); + }, + + deactivate: function(drop) { + if(drop.hoverclass) + Element.removeClassName(drop.element, drop.hoverclass); + this.last_active = null; + }, + + activate: function(drop) { + if(drop.hoverclass) + Element.addClassName(drop.element, drop.hoverclass); + this.last_active = drop; + }, + + show: function(point, element) { + if(!this.drops.length) return; + var affected = []; + + if(this.last_active) this.deactivate(this.last_active); + this.drops.each( function(drop) { + if(Droppables.isAffected(point, element, drop)) + affected.push(drop); + }); + + if(affected.length>0) { + drop = Droppables.findDeepestChild(affected); + Position.within(drop.element, point[0], point[1]); + if(drop.onHover) + drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); + + Droppables.activate(drop); + } + }, + + fire: function(event, element) { + if(!this.last_active) return; + Position.prepare(); + + if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) + if (this.last_active.onDrop) + this.last_active.onDrop(element, this.last_active.element, event); + }, + + reset: function() { + if(this.last_active) + this.deactivate(this.last_active); + } +} + +var Draggables = { + drags: [], + observers: [], + + register: function(draggable) { + if(this.drags.length == 0) { + this.eventMouseUp = this.endDrag.bindAsEventListener(this); + this.eventMouseMove = this.updateDrag.bindAsEventListener(this); + this.eventKeypress = this.keyPress.bindAsEventListener(this); + + Event.observe(document, "mouseup", this.eventMouseUp); + Event.observe(document, "mousemove", this.eventMouseMove); + Event.observe(document, "keypress", this.eventKeypress); + } + this.drags.push(draggable); + }, + + unregister: function(draggable) { + this.drags = this.drags.reject(function(d) { return d==draggable }); + if(this.drags.length == 0) { + Event.stopObserving(document, "mouseup", this.eventMouseUp); + Event.stopObserving(document, "mousemove", this.eventMouseMove); + Event.stopObserving(document, "keypress", this.eventKeypress); + } + }, + + activate: function(draggable) { + if(draggable.options.delay) { + this._timeout = setTimeout(function() { + Draggables._timeout = null; + window.focus(); + Draggables.activeDraggable = draggable; + }.bind(this), draggable.options.delay); + } else { + window.focus(); // allows keypress events if window isn't currently focused, fails for Safari + this.activeDraggable = draggable; + } + }, + + deactivate: function() { + this.activeDraggable = null; + }, + + updateDrag: function(event) { + if(!this.activeDraggable) return; + var pointer = [Event.pointerX(event), Event.pointerY(event)]; + // Mozilla-based browsers fire successive mousemove events with + // the same coordinates, prevent needless redrawing (moz bug?) + if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; + this._lastPointer = pointer; + + this.activeDraggable.updateDrag(event, pointer); + }, + + endDrag: function(event) { + if(this._timeout) { + clearTimeout(this._timeout); + this._timeout = null; + } + if(!this.activeDraggable) return; + this._lastPointer = null; + this.activeDraggable.endDrag(event); + this.activeDraggable = null; + }, + + keyPress: function(event) { + if(this.activeDraggable) + this.activeDraggable.keyPress(event); + }, + + addObserver: function(observer) { + this.observers.push(observer); + this._cacheObserverCallbacks(); + }, + + removeObserver: function(element) { // element instead of observer fixes mem leaks + this.observers = this.observers.reject( function(o) { return o.element==element }); + this._cacheObserverCallbacks(); + }, + + notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' + if(this[eventName+'Count'] > 0) + this.observers.each( function(o) { + if(o[eventName]) o[eventName](eventName, draggable, event); + }); + if(draggable.options[eventName]) draggable.options[eventName](draggable, event); + }, + + _cacheObserverCallbacks: function() { + ['onStart','onEnd','onDrag'].each( function(eventName) { + Draggables[eventName+'Count'] = Draggables.observers.select( + function(o) { return o[eventName]; } + ).length; + }); + } +} + +/*--------------------------------------------------------------------------*/ + +var Draggable = Class.create(); +Draggable._dragging = {}; + +Draggable.prototype = { + initialize: function(element) { + var defaults = { + handle: false, + reverteffect: function(element, top_offset, left_offset) { + var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; + new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, + queue: {scope:'_draggable', position:'end'} + }); + }, + endeffect: function(element) { + var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0; + new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, + queue: {scope:'_draggable', position:'end'}, + afterFinish: function(){ + Draggable._dragging[element] = false + } + }); + }, + zindex: 1000, + revert: false, + scroll: false, + scrollSensitivity: 20, + scrollSpeed: 15, + snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] } + delay: 0 + }; + + if(!arguments[1] || typeof arguments[1].endeffect == 'undefined') + Object.extend(defaults, { + starteffect: function(element) { + element._opacity = Element.getOpacity(element); + Draggable._dragging[element] = true; + new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); + } + }); + + var options = Object.extend(defaults, arguments[1] || {}); + + this.element = $(element); + + if(options.handle && (typeof options.handle == 'string')) + this.handle = this.element.down('.'+options.handle, 0); + + if(!this.handle) this.handle = $(options.handle); + if(!this.handle) this.handle = this.element; + + if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { + options.scroll = $(options.scroll); + this._isScrollChild = Element.childOf(this.element, options.scroll); + } + + Element.makePositioned(this.element); // fix IE + + this.delta = this.currentDelta(); + this.options = options; + this.dragging = false; + + this.eventMouseDown = this.initDrag.bindAsEventListener(this); + Event.observe(this.handle, "mousedown", this.eventMouseDown); + + Draggables.register(this); + }, + + destroy: function() { + Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); + Draggables.unregister(this); + }, + + currentDelta: function() { + return([ + parseInt(Element.getStyle(this.element,'left') || '0'), + parseInt(Element.getStyle(this.element,'top') || '0')]); + }, + + initDrag: function(event) { + if(typeof Draggable._dragging[this.element] != 'undefined' && + Draggable._dragging[this.element]) return; + if(Event.isLeftClick(event)) { + // abort on form elements, fixes a Firefox issue + var src = Event.element(event); + if((tag_name = src.tagName.toUpperCase()) && ( + tag_name=='INPUT' || + tag_name=='SELECT' || + tag_name=='OPTION' || + tag_name=='BUTTON' || + tag_name=='TEXTAREA')) return; + + var pointer = [Event.pointerX(event), Event.pointerY(event)]; + var pos = Position.cumulativeOffset(this.element); + this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); + + Draggables.activate(this); + Event.stop(event); + } + }, + + startDrag: function(event) { + this.dragging = true; + + if(this.options.zindex) { + this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); + this.element.style.zIndex = this.options.zindex; + } + + if(this.options.ghosting) { + this._clone = this.element.cloneNode(true); + Position.absolutize(this.element); + this.element.parentNode.insertBefore(this._clone, this.element); + } + + if(this.options.scroll) { + if (this.options.scroll == window) { + var where = this._getWindowScroll(this.options.scroll); + this.originalScrollLeft = where.left; + this.originalScrollTop = where.top; + } else { + this.originalScrollLeft = this.options.scroll.scrollLeft; + this.originalScrollTop = this.options.scroll.scrollTop; + } + } + + Draggables.notify('onStart', this, event); + + if(this.options.starteffect) this.options.starteffect(this.element); + }, + + updateDrag: function(event, pointer) { + if(!this.dragging) this.startDrag(event); + Position.prepare(); + Droppables.show(pointer, this.element); + Draggables.notify('onDrag', this, event); + + this.draw(pointer); + if(this.options.change) this.options.change(this); + + if(this.options.scroll) { + this.stopScrolling(); + + var p; + if (this.options.scroll == window) { + with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } + } else { + p = Position.page(this.options.scroll); + p[0] += this.options.scroll.scrollLeft + Position.deltaX; + p[1] += this.options.scroll.scrollTop + Position.deltaY; + p.push(p[0]+this.options.scroll.offsetWidth); + p.push(p[1]+this.options.scroll.offsetHeight); + } + var speed = [0,0]; + if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); + if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); + if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); + if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); + this.startScrolling(speed); + } + + // fix AppleWebKit rendering + if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); + + Event.stop(event); + }, + + finishDrag: function(event, success) { + this.dragging = false; + + if(this.options.ghosting) { + Position.relativize(this.element); + Element.remove(this._clone); + this._clone = null; + } + + if(success) Droppables.fire(event, this.element); + Draggables.notify('onEnd', this, event); + + var revert = this.options.revert; + if(revert && typeof revert == 'function') revert = revert(this.element); + + var d = this.currentDelta(); + if(revert && this.options.reverteffect) { + this.options.reverteffect(this.element, + d[1]-this.delta[1], d[0]-this.delta[0]); + } else { + this.delta = d; + } + + if(this.options.zindex) + this.element.style.zIndex = this.originalZ; + + if(this.options.endeffect) + this.options.endeffect(this.element); + + Draggables.deactivate(this); + Droppables.reset(); + }, + + keyPress: function(event) { + if(event.keyCode!=Event.KEY_ESC) return; + this.finishDrag(event, false); + Event.stop(event); + }, + + endDrag: function(event) { + if(!this.dragging) return; + this.stopScrolling(); + this.finishDrag(event, true); + Event.stop(event); + }, + + draw: function(point) { + var pos = Position.cumulativeOffset(this.element); + if(this.options.ghosting) { + var r = Position.realOffset(this.element); + pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; + } + + var d = this.currentDelta(); + pos[0] -= d[0]; pos[1] -= d[1]; + + if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { + pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; + pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; + } + + var p = [0,1].map(function(i){ + return (point[i]-pos[i]-this.offset[i]) + }.bind(this)); + + if(this.options.snap) { + if(typeof this.options.snap == 'function') { + p = this.options.snap(p[0],p[1],this); + } else { + if(this.options.snap instanceof Array) { + p = p.map( function(v, i) { + return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this)) + } else { + p = p.map( function(v) { + return Math.round(v/this.options.snap)*this.options.snap }.bind(this)) + } + }} + + var style = this.element.style; + if((!this.options.constraint) || (this.options.constraint=='horizontal')) + style.left = p[0] + "px"; + if((!this.options.constraint) || (this.options.constraint=='vertical')) + style.top = p[1] + "px"; + + if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering + }, + + stopScrolling: function() { + if(this.scrollInterval) { + clearInterval(this.scrollInterval); + this.scrollInterval = null; + Draggables._lastScrollPointer = null; + } + }, + + startScrolling: function(speed) { + if(!(speed[0] || speed[1])) return; + this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; + this.lastScrolled = new Date(); + this.scrollInterval = setInterval(this.scroll.bind(this), 10); + }, + + scroll: function() { + var current = new Date(); + var delta = current - this.lastScrolled; + this.lastScrolled = current; + if(this.options.scroll == window) { + with (this._getWindowScroll(this.options.scroll)) { + if (this.scrollSpeed[0] || this.scrollSpeed[1]) { + var d = delta / 1000; + this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); + } + } + } else { + this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; + this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; + } + + Position.prepare(); + Droppables.show(Draggables._lastPointer, this.element); + Draggables.notify('onDrag', this); + if (this._isScrollChild) { + Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); + Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; + Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; + if (Draggables._lastScrollPointer[0] < 0) + Draggables._lastScrollPointer[0] = 0; + if (Draggables._lastScrollPointer[1] < 0) + Draggables._lastScrollPointer[1] = 0; + this.draw(Draggables._lastScrollPointer); + } + + if(this.options.change) this.options.change(this); + }, + + _getWindowScroll: function(w) { + var T, L, W, H; + with (w.document) { + if (w.document.documentElement && documentElement.scrollTop) { + T = documentElement.scrollTop; + L = documentElement.scrollLeft; + } else if (w.document.body) { + T = body.scrollTop; + L = body.scrollLeft; + } + if (w.innerWidth) { + W = w.innerWidth; + H = w.innerHeight; + } else if (w.document.documentElement && documentElement.clientWidth) { + W = documentElement.clientWidth; + H = documentElement.clientHeight; + } else { + W = body.offsetWidth; + H = body.offsetHeight + } + } + return { top: T, left: L, width: W, height: H }; + } +} + +/*--------------------------------------------------------------------------*/ + +var SortableObserver = Class.create(); +SortableObserver.prototype = { + initialize: function(element, observer) { + this.element = $(element); + this.observer = observer; + this.lastValue = Sortable.serialize(this.element); + }, + + onStart: function() { + this.lastValue = Sortable.serialize(this.element); + }, + + onEnd: function() { + Sortable.unmark(); + if(this.lastValue != Sortable.serialize(this.element)) + this.observer(this.element) + } +} + +var Sortable = { + SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, + + sortables: {}, + + _findRootElement: function(element) { + while (element.tagName.toUpperCase() != "BODY") { + if(element.id && Sortable.sortables[element.id]) return element; + element = element.parentNode; + } + }, + + options: function(element) { + element = Sortable._findRootElement($(element)); + if(!element) return; + return Sortable.sortables[element.id]; + }, + + destroy: function(element){ + var s = Sortable.options(element); + + if(s) { + Draggables.removeObserver(s.element); + s.droppables.each(function(d){ Droppables.remove(d) }); + s.draggables.invoke('destroy'); + + delete Sortable.sortables[s.element.id]; + } + }, + + create: function(element) { + element = $(element); + var options = Object.extend({ + element: element, + tag: 'li', // assumes li children, override with tag: 'tagname' + dropOnEmpty: false, + tree: false, + treeTag: 'ul', + overlap: 'vertical', // one of 'vertical', 'horizontal' + constraint: 'vertical', // one of 'vertical', 'horizontal', false + containment: element, // also takes array of elements (or id's); or false + handle: false, // or a CSS class + only: false, + delay: 0, + hoverclass: null, + ghosting: false, + scroll: false, + scrollSensitivity: 20, + scrollSpeed: 15, + format: this.SERIALIZE_RULE, + onChange: Prototype.emptyFunction, + onUpdate: Prototype.emptyFunction + }, arguments[1] || {}); + + // clear any old sortable with same element + this.destroy(element); + + // build options for the draggables + var options_for_draggable = { + revert: true, + scroll: options.scroll, + scrollSpeed: options.scrollSpeed, + scrollSensitivity: options.scrollSensitivity, + delay: options.delay, + ghosting: options.ghosting, + constraint: options.constraint, + handle: options.handle }; + + if(options.starteffect) + options_for_draggable.starteffect = options.starteffect; + + if(options.reverteffect) + options_for_draggable.reverteffect = options.reverteffect; + else + if(options.ghosting) options_for_draggable.reverteffect = function(element) { + element.style.top = 0; + element.style.left = 0; + }; + + if(options.endeffect) + options_for_draggable.endeffect = options.endeffect; + + if(options.zindex) + options_for_draggable.zindex = options.zindex; + + // build options for the droppables + var options_for_droppable = { + overlap: options.overlap, + containment: options.containment, + tree: options.tree, + hoverclass: options.hoverclass, + onHover: Sortable.onHover + } + + var options_for_tree = { + onHover: Sortable.onEmptyHover, + overlap: options.overlap, + containment: options.containment, + hoverclass: options.hoverclass + } + + // fix for gecko engine + Element.cleanWhitespace(element); + + options.draggables = []; + options.droppables = []; + + // drop on empty handling + if(options.dropOnEmpty || options.tree) { + Droppables.add(element, options_for_tree); + options.droppables.push(element); + } + + (this.findElements(element, options) || []).each( function(e) { + // handles are per-draggable + var handle = options.handle ? + $(e).down('.'+options.handle,0) : e; + options.draggables.push( + new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); + Droppables.add(e, options_for_droppable); + if(options.tree) e.treeNode = element; + options.droppables.push(e); + }); + + if(options.tree) { + (Sortable.findTreeElements(element, options) || []).each( function(e) { + Droppables.add(e, options_for_tree); + e.treeNode = element; + options.droppables.push(e); + }); + } + + // keep reference + this.sortables[element.id] = options; + + // for onupdate + Draggables.addObserver(new SortableObserver(element, options.onUpdate)); + + }, + + // return all suitable-for-sortable elements in a guaranteed order + findElements: function(element, options) { + return Element.findChildren( + element, options.only, options.tree ? true : false, options.tag); + }, + + findTreeElements: function(element, options) { + return Element.findChildren( + element, options.only, options.tree ? true : false, options.treeTag); + }, + + onHover: function(element, dropon, overlap) { + if(Element.isParent(dropon, element)) return; + + if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { + return; + } else if(overlap>0.5) { + Sortable.mark(dropon, 'before'); + if(dropon.previousSibling != element) { + var oldParentNode = element.parentNode; + element.style.visibility = "hidden"; // fix gecko rendering + dropon.parentNode.insertBefore(element, dropon); + if(dropon.parentNode!=oldParentNode) + Sortable.options(oldParentNode).onChange(element); + Sortable.options(dropon.parentNode).onChange(element); + } + } else { + Sortable.mark(dropon, 'after'); + var nextElement = dropon.nextSibling || null; + if(nextElement != element) { + var oldParentNode = element.parentNode; + element.style.visibility = "hidden"; // fix gecko rendering + dropon.parentNode.insertBefore(element, nextElement); + if(dropon.parentNode!=oldParentNode) + Sortable.options(oldParentNode).onChange(element); + Sortable.options(dropon.parentNode).onChange(element); + } + } + }, + + onEmptyHover: function(element, dropon, overlap) { + var oldParentNode = element.parentNode; + var droponOptions = Sortable.options(dropon); + + if(!Element.isParent(dropon, element)) { + var index; + + var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only}); + var child = null; + + if(children) { + var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); + + for (index = 0; index < children.length; index += 1) { + if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { + offset -= Element.offsetSize (children[index], droponOptions.overlap); + } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { + child = index + 1 < children.length ? children[index + 1] : null; + break; + } else { + child = children[index]; + break; + } + } + } + + dropon.insertBefore(element, child); + + Sortable.options(oldParentNode).onChange(element); + droponOptions.onChange(element); + } + }, + + unmark: function() { + if(Sortable._marker) Sortable._marker.hide(); + }, + + mark: function(dropon, position) { + // mark on ghosting only + var sortable = Sortable.options(dropon.parentNode); + if(sortable && !sortable.ghosting) return; + + if(!Sortable._marker) { + Sortable._marker = + ($('dropmarker') || Element.extend(document.createElement('DIV'))). + hide().addClassName('dropmarker').setStyle({position:'absolute'}); + document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); + } + var offsets = Position.cumulativeOffset(dropon); + Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'}); + + if(position=='after') + if(sortable.overlap == 'horizontal') + Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'}); + else + Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'}); + + Sortable._marker.show(); + }, + + _tree: function(element, options, parent) { + var children = Sortable.findElements(element, options) || []; + + for (var i = 0; i < children.length; ++i) { + var match = children[i].id.match(options.format); + + if (!match) continue; + + var child = { + id: encodeURIComponent(match ? match[1] : null), + element: element, + parent: parent, + children: [], + position: parent.children.length, + container: $(children[i]).down(options.treeTag) + } + + /* Get the element containing the children and recurse over it */ + if (child.container) + this._tree(child.container, options, child) + + parent.children.push (child); + } + + return parent; + }, + + tree: function(element) { + element = $(element); + var sortableOptions = this.options(element); + var options = Object.extend({ + tag: sortableOptions.tag, + treeTag: sortableOptions.treeTag, + only: sortableOptions.only, + name: element.id, + format: sortableOptions.format + }, arguments[1] || {}); + + var root = { + id: null, + parent: null, + children: [], + container: element, + position: 0 + } + + return Sortable._tree(element, options, root); + }, + + /* Construct a [i] index for a particular node */ + _constructIndex: function(node) { + var index = ''; + do { + if (node.id) index = '[' + node.position + ']' + index; + } while ((node = node.parent) != null); + return index; + }, + + sequence: function(element) { + element = $(element); + var options = Object.extend(this.options(element), arguments[1] || {}); + + return $(this.findElements(element, options) || []).map( function(item) { + return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; + }); + }, + + setSequence: function(element, new_sequence) { + element = $(element); + var options = Object.extend(this.options(element), arguments[2] || {}); + + var nodeMap = {}; + this.findElements(element, options).each( function(n) { + if (n.id.match(options.format)) + nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; + n.parentNode.removeChild(n); + }); + + new_sequence.each(function(ident) { + var n = nodeMap[ident]; + if (n) { + n[1].appendChild(n[0]); + delete nodeMap[ident]; + } + }); + }, + + serialize: function(element) { + element = $(element); + var options = Object.extend(Sortable.options(element), arguments[1] || {}); + var name = encodeURIComponent( + (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); + + if (options.tree) { + return Sortable.tree(element, arguments[1]).children.map( function (item) { + return [name + Sortable._constructIndex(item) + "[id]=" + + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); + }).flatten().join('&'); + } else { + return Sortable.sequence(element, arguments[1]).map( function(item) { + return name + "[]=" + encodeURIComponent(item); + }).join('&'); + } + } +} + +// Returns true if child is contained within element +Element.isParent = function(child, element) { + if (!child.parentNode || child == element) return false; + if (child.parentNode == element) return true; + return Element.isParent(child.parentNode, element); +} + +Element.findChildren = function(element, only, recursive, tagName) { + if(!element.hasChildNodes()) return null; + tagName = tagName.toUpperCase(); + if(only) only = [only].flatten(); + var elements = []; + $A(element.childNodes).each( function(e) { + if(e.tagName && e.tagName.toUpperCase()==tagName && + (!only || (Element.classNames(e).detect(function(v) { return only.include(v) })))) + elements.push(e); + if(recursive) { + var grandchildren = Element.findChildren(e, only, recursive, tagName); + if(grandchildren) elements.push(grandchildren); + } + }); + + return (elements.length>0 ? elements.flatten() : []); +} + +Element.offsetSize = function (element, type) { + return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')]; +} diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js new file mode 100644 index 00000000..06f59b47 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/effects.js @@ -0,0 +1,1090 @@ +// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 + +// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// Contributors: +// Justin Palmer (http://encytemedia.com/) +// Mark Pilgrim (http://diveintomark.org/) +// Martin Bialasinki +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +// converts rgb() and #xxx to #xxxxxx format, +// returns self (or first argument) if not convertable +String.prototype.parseColor = function() { + var color = '#'; + if(this.slice(0,4) == 'rgb(') { + var cols = this.slice(4,this.length-1).split(','); + var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); + } else { + if(this.slice(0,1) == '#') { + if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); + if(this.length==7) color = this.toLowerCase(); + } + } + return(color.length==7 ? color : (arguments[0] || this)); +} + +/*--------------------------------------------------------------------------*/ + +Element.collectTextNodes = function(element) { + return $A($(element).childNodes).collect( function(node) { + return (node.nodeType==3 ? node.nodeValue : + (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); + }).flatten().join(''); +} + +Element.collectTextNodesIgnoreClass = function(element, className) { + return $A($(element).childNodes).collect( function(node) { + return (node.nodeType==3 ? node.nodeValue : + ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? + Element.collectTextNodesIgnoreClass(node, className) : '')); + }).flatten().join(''); +} + +Element.setContentZoom = function(element, percent) { + element = $(element); + element.setStyle({fontSize: (percent/100) + 'em'}); + if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); + return element; +} + +Element.getOpacity = function(element){ + return $(element).getStyle('opacity'); +} + +Element.setOpacity = function(element, value){ + return $(element).setStyle({opacity:value}); +} + +Element.getInlineOpacity = function(element){ + return $(element).style.opacity || ''; +} + +Element.forceRerendering = function(element) { + try { + element = $(element); + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch(e) { } +}; + +/*--------------------------------------------------------------------------*/ + +Array.prototype.call = function() { + var args = arguments; + this.each(function(f){ f.apply(this, args) }); +} + +/*--------------------------------------------------------------------------*/ + +var Effect = { + _elementDoesNotExistError: { + name: 'ElementDoesNotExistError', + message: 'The specified DOM element does not exist, but is required for this effect to operate' + }, + tagifyText: function(element) { + if(typeof Builder == 'undefined') + throw("Effect.tagifyText requires including script.aculo.us' builder.js library"); + + var tagifyStyle = 'position:relative'; + if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1'; + + element = $(element); + $A(element.childNodes).each( function(child) { + if(child.nodeType==3) { + child.nodeValue.toArray().each( function(character) { + element.insertBefore( + Builder.node('span',{style: tagifyStyle}, + character == ' ' ? String.fromCharCode(160) : character), + child); + }); + Element.remove(child); + } + }); + }, + multiple: function(element, effect) { + var elements; + if(((typeof element == 'object') || + (typeof element == 'function')) && + (element.length)) + elements = element; + else + elements = $(element).childNodes; + + var options = Object.extend({ + speed: 0.1, + delay: 0.0 + }, arguments[2] || {}); + var masterDelay = options.delay; + + $A(elements).each( function(element, index) { + new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); + }); + }, + PAIRS: { + 'slide': ['SlideDown','SlideUp'], + 'blind': ['BlindDown','BlindUp'], + 'appear': ['Appear','Fade'] + }, + toggle: function(element, effect) { + element = $(element); + effect = (effect || 'appear').toLowerCase(); + var options = Object.extend({ + queue: { position:'end', scope:(element.id || 'global'), limit: 1 } + }, arguments[2] || {}); + Effect[element.visible() ? + Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); + } +}; + +var Effect2 = Effect; // deprecated + +/* ------------- transitions ------------- */ + +Effect.Transitions = { + linear: Prototype.K, + sinoidal: function(pos) { + return (-Math.cos(pos*Math.PI)/2) + 0.5; + }, + reverse: function(pos) { + return 1-pos; + }, + flicker: function(pos) { + return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; + }, + wobble: function(pos) { + return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; + }, + pulse: function(pos, pulses) { + pulses = pulses || 5; + return ( + Math.round((pos % (1/pulses)) * pulses) == 0 ? + ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : + 1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) + ); + }, + none: function(pos) { + return 0; + }, + full: function(pos) { + return 1; + } +}; + +/* ------------- core effects ------------- */ + +Effect.ScopedQueue = Class.create(); +Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), { + initialize: function() { + this.effects = []; + this.interval = null; + }, + _each: function(iterator) { + this.effects._each(iterator); + }, + add: function(effect) { + var timestamp = new Date().getTime(); + + var position = (typeof effect.options.queue == 'string') ? + effect.options.queue : effect.options.queue.position; + + switch(position) { + case 'front': + // move unstarted effects after this effect + this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { + e.startOn += effect.finishOn; + e.finishOn += effect.finishOn; + }); + break; + case 'with-last': + timestamp = this.effects.pluck('startOn').max() || timestamp; + break; + case 'end': + // start effect after last queued effect has finished + timestamp = this.effects.pluck('finishOn').max() || timestamp; + break; + } + + effect.startOn += timestamp; + effect.finishOn += timestamp; + + if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) + this.effects.push(effect); + + if(!this.interval) + this.interval = setInterval(this.loop.bind(this), 15); + }, + remove: function(effect) { + this.effects = this.effects.reject(function(e) { return e==effect }); + if(this.effects.length == 0) { + clearInterval(this.interval); + this.interval = null; + } + }, + loop: function() { + var timePos = new Date().getTime(); + for(var i=0, len=this.effects.length;i= this.startOn) { + if(timePos >= this.finishOn) { + this.render(1.0); + this.cancel(); + this.event('beforeFinish'); + if(this.finish) this.finish(); + this.event('afterFinish'); + return; + } + var pos = (timePos - this.startOn) / (this.finishOn - this.startOn); + var frame = Math.round(pos * this.options.fps * this.options.duration); + if(frame > this.currentFrame) { + this.render(pos); + this.currentFrame = frame; + } + } + }, + render: function(pos) { + if(this.state == 'idle') { + this.state = 'running'; + this.event('beforeSetup'); + if(this.setup) this.setup(); + this.event('afterSetup'); + } + if(this.state == 'running') { + if(this.options.transition) pos = this.options.transition(pos); + pos *= (this.options.to-this.options.from); + pos += this.options.from; + this.position = pos; + this.event('beforeUpdate'); + if(this.update) this.update(pos); + this.event('afterUpdate'); + } + }, + cancel: function() { + if(!this.options.sync) + Effect.Queues.get(typeof this.options.queue == 'string' ? + 'global' : this.options.queue.scope).remove(this); + this.state = 'finished'; + }, + event: function(eventName) { + if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); + if(this.options[eventName]) this.options[eventName](this); + }, + inspect: function() { + var data = $H(); + for(property in this) + if(typeof this[property] != 'function') data[property] = this[property]; + return '#'; + } +} + +Effect.Parallel = Class.create(); +Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), { + initialize: function(effects) { + this.effects = effects || []; + this.start(arguments[1]); + }, + update: function(position) { + this.effects.invoke('render', position); + }, + finish: function(position) { + this.effects.each( function(effect) { + effect.render(1.0); + effect.cancel(); + effect.event('beforeFinish'); + if(effect.finish) effect.finish(position); + effect.event('afterFinish'); + }); + } +}); + +Effect.Event = Class.create(); +Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), { + initialize: function() { + var options = Object.extend({ + duration: 0 + }, arguments[0] || {}); + this.start(options); + }, + update: Prototype.emptyFunction +}); + +Effect.Opacity = Class.create(); +Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + // make this work on IE on elements without 'layout' + if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) + this.element.setStyle({zoom: 1}); + var options = Object.extend({ + from: this.element.getOpacity() || 0.0, + to: 1.0 + }, arguments[1] || {}); + this.start(options); + }, + update: function(position) { + this.element.setOpacity(position); + } +}); + +Effect.Move = Class.create(); +Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + x: 0, + y: 0, + mode: 'relative' + }, arguments[1] || {}); + this.start(options); + }, + setup: function() { + // Bug in Opera: Opera returns the "real" position of a static element or + // relative element that does not have top/left explicitly set. + // ==> Always set top and left for position relative elements in your stylesheets + // (to 0 if you do not need them) + this.element.makePositioned(); + this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); + this.originalTop = parseFloat(this.element.getStyle('top') || '0'); + if(this.options.mode == 'absolute') { + // absolute movement, so we need to calc deltaX and deltaY + this.options.x = this.options.x - this.originalLeft; + this.options.y = this.options.y - this.originalTop; + } + }, + update: function(position) { + this.element.setStyle({ + left: Math.round(this.options.x * position + this.originalLeft) + 'px', + top: Math.round(this.options.y * position + this.originalTop) + 'px' + }); + } +}); + +// for backwards compatibility +Effect.MoveBy = function(element, toTop, toLeft) { + return new Effect.Move(element, + Object.extend({ x: toLeft, y: toTop }, arguments[3] || {})); +}; + +Effect.Scale = Class.create(); +Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { + initialize: function(element, percent) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + scaleX: true, + scaleY: true, + scaleContent: true, + scaleFromCenter: false, + scaleMode: 'box', // 'box' or 'contents' or {} with provided values + scaleFrom: 100.0, + scaleTo: percent + }, arguments[2] || {}); + this.start(options); + }, + setup: function() { + this.restoreAfterFinish = this.options.restoreAfterFinish || false; + this.elementPositioning = this.element.getStyle('position'); + + this.originalStyle = {}; + ['top','left','width','height','fontSize'].each( function(k) { + this.originalStyle[k] = this.element.style[k]; + }.bind(this)); + + this.originalTop = this.element.offsetTop; + this.originalLeft = this.element.offsetLeft; + + var fontSize = this.element.getStyle('font-size') || '100%'; + ['em','px','%','pt'].each( function(fontSizeType) { + if(fontSize.indexOf(fontSizeType)>0) { + this.fontSize = parseFloat(fontSize); + this.fontSizeType = fontSizeType; + } + }.bind(this)); + + this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; + + this.dims = null; + if(this.options.scaleMode=='box') + this.dims = [this.element.offsetHeight, this.element.offsetWidth]; + if(/^content/.test(this.options.scaleMode)) + this.dims = [this.element.scrollHeight, this.element.scrollWidth]; + if(!this.dims) + this.dims = [this.options.scaleMode.originalHeight, + this.options.scaleMode.originalWidth]; + }, + update: function(position) { + var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); + if(this.options.scaleContent && this.fontSize) + this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); + this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); + }, + finish: function(position) { + if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle); + }, + setDimensions: function(height, width) { + var d = {}; + if(this.options.scaleX) d.width = Math.round(width) + 'px'; + if(this.options.scaleY) d.height = Math.round(height) + 'px'; + if(this.options.scaleFromCenter) { + var topd = (height - this.dims[0])/2; + var leftd = (width - this.dims[1])/2; + if(this.elementPositioning == 'absolute') { + if(this.options.scaleY) d.top = this.originalTop-topd + 'px'; + if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; + } else { + if(this.options.scaleY) d.top = -topd + 'px'; + if(this.options.scaleX) d.left = -leftd + 'px'; + } + } + this.element.setStyle(d); + } +}); + +Effect.Highlight = Class.create(); +Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); + this.start(options); + }, + setup: function() { + // Prevent executing on elements not in the layout flow + if(this.element.getStyle('display')=='none') { this.cancel(); return; } + // Disable background image during the effect + this.oldStyle = {}; + if (!this.options.keepBackgroundImage) { + this.oldStyle.backgroundImage = this.element.getStyle('background-image'); + this.element.setStyle({backgroundImage: 'none'}); + } + if(!this.options.endcolor) + this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); + if(!this.options.restorecolor) + this.options.restorecolor = this.element.getStyle('background-color'); + // init color calculations + this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); + this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); + }, + update: function(position) { + this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ + return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) }); + }, + finish: function() { + this.element.setStyle(Object.extend(this.oldStyle, { + backgroundColor: this.options.restorecolor + })); + } +}); + +Effect.ScrollTo = Class.create(); +Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + this.start(arguments[1] || {}); + }, + setup: function() { + Position.prepare(); + var offsets = Position.cumulativeOffset(this.element); + if(this.options.offset) offsets[1] += this.options.offset; + var max = window.innerHeight ? + window.height - window.innerHeight : + document.body.scrollHeight - + (document.documentElement.clientHeight ? + document.documentElement.clientHeight : document.body.clientHeight); + this.scrollStart = Position.deltaY; + this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart; + }, + update: function(position) { + Position.prepare(); + window.scrollTo(Position.deltaX, + this.scrollStart + (position*this.delta)); + } +}); + +/* ------------- combination effects ------------- */ + +Effect.Fade = function(element) { + element = $(element); + var oldOpacity = element.getInlineOpacity(); + var options = Object.extend({ + from: element.getOpacity() || 1.0, + to: 0.0, + afterFinishInternal: function(effect) { + if(effect.options.to!=0) return; + effect.element.hide().setStyle({opacity: oldOpacity}); + }}, arguments[1] || {}); + return new Effect.Opacity(element,options); +} + +Effect.Appear = function(element) { + element = $(element); + var options = Object.extend({ + from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), + to: 1.0, + // force Safari to render floated elements properly + afterFinishInternal: function(effect) { + effect.element.forceRerendering(); + }, + beforeSetup: function(effect) { + effect.element.setOpacity(effect.options.from).show(); + }}, arguments[1] || {}); + return new Effect.Opacity(element,options); +} + +Effect.Puff = function(element) { + element = $(element); + var oldStyle = { + opacity: element.getInlineOpacity(), + position: element.getStyle('position'), + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height + }; + return new Effect.Parallel( + [ new Effect.Scale(element, 200, + { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), + new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], + Object.extend({ duration: 1.0, + beforeSetupInternal: function(effect) { + Position.absolutize(effect.effects[0].element) + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().setStyle(oldStyle); } + }, arguments[1] || {}) + ); +} + +Effect.BlindUp = function(element) { + element = $(element); + element.makeClipping(); + return new Effect.Scale(element, 0, + Object.extend({ scaleContent: false, + scaleX: false, + restoreAfterFinish: true, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping(); + } + }, arguments[1] || {}) + ); +} + +Effect.BlindDown = function(element) { + element = $(element); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, 100, Object.extend({ + scaleContent: false, + scaleX: false, + scaleFrom: 0, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + restoreAfterFinish: true, + afterSetup: function(effect) { + effect.element.makeClipping().setStyle({height: '0px'}).show(); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping(); + } + }, arguments[1] || {})); +} + +Effect.SwitchOff = function(element) { + element = $(element); + var oldOpacity = element.getInlineOpacity(); + return new Effect.Appear(element, Object.extend({ + duration: 0.4, + from: 0, + transition: Effect.Transitions.flicker, + afterFinishInternal: function(effect) { + new Effect.Scale(effect.element, 1, { + duration: 0.3, scaleFromCenter: true, + scaleX: false, scaleContent: false, restoreAfterFinish: true, + beforeSetup: function(effect) { + effect.element.makePositioned().makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); + } + }) + } + }, arguments[1] || {})); +} + +Effect.DropOut = function(element) { + element = $(element); + var oldStyle = { + top: element.getStyle('top'), + left: element.getStyle('left'), + opacity: element.getInlineOpacity() }; + return new Effect.Parallel( + [ new Effect.Move(element, {x: 0, y: 100, sync: true }), + new Effect.Opacity(element, { sync: true, to: 0.0 }) ], + Object.extend( + { duration: 0.5, + beforeSetup: function(effect) { + effect.effects[0].element.makePositioned(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); + } + }, arguments[1] || {})); +} + +Effect.Shake = function(element) { + element = $(element); + var oldStyle = { + top: element.getStyle('top'), + left: element.getStyle('left') }; + return new Effect.Move(element, + { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { + effect.element.undoPositioned().setStyle(oldStyle); + }}) }}) }}) }}) }}) }}); +} + +Effect.SlideDown = function(element) { + element = $(element).cleanWhitespace(); + // SlideDown need to have the content of the element wrapped in a container element with fixed height! + var oldInnerBottom = element.down().getStyle('bottom'); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, 100, Object.extend({ + scaleContent: false, + scaleX: false, + scaleFrom: window.opera ? 0 : 1, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + restoreAfterFinish: true, + afterSetup: function(effect) { + effect.element.makePositioned(); + effect.element.down().makePositioned(); + if(window.opera) effect.element.setStyle({top: ''}); + effect.element.makeClipping().setStyle({height: '0px'}).show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle({bottom: + (effect.dims[0] - effect.element.clientHeight) + 'px' }); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping().undoPositioned(); + effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } + }, arguments[1] || {}) + ); +} + +Effect.SlideUp = function(element) { + element = $(element).cleanWhitespace(); + var oldInnerBottom = element.down().getStyle('bottom'); + return new Effect.Scale(element, window.opera ? 0 : 1, + Object.extend({ scaleContent: false, + scaleX: false, + scaleMode: 'box', + scaleFrom: 100, + restoreAfterFinish: true, + beforeStartInternal: function(effect) { + effect.element.makePositioned(); + effect.element.down().makePositioned(); + if(window.opera) effect.element.setStyle({top: ''}); + effect.element.makeClipping().show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle({bottom: + (effect.dims[0] - effect.element.clientHeight) + 'px' }); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom}); + effect.element.down().undoPositioned(); + } + }, arguments[1] || {}) + ); +} + +// Bug in opera makes the TD containing this element expand for a instance after finish +Effect.Squish = function(element) { + return new Effect.Scale(element, window.opera ? 1 : 0, { + restoreAfterFinish: true, + beforeSetup: function(effect) { + effect.element.makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping(); + } + }); +} + +Effect.Grow = function(element) { + element = $(element); + var options = Object.extend({ + direction: 'center', + moveTransition: Effect.Transitions.sinoidal, + scaleTransition: Effect.Transitions.sinoidal, + opacityTransition: Effect.Transitions.full + }, arguments[1] || {}); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: element.getInlineOpacity() }; + + var dims = element.getDimensions(); + var initialMoveX, initialMoveY; + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + initialMoveX = initialMoveY = moveX = moveY = 0; + break; + case 'top-right': + initialMoveX = dims.width; + initialMoveY = moveY = 0; + moveX = -dims.width; + break; + case 'bottom-left': + initialMoveX = moveX = 0; + initialMoveY = dims.height; + moveY = -dims.height; + break; + case 'bottom-right': + initialMoveX = dims.width; + initialMoveY = dims.height; + moveX = -dims.width; + moveY = -dims.height; + break; + case 'center': + initialMoveX = dims.width / 2; + initialMoveY = dims.height / 2; + moveX = -dims.width / 2; + moveY = -dims.height / 2; + break; + } + + return new Effect.Move(element, { + x: initialMoveX, + y: initialMoveY, + duration: 0.01, + beforeSetup: function(effect) { + effect.element.hide().makeClipping().makePositioned(); + }, + afterFinishInternal: function(effect) { + new Effect.Parallel( + [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), + new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), + new Effect.Scale(effect.element, 100, { + scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, + sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) + ], Object.extend({ + beforeSetup: function(effect) { + effect.effects[0].element.setStyle({height: '0px'}).show(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); + } + }, options) + ) + } + }); +} + +Effect.Shrink = function(element) { + element = $(element); + var options = Object.extend({ + direction: 'center', + moveTransition: Effect.Transitions.sinoidal, + scaleTransition: Effect.Transitions.sinoidal, + opacityTransition: Effect.Transitions.none + }, arguments[1] || {}); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: element.getInlineOpacity() }; + + var dims = element.getDimensions(); + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + moveX = moveY = 0; + break; + case 'top-right': + moveX = dims.width; + moveY = 0; + break; + case 'bottom-left': + moveX = 0; + moveY = dims.height; + break; + case 'bottom-right': + moveX = dims.width; + moveY = dims.height; + break; + case 'center': + moveX = dims.width / 2; + moveY = dims.height / 2; + break; + } + + return new Effect.Parallel( + [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), + new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), + new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) + ], Object.extend({ + beforeStartInternal: function(effect) { + effect.effects[0].element.makePositioned().makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } + }, options) + ); +} + +Effect.Pulsate = function(element) { + element = $(element); + var options = arguments[1] || {}; + var oldOpacity = element.getInlineOpacity(); + var transition = options.transition || Effect.Transitions.sinoidal; + var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) }; + reverser.bind(transition); + return new Effect.Opacity(element, + Object.extend(Object.extend({ duration: 2.0, from: 0, + afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } + }, options), {transition: reverser})); +} + +Effect.Fold = function(element) { + element = $(element); + var oldStyle = { + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height }; + element.makeClipping(); + return new Effect.Scale(element, 5, Object.extend({ + scaleContent: false, + scaleX: false, + afterFinishInternal: function(effect) { + new Effect.Scale(element, 1, { + scaleContent: false, + scaleY: false, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().setStyle(oldStyle); + } }); + }}, arguments[1] || {})); +}; + +Effect.Morph = Class.create(); +Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + style: {} + }, arguments[1] || {}); + if (typeof options.style == 'string') { + if(options.style.indexOf(':') == -1) { + var cssText = '', selector = '.' + options.style; + $A(document.styleSheets).reverse().each(function(styleSheet) { + if (styleSheet.cssRules) cssRules = styleSheet.cssRules; + else if (styleSheet.rules) cssRules = styleSheet.rules; + $A(cssRules).reverse().each(function(rule) { + if (selector == rule.selectorText) { + cssText = rule.style.cssText; + throw $break; + } + }); + if (cssText) throw $break; + }); + this.style = cssText.parseStyle(); + options.afterFinishInternal = function(effect){ + effect.element.addClassName(effect.options.style); + effect.transforms.each(function(transform) { + if(transform.style != 'opacity') + effect.element.style[transform.style.camelize()] = ''; + }); + } + } else this.style = options.style.parseStyle(); + } else this.style = $H(options.style) + this.start(options); + }, + setup: function(){ + function parseColor(color){ + if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; + color = color.parseColor(); + return $R(0,2).map(function(i){ + return parseInt( color.slice(i*2+1,i*2+3), 16 ) + }); + } + this.transforms = this.style.map(function(pair){ + var property = pair[0].underscore().dasherize(), value = pair[1], unit = null; + + if(value.parseColor('#zzzzzz') != '#zzzzzz') { + value = value.parseColor(); + unit = 'color'; + } else if(property == 'opacity') { + value = parseFloat(value); + if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) + this.element.setStyle({zoom: 1}); + } else if(Element.CSS_LENGTH.test(value)) + var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/), + value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null; + + var originalValue = this.element.getStyle(property); + return $H({ + style: property, + originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), + targetValue: unit=='color' ? parseColor(value) : value, + unit: unit + }); + }.bind(this)).reject(function(transform){ + return ( + (transform.originalValue == transform.targetValue) || + ( + transform.unit != 'color' && + (isNaN(transform.originalValue) || isNaN(transform.targetValue)) + ) + ) + }); + }, + update: function(position) { + var style = $H(), value = null; + this.transforms.each(function(transform){ + value = transform.unit=='color' ? + $R(0,2).inject('#',function(m,v,i){ + return m+(Math.round(transform.originalValue[i]+ + (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : + transform.originalValue + Math.round( + ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit; + style[transform.style] = value; + }); + this.element.setStyle(style); + } +}); + +Effect.Transform = Class.create(); +Object.extend(Effect.Transform.prototype, { + initialize: function(tracks){ + this.tracks = []; + this.options = arguments[1] || {}; + this.addTracks(tracks); + }, + addTracks: function(tracks){ + tracks.each(function(track){ + var data = $H(track).values().first(); + this.tracks.push($H({ + ids: $H(track).keys().first(), + effect: Effect.Morph, + options: { style: data } + })); + }.bind(this)); + return this; + }, + play: function(){ + return new Effect.Parallel( + this.tracks.map(function(track){ + var elements = [$(track.ids) || $$(track.ids)].flatten(); + return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) }); + }).flatten(), + this.options + ); + } +}); + +Element.CSS_PROPERTIES = $w( + 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + + 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + + 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + + 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + + 'fontSize fontWeight height left letterSpacing lineHeight ' + + 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ + 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + + 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + + 'right textIndent top width wordSpacing zIndex'); + +Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; + +String.prototype.parseStyle = function(){ + var element = Element.extend(document.createElement('div')); + element.innerHTML = '

    '; + var style = element.down().style, styleRules = $H(); + + Element.CSS_PROPERTIES.each(function(property){ + if(style[property]) styleRules[property] = style[property]; + }); + if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) { + styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]; + } + return styleRules; +}; + +Element.morph = function(element, style) { + new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {})); + return element; +}; + +['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom', + 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( + function(f) { Element.Methods[f] = Element[f]; } +); + +Element.Methods.visualEffect = function(element, effect, options) { + s = effect.gsub(/_/, '-').camelize(); + effect_class = s.charAt(0).toUpperCase() + s.substring(1); + new Effect[effect_class](element, options); + return $(element); +}; + +Element.addMethods(); \ No newline at end of file diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/prototype.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/prototype.js new file mode 100644 index 00000000..14c5dc41 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/prototype.js @@ -0,0 +1,2515 @@ +/* Prototype JavaScript framework, version 1.5.0 + * (c) 2005-2007 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://prototype.conio.net/ + * +/*--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.5.0', + BrowserFeatures: { + XPath: !!document.evaluate + }, + + ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', + emptyFunction: function() {}, + K: function(x) { return x } +} + +var Class = { + create: function() { + return function() { + this.initialize.apply(this, arguments); + } + } +} + +var Abstract = new Object(); + +Object.extend = function(destination, source) { + for (var property in source) { + destination[property] = source[property]; + } + return destination; +} + +Object.extend(Object, { + inspect: function(object) { + try { + if (object === undefined) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : object.toString(); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({}, object); + } +}); + +Function.prototype.bind = function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } +} + +Function.prototype.bindAsEventListener = function(object) { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); + } +} + +Object.extend(Number.prototype, { + toColorPart: function() { + var digits = this.toString(16); + if (this < 16) return '0' + digits; + return digits; + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + } +}); + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) {} + } + + return returnValue; + } +} + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create(); +PeriodicalExecuter.prototype = { + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.callback(this); + } finally { + this.currentlyExecuting = false; + } + } + } +} +String.interpret = function(value){ + return value == null ? '' : String(value); +} + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = count === undefined ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return this; + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = truncation === undefined ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : this; + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var div = document.createElement('div'); + var text = document.createTextNode(this); + div.appendChild(text); + return div.innerHTML; + }, + + unescapeHTML: function() { + var div = document.createElement('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return {}; + + return match[1].split(separator || '&').inject({}, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var name = decodeURIComponent(pair[0]); + var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; + + if (hash[name] !== undefined) { + if (hash[name].constructor != Array) + hash[name] = [hash[name]]; + if (value) hash[name].push(value); + } + else hash[name] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function(){ + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.replace(/\\/g, '\\\\'); + if (useDoubleQuotes) + return '"' + escapedString.replace(/"/g, '\\"') + '"'; + else + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (typeof replacement == 'function') return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +} + +String.prototype.parseQuery = String.prototype.toQueryParams; + +var Template = Class.create(); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; +Template.prototype = { + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + return this.template.gsub(this.pattern, function(match) { + var before = match[1]; + if (before == '\\') return match[2]; + return before + String.interpret(object[match[3]]); + }); + } +} + +var $break = new Object(); +var $continue = new Object(); + +var Enumerable = { + each: function(iterator) { + var index = 0; + try { + this._each(function(value) { + try { + iterator(value, index++); + } catch (e) { + if (e != $continue) throw e; + } + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator) { + var index = -number, slices = [], array = this.toArray(); + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.map(iterator); + }, + + all: function(iterator) { + var result = true; + this.each(function(value, index) { + result = result && !!(iterator || Prototype.K)(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator) { + var result = false; + this.each(function(value, index) { + if (result = !!(iterator || Prototype.K)(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator) { + var results = []; + this.each(function(value, index) { + results.push((iterator || Prototype.K)(value, index)); + }); + return results; + }, + + detect: function(iterator) { + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator) { + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(pattern, iterator) { + var results = []; + this.each(function(value, index) { + var stringValue = value.toString(); + if (stringValue.match(pattern)) + results.push((iterator || Prototype.K)(value, index)); + }) + return results; + }, + + include: function(object) { + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = fillWith === undefined ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator) { + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator) { + var result; + this.each(function(value, index) { + value = (iterator || Prototype.K)(value, index); + if (result == undefined || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator) { + var result; + this.each(function(value, index) { + value = (iterator || Prototype.K)(value, index); + if (result == undefined || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator) { + var trues = [], falses = []; + this.each(function(value, index) { + ((iterator || Prototype.K)(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value, index) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator) { + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator) { + return this.map(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (typeof args.last() == 'function') + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +} + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray +}); +var $A = Array.from = function(iterable) { + if (!iterable) return []; + if (iterable.toArray) { + return iterable.toArray(); + } else { + var results = []; + for (var i = 0, length = iterable.length; i < length; i++) + results.push(iterable[i]); + return results; + } +} + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) + Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(value && value.constructor == Array ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + indexOf: function(object) { + for (var i = 0, length = this.length; i < length; i++) + if (this[i] == object) return i; + return -1; + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function() { + return this.inject([], function(array, value) { + return array.include(value) ? array : array.concat([value]); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } +}); + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string){ + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if(window.opera){ + Array.prototype.concat = function(){ + var array = []; + for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for(var i = 0, length = arguments.length; i < length; i++) { + if(arguments[i].constructor == Array) { + for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + } +} +var PHash = function(obj) { + Object.extend(this, obj || {}); +}; + +Object.extend(PHash, { + toQueryString: function(obj) { + var parts = []; + + this.prototype._each.call(obj, function(pair) { + if (!pair.key) return; + + if (pair.value && pair.value.constructor == Array) { + var values = pair.value.compact(); + if (values.length < 2) pair.value = values.reduce(); + else { + key = encodeURIComponent(pair.key); + values.each(function(value) { + value = value != undefined ? encodeURIComponent(value) : ''; + parts.push(key + '=' + encodeURIComponent(value)); + }); + return; + } + } + if (pair.value == undefined) pair[1] = ''; + parts.push(pair.map(encodeURIComponent).join('=')); + }); + + return parts.join('&'); + } +}); + +Object.extend(PHash.prototype, Enumerable); +Object.extend(PHash.prototype, { + _each: function(iterator) { + for (var key in this) { + var value = this[key]; + if (value && value == PHash.prototype[key]) continue; + + var pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + merge: function(hash) { + return $H(hash).inject(this, function(mergedHash, pair) { + mergedHash[pair.key] = pair.value; + return mergedHash; + }); + }, + + remove: function() { + var result; + for(var i = 0, length = arguments.length; i < length; i++) { + var value = this[arguments[i]]; + if (value !== undefined){ + if (result === undefined) result = value; + else { + if (result.constructor != Array) result = [result]; + result.push(value) + } + } + delete this[arguments[i]]; + } + return result; + }, + + toQueryString: function() { + return PHash.toQueryString(this); + }, + + inspect: function() { + return '#'; + } +}); + +function $H(object) { + if (object && object.constructor == PHash) return object; + return new PHash(object); +}; +ObjectRange = Class.create(); +Object.extend(ObjectRange.prototype, Enumerable); +Object.extend(ObjectRange.prototype, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +} + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (typeof responder[callback] == 'function') { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) {} + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { + Ajax.activeRequestCount++; + }, + onComplete: function() { + Ajax.activeRequestCount--; + } +}); + +Ajax.Base = function() {}; +Ajax.Base.prototype = { + setOptions: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '' + } + Object.extend(this.options, options || {}); + + this.options.method = this.options.method.toLowerCase(); + if (typeof this.options.parameters == 'string') + this.options.parameters = this.options.parameters.toQueryParams(); + } +} + +Ajax.Request = Class.create(); +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Request.prototype = Object.extend(new Ajax.Base(), { + _complete: false, + + initialize: function(url, options) { + this.transport = Ajax.getTransport(); + this.setOptions(options); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = this.options.parameters; + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + params = PHash.toQueryString(params); + if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' + + // when GET, append parameters to URL + if (this.method == 'get' && params) + this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; + + try { + Ajax.Responders.dispatch('onCreate', this, this.transport); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) + setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + var body = this.method == 'post' ? (this.options.postBody || params) : null; + + this.transport.send(body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (typeof extras.push == 'function') + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + return !this.transport.status + || (this.transport.status >= 200 && this.transport.status < 300); + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState]; + var transport = this.transport, json = this.evalJSON(); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + this.transport.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(transport, json); + } catch (e) { + this.dispatchException(e); + } + + if ((this.getHeader('Content-type') || 'text/javascript').strip(). + match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(transport, json); + Ajax.Responders.dispatch('on' + state, this, transport, json); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name); + } catch (e) { return null } + }, + + evalJSON: function() { + try { + var json = this.getHeader('X-JSON'); + return json ? eval('(' + json + ')') : null; + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval(this.transport.responseText); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Updater = Class.create(); + +Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { + initialize: function(container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + } + + this.transport = Ajax.getTransport(); + this.setOptions(options); + + var onComplete = this.options.onComplete || Prototype.emptyFunction; + this.options.onComplete = (function(transport, param) { + this.updateContent(); + onComplete(transport, param); + }).bind(this); + + this.request(url); + }, + + updateContent: function() { + var receiver = this.container[this.success() ? 'success' : 'failure']; + var response = this.transport.responseText; + + if (!this.options.evalScripts) response = response.stripScripts(); + + if (receiver = $(receiver)) { + if (this.options.insertion) + new this.options.insertion(receiver, response); + else + receiver.update(response); + } + + if (this.success()) { + if (this.onComplete) + setTimeout(this.onComplete.bind(this), 10); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(); +Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { + initialize: function(container, url, options) { + this.setOptions(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = {}; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(request) { + if (this.options.decay) { + this.decay = (request.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = request.responseText; + } + this.timer = setTimeout(this.onTimerEvent.bind(this), + this.decay * this.frequency * 1000); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (typeof element == 'string') + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(query.snapshotItem(i)); + return results; + }; +} + +document.getElementsByClassName = function(className, parentElement) { + if (Prototype.BrowserFeatures.XPath) { + var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; + return document._getElementsByXPath(q, parentElement); + } else { + var children = ($(parentElement) || document.body).getElementsByTagName('*'); + var elements = [], child; + for (var i = 0, length = children.length; i < length; i++) { + child = children[i]; + if (Element.hasClassName(child, className)) + elements.push(Element.extend(child)); + } + return elements; + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!window.Element) + var Element = new Object(); + +Element.extend = function(element) { + if (!element || _nativeExtensions || element.nodeType == 3) return element; + + if (!element._extended && element.tagName && element != window) { + var methods = Object.clone(Element.Methods), cache = Element.extend.cache; + + if (element.tagName == 'FORM') + Object.extend(methods, Form.Methods); + if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) + Object.extend(methods, Form.Element.Methods); + + Object.extend(methods, Element.Methods.Simulated); + + for (var property in methods) { + var value = methods[property]; + if (typeof value == 'function' && !(property in element)) + element[property] = cache.findOrStore(value); + } + } + + element._extended = true; + return element; +}; + +Element.extend.cache = { + findOrStore: function(value) { + return this[value] = this[value] || function() { + return value.apply(null, [this].concat($A(arguments))); + } + } +}; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + $(element).style.display = 'none'; + return element; + }, + + show: function(element) { + $(element).style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, html) { + html = typeof html == 'undefined' ? '' : html.toString(); + $(element).innerHTML = html.stripScripts(); + setTimeout(function() {html.evalScripts()}, 10); + return element; + }, + + replace: function(element, html) { + element = $(element); + html = typeof html == 'undefined' ? '' : html.toString(); + if (element.outerHTML) { + element.outerHTML = html.stripScripts(); + } else { + var range = element.ownerDocument.createRange(); + range.selectNodeContents(element); + element.parentNode.replaceChild( + range.createContextualFragment(html.stripScripts()), element); + } + setTimeout(function() {html.evalScripts()}, 10); + return element; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $A($(element).getElementsByTagName('*')); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (typeof selector == 'string') + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + return Selector.findElement($(element).ancestors(), expression, index); + }, + + down: function(element, expression, index) { + return Selector.findElement($(element).descendants(), expression, index); + }, + + previous: function(element, expression, index) { + return Selector.findElement($(element).previousSiblings(), expression, index); + }, + + next: function(element, expression, index) { + return Selector.findElement($(element).nextSiblings(), expression, index); + }, + + getElementsBySelector: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + getElementsByClassName: function(element, className) { + return document.getElementsByClassName(className, element); + }, + + readAttribute: function(element, name) { + element = $(element); + if (document.all && !window.opera) { + var t = Element._attributeTranslations; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + var attribute = element.attributes[name]; + if(attribute) return attribute.nodeValue; + } + return element.getAttribute(name); + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + if (elementClassName.length == 0) return false; + if (elementClassName == className || + elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) + return true; + return false; + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + Element.classNames(element).add(className); + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + Element.classNames(element).remove(className); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); + return element; + }, + + observe: function() { + Event.observe.apply(Event, arguments); + return $A(arguments).first(); + }, + + stopObserving: function() { + Event.stopObserving.apply(Event, arguments); + return $A(arguments).first(); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.match(/^\s*$/); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element == ancestor) return true; + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = Position.cumulativeOffset(element); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + if (['float','cssFloat'].include(style)) + style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); + style = style.camelize(); + var value = element.style[style]; + if (!value) { + if (document.defaultView && document.defaultView.getComputedStyle) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } else if (element.currentStyle) { + value = element.currentStyle[style]; + } + } + + if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) + value = element['offset'+style.capitalize()] + 'px'; + + if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) + if (Element.getStyle(element, 'position') == 'static') value = 'auto'; + if(style == 'opacity') { + if(value) return parseFloat(value); + if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if(value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + return value == 'auto' ? null : value; + }, + + setStyle: function(element, style) { + element = $(element); + for (var name in style) { + var value = style[name]; + if(name == 'opacity') { + if (value == 1) { + value = (/Gecko/.test(navigator.userAgent) && + !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; + if(/MSIE/.test(navigator.userAgent) && !window.opera) + element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); + } else if(value === '') { + if(/MSIE/.test(navigator.userAgent) && !window.opera) + element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); + } else { + if(value < 0.00001) value = 0; + if(/MSIE/.test(navigator.userAgent) && !window.opera) + element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + + 'alpha(opacity='+value*100+')'; + } + } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; + element.style[name.camelize()] = value; + } + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = element.style.overflow || 'auto'; + if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + } +}; + +Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); + +Element._attributeTranslations = {}; + +Element._attributeTranslations.names = { + colspan: "colSpan", + rowspan: "rowSpan", + valign: "vAlign", + datetime: "dateTime", + accesskey: "accessKey", + tabindex: "tabIndex", + enctype: "encType", + maxlength: "maxLength", + readonly: "readOnly", + longdesc: "longDesc" +}; + +Element._attributeTranslations.values = { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + + title: function(element) { + var node = element.getAttributeNode('title'); + return node.specified ? node.nodeValue : null; + } +}; + +Object.extend(Element._attributeTranslations.values, { + href: Element._attributeTranslations.values._getAttr, + src: Element._attributeTranslations.values._getAttr, + disabled: Element._attributeTranslations.values._flag, + checked: Element._attributeTranslations.values._flag, + readonly: Element._attributeTranslations.values._flag, + multiple: Element._attributeTranslations.values._flag +}); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + var t = Element._attributeTranslations; + attribute = t.names[attribute] || attribute; + return $(element).getAttributeNode(attribute).specified; + } +}; + +// IE is missing .innerHTML support for TABLE-related elements +if (document.all && !window.opera){ + Element.Methods.update = function(element, html) { + element = $(element); + html = typeof html == 'undefined' ? '' : html.toString(); + var tagName = element.tagName.toUpperCase(); + if (['THEAD','TBODY','TR','TD'].include(tagName)) { + var div = document.createElement('div'); + switch (tagName) { + case 'THEAD': + case 'TBODY': + div.innerHTML = '' + html.stripScripts() + '
    '; + depth = 2; + break; + case 'TR': + div.innerHTML = '' + html.stripScripts() + '
    '; + depth = 3; + break; + case 'TD': + div.innerHTML = '
    ' + html.stripScripts() + '
    '; + depth = 4; + } + $A(element.childNodes).each(function(node){ + element.removeChild(node) + }); + depth.times(function(){ div = div.firstChild }); + + $A(div.childNodes).each( + function(node){ element.appendChild(node) }); + } else { + element.innerHTML = html.stripScripts(); + } + setTimeout(function() {html.evalScripts()}, 10); + return element; + } +}; + +Object.extend(Element, Element.Methods); + +var _nativeExtensions = false; + +if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { + var className = 'HTML' + tag + 'Element'; + if(window[className]) return; + var klass = window[className] = {}; + klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; + }); + +Element.addMethods = function(methods) { + Object.extend(Element.Methods, methods || {}); + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + var cache = Element.extend.cache; + for (var property in methods) { + var value = methods[property]; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = cache.findOrStore(value); + } + } + + if (typeof HTMLElement != 'undefined') { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + copy(Form.Methods, HTMLFormElement.prototype); + [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { + copy(Form.Element.Methods, klass.prototype); + }); + _nativeExtensions = true; + } +} + +var Toggle = new Object(); +Toggle.display = Element.toggle; + +/*--------------------------------------------------------------------------*/ + +Abstract.Insertion = function(adjacency) { + this.adjacency = adjacency; +} + +Abstract.Insertion.prototype = { + initialize: function(element, content) { + this.element = $(element); + this.content = content.stripScripts(); + + if (this.adjacency && this.element.insertAdjacentHTML) { + try { + this.element.insertAdjacentHTML(this.adjacency, this.content); + } catch (e) { + var tagName = this.element.tagName.toUpperCase(); + if (['TBODY', 'TR'].include(tagName)) { + this.insertContent(this.contentFromAnonymousTable()); + } else { + throw e; + } + } + } else { + this.range = this.element.ownerDocument.createRange(); + if (this.initializeRange) this.initializeRange(); + this.insertContent([this.range.createContextualFragment(this.content)]); + } + + setTimeout(function() {content.evalScripts()}, 10); + }, + + contentFromAnonymousTable: function() { + var div = document.createElement('div'); + div.innerHTML = '' + this.content + '
    '; + return $A(div.childNodes[0].childNodes[0].childNodes); + } +} + +var Insertion = new Object(); + +Insertion.Before = Class.create(); +Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { + initializeRange: function() { + this.range.setStartBefore(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.parentNode.insertBefore(fragment, this.element); + }).bind(this)); + } +}); + +Insertion.Top = Class.create(); +Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(true); + }, + + insertContent: function(fragments) { + fragments.reverse(false).each((function(fragment) { + this.element.insertBefore(fragment, this.element.firstChild); + }).bind(this)); + } +}); + +Insertion.Bottom = Class.create(); +Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.appendChild(fragment); + }).bind(this)); + } +}); + +Insertion.After = Class.create(); +Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { + initializeRange: function() { + this.range.setStartAfter(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.parentNode.insertBefore(fragment, + this.element.nextSibling); + }).bind(this)); + } +}); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); +var Selector = Class.create(); +Selector.prototype = { + initialize: function(expression) { + this.params = {classNames: []}; + this.expression = expression.toString().strip(); + this.parseExpression(); + this.compileMatcher(); + }, + + parseExpression: function() { + function abort(message) { throw 'Parse error in selector: ' + message; } + + if (this.expression == '') abort('empty expression'); + + var params = this.params, expr = this.expression, match, modifier, clause, rest; + while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { + params.attributes = params.attributes || []; + params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); + expr = match[1]; + } + + if (expr == '*') return this.params.wildcard = true; + + while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { + modifier = match[1], clause = match[2], rest = match[3]; + switch (modifier) { + case '#': params.id = clause; break; + case '.': params.classNames.push(clause); break; + case '': + case undefined: params.tagName = clause.toUpperCase(); break; + default: abort(expr.inspect()); + } + expr = rest; + } + + if (expr.length > 0) abort(expr.inspect()); + }, + + buildMatchExpression: function() { + var params = this.params, conditions = [], clause; + + if (params.wildcard) + conditions.push('true'); + if (clause = params.id) + conditions.push('element.readAttribute("id") == ' + clause.inspect()); + if (clause = params.tagName) + conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); + if ((clause = params.classNames).length > 0) + for (var i = 0, length = clause.length; i < length; i++) + conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); + if (clause = params.attributes) { + clause.each(function(attribute) { + var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; + var splitValueBy = function(delimiter) { + return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; + } + + switch (attribute.operator) { + case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; + case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; + case '|=': conditions.push( + splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() + ); break; + case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; + case '': + case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; + default: throw 'Unknown operator ' + attribute.operator + ' in selector'; + } + }); + } + + return conditions.join(' && '); + }, + + compileMatcher: function() { + this.match = new Function('element', 'if (!element.tagName) return false; \ + element = $(element); \ + return ' + this.buildMatchExpression()); + }, + + findElements: function(scope) { + var element; + + if (element = $(this.params.id)) + if (this.match(element)) + if (!scope || Element.childOf(element, scope)) + return [element]; + + scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); + + var results = []; + for (var i = 0, length = scope.length; i < length; i++) + if (this.match(element = scope[i])) + results.push(Element.extend(element)); + + return results; + }, + + toString: function() { + return this.expression; + } +} + +Object.extend(Selector, { + matchElements: function(elements, expression) { + var selector = new Selector(expression); + return elements.select(selector.match.bind(selector)).map(Element.extend); + }, + + findElement: function(elements, expression, index) { + if (typeof expression == 'number') index = expression, expression = false; + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + return expressions.map(function(expression) { + return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { + var selector = new Selector(expr); + return results.inject([], function(elements, result) { + return elements.concat(selector.findElements(result || element)); + }); + }); + }).flatten(); + } +}); + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, getHash) { + var data = elements.inject({}, function(result, element) { + if (!element.disabled && element.name) { + var key = element.name, value = $(element).getValue(); + if (value != undefined) { + if (result[key]) { + if (result[key].constructor != Array) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return getHash ? data : PHash.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, getHash) { + return Form.serializeElements(Form.getElements(form), getHash); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + form.getElements().each(function(element) { + element.blur(); + element.disabled = 'true'; + }); + return form; + }, + + enable: function(form) { + form = $(form); + form.getElements().each(function(element) { + element.disabled = ''; + }); + return form; + }, + + findFirstElement: function(form) { + return $(form).getElements().find(function(element) { + return element.type != 'hidden' && !element.disabled && + ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + } +} + +Object.extend(Form, Form.Methods); + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +} + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = {}; + pair[element.name] = value; + return PHash.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + element.focus(); + if (element.select && ( element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type) ) ) + element.select(); + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.blur(); + element.disabled = false; + return element; + } +} + +Object.extend(Form.Element, Form.Element.Methods); +var Field = Form.Element; +var $F = Form.Element.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element); + default: + return Form.Element.Serializers.textarea(element); + } + }, + + inputSelector: function(element) { + return element.checked ? element.value : null; + }, + + textarea: function(element) { + return element.value; + }, + + select: function(element) { + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +} + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = function() {} +Abstract.TimedObserver.prototype = { + initialize: function(element, frequency, callback) { + this.frequency = frequency; + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + this.registerCallback(); + }, + + registerCallback: function() { + setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + onTimerEvent: function() { + var value = this.getValue(); + var changed = ('string' == typeof this.lastValue && 'string' == typeof value + ? this.lastValue != value : String(this.lastValue) != String(value)); + if (changed) { + this.callback(this.element, value); + this.lastValue = value; + } + } +} + +Form.Element.Observer = Class.create(); +Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(); +Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = function() {} +Abstract.EventObserver.prototype = { + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback.bind(this)); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +} + +Form.Element.EventObserver = Class.create(); +Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(); +Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) { + var Event = new Object(); +} + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + + element: function(event) { + return event.target || event.srcElement; + }, + + isLeftClick: function(event) { + return (((event.which) && (event.which == 1)) || + ((event.button) && (event.button == 1))); + }, + + pointerX: function(event) { + return event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)); + }, + + pointerY: function(event) { + return event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)); + }, + + stop: function(event) { + if (event.preventDefault) { + event.preventDefault(); + event.stopPropagation(); + } else { + event.returnValue = false; + event.cancelBubble = true; + } + }, + + // find the first node with the given tagName, starting from the + // node the event was triggered on; traverses the DOM upwards + findElement: function(event, tagName) { + var element = Event.element(event); + while (element.parentNode && (!element.tagName || + (element.tagName.toUpperCase() != tagName.toUpperCase()))) + element = element.parentNode; + return element; + }, + + observers: false, + + _observeAndCache: function(element, name, observer, useCapture) { + if (!this.observers) this.observers = []; + if (element.addEventListener) { + this.observers.push([element, name, observer, useCapture]); + element.addEventListener(name, observer, useCapture); + } else if (element.attachEvent) { + this.observers.push([element, name, observer, useCapture]); + element.attachEvent('on' + name, observer); + } + }, + + unloadCache: function() { + if (!Event.observers) return; + for (var i = 0, length = Event.observers.length; i < length; i++) { + Event.stopObserving.apply(this, Event.observers[i]); + Event.observers[i][0] = null; + } + Event.observers = false; + }, + + observe: function(element, name, observer, useCapture) { + element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + (navigator.appVersion.match(/Konqueror|Safari|KHTML/) + || element.attachEvent)) + name = 'keydown'; + + Event._observeAndCache(element, name, observer, useCapture); + }, + + stopObserving: function(element, name, observer, useCapture) { + element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + (navigator.appVersion.match(/Konqueror|Safari|KHTML/) + || element.detachEvent)) + name = 'keydown'; + + if (element.removeEventListener) { + element.removeEventListener(name, observer, useCapture); + } else if (element.detachEvent) { + try { + element.detachEvent('on' + name, observer); + } catch (e) {} + } + } +}); + +/* prevent memory leaks in IE */ +if (navigator.appVersion.match(/\bMSIE\b/)) + Event.observe(window, 'unload', Event.unloadCache, false); +var Position = { + // set to true if needed, warning: firefox performance problems + // NOT neeeded for page scrolling, only if draggable contained in + // scrollable elements + includeScrollOffsets: false, + + // must be called before calling withinIncludingScrolloffset, every time the + // page is scrolled + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + realOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return [valueL, valueT]; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return [valueL, valueT]; + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if(element.tagName=='BODY') break; + var p = Element.getStyle(element, 'position'); + if (p == 'relative' || p == 'absolute') break; + } + } while (element); + return [valueL, valueT]; + }, + + offsetParent: function(element) { + if (element.offsetParent) return element.offsetParent; + if (element == document.body) return element; + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return element; + + return document.body; + }, + + // caches x/y coordinate pair to use with overlap + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = this.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = this.realOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = this.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + // within must be called directly before + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + page: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent==document.body) + if (Element.getStyle(element,'position')=='absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!window.opera || element.tagName=='BODY') { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return [valueL, valueT]; + }, + + clone: function(source, target) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || {}) + + // find page position of source + source = $(source); + var p = Position.page(source); + + // find coordinate system to use + target = $(target); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(target,'position') == 'absolute') { + parent = Position.offsetParent(target); + delta = Position.page(parent); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if(options.setWidth) target.style.width = source.offsetWidth + 'px'; + if(options.setHeight) target.style.height = source.offsetHeight + 'px'; + }, + + absolutize: function(element) { + element = $(element); + if (element.style.position == 'absolute') return; + Position.prepare(); + + var offsets = Position.positionedOffset(element); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + }, + + relativize: function(element) { + element = $(element); + if (element.style.position == 'relative') return; + Position.prepare(); + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + } +} + +// Safari returns margins on body which is incorrect if the child is absolutely +// positioned. For performance reasons, redefine Position.cumulativeOffset for +// KHTML/WebKit only. +if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { + Position.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return [valueL, valueT]; + } +} + +Element.addMethods(); \ No newline at end of file diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js new file mode 100644 index 00000000..585313c3 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/scriptaculous.js @@ -0,0 +1,51 @@ +// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 + +// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +var Scriptaculous = { + Version: '1.7.0', + require: function(libraryName) { + // inserting via DOM fails in Safari 2.0, so brute force approach + document.write(''); + }, + load: function() { + if((typeof Prototype=='undefined') || + (typeof Element == 'undefined') || + (typeof Element.Methods=='undefined') || + parseFloat(Prototype.Version.split(".")[0] + "." + + Prototype.Version.split(".")[1]) < 1.5) + throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0"); + + $A(document.getElementsByTagName("script")).findAll( function(s) { + return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) + }).each( function(s) { + var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); + var includes = s.src.match(/\?.*load=([a-z,]*)/); + (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each( + function(include) { Scriptaculous.require(path+include+'.js') }); + }); + } +} + +Scriptaculous.load(); \ No newline at end of file diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js new file mode 100644 index 00000000..f24f2823 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/js/slider.js @@ -0,0 +1,278 @@ +// script.aculo.us slider.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 + +// Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +if(!Control) var Control = {}; +Control.Slider = Class.create(); + +// options: +// axis: 'vertical', or 'horizontal' (default) +// +// callbacks: +// onChange(value) +// onSlide(value) +Control.Slider.prototype = { + initialize: function(handle, track, options) { + var slider = this; + + if(handle instanceof Array) { + this.handles = handle.collect( function(e) { return $(e) }); + } else { + this.handles = [$(handle)]; + } + + this.track = $(track); + this.options = options || {}; + + this.axis = this.options.axis || 'horizontal'; + this.increment = this.options.increment || 1; + this.step = parseInt(this.options.step || '1'); + this.range = this.options.range || $R(0,1); + + this.value = 0; // assure backwards compat + this.values = this.handles.map( function() { return 0 }); + this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false; + this.options.startSpan = $(this.options.startSpan || null); + this.options.endSpan = $(this.options.endSpan || null); + + this.restricted = this.options.restricted || false; + + this.maximum = this.options.maximum || this.range.end; + this.minimum = this.options.minimum || this.range.start; + + // Will be used to align the handle onto the track, if necessary + this.alignX = parseInt(this.options.alignX || '0'); + this.alignY = parseInt(this.options.alignY || '0'); + + this.trackLength = this.maximumOffset() - this.minimumOffset(); + + this.handleLength = this.isVertical() ? + (this.handles[0].offsetHeight != 0 ? + this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : + (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : + this.handles[0].style.width.replace(/px$/,"")); + + this.active = false; + this.dragging = false; + this.disabled = false; + + if(this.options.disabled) this.setDisabled(); + + // Allowed values array + this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false; + if(this.allowedValues) { + this.minimum = this.allowedValues.min(); + this.maximum = this.allowedValues.max(); + } + + this.eventMouseDown = this.startDrag.bindAsEventListener(this); + this.eventMouseUp = this.endDrag.bindAsEventListener(this); + this.eventMouseMove = this.update.bindAsEventListener(this); + + // Initialize handles in reverse (make sure first handle is active) + this.handles.each( function(h,i) { + i = slider.handles.length-1-i; + slider.setValue(parseFloat( + (slider.options.sliderValue instanceof Array ? + slider.options.sliderValue[i] : slider.options.sliderValue) || + slider.range.start), i); + Element.makePositioned(h); // fix IE + Event.observe(h, "mousedown", slider.eventMouseDown); + }); + + Event.observe(this.track, "mousedown", this.eventMouseDown); + Event.observe(document, "mouseup", this.eventMouseUp); + Event.observe(document, "mousemove", this.eventMouseMove); + + this.initialized = true; + }, + dispose: function() { + var slider = this; + Event.stopObserving(this.track, "mousedown", this.eventMouseDown); + Event.stopObserving(document, "mouseup", this.eventMouseUp); + Event.stopObserving(document, "mousemove", this.eventMouseMove); + this.handles.each( function(h) { + Event.stopObserving(h, "mousedown", slider.eventMouseDown); + }); + }, + setDisabled: function(){ + this.disabled = true; + }, + setEnabled: function(){ + this.disabled = false; + }, + getNearestValue: function(value){ + if(this.allowedValues){ + if(value >= this.allowedValues.max()) return(this.allowedValues.max()); + if(value <= this.allowedValues.min()) return(this.allowedValues.min()); + + var offset = Math.abs(this.allowedValues[0] - value); + var newValue = this.allowedValues[0]; + this.allowedValues.each( function(v) { + var currentOffset = Math.abs(v - value); + if(currentOffset <= offset){ + newValue = v; + offset = currentOffset; + } + }); + return newValue; + } + if(value > this.range.end) return this.range.end; + if(value < this.range.start) return this.range.start; + return value; + }, + setValue: function(sliderValue, handleIdx){ + if(!this.active) { + this.activeHandleIdx = handleIdx || 0; + this.activeHandle = this.handles[this.activeHandleIdx]; + this.updateStyles(); + } + handleIdx = handleIdx || this.activeHandleIdx || 0; + if(this.initialized && this.restricted) { + if((handleIdx>0) && (sliderValuethis.values[handleIdx+1])) + sliderValue = this.values[handleIdx+1]; + } + sliderValue = this.getNearestValue(sliderValue); + this.values[handleIdx] = sliderValue; + this.value = this.values[0]; // assure backwards compat + + this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = + this.translateToPx(sliderValue); + + this.drawSpans(); + if(!this.dragging || !this.event) this.updateFinished(); + }, + setValueBy: function(delta, handleIdx) { + this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, + handleIdx || this.activeHandleIdx || 0); + }, + translateToPx: function(value) { + return Math.round( + ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * + (value - this.range.start)) + "px"; + }, + translateToValue: function(offset) { + return ((offset/(this.trackLength-this.handleLength) * + (this.range.end-this.range.start)) + this.range.start); + }, + getRange: function(range) { + var v = this.values.sortBy(Prototype.K); + range = range || 0; + return $R(v[range],v[range+1]); + }, + minimumOffset: function(){ + return(this.isVertical() ? this.alignY : this.alignX); + }, + maximumOffset: function(){ + return(this.isVertical() ? + (this.track.offsetHeight != 0 ? this.track.offsetHeight : + this.track.style.height.replace(/px$/,"")) - this.alignY : + (this.track.offsetWidth != 0 ? this.track.offsetWidth : + this.track.style.width.replace(/px$/,"")) - this.alignY); + }, + isVertical: function(){ + return (this.axis == 'vertical'); + }, + drawSpans: function() { + var slider = this; + if(this.spans) + $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) }); + if(this.options.startSpan) + this.setSpan(this.options.startSpan, + $R(0, this.values.length>1 ? this.getRange(0).min() : this.value )); + if(this.options.endSpan) + this.setSpan(this.options.endSpan, + $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum)); + }, + setSpan: function(span, range) { + if(this.isVertical()) { + span.style.top = this.translateToPx(range.start); + span.style.height = this.translateToPx(range.end - range.start + this.range.start); + } else { + span.style.left = this.translateToPx(range.start); + span.style.width = this.translateToPx(range.end - range.start + this.range.start); + } + }, + updateStyles: function() { + this.handles.each( function(h){ Element.removeClassName(h, 'selected') }); + Element.addClassName(this.activeHandle, 'selected'); + }, + startDrag: function(event) { + if(Event.isLeftClick(event)) { + if(!this.disabled){ + this.active = true; + + var handle = Event.element(event); + var pointer = [Event.pointerX(event), Event.pointerY(event)]; + var track = handle; + if(track==this.track) { + var offsets = Position.cumulativeOffset(this.track); + this.event = event; + this.setValue(this.translateToValue( + (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2) + )); + var offsets = Position.cumulativeOffset(this.activeHandle); + this.offsetX = (pointer[0] - offsets[0]); + this.offsetY = (pointer[1] - offsets[1]); + } else { + // find the handle (prevents issues with Safari) + while((this.handles.indexOf(handle) == -1) && handle.parentNode) + handle = handle.parentNode; + + if(this.handles.indexOf(handle)!=-1) { + this.activeHandle = handle; + this.activeHandleIdx = this.handles.indexOf(this.activeHandle); + this.updateStyles(); + + var offsets = Position.cumulativeOffset(this.activeHandle); + this.offsetX = (pointer[0] - offsets[0]); + this.offsetY = (pointer[1] - offsets[1]); + } + } + } + Event.stop(event); + } + }, + update: function(event) { + if(this.active) { + if(!this.dragging) this.dragging = true; + this.draw(event); + // fix AppleWebKit rendering + if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); + Event.stop(event); + } + }, + draw: function(event) { + var pointer = [Event.pointerX(event), Event.pointerY(event)]; + var offsets = Position.cumulativeOffset(this.track); + pointer[0] -= this.offsetX + offsets[0]; + pointer[1] -= this.offsetY + offsets[1]; + this.event = event; + this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] )); + if(this.initialized && this.options.onSlide) + this.options.onSlide(this.values.length>1 ? this.values : this.value, this); + }, + endDrag: function(event) { + if(this.active && this.dragging) { + this.finishDrag(event, true); + Event.stop(event); + } + this.active = false; + this.dragging = false; + }, + finishDrag: function(event, success) { + this.active = false; + this.dragging = false; + this.updateFinished(); + }, + updateFinished: function() { + if(this.initialized && this.options.onChange) + this.options.onChange(this.values.length>1 ? this.values : this.value, this); + this.event = null; + } +} \ No newline at end of file diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/en/settings.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/en/settings.php new file mode 100644 index 00000000..883a4942 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/en/settings.php @@ -0,0 +1,22 @@ + + */ + +$lang['btl_sidebar_position'] = 'sidebar position' ; +$lang['btl_sidebar_name'] = 'sidebar page name' ; +$lang['btl_action_palette'] = 'enable action palette'; +$lang['btl_default_page_actions_status'] = 'default status for page actions'; +$lang['btl_default_wiki_actions_status'] = 'default status for wiki actions'; +$lang['btl_default_user_actions_status'] = 'default status for user actions'; +$lang['btl_default_submit_actions_status'] = 'default status for submit actions' ; +$lang['btl_language'] = 'template language'; + +$lang['btl_strip_page_actions'] = 'Page Actions'; +$lang['btl_strip_wiki_actions'] = 'Wiki Actions'; +$lang['btl_strip_user_actions'] = 'User Actions'; +$lang['btl_strip_submit_actions'] = 'Submit This Story'; + +?> diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/hu/settings.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/hu/settings.php new file mode 100644 index 00000000..08066883 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/hu/settings.php @@ -0,0 +1,22 @@ + + */ + +$lang['btl_sidebar_position'] = 'sidebar pozíció' ; +$lang['btl_sidebar_name'] = 'sidebar oldal neve' ; +$lang['btl_action_palette'] = 'A tevékenység paletta engedélyezése'; +$lang['btl_default_page_actions_status'] = 'Az aktuális oldal tevékenységek alapértelmezett státusza'; +$lang['btl_default_wiki_actions_status'] = 'A wiki twvékenységek alapértelmezett státusza'; +$lang['btl_default_user_actions_status'] = 'A felhasználói tevékenységek alapértelmezett státusza'; +$lang['btl_default_submit_actions_status'] = 'default status for submit actions' ; +$lang['btl_language'] = 'template language'; + +$lang['btl_strip_page_actions'] = 'Aktuális oldal'; +$lang['btl_strip_wiki_actions'] = 'Wiki'; +$lang['btl_strip_user_actions'] = 'Felhasználó'; +$lang['btl_strip_submit_actions'] = 'Oldal feljegyzése'; + +?> diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/it/settings.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/it/settings.php new file mode 100644 index 00000000..3977e614 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/lang/it/settings.php @@ -0,0 +1,21 @@ + + */ + +$lang['btl_sidebar_position'] = 'posizione della barra laterale' ; +$lang['btl_sidebar_name'] = 'nome della pagina per la barra laterale' ; +$lang['btl_action_palette'] = 'abilita la palette delle azioni'; +$lang['btl_default_page_actions_status'] = 'stato di default per azioni di pagina'; +$lang['btl_default_wiki_actions_status'] = 'stato di default per azioni sul wiki'; +$lang['btl_default_user_actions_status'] = 'stato di default per azioni utente'; +$lang['btl_default_submit_actions_status'] = 'stato di default per azioni di invio storia' ; +$lang['btl_language'] = 'lingua del template'; + +$lang['btl_strip_page_actions'] = 'Azioni Pagina'; +$lang['btl_strip_wiki_actions'] = 'Azioni Wiki'; +$lang['btl_strip_user_actions'] = 'Azioni Utente'; +$lang['btl_strip_submit_actions'] = 'Invia questa storia'; +?> diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/layout.css b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/layout.css new file mode 100644 index 00000000..3db587be --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/layout.css @@ -0,0 +1,232 @@ +/** + * Tableless Layout for default template + * + * @author Andreas Gohr + * @author moraes + * @author Riccardo Govoni + */ + +/* -------------- top row --------------- */ +div.dokuwiki .header { + border-style : solid; + border-width: 1px 1px 1px 1px; + border-color: __border__ ; + margin-top : 5px; + background-image: url(__rg_logo_gradient__); + background-repeat: repeat-x; + height: 57px; + overflow: hidden; +} + +// used for pagename in the top left of the page. Unused in rg template +div.dokuwiki .pagename { + float: left; + font-size: 200%; + font-weight: bolder; + color: __background_alt__; + text-align: left; + vertical-align: middle; +} + +div.dokuwiki .pagename a:link, div.dokuwiki .pagename a:visited, div.dokuwiki .pagename a:hover, div.dokuwiki .pagename a:active { + color: __extern__; + text-decoration:none; +} + +div.dokuwiki .logo { + background-image: url(__rg_wiki_logo__); + background-image: url(/skin/classic/base/img/mayor_small_ssl.gif); + background-repeat: no-repeat; + background-position : 5px 5px ; + height: 57px; + overflow: hidden; + font-size:15px; + padding: 15px 50px ; + font-weight:bolder; + text-align:left; + vertical-align:middle; +} + +div.dokuwiki .logo a:link, div.dokuwiki .logo a:visited, div.dokuwiki .logo a:hover, div.dokuwiki .logo a:active { + color: __rg_logo_color__; + text-decoration:none; +/* font-family: cursive,Arial,sans-serif,sans;*/ +/* font-variant:small-caps;*/ + letter-spacing:2pt; +} + +/* --------------- sidebar and content ---------------- */ + +/* the document */ +div.dokuwiki div.page { + text-align: justify; + + border-style : solid; + border-width: 1px 1px 1px 1px; + border-color: __border__ ; + background-color: __background__ ; + padding-right: 5px; + padding-left: 5px; + padding-bottom: 30px; + + background-image: url(__rg_faded_background__); + background-repeat: no-repeat; + background-position: 98% 98%; + +} + +/* the sidebar */ +div.dokuwiki div.sidebar { + background-color: __rg_sidebar__ ; + border-style : solid; + border-width: 1px 1px 1px 1px; + border-color: __border__ ; + padding-top: 2px; + padding-bottom: 5px; + + overflow: hidden; + font-size : 80% ; +} + +/* the sidebar box */ +div.dokuwiki div.sidebarandshadows { + width: 100% ; + overflow: hidden; +} + +/* the search box */ +div.dokuwiki div.searchbarandshadows { + margin-top: 4px ; +} + +div.dokuwiki div.searchbar { + background-color: __rg_search__ ; + border-style : solid; + border-width: 1px 1px 1px 1px; + border-color: __rg_search_border__ ; + padding-top: 4px; + padding-bottom: 4px; + text-align : left ; + + font-size : 80% ; +} + +/* the actions box */ +div.dokuwiki div.userbarandshadows { + margin-top: 4px ; +} + +div.dokuwiki div.userbar { + background-color: __rg_userbar__ ; + border-style : solid; + border-width: 1px 1px 1px 1px; + border-color: __rg_userbar_border__ ; + padding-top: 4px; + + font-size: 80% ; +} + +div.dokuwiki div.userbarstrip { + background-color: __rg_userbar__ ; + border-style : solid; + border-width: 0px 0px 1px 0px; + border-color: __rg_userbar_border__ ; + padding-top: 4px; + + font-variant:small-caps; + font-weight: bolder; + font-size: 100% ; + cursor: pointer; +} + +div.dokuwiki div.userbarstrip:hover { + background-color: __rg_sidebar__ ; +} + +/* the left column ( sidebar, search box, action box) */ +div.dokuwiki div.sideleft { + margin-top: 4px; + float: left; + clear: left ; + width: 18%; +} + +div.dokuwiki div.sideright { + margin-top: 4px; + float: right; + clear: right ; + width: 18%; +} + + +/* the right column (main content) */ +div.dokuwiki div.mainright { + margin-top: 4px; + float: right; + clear: right; + width: 80% ; +} + +div.dokuwiki div.mainleft { + margin-top: 4px; + float: left; + clear: left; + width: 80% ; +} + +/* hack needed to avoid some unwanted extra space between boxes and their shadows */ +div.dokuwiki div.searchbarandshadows table, +div.dokuwiki div.userbarandshadows table, +div.dokuwiki div.sidebarandshadows table { + margin : 0; + padding: 0; +} + + +/* --------------- status bar ---------------- */ +div.dokuwiki .bar { + border-style : solid; + border-width: 1px 1px 1px 1px; + border-color: __rg_status_border__ ; + background-color: __rg_status_background__ ; + background-image: url(__rg_status_gradient__); + background-repeat: repeat-x; + margin-top: 2px; + height: 24px; + padding-top: 10px ; + width: 100%; + font-size : 80%; + clear: both; + overflow: hidden; + height: 34px; +} + +div.dokuwiki .bar-left { + float: left; +} + +div.dokuwiki .bar-right { + float: right; + text-align: right; +} + +div.dokuwiki #bar__bottom { + margin-bottom:3px; +} + +/* ------------- File Metadata ----------------------- */ + +div.dokuwiki div.meta { + clear: both; + margin-top: 1em; + color: __text_alt__; + font-size: 70%; +} + +div.dokuwiki div.meta div.user { + float: left; +} + +div.dokuwiki div.meta div.doc { + text-align: right; +} diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/main.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/main.php new file mode 100644 index 00000000..5b66151f --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/main.php @@ -0,0 +1,362 @@ + + * @author Riccardo Govoni + */ + +// must be run from within DokuWiki +if (!defined('DOKU_INC')) die(); + +/* Creates the URL of the current page, used for Digg, delicious and google bookmarks */ +function selfURL() { + $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; + $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; + $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); + return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; +} + +function strleft($s1, $s2) { + return substr($s1, 0, strpos($s1, $s2)); +} + +// verify if the given action is enabled +function is_action_enabled($type) { + $ctype = $type; + if($type == 'history') $ctype='revisions'; + return actionOK($ctype); +} + +// changes the display style of the given action group, depending on the config file +function action_group_status($groupname) { + if (tpl_getConf('btl_default_' . $groupname . '_actions_status') == "closed") { + echo " style='display:none;'" ; + } +} + +// include functions that provide sidebar functionality +@require_once(dirname(__FILE__).'/tplfn_sidebar.php'); + +// include translations of the template strings +@require_once(dirname(__FILE__).'/lang/'.tpl_getConf('btl_language').'/settings.php'); + + +?> + + + + + + <?php tpl_pagetitle()?> + [<?php echo strip_tags($conf['title'])?>] + + + + + + + + + + + + + + +
    + + +
    + +
    + + + +
    +
    + + + + +
    + +
    +
    +
     
    + + + +
    + +
    +
    +
    + + +
    + + + + +
    + +
    +
    + + + +
    +
    +
    +
    +
    + + + +
    + +
    + + +
    + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    + +
    + +
    >
    + +
    + +
    + + +
    + + +
    + +
    + +
    + +
    >
    + +
    + +
    + + +
    + + +
    + +
    + +
    + +
    >
    + +
    + +
    + +
    + + +
    + + + +
    + + +
    + +
    + +
    >
    + + +
    + +
    + + +
    + + +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    + + + +
    +
    +
    +
    +
    + +
     
    +
    + + + +
    + +
    +
    + +
    +
    +   + +   + + +
    +
    + + + +
    + + + +
    +
    + +
    + +
    + +
    + + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/media.css b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/media.css new file mode 100644 index 00000000..e2a80ff8 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/media.css @@ -0,0 +1,204 @@ +/** + * The CSS in here cotrols the appearance of the media manager + */ + +#media__manager { + height: 100%; + overflow: hidden; +} + +#media__left { + width: 30%; + border-right: solid 1px __border__; + + height: 100%; + overflow: auto; + position: absolute; + left: 0; +} + +#media__right { + width: 69.7%; + + height: 100%; + overflow: auto; + position: absolute; + right: 0; +} + +#media__manager h1 { + margin: 0; + padding: 0; + margin-bottom: 0.5em; +} + +/* --- Tree formatting --- */ + +#media__tree img { + float:left; + padding: 0.5em 0.3em 0 0; +} + +#media__tree ul { + list-style-type: none; + list-style-image: none; +} + +#media__tree li { + clear: left; + list-style-type: none; + list-style-image: none; +} +* html #media__tree li { + border: 1px solid __background__; +}/* I don't understand this, but this fixes a style bug in IE; +it's dirty, so any "real" fixes are welcome */ + +/* --- options --- */ + +#media__opts { + padding-left: 1em; + margin-bottom: 0.5em; +} + +#media__opts input { + float: left; + position: absolute; +} +* html #media__opts input { + position: static; +} + +#media__opts label { + display: block; + float: left; + margin-left: 30px; +} +* html #media__opts label { + margin-left: 10px; +} + +#media__opts br { + clear: left; +} + +/* --- file list --- */ + +#media__content img.load { + margin: 1em auto; +} + +#media__content #scroll__here { + border: 1px dashed __border__; +} + +#media__content .odd { + background-color: __background_other__; + padding: 0.4em; +} + +#media__content .even { + padding: 0.4em; +} + +#media__content a.mediafile { + margin-right: 1.5em; + font-weight: bold; +} + +#media__content div.detail { + padding: 0.3em 0 0.3em 2em; +} + +#media__content div.detail div.thumb { + float: left; + width: 130px; + text-align: center; + margin-right: 0.4em; +} + + +#media__content img.btn { + vertical-align: text-bottom; +} + +#media__content div.example { + color: __text_neu__; + margin-left: 1em; +} + +/* --- upload form --- */ + +#media__content div.upload { + font-size: 90%; + padding: 0 0.5em 0.5em 0.5em; +} + +#media__content form.upload { + display: block; + border-bottom: solid 1px __border__; + padding: 0 0.5em 1em 0.5em; +} +#media__content form.upload fieldset { + padding: 0; + margin: 0; + border: none; + width: auto; +} +#media__content form.upload p { + clear: left; + text-align: left; + padding: 0.25em 0; + margin: 0; + line-height: 1.0em; +} +#media__content form.upload label { + float: left; + width: 30%; +} +#media__content form.upload label.check { + float: none; + width: auto; +} +#media__content form.upload input.check { + margin-left: 30%; +} + +/* --- meta edit form --- */ + +#media__content form.meta { + display: block; + padding: 0 0 1em 0; +} + +#media__content form.meta label { + display: block; + width: 25%; + float: left; + font-weight: bold; + margin-left: 1em; + clear: left; +} + +#media__content form.meta .edit { + font: 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif; + float: left; + width: 70%; + padding-right: 0; + padding-left: 0.2em; + margin: 2px; +} + +#media__content form.meta textarea.edit { + height: 8em; +} + +#media__content form.meta div.metafield { + clear: left; +} + +#media__content form.meta div.buttons { + clear: left; + margin-left: 20%; + padding-left: 1em; +} diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/mediamanager.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/mediamanager.php new file mode 100644 index 00000000..1da6dfd0 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/mediamanager.php @@ -0,0 +1,44 @@ + + + */ +?> + + + + + <?php echo hsc($lang['mediaselect'])?> + [<?php echo strip_tags($conf['title'])?>] + + + + + + +
    +
    + +

    + + +
    + + +
    + +
    + +
    +
    + + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/print.css b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/print.css new file mode 100644 index 00000000..70f7834e --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/print.css @@ -0,0 +1,236 @@ + +body { + font: 10pt "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif; + background-color: White; + color: Black; +} + +table { + font-size: 100%; + padding:0; + margin:0; +} + +tr,td,th {padding:0; margin:0;} + +img {border:0} + +a { + color:#000000; + text-decoration:none; + background: none !important; +} + + +div.meta { + clear:both; + margin-top: 1em; + font-size:70%; + text-align:right; +} + +div.breadcrumbs{ + display:none; +} + +div.secedit{ + display:none; +} + +/* --------------------- Text formating -------------------------------- */ + +/* external link */ +a.urlextern:after { + content: " [" attr(href) "]"; + font-size: 90%; +} + +/* interwiki link */ +a.interwiki:after { + content: " [" attr(href) "]"; + font-size: 90%; +} + +/* email link */ +a.mail:after { + content: " [" attr(href) "]"; + font-size: 90%; +} + +/* existing wikilink */ +a.wikilink1 {text-decoration:underline } + +/* the document */ +div.page { + text-align: justify; +} + +/* general headline setup */ +h1, h2, h3, h4, h5 { + color: Black; + background-color: transparent; + font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif; + font-size: 100%; + font-weight: normal; + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 1em; + padding-left: 0; + padding-right: 0; + padding-top: 0.5em; + padding-bottom: 0; + border-bottom: 1px solid #000000; + clear:left; +} + +/* special headlines */ +h1 {font-size: 160%; font-weight: bold;} +h2 {font-size: 150%; } +h3 {font-size: 140%; border-bottom: none; } +h4 {font-size: 120%; border-bottom: none; } +h5 {font-size: 100%; border-bottom: none; } + +/* embedded images */ +img.media { + margin: 3px; +} + +img.medialeft { + border: 0; + float: left; + margin: 0 1.5em 0 0; +} + +img.mediaright { + border: 0; + float: right; + margin: 0 0 0 1.5em; +} + +/* unordered lists */ +ul { + line-height: 1.5em; + list-style-type: square; + margin: 0 0 0.5em 1.5em; + padding: 0; + +} + +/* ordered lists */ +ol { + line-height: 1.5em; + margin: 0 0 0.5em 2.5em; + padding: 0; + font-weight: normal; +} +ol ol { + margin: 0 0 0.5em 1.5em; +} + +div.dokuwiki ol {list-style-type: decimal} +div.dokuwiki ol ol {list-style-type: upper-roman} +div.dokuwiki ol ol ol {list-style-type: lower-alpha} +div.dokuwiki ol ol ol ol {list-style-type: lower-greek} + +/* the list items overriding the ol definition */ +span.li { + font-weight: normal; +} + +/* code blocks by indention */ +pre.pre { + font-size: 8pt; + padding: 0.5em; + border: 1px dashed #000000; + color: Black; + overflow: visible; +} + +/* code blocks by code tag */ +pre.code { + font-size: 8pt; + padding: 0.5em; + border: 1px dashed #000000; + color: Black; + overflow: visible; +} + +/* inline code words */ +code { + font-size: 120%; +} + +/* code blocks by file tag */ +pre.file { + font-size: 8pt; + padding: 0.5em; + border: 1px dotted #000000; + color: Black; + overflow: visible; +} + +/* footnotes */ +div.footnotes{ + clear:both; + border-top: 1px solid #000000; + padding-left: 1em; + margin-top: 1em; +} + +div.fn{ + font-size:90%; +} + +a.fn_top{ + vertical-align:super; + font-size:80%; +} + +a.fn_bot{ + vertical-align:super; + font-size:80%; + font-weight:bold; +} + +acronym{ + border: 0; +} + +/* ---------- inline tables ------------------- */ + +table.inline { + font-size: 80%; + background-color: #ffffff; + border-spacing: 0px; + border-collapse: collapse; +} + +table.inline th { + padding: 3px; + border: 1px solid #000000; + border-bottom: 2px solid #000000; +} + +table.inline td { + padding: 3px; + border: 1px solid #000000; +} + +.leftalign{ + text-align: left; +} + +.centeralign{ + text-align: center; +} + +.rightalign{ + text-align: right; +} + +.toc, .footerinc, .header, .bar, .user , .sideright , .sideleft , .doclink {display:none} + +div.doc { text-align: left; } + +#sidebar {display:none} diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/rtl.css b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/rtl.css new file mode 100644 index 00000000..d5061435 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/rtl.css @@ -0,0 +1,111 @@ +/** + * Layout and dedsign corrections for right-to-left languages + * + * @author Andreas Gohr + * @author Dotan Kamber + */ + +.bar-left { + float: right; + text-align: right; +} + +.bar-right { + float: left; + text-align: left; +} + +.pagename { + float: right; + text-align: right; +} + +.logo { + float: left; + text-align: left; +} + +label { + text-align: left; +} + +label.simple { + text-align: right; +} + +div.meta div.user { + float: right +} + +div.meta div.doc { + text-align: left; +} + +/* ------------------ Design corrections --------------------------------- */ + +ul, ol { + margin: 0.5em 1.5em 0.5em 0; +} + +a.urlextern,a.interwiki,a.windows{ + /* should work but doesn't - so we just disable icons here*/ + /* + background-position: right 1px; + padding-right: 16px; + */ + background-image: none !important; + padding: 0; +} + +div.secedit input.button { + float: left; +} + +/* headlines */ +h1, h2, h3, h4, h5 { + clear: right; +} + +/* special headlines */ +h1 {margin-left: 0px; margin-right: 0px;} +h2 {margin-left: 0px; margin-right: 20px;} +h3 {margin-left: 0px; margin-right: 40px;} +h4 {margin-left: 0px; margin-right: 60px;} +h5 {margin-left: 0px; margin-right: 80px;} + +/* indent different sections */ +div.level1 {margin-left: 0px; margin-right: 3px;} +div.level2 {margin-left: 0px; margin-right: 23px;} +div.level3 {margin-left: 0px; margin-right: 43px;} +div.level4 {margin-left: 0px; margin-right: 63px;} +div.level5 {margin-left: 0px; margin-right: 83px;} + +/* TOC control */ +div.toc { + float: left; + margin-left: 0; + margin-right: 2em; +} + +div.tocheader { + text-align: right; +} + +#tocinside { + text-align: right; +} + +ul.toc { + padding: 0; + padding-right: 1em; +} + +ul.toc li { + background-position: right 0.6em; + padding-right:0.4em; +} + +ul.toc li.clear { + padding-right:0.4em; +} + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style.ini b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style.ini new file mode 100644 index 00000000..0d031385 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style.ini @@ -0,0 +1,147 @@ +; Please see http://www.php.net/manual/en/function.parse-ini-file.php +; for limitations of the ini format used here + +; Define the stylesheets your template uses here. The second value +; defines for which output media the style should be loaded. Currently +; print, screen and rtl are supported. rtl styles are loaded additionally +; to screen styles if a right-to-left language is selected (eg. hebrew) +[stylesheets] +layout.css = screen +design.css = screen +style.css = screen + +media.css = screen + +rtl.css = rtl +print.css = print + +; This section is used to configure some placeholder values used in +; the stylesheets. Changing this file is the simplest method to +; give your wiki a new look. +[replacements] + +;-------------------------------------------------------------------------- +;------ guaranteed dokuwiki color placeholders that every plugin can use +; main text and background colors +__text__ = "#000" +__background__ = "#fff" +; alternative text and background colors +__text_alt__ = "#0d2264" +__background_alt__ = "#b7d7ff" +; neutral text and background colors +__text_neu__ = "#666" +__background_neu__ = "#f5f5f5" +; border color +__border__ = "#0d2264" +;-------------------------------------------------------------------------- + +; other text and background colors +__text_other__ = "#0d2264" +__background_other__ = "#e9f2f4" + +; these are used for links +__extern__ = "#08279a" +__existing__ = "#08279a" +__missing__ = "#e8530a" +__visited__ = "#08279a" +__hover__ = "#7189e0" + +; highlighting search snippets +__highlight__ = "#b7d7ff" + + +;-------------------------------------------------------------------------- +;------ for keeping old templates and plugins compatible to the old pattern +; (to be deleted at the next or after next release) +__white__ = "#fff" +__lightgray__ = "#f5f5f5" +__mediumgray__ = "#ccc" +__darkgray__ = "#666" +__black__ = "#000" + +; these are the shades of main template color (green) +__lighter__ = "#f8f8f8" +__light__ = "#e9f2f4" +__medium__ = "#b7d7ff" +__dark__ = "#5d6fa9" +__darker__ = "#0d2264" + +; additional info, used by the battlehorse template + +; background color for the website (the one outside the main content) +__rg_background__ = "#e9f2f4" + +; the color used for the site title +__rg_logo_color__ = "#ffffff" + +; the shadows used for the breadcrumbs bar and main content area +__rg_bread_upper_dark__ = "#43579a" +__rg_bread_lower_dark__ = "#43579a" +__rg_bread_lower_medium__ = "#8291bf" +__rg_bread_lower_light__ = "#d9ddea" + +; the border for the breadcrumbs bar +__rg_bread_border__ = "#cfcfcf" + +; the background and border for code and file snippets (see wiki:syntax) +__rg_code__ = "#f8f8f8" +__rg_code_border__ = "#cfcfcf" +__rg_file__ = "#fffded" +__rg_file_border__ = "#fffaa9" + +; the background and border for the search box +__rg_search__ = "#f8f8f8" +__rg_search_border__ = "#cfcfcf" + +; the background and border for the status box +__rg_status_border__ = "#cfcfcf" +__rg_status_background__ = "#e5e5e4" + +; the background and border for the actions box +__rg_userbar__ = "#f8f8f8" +__rg_userbar_border__ = "#cfcfcf" + +; the background for the sidebar box +__rg_sidebar__ = "#e8f2ff" + +; the background and prelight (when you hover on the button) colors for buttons +__rg_button_prelight__ = "#dbe9ff" +__rg_button_background__ = "#9cc4ff" + +; images used for the user actions ( should be at most 24x24 pixels , otherwise edit the design.css) +__rg_recent_action__ = "images/b/actions/recent.png" +__rg_edit_action__ = "images/b/actions/edit.png" +__rg_index_action__ = "images/b/actions/index.png" +__rg_create_action__ = "images/b/actions/create.png" +__rg_revision_action__ = "images/b/actions/history.png" +__rg_backlink_action__ = "images/b/actions/backlink.png" +__rg_login_action__ = "images/b/actions/login.png" +__rg_subscribe_action__ = "images/b/actions/subscribe.png" +__rg_unsubscribe_action__ = "images/b/actions/unsubscribe.png" +__rg_profile_action__ = "images/b/actions/profile.png" +__rg_admin_action__ = "images/b/actions/admin.png" +__rg_show_action__ = "images/b/actions/show.png" +__rg_previous_action__ = "images/b/actions/previous.png" +__rg_top_action__ = "images/b/actions/top.png" +__rg_digg_action__ = "images/b/actions/digg.gif" +__rg_delicious_action__ = "images/b/actions/delicious.gif" +__rg_google_action__ = "images/b/actions/google.gif" + +; the gradient used for the background panel (should have width 1 px ) +__rg_background_gradient__ = "images/b/gradient_background.png" + +; the gradient used for the breadcrumbs bar ( should have width 1px and height 17px ) +__rg_breadcrumbs_gradient__ = "images/b/gradient_bc.png" + +; the gradient for the logo bar ( should have width 1px and height 57px ) +__rg_logo_gradient__ = "images/b/gradient_logo.png" + +; the main wiki logo (upper left corner of the page) (should have height 57px ) +__rg_wiki_logo__ = "images/b/wiki_logo.png" + +; a faded version of the logo, which will be located on the lower right corner of the main content area (no size restrictions) +__rg_faded_background__ = "images/b/faded_background.png" + +; the gradient for the status bar (should have width 1px and height 34px ) +__rg_status_gradient__ = "images/b/gradient_status.png" + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_blue.ini b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_blue.ini new file mode 100644 index 00000000..0d031385 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_blue.ini @@ -0,0 +1,147 @@ +; Please see http://www.php.net/manual/en/function.parse-ini-file.php +; for limitations of the ini format used here + +; Define the stylesheets your template uses here. The second value +; defines for which output media the style should be loaded. Currently +; print, screen and rtl are supported. rtl styles are loaded additionally +; to screen styles if a right-to-left language is selected (eg. hebrew) +[stylesheets] +layout.css = screen +design.css = screen +style.css = screen + +media.css = screen + +rtl.css = rtl +print.css = print + +; This section is used to configure some placeholder values used in +; the stylesheets. Changing this file is the simplest method to +; give your wiki a new look. +[replacements] + +;-------------------------------------------------------------------------- +;------ guaranteed dokuwiki color placeholders that every plugin can use +; main text and background colors +__text__ = "#000" +__background__ = "#fff" +; alternative text and background colors +__text_alt__ = "#0d2264" +__background_alt__ = "#b7d7ff" +; neutral text and background colors +__text_neu__ = "#666" +__background_neu__ = "#f5f5f5" +; border color +__border__ = "#0d2264" +;-------------------------------------------------------------------------- + +; other text and background colors +__text_other__ = "#0d2264" +__background_other__ = "#e9f2f4" + +; these are used for links +__extern__ = "#08279a" +__existing__ = "#08279a" +__missing__ = "#e8530a" +__visited__ = "#08279a" +__hover__ = "#7189e0" + +; highlighting search snippets +__highlight__ = "#b7d7ff" + + +;-------------------------------------------------------------------------- +;------ for keeping old templates and plugins compatible to the old pattern +; (to be deleted at the next or after next release) +__white__ = "#fff" +__lightgray__ = "#f5f5f5" +__mediumgray__ = "#ccc" +__darkgray__ = "#666" +__black__ = "#000" + +; these are the shades of main template color (green) +__lighter__ = "#f8f8f8" +__light__ = "#e9f2f4" +__medium__ = "#b7d7ff" +__dark__ = "#5d6fa9" +__darker__ = "#0d2264" + +; additional info, used by the battlehorse template + +; background color for the website (the one outside the main content) +__rg_background__ = "#e9f2f4" + +; the color used for the site title +__rg_logo_color__ = "#ffffff" + +; the shadows used for the breadcrumbs bar and main content area +__rg_bread_upper_dark__ = "#43579a" +__rg_bread_lower_dark__ = "#43579a" +__rg_bread_lower_medium__ = "#8291bf" +__rg_bread_lower_light__ = "#d9ddea" + +; the border for the breadcrumbs bar +__rg_bread_border__ = "#cfcfcf" + +; the background and border for code and file snippets (see wiki:syntax) +__rg_code__ = "#f8f8f8" +__rg_code_border__ = "#cfcfcf" +__rg_file__ = "#fffded" +__rg_file_border__ = "#fffaa9" + +; the background and border for the search box +__rg_search__ = "#f8f8f8" +__rg_search_border__ = "#cfcfcf" + +; the background and border for the status box +__rg_status_border__ = "#cfcfcf" +__rg_status_background__ = "#e5e5e4" + +; the background and border for the actions box +__rg_userbar__ = "#f8f8f8" +__rg_userbar_border__ = "#cfcfcf" + +; the background for the sidebar box +__rg_sidebar__ = "#e8f2ff" + +; the background and prelight (when you hover on the button) colors for buttons +__rg_button_prelight__ = "#dbe9ff" +__rg_button_background__ = "#9cc4ff" + +; images used for the user actions ( should be at most 24x24 pixels , otherwise edit the design.css) +__rg_recent_action__ = "images/b/actions/recent.png" +__rg_edit_action__ = "images/b/actions/edit.png" +__rg_index_action__ = "images/b/actions/index.png" +__rg_create_action__ = "images/b/actions/create.png" +__rg_revision_action__ = "images/b/actions/history.png" +__rg_backlink_action__ = "images/b/actions/backlink.png" +__rg_login_action__ = "images/b/actions/login.png" +__rg_subscribe_action__ = "images/b/actions/subscribe.png" +__rg_unsubscribe_action__ = "images/b/actions/unsubscribe.png" +__rg_profile_action__ = "images/b/actions/profile.png" +__rg_admin_action__ = "images/b/actions/admin.png" +__rg_show_action__ = "images/b/actions/show.png" +__rg_previous_action__ = "images/b/actions/previous.png" +__rg_top_action__ = "images/b/actions/top.png" +__rg_digg_action__ = "images/b/actions/digg.gif" +__rg_delicious_action__ = "images/b/actions/delicious.gif" +__rg_google_action__ = "images/b/actions/google.gif" + +; the gradient used for the background panel (should have width 1 px ) +__rg_background_gradient__ = "images/b/gradient_background.png" + +; the gradient used for the breadcrumbs bar ( should have width 1px and height 17px ) +__rg_breadcrumbs_gradient__ = "images/b/gradient_bc.png" + +; the gradient for the logo bar ( should have width 1px and height 57px ) +__rg_logo_gradient__ = "images/b/gradient_logo.png" + +; the main wiki logo (upper left corner of the page) (should have height 57px ) +__rg_wiki_logo__ = "images/b/wiki_logo.png" + +; a faded version of the logo, which will be located on the lower right corner of the main content area (no size restrictions) +__rg_faded_background__ = "images/b/faded_background.png" + +; the gradient for the status bar (should have width 1px and height 34px ) +__rg_status_gradient__ = "images/b/gradient_status.png" + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_green.ini b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_green.ini new file mode 100644 index 00000000..6973547b --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_green.ini @@ -0,0 +1,147 @@ +; Please see http://www.php.net/manual/en/function.parse-ini-file.php +; for limitations of the ini format used here + +; Define the stylesheets your template uses here. The second value +; defines for which output media the style should be loaded. Currently +; print, screen and rtl are supported. rtl styles are loaded additionally +; to screen styles if a right-to-left language is selected (eg. hebrew) +[stylesheets] +layout.css = screen +design.css = screen +style.css = screen + +media.css = screen + +rtl.css = rtl +print.css = print + +; This section is used to configure some placeholder values used in +; the stylesheets. Changing this file is the simplest method to +; give your wiki a new look. +[replacements] + +;-------------------------------------------------------------------------- +;------ guaranteed dokuwiki color placeholders that every plugin can use +; main text and background colors +__text__ = "#000" +__background__ = "#fff" +; alternative text and background colors +__text_alt__ = "#225c05" +__background_alt__ = "#91e369" +; neutral text and background colors +__text_neu__ = "#666" +__background_neu__ = "#f5f5f5" +; border color +__border__ = "#53bc1f" +;-------------------------------------------------------------------------- + +; other text and background colors +__text_other__ = "#225c05" +__background_other__ = "#f3ffe3" + +; these are used for links +__extern__ = "#225c05" +__existing__ = "#225c05" +__missing__ = "#bc08c3" +__visited__ = "#225c05" +__hover__ = "#53bc1f" + +; highlighting search snippets +__highlight__ = "#91e369" + + +;-------------------------------------------------------------------------- +;------ for keeping old templates and plugins compatible to the old pattern +; (to be deleted at the next or after next release) +__white__ = "#fff" +__lightgray__ = "#f5f5f5" +__mediumgray__ = "#ccc" +__darkgray__ = "#666" +__black__ = "#000" + +; these are the shades of main template color (green) +__lighter__ = "#f8f8f8" +__light__ = "#f3ffe3" +__medium__ = "#91e369" +__dark__ = "#53bc1f" +__darker__ = "#225c05" + +; additional info, used by the battlehorse template + +; background color for the website (the one outside the main content) +__rg_background__ = "#f3ffe3" + +; the color used for the site title +__rg_logo_color__ = "#000000" + +; the shadows used for the breadcrumbs bar and main content area +__rg_bread_upper_dark__ = "#9f9f9f" +__rg_bread_lower_dark__ = "#b9c2ad" +__rg_bread_lower_medium__ = "#d6e0c8" +__rg_bread_lower_light__ = "#e7f2d8" + +; the border for the breadcrumbs bar +__rg_bread_border__ = "#cfcfcf" + +; the background and border for code and file snippets (see wiki:syntax) +__rg_code__ = "#f8f8f8" +__rg_code_border__ = "#cfcfcf" +__rg_file__ = "#f3ffe3" +__rg_file_border__ = "#e3ff9c" + +; the background and border for the search box +__rg_search__ = "#f8f8f8" +__rg_search_border__ = "#cfcfcf" + +; the background and border for the status box +__rg_status_border__ = "#cfcfcf" +__rg_status_background__ = "#e5e5e4" + +; the background and border for the actions box +__rg_userbar__ = "#f8f8f8" +__rg_userbar_border__ = "#cfcfcf" + +; the background for the sidebar box +__rg_sidebar__ = "#e3ff9c" + +; the background and prelight (when you hover on the button) colors for buttons +__rg_button_prelight__ = "#f3ffe3" +__rg_button_background__ = "#e3ff9c" + +; images used for the user actions ( should be at most 24x24 pixels , otherwise edit the design.css) +__rg_recent_action__ = "images/r/actions/recent.png" +__rg_edit_action__ = "images/r/actions/edit.png" +__rg_index_action__ = "images/r/actions/index.png" +__rg_create_action__ = "images/r/actions/create.png" +__rg_revision_action__ = "images/r/actions/history.png" +__rg_backlink_action__ = "images/r/actions/backlink.png" +__rg_login_action__ = "images/r/actions/login.png" +__rg_subscribe_action__ = "images/r/actions/subscribe.png" +__rg_unsubscribe_action__ = "images/r/actions/unsubscribe.png" +__rg_profile_action__ = "images/r/actions/profile.png" +__rg_admin_action__ = "images/r/actions/admin.png" +__rg_show_action__ = "images/r/actions/show.png" +__rg_previous_action__ = "images/r/actions/previous.png" +__rg_top_action__ = "images/r/actions/top.png" +__rg_digg_action__ = "images/r/actions/digg.gif" +__rg_delicious_action__ = "images/r/actions/delicious.gif" +__rg_google_action__ = "images/r/actions/google.gif" + +; the gradient used for the background panel (should have width 1 px ) +__rg_background_gradient__ = "images/r/gradient_background.png" + +; the gradient used for the breadcrumbs bar ( should have width 1px and height 17px ) +__rg_breadcrumbs_gradient__ = "images/r/gradient_bc.png" + +; the gradient for the logo bar ( should have width 1px and height 57px ) +__rg_logo_gradient__ = "images/r/gradient_logo.png" + +; the main wiki logo (upper left corner of the page) (should have height 57px ) +__rg_wiki_logo__ = "images/r/wiki_logo.png" + +; a faded version of the logo, which will be located on the lower right corner of the main content area (no size restrictions) +__rg_faded_background__ = "images/r/faded_background.png" + +; the gradient for the status bar (should have width 1px and height 34px ) +__rg_status_gradient__ = "images/r/gradient_status.png" + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_plain.ini b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_plain.ini new file mode 100644 index 00000000..48c461fe --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/style_plain.ini @@ -0,0 +1,147 @@ +; Please see http://www.php.net/manual/en/function.parse-ini-file.php +; for limitations of the ini format used here + +; Define the stylesheets your template uses here. The second value +; defines for which output media the style should be loaded. Currently +; print, screen and rtl are supported. rtl styles are loaded additionally +; to screen styles if a right-to-left language is selected (eg. hebrew) +[stylesheets] +layout.css = screen +design.css = screen +style.css = screen + +media.css = screen + +rtl.css = rtl +print.css = print + +; This section is used to configure some placeholder values used in +; the stylesheets. Changing this file is the simplest method to +; give your wiki a new look. +[replacements] + +;-------------------------------------------------------------------------- +;------ guaranteed dokuwiki color placeholders that every plugin can use +; main text and background colors +__text__ = "#000" +__background__ = "#fff" +; alternative text and background colors +__text_alt__ = "#638c9c" +__background_alt__ = "#dee7ec" +; neutral text and background colors +__text_neu__ = "#666" +__background_neu__ = "#f5f5f5" +; border color +__border__ = "#8cacbb" +;-------------------------------------------------------------------------- + +; other text and background colors +__text_other__ = "#ccc" +__background_other__ = "#f7f9fa" + +; these are used for links +__extern__ = "#436976" +__existing__ = "#090" +__missing__ = "#f30" +__visited__ = "#436976" +__hover__ = "#436976" + +; highlighting search snippets +__highlight__ = "#ff9" + + +;-------------------------------------------------------------------------- +;------ for keeping old templates and plugins compatible to the old pattern +; (to be deleted at the next or after next release) +__white__ = "#fff" +__lightgray__ = "#f5f5f5" +__mediumgray__ = "#ccc" +__darkgray__ = "#666" +__black__ = "#000" + +; these are the shades of blue +__lighter__ = "#f7f9fa" +__light__ = "#eef3f8" +__medium__ = "#dee7ec" +__dark__ = "#8cacbb" +__darker__ = "#638c9c" + +; additional info, used by the battlehorse template + +; background color for the website (the one outside the main content) +__rg_background__ = "#fff" + +; the color used for the site title +__rg_logo_color__ = "#436976" + +; the shadows used for the breadcrumbs bar and main content area +__rg_bread_upper_dark__ = "#c4d5dd" +__rg_bread_lower_dark__ = "#b4c9d3" +__rg_bread_lower_medium__ = "#d5e0e6" +__rg_bread_lower_light__ = "#f0f4f6" + +; the border for the breadcrumbs bar +__rg_bread_border__ = "#cfcfcf" + +; the background and border for code and file snippets (see wiki:syntax) +__rg_code__ = "#eef3f8" +__rg_code_border__ = "#dee7ec" +__rg_file__ = "#dee7ec" +__rg_file_border__ = "#8cacbb" + +; the background and border for the search box +__rg_search__ = "#f8f8f8" +__rg_search_border__ = "#cfcfcf" + +; the background and border for the status box +__rg_status_border__ = "#8cacbb" +__rg_status_background__ = "#dee7ec" + +; the background and border for the actions box +__rg_userbar__ = "#f0f4f6" +__rg_userbar_border__ = "#8cacbb" + +; the background for the sidebar box +__rg_sidebar__ = "#dee7ec" + +; the background and prelight (when you hover on the button) colors for buttons +__rg_button_prelight__ = "#dee7ec" +__rg_button_background__ = "#fff" + +; images used for the user actions ( should be at most 24x24 pixels , otherwise edit the design.css) +__rg_recent_action__ = "images/p/actions/recent.png" +__rg_edit_action__ = "images/p/actions/edit.png" +__rg_index_action__ = "images/p/actions/index.png" +__rg_create_action__ = "images/p/actions/create.png" +__rg_revision_action__ = "images/p/actions/history.png" +__rg_backlink_action__ = "images/p/actions/backlink.png" +__rg_login_action__ = "images/p/actions/login.png" +__rg_subscribe_action__ = "images/p/actions/subscribe.png" +__rg_unsubscribe_action__ = "images/p/actions/unsubscribe.png" +__rg_profile_action__ = "images/p/actions/profile.png" +__rg_admin_action__ = "images/p/actions/admin.png" +__rg_show_action__ = "images/p/actions/show.png" +__rg_previous_action__ = "images/p/actions/previous.png" +__rg_top_action__ = "images/p/actions/top.png" +__rg_digg_action__ = "images/p/actions/digg.gif" +__rg_delicious_action__ = "images/p/actions/delicious.gif" +__rg_google_action__ = "images/p/actions/google.gif" + +; the gradient used for the background panel (should have width 1 px ) +__rg_background_gradient__ = "images/p/gradient_background.png" + +; the gradient used for the breadcrumbs bar ( should have width 1px and height 17px ) +__rg_breadcrumbs_gradient__ = "images/p/gradient_bc.png" + +; the gradient for the logo bar ( should have width 1px and height 57px ) +__rg_logo_gradient__ = "images/p/gradient_logo.png" + +; the main wiki logo (upper left corner of the page) (should have height 57px ) +__rg_wiki_logo__ = "images/p/wiki_logo.png" + +; a faded version of the logo, which will be located on the lower right corner of the main content area (no size restrictions) +__rg_faded_background__ = "images/p/faded_background.png" + +; the gradient for the status bar (should have width 1px and height 34px ) +__rg_status_gradient__ = "images/p/gradient_status.png" + diff --git a/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/tplfn_sidebar.php b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/tplfn_sidebar.php new file mode 100644 index 00000000..624f9340 --- /dev/null +++ b/mayor-orig/mayor-wiki/wiki/lib/tpl/mayor/tplfn_sidebar.php @@ -0,0 +1,97 @@ + + */ + +// sidebar configuration settings +$conf['sidebar']['enable'] = 1; // 1 or true to enable sidebar functionality, 0 or false to disable it +$conf['sidebar']['page'] = tpl_getConf('btl_sidebar_name'); // name of sidebar page +$conf['sidebar']['layout'] = 'inside'; // inside (between button bars) or outside (full height of dokuwiki) +$conf['sidebar']['orientation'] = 'right'; // left or right + +// determine the sidebar class +$sidebar_class = "sidebar_{$conf['sidebar']['layout']}_{$conf['sidebar']['orientation']}"; + +// recursive function to establish best sidebar file to be used +function getSidebarFN($ns, $file) { + + // check for wiki page = $ns:$file (or $file where no namespace) + $nsFile = ($ns) ? "$ns:$file" : $file; + if (file_exists(wikiFN($nsFile)) && auth_quickaclcheck($nsFile)) return $nsFile; + +// remove deepest namespace level and call function recursively + + // no namespace left, exit with no file found + if (!$ns) return ''; + + $i = strrpos($ns, ":"); + $ns = ($i) ? substr($ns, 0, $i) : false; + return getSidebarFN($ns, $file); +} + +// display the sidebar +function tpl_sidebar() { + global $ID, $REV, $conf; + + // save globals + $saveID = $ID; + $saveREV = $REV; + + // discover file to be displayed in navigation sidebar + $fileSidebar = ''; + + if (isset($conf['sidebar']['page'])) { + $fileSidebar = getSidebarFN(getNS($ID), $conf['sidebar']['page']); + } + + // determine what to display + if ($fileSidebar) { + $ID = $fileSidebar; + $REV = ''; + print p_wiki_xhtml($ID,$REV,false); + } + else { + global $IDX; + html_index($IDX); + } + + // restore globals + $ID = $saveID; + $REV = $saveREV; +} + +if (!function_exists('tpl_pagename')) { + + require_once(DOKU_INC.'inc/parserutils.php'); + + /** + * Returns the name of the given page (current one if none given). + * + * If useheading is enabled this will use the first headline else + * the given ID is printed. + * + * based on tpl_pagetitle in inc/template.php + */ + function tpl_pagename($id=null){ + global $conf; + if(is_null($id)){ + global $ID; + $id = $ID; + } + + $name = $id; + if ($conf['useheading']) { + $title = p_get_first_heading($id); + if ($title) $name = $title; + } + return hsc($name); + } + +} + +?> -- cgit v1.2.3